diff --git a/examples/attachment_management/manage_attachments.ipynb b/examples/attachment_management/manage_attachments.ipynb index 5a25a2f..9cd118d 100644 --- a/examples/attachment_management/manage_attachments.ipynb +++ b/examples/attachment_management/manage_attachments.ipynb @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "4755b294", "metadata": {}, "outputs": [], @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "df33c2b4", "metadata": {}, "outputs": [], @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a29d6888", "metadata": {}, "outputs": [], @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "fae4dee3", "metadata": {}, "outputs": [], @@ -153,19 +153,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "7f4b1a9c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INDEX_NAME='tmp_20231020150637'\n", - "index_key='89d0d034c8dabd59d3f066e8f23f2dfa7476d5cd'\n" - ] - } - ], + "outputs": [], "source": [ "print(f\"{INDEX_NAME=}\")\n", "data_index = api.data_indices.create(proj_key=PROJ_KEY, name=INDEX_NAME, type=\"Generic\")\n", @@ -183,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "abfe5cdd", "metadata": {}, "outputs": [], @@ -200,92 +191,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "9d2e2c6e", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
FIELD 0FIELD 1FIELD 2FIELD 3FIELD 4FIELD 5
043db43cabd433ceddce114ab
11b2dae4cc3b24ae3a1bd3dec
21c32ca4eed2c1e2aa1bcecab
31e4c2da34d3e1cde31b4d1c2
\n", - "
" - ], - "text/plain": [ - " FIELD 0 FIELD 1 FIELD 2 FIELD 3 FIELD 4 FIELD 5\n", - "0 43db 43ca bd43 3ced dce1 14ab\n", - "1 1b2d ae4c c3b2 4ae3 a1bd 3dec\n", - "2 1c32 ca4e ed2c 1e2a a1bc ecab\n", - "3 1e4c 2da3 4d3e 1cde 31b4 d1c2" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "df_raw = pd.DataFrame(table[1:], columns=table[0])\n", "display(df_raw)" @@ -293,104 +202,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "4a04a823", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "FIELD 0 --> field_0\n", - "FIELD 1 --> field_1\n", - "FIELD 2 --> field_2\n", - "FIELD 3 --> field_3\n", - "FIELD 4 --> field_4\n", - "FIELD 5 --> field_5\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
field_0field_1field_2field_3field_4field_5
043db43cabd433ceddce114ab
11b2dae4cc3b24ae3a1bd3dec
21c32ca4eed2c1e2aa1bcecab
31e4c2da34d3e1cde31b4d1c2
\n", - "
" - ], - "text/plain": [ - " field_0 field_1 field_2 field_3 field_4 field_5\n", - "0 43db 43ca bd43 3ced dce1 14ab\n", - "1 1b2d ae4c c3b2 4ae3 a1bd 3dec\n", - "2 1c32 ca4e ed2c 1e2a a1bc ecab\n", - "3 1e4c 2da3 4d3e 1cde 31b4 d1c2" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "df = df_raw.copy()\n", "for col_name in df_raw.columns:\n", @@ -410,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "9d3776ca", "metadata": {}, "outputs": [], @@ -428,21 +243,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "8634b32b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'data': {'errors': 0, 'success': 4}, 'name': 'cps-upload'}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# upload data to index\n", "input_dir = Path(TMP_DIR.name)\n", @@ -455,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "37762cf1-36c6-460b-91fc-c62745d21fe8", "metadata": {}, "outputs": [], @@ -473,19 +277,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "9b1241fb", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "item_name='row-000003-17783'\n", - "idx_item_id='177834e612d08f46c62609a8b94c061dc653c6e8'\n" - ] - } - ], + "outputs": [], "source": [ "# define item where to attach\n", "item_name = row[\"_name\"] # last item iterated used as example\n", @@ -498,19 +293,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "bbaa6309", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "File \"../../data/samples/2206.00785.pdf\" attached.\n", - "File \"../../data/samples/2206.01062.pdf\" attached.\n" - ] - } - ], + "outputs": [], "source": [ "# add attachment to index item\n", "indices = api.data_indices.list(proj_key=PROJ_KEY)\n", @@ -527,7 +313,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "94681884", "metadata": {}, "outputs": [], @@ -545,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "02651f49", "metadata": {}, "outputs": [], @@ -561,49 +347,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "3a1c695a", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "👉 Download 2206-00785.pdf" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "data": { - "text/html": [ - "👉 Download 2206-01062.pdf" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], + "outputs": [], "source": [ "# browse attachments\n", "for attachment in attch_list:\n", @@ -631,19 +378,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "63a434f0", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Data index deleted\n", - "Temporary directory deleted\n" - ] - } - ], + "outputs": [], "source": [ "if CLEANUP:\n", " api.data_indices.delete(data_index.source)\n", @@ -655,7 +393,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -669,12 +407,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" - }, - "vscode": { - "interpreter": { - "hash": "57610bec984a4b8681c4f55dffcf7dc6e38fb2fafe961e13257e45f8b7f56719" - } + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/bring_your_own_converted_documents/upload_converted_documents.ipynb b/examples/bring_your_own_converted_documents/upload_converted_documents.ipynb index 8460404..b0e77a0 100644 --- a/examples/bring_your_own_converted_documents/upload_converted_documents.ipynb +++ b/examples/bring_your_own_converted_documents/upload_converted_documents.ipynb @@ -5,7 +5,7 @@ "id": "8ee29891", "metadata": {}, "source": [ - "# Bring Your Own Converted Documents\n", + "# Bring Your Own Converted Documents*\n", "\n", "In some use cases you will be ingesting documents which have previously been converted or parsed. For example,\n", "you might have generated your documents directly in JSON format, or you might have converted the documents\n", @@ -15,6 +15,9 @@ "in Deep Search.\n", "\n", "\n", + "*deprecated; in future we will accept only Docling Docs\n", + "\n", + "\n", "## Access required\n", "\n", "The content of this notebook requires access to Deep Search capabilities which are not\n", diff --git a/examples/bring_your_own_pdf/upload_explore_download_pdfs.ipynb b/examples/bring_your_own_pdf/upload_explore_download_pdfs.ipynb index 8fc4fcb..bef9197 100644 --- a/examples/bring_your_own_pdf/upload_explore_download_pdfs.ipynb +++ b/examples/bring_your_own_pdf/upload_explore_download_pdfs.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 22, "id": "13560ae0", "metadata": { "execution": { @@ -58,7 +58,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "The example will be executed on the Deep Search instance ds-internal\n" + "The example will be executed on the Deep Search instance None\n" ] } ], @@ -73,7 +73,7 @@ "PROJ_KEY = notebook_settings.proj_key # project to use\n", "INDEX_NAME = notebook_settings.new_idx_name # index to create\n", "CLEANUP = notebook_settings.cleanup # whether to clean up\n", - "INPUT_FILES_FOLDER = Path(\"../../data/samples/\")\n", + "INPUT_FILE_PATH = Path(\"../../data/samples/2206.00785.pdf\")\n", "INPUT_OCR_FILE = Path(\"../../data/scanned-samples/2206.00785-7.png\")\n", "\n", "############\n", @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 23, "id": "1ea3cd26", "metadata": { "execution": { @@ -134,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 24, "id": "fae4dee3", "metadata": { "execution": { @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 25, "id": "f5496626", "metadata": { "execution": { @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 26, "id": "530fd67a", "metadata": { "execution": { @@ -200,17 +200,28 @@ "shell.execute_reply.started": "2024-05-27T10:46:46.232420Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['SUCCESS']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Upload and convert documents\n", "data_indices_utils.upload_files(\n", - " api=api, coords=data_index.source, local_file=INPUT_FILES_FOLDER\n", + " api=api, coords=data_index.source, local_file=INPUT_FILE_PATH\n", ")" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 27, "id": "bfe83b90", "metadata": { "execution": { @@ -225,7 +236,7 @@ { "data": { "text/markdown": [ - "The data is now available. You can query it programmatically (see next section) or access it via the Deep Search UI at
https://cps.foc-deepsearch.zurich.ibm.com//projects/e74892839ff04df16a87cae3e96248a24eec7756/library/private/44770b3d86403db9fe2afb8339c82db6478a3807" + "The data is now available. You can query it programmatically (see next section) or access it via the Deep Search UI at
https://pr-516-cps-dev.deepsearch-dev.zurich.ibm.com/projects/468b81ffe515a99172f93b07dd20cd50d4c19a3b/library/private/3ae2e330eb133a1bf4657d256290eece5dfc537f" ], "text/plain": [ "" @@ -261,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 28, "id": "6a9a31ab", "metadata": { "execution": { @@ -277,7 +288,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "The data index contains 3 entries.\n" + "The data index contains 1 entries.\n" ] } ], @@ -291,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 29, "id": "a669e5a9", "metadata": { "execution": { @@ -306,7 +317,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d8b53e1cc3554a8c88a04a8fdb064f50", + "model_id": "ee6a0e72d9b044cd87ae98180be10ad6", "version_major": 2, "version_minor": 0 }, @@ -362,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 30, "id": "e997bbae", "metadata": { "execution": { @@ -444,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 31, "id": "b7addff1-b857-463a-b82c-02ed9dd5ef5f", "metadata": { "execution": { @@ -459,7 +470,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e04a6352dc88483d9f30f2360047a5ff", + "model_id": "ed559131f4cd45509352161c238fc0df", "version_major": 2, "version_minor": 0 }, @@ -474,8 +485,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Finished fetching all data. Total is 3 records.\n", - "Data downloaded in /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp/T/tmpzb6oosaa\n" + "{'_index': 'cps-dev-deepsearch-dev-projdata3ae2e3', '_id': '6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea', '_score': None, '_source': {'_name': '', 'type': 'pdf-document', 'description': {'logs': [{'agent': 'CPS Docling', 'type': 'parsing', 'comment': 'Docling 2.7.1 parsing of documents', 'date': '2025-01-16T13:53:04.836922+00:00'}], 'collection': {'type': 'Document'}}, 'file-info': {'filename': '2206.00785.pdf', 'document-hash': '6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea', '#-pages': 11, 'page-hashes': [{'hash': 'dc8ab77215bdf5d1c50e4635bc886078ceb862131df9de406624cb73be373fc1', 'model': 'default', 'page': 1}, {'hash': '58474aac22030f7608c307aeb1aee7b69b8b4ca533c80ae41ab68153790d6ab0', 'model': 'default', 'page': 2}, {'hash': '1d96fb50e9a4d970cab5199fa3b76469b804c2457390c4bdda04890bc651b813', 'model': 'default', 'page': 3}, {'hash': '4dc4d130627b1f9841208469936e65cf4667f47730044ef31ecbf9664a41d706', 'model': 'default', 'page': 4}, {'hash': '4ba309b0bcae706030066723f66989d89818f00305702bbd5935d6eca9d4db6d', 'model': 'default', 'page': 5}, {'hash': '09357309f7ee2ad6efe2951fcc314bcdac7f6296b244724a78d9e9037bd071ff', 'model': 'default', 'page': 6}, {'hash': '1b8ad8508fe45a56af6aafcaeefcefa168b0b0e8530b9b0c60be1542ce001c14', 'model': 'default', 'page': 7}, {'hash': '8289d80b04962b29ea5f2967b69ca0ae43fb56535cef4fe36630c58a9edde998', 'model': 'default', 'page': 8}, {'hash': 'ba08e96ab334e61dfcde2a71203a96856d5261280e445df5f7d84d7e5974170e', 'model': 'default', 'page': 9}, {'hash': 'f90176f27b3737c29840cf46f7c23ef86f607a2edd94f4c4201e931817f7d2ee', 'model': 'default', 'page': 10}, {'hash': '5c71fa7ee304c4d871411bbb71734c39660173335fc28f955dc3ee8e044fd748', 'model': 'default', 'page': 11}]}, 'main-text': [{'prov': [{'bbox': [17.247167587280273, 236.501953125, 36.33979415893555, 572.52001953125], 'page': 1, 'span': [0, 37], '__ref_s3_data': None}], 'text': 'arXiv:2206.00785v1 [cs.DL] 1 Jun 2022', 'type': 'page-header', 'name': 'Page-header', 'font': None}, {'prov': [{'bbox': [55.040950775146484, 685.9405517578125, 556.8915405273438, 738.414794921875], 'page': 1, 'span': [0, 89], '__ref_s3_data': None}], 'text': 'Delivering Document Conversion as a Cloud Service with High Throughput and Responsiveness', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [104.35169982910156, 622.2041015625, 203.9119873046875, 670.6500244140625], 'page': 1, 'span': [0, 75], '__ref_s3_data': None}], 'text': '1 st Christoph Auer IBM Research Ruschlikon, Switzerland cau@zurich.ibm.com', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [98.21205139160156, 542.8441162109375, 213.3932647705078, 591.4330444335938], 'page': 1, 'span': [0, 81], '__ref_s3_data': None}], 'text': '4 th Cesar Berrospi Ramis IBM Research Ruschlikon, Switzerland ceb@zurich.ibm.com', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [262.605712890625, 622.2041625976562, 362.1552734375, 671.0858154296875], 'page': 1, 'span': [0, 74], '__ref_s3_data': None}], 'text': '2 nd Michele Dolfi IBM Research Ruschlikon, Switzerland dol@zurich.ibm.com', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [263.0400390625, 542.8441772460938, 362.1445007324219, 591.435302734375], 'page': 1, 'span': [0, 77], '__ref_s3_data': None}], 'text': '5 th Peter W.J. Staar IBM Research Ruschlikon, Switzerland taa@zurich.ibm.com', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [47.97799301147461, 252.72711181640625, 300.4272766113281, 501.2793884277344], 'page': 1, 'span': [0, 1518], '__ref_s3_data': None}], 'text': 'Abstract -Document understanding is a key business process in the data-driven economy since documents are central to knowledge discovery and business insights. Converting documents into a machine-processable format is a particular challenge here due to their huge variability in formats and complex structure. Accordingly, many algorithms and machine-learning methods emerged to solve particular tasks such as Optical Character Recognition (OCR), layout analysis, table-structure recovery, figure understanding, etc. We observe the adoption of such methods in document understanding solutions offered by all major cloud providers. Yet, publications outlining how such services are designed and optimized to scale in the cloud are scarce. In this paper, we focus on the case of document conversion to illustrate the particular challenges of scaling a complex data processing pipeline with a strong reliance on machine-learning methods on cloud infrastructure. Our key objective is to achieve high scalability and responsiveness for different workload profiles in a well-defined resource budget. We outline the requirements, design, and implementation choices of our document conversion service and reflect on the challenges we faced. Evidence for the scaling behavior and resource efficiency is provided for two alternative workload distribution strategies and deployment configurations. Our best-performing method achieves sustained throughput of over one million PDF pages per hour on 3072 CPU cores across 192 nodes.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.34965896606445, 232.261962890625, 300.6181335449219, 251.952392578125], 'page': 1, 'span': [0, 103], '__ref_s3_data': None}], 'text': 'Index Terms -cloud applications, document understanding, distributed computing, artificial intelligence', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [135.26025390625, 209.32899475097656, 213.54257202148438, 218.677490234375], 'page': 1, 'span': [0, 15], '__ref_s3_data': None}], 'text': 'I. INTRODUCTION', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [48.13774871826172, 72.90673828125, 300.5203857421875, 203.037841796875], 'page': 1, 'span': [0, 668], '__ref_s3_data': None}], 'text': 'Over the past decade, many organizations have accelerated their transformation into data-driven businesses, as studies have shown its positive impact in efficiency, decision making, or financial performance [1], [2]. Leading companies are increasingly deploying workloads on public and private cloud infrastructure, including business intelligence processing and machine learning models in data analytics platforms [3]. This is owed to several factors such as high availability, lower cost for compute, and storage [4], as well as the flexibility to scale up or down a cloud-based business process to fit the operational needs. Workloads and services can be container-', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.1437683105469, 479.3659973144531, 563.2503662109375, 501.63055419921875], 'page': 1, 'span': [0, 108], '__ref_s3_data': None}], 'text': 'ized, deployed, and orchestrated through widely adopted and standardized platforms like Kubernetes [5], [6].', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.15472412109375, 347.8852844238281, 563.2810668945312, 477.949462890625], 'page': 1, 'span': [0, 673], '__ref_s3_data': None}], 'text': 'A key business process relevant to many companies is document understanding. Documents may constitute contracts, guidelines, manuals, presentations, papers, etc., which contain valuable knowledge for their operations. We observe that several specialized companies and all major cloud providers offer dedicated services (SaaS) for various aspects of document understanding such as Optical Character Recognition (OCR) (e.g., Amazon Textract$^{1}$), forms, and invoice parsing (Docparser$^{2}$, Nanonets$^{3}$, Google Document AI$^{4}$, Microsoft SharePoint Syntex$^{5}$), or conversion of unstructured formats such as PDF into structured content (IBM Watson Discovery$^{6}$).', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9252014160156, 143.3106689453125, 563.5765380859375, 346.3759460449219], 'page': 1, 'span': [0, 1015], '__ref_s3_data': None}], 'text': 'Conversion of PDF documents into a structured, machineprocessable format is a particularly challenging business process due to the high variability and weak normalization of its input. To name a few dimensions of variability, PDF documents can be short or long, encode programmatic or scanned content, have simple or complex page layouts, may contain tables or figures, etc. Thus, the process of recovering their structure and extracting content in high detail entails several dynamic steps (see Fig. 1). On the computational side, this relies on multiple algorithms and machine-learning (ML) models specialized for particular tasks. Examples for such models include OCR [7], document layout analysis [8]-[10], table structure recovery [11], [12], figure understanding [13], reference and citation resolution [14], etc. Furthermore, the ML landscape is evolving rapidly, with new models frequently exposing significantly different characteristics in terms of computational expenses, memory usage, or accelerator re-', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [319.5043029785156, 123.1485366821289, 426.5840148925781, 131.6661376953125], 'page': 1, 'span': [0, 37], '__ref_s3_data': None}], 'text': '$^{1}$https://aws.amazon.com/textract', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.4458312988281, 113.28553009033203, 392.4120788574219, 121.45208740234375], 'page': 1, 'span': [0, 27], '__ref_s3_data': None}], 'text': '$^{2}$https://docparser.com', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.6492919921875, 103.42252349853516, 427.7674255371094, 111.71142578125], 'page': 1, 'span': [0, 38], '__ref_s3_data': None}], 'text': '$^{3}$https://nanonets.com/invoice-ocr', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.6199645996094, 93.4466552734375, 444.7857360839844, 101.82421875], 'page': 1, 'span': [0, 42], '__ref_s3_data': None}], 'text': '$^{4}$https://cloud.google.com/document-ai', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.3656311035156, 83.270263671875, 546.199951171875, 91.654296875], 'page': 1, 'span': [0, 73], '__ref_s3_data': None}], 'text': '$^{5}$https://docs.microsoft.com/en-us/microsoft-365/contentunderstanding', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [318.8615417480469, 73.23809814453125, 470.4822998046875, 81.661865234375], 'page': 1, 'span': [0, 48], '__ref_s3_data': None}], 'text': '$^{6}$https://www.ibm.com/cloud/watson-discovery', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [415.03265380859375, 622.1795654296875, 513.1004638671875, 670.93896484375], 'page': 1, 'span': [0, 72], '__ref_s3_data': None}], 'text': \"3 rd Andr'e Carvalho SoftINSA Lda. Tomar, Portugal afecarvalho@gmail.com\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [169.74295043945312, 539.94189453125, 441.62701416015625, 548.11376953125], 'page': 2, 'span': [0, 78], '__ref_s3_data': None}], 'text': 'Fig. 1. Sketch of operation dependency graph in a document conversion pipeline', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/0'}, {'prov': [{'bbox': [48.25772476196289, 400.16717529296875, 300.41497802734375, 517.3280029296875], 'page': 2, 'span': [0, 574], '__ref_s3_data': None}], 'text': 'quirements. Additionally, many bottlenecks hide in logical operations such as parsing the PDF code, rasterizing a PDF page to a bitmap, or serialization and database transactions. On top of that, a cloud service to solve this business task needs to be flexible enough to support different consumption modes. Some users may need to convert large document repositories in bulk, expecting high throughput, while others may want to convert a single document ad-hoc, expecting short response time. Satisfying both expectations in a common application architecture is non-trivial.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.10683059692383, 236.3572998046875, 300.54351806640625, 389.4085998535156], 'page': 2, 'span': [0, 760], '__ref_s3_data': None}], 'text': 'In short, a cloud service for document conversion needs to be easily adaptable, must scale with model resource demand and workload sizes, and ideally avoids strong assumptions about the consumption mode. As such, it shares many traits with cloud services for other business processes but also holds unique challenges, which make it an interesting systems engineering target. In this paper, we take the subject of document conversion as a case to illustrate the particular challenges of scaling a complex data processing pipeline with strong reliance on ML methods on cloud infrastructure. We outline the practical problems our team faced while developing a cloud service of such nature [15] and present solutions in several aspects. Our main contributions are:', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [58.926998138427734, 169.04527282714844, 300.02191162109375, 214.8209228515625], 'page': 2, 'span': [0, 177], '__ref_s3_data': None}], 'text': '- 1) We propose a validated novel approach to efficiently scale an end-to-end processing pipeline leveraging ML in a cloud environment for the use-case of PDF document conversion.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [58.82088088989258, 144.35357666015625, 300.02191162109375, 167.091552734375], 'page': 2, 'span': [0, 113], '__ref_s3_data': None}], 'text': '- 2) We reflect on the design considerations, challenges, and implementation choices of our PDF conversion service.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [58.47614288330078, 120.86260986328125, 300.0218811035156, 142.80609130859375], 'page': 2, 'span': [0, 89], '__ref_s3_data': None}], 'text': '- 3) We introduce a set of comparative metrics to evaluate the performance characteristics.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [58.079864501953125, 72.9669189453125, 300.2283630371094, 118.8519287109375], 'page': 2, 'span': [0, 205], '__ref_s3_data': None}], 'text': '- 4) We present and analyze the resulting scaling and response behavior in a benchmark setup on common cloud infrastructure for two alternative workload distribution strategies and deployment configurations.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [320.0240478515625, 495.8082580566406, 554.480712890625, 517.8453979492188], 'page': 2, 'span': [0, 68], '__ref_s3_data': None}], 'text': 'II. REQUIREMENTS AND OBJECTIVES FOR DOCUMENT CONVERSION IN THE CLOUD', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [311.1315002441406, 324.1973876953125, 563.376708984375, 489.4632873535156], 'page': 2, 'span': [0, 854], '__ref_s3_data': None}], 'text': 'As teased in the introduction, a cloud service for document conversion provides a particularly broad and challenging set of requirements, which are not trivial to satisfy all at once. Precisely this combination of real-world requirements make it an interesting target for a case-study on scaling a business process in the cloud. Broadly speaking, we can split the requirements into three categories, namely 1. the ability to process documents with a wide variety in characteristics at scale, 2. the ability to incorporate and consume several ML models for different tasks and 3. the ability to perform well in different user consumption modes ( bulk or ad-hoc ) which sit on opposite ends. It should be noted that only the first category is linked to the domain problem of document conversion. The latter two categories are shared by many cloud services.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.1156311035156, 73.162353515625, 563.4229736328125, 322.1588134765625], 'page': 2, 'span': [0, 1284], '__ref_s3_data': None}], 'text': 'PDF document processing: We work under the premise that a document conversion service must treat a single document as an atomic data-unit. For instance, a single output file in JavaScript Object Notation (JSON) needs to be produced for each PDF file that is submitted. Contrary to other data formats such as images or plain text, documents have an internal granularity in the shape of pages. This trait can be exploited, since many operations can be executed independently on each page. Examples of such operations are text-cell identification (either through parsing programmatic PDF code or through OCR), layout segmentation, table-structure recovery, figure classification, etc. Two critical constraints need to be recognized here. Firstly, the intra-page operations may have dependencies. For instance, table-structure recovery relies on text-cell identification and on layout segmentation to locate a table. Secondly, the results of each operation on each page needs to be ultimately merged into a single output document (see Figure 1, phase D). This merge operation ensures that the content of the document has the correct section-structure and ordering. It is therefore an invalid assumption that the conversion of a document can be simply treated as an embarrassingly parallel', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [47.93190002441406, 539.6549072265625, 300.59576416015625, 740.781494140625], 'page': 3, 'span': [0, 1025], '__ref_s3_data': None}], 'text': 'set of operations over its pages. Rather, to obtain the converted document, one has to execute a complex operation dependency graph which dynamically forks and merges on two levels (see Figure 1 phase B and C). While this provides opportunity for highly concurrent execution, it can create significant imbalance in the number and runtime of operations for a given page, due to their extremely varying complexity. Adding to this, the PDF format has inherent properties that make it very opaque . Therefore, there is no practical way to estimate the complexity and resource demand required for processing ahead of execution time. From an architecture perspective, the above is suggesting an approach which decomposes the full chain of operations and data into tasks . Such tasks can then be created and executed concurrently through an orchestration mechanism that is aware of their dependencies. We outline implementation options and examine the advantages and tradeoffs with different task granularity in Sections III and IV.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.09360885620117, 336.267822265625, 300.3430480957031, 537.7481689453125], 'page': 3, 'span': [0, 990], '__ref_s3_data': None}], 'text': 'Machine-learning models: ML models play a powerful role in the quality of document conversion. To date, they outcompete any rule-based algorithm in document conversion tasks and even approach human-like accuracy in particular tasks such as layout analysis [16]. From a systems perspective, ML models bring an own set of challenges. First, solving the conversion task requires many different types of ML models as outlined earlier. Each of these models has different runtime characteristics and resource requirements in terms of CPU cores, memory demand, and accelerators. Furthermore, ML models evolve at a rapid pace. Consequently, to quickly adopt state-of-the-art ML models in production, our cloud service needs to be flexible with regard to integration of new models. Encapsulation of ML models into separate microservices, each serving on an own endpoint, can provide for both resource isolation and easy integration. We will discuss choices for ML serving and scaling in Section III.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.03481674194336, 72.84271240234375, 300.5635070800781, 334.2709045410156], 'page': 3, 'span': [0, 1320], '__ref_s3_data': None}], 'text': 'User requirements: The requirements outlined above are all system-internal requirements. From a user experience perspective, there are strong requirements to be met regarding the conversion speed and the response time. Our goal is to provide a cloud service which supports both bulk-conversion of huge document repositories, as well as ad-hoc conversion of individual documents. In the former case, a key concern is to achieve the highest (sustained) document throughput and ensure it scales proportionally to the compute resources. Importantly, this should allow to set a time-budget for a large conversion workload, e.g., a full online library, and infer the compute resource cost, or conversely, estimate the conversion time with a given resource budget. In the latter case, the primary objective is to achieve the shortest time-tosolution (TTS), allowing for an interactive user experience. Here it is important to note that the smaller a workload is (e.g., one document), the more challenging it becomes to achieve proper workload balancing in a distributed processing scheme. Both goals are reflecting in the scaling behavior of the system, which we will examine in Section IV-E. Additionally, we want to enable multi-tenant operation for many users on one application instance. Therefore, the service must provide', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.06005859375, 683.1170654296875, 563.045166015625, 740.9441528320312], 'page': 3, 'span': [0, 259], '__ref_s3_data': None}], 'text': 'reasonable fairness when working at full capacity and multiple users each submit a conversion job. That means, submitted conversion jobs cannot be simply processed serially, but the service should allow to schedule multiple jobs concurrently with short delay.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9884948730469, 563.0549926757812, 563.4898071289062, 681.1704711914062], 'page': 3, 'span': [0, 601], '__ref_s3_data': None}], 'text': 'Evaluation dimensions: In addition to functional, technical, and experience requirements, we also need to consider performance evaluation metrics, which typically fall into three dimensions: speed , resource cost , and quality . In this paper, we will not focus on conversion quality , since it is directly determined by the choice of models and their accuracy. Model performance for different tasks is backed by many peerreviewed results [16]. Instead, this paper will focus on speed and resource cost , and how they correlate given a fixed system configuration with selected state-of-the-art models.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [391.8093566894531, 543.4899291992188, 482.7892150878906, 552.8233642578125], 'page': 3, 'span': [0, 18], '__ref_s3_data': None}], 'text': 'III. SYSTEM DESIGN', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [311.1693420410156, 479.4771423339844, 563.0579833984375, 537.5883178710938], 'page': 3, 'span': [0, 294], '__ref_s3_data': None}], 'text': 'Having established the problem domain, requirements, and objectives, this section will outline and reflect on the fundamental application architecture of our document conversion service. Further, we establish a distributed task orchestration mechanism and discuss aspects of its implementation.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.40386962890625, 459.4205322265625, 423.4620361328125, 469.8033447265625], 'page': 3, 'span': [0, 27], '__ref_s3_data': None}], 'text': 'A. Application architecture', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [310.8529052734375, 324.1124267578125, 563.23583984375, 454.426513671875], 'page': 3, 'span': [0, 665], '__ref_s3_data': None}], 'text': 'Two fundamental decisions to be made prior to any implementation are the technology stack and architecture patterns to use. Given its clear dominance in virtually every contribution by the ML community, its proven utility in data-science tasks and the broad support in webservice frameworks [17]-[19], we chose python as the primary implementation language. Another priority we set is to work close to the bare kubernetes stack, in order to exercise lower-level control over the workload distribution, scaling, and resource creation. For this reason, we ruled out full-fledged data engines (e.g., Apache Spark [20]) and avoided proprietary or vendor-specific tools.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9093017578125, 217.00413513183594, 563.3410034179688, 322.2803649902344], 'page': 3, 'span': [0, 478], '__ref_s3_data': None}], 'text': 'The other critical decision regards the application architecture. Here, one can find fundamentally different options, depending on the type and volume of data, their processing complexity, and the consumption modes. As outlined in section II, we expect high-volume workloads which can be partitioned horizontally and processed in parallel to a high degree. On the other hand, we want to satisfy expectations of short response times for ad-hoc conversion with small data volumes.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9143981933594, 73.40312194824219, 563.4306640625, 214.8663330078125], 'page': 3, 'span': [0, 723], '__ref_s3_data': None}], 'text': 'For the latter case, an architecture optimized for real-time processing would appear to be a sensible choice. An example for this is a microservice-based application with a user-facing, synchronous REST API and a backend which implements the document processing through a chain of remote-procedurecalls (RPC) between these microservices. With microservice replication, backed by sufficient compute resources or elastic cloud infrastructure, responsive operation could be upheld even for several concurrent users. Still, this approach would certainly fail to scale to high-volume workloads such as document repositories or libraries, especially in the case where the service is used for ad-hoc conversion and bulk conversion', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.29470443725586, 658.69287109375, 300.327880859375, 740.9005126953125], 'page': 4, 'span': [0, 394], '__ref_s3_data': None}], 'text': 'at the same time. Given a bulk conversion workload in the order of hundreds of documents, the client requests would soon stack up and cause congestion, forcing the system to deny more requests. Dynamically, let alone spontaneously, scaling the microservice replication to a level which can absorb this would be extremely challenging in terms of resource management and also be cost-prohibitive.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.177391052246094, 417.8052978515625, 300.45684814453125, 489.2463684082031], 'page': 4, 'span': [0, 510], '__ref_s3_data': None}], 'text': 'Fig. 2. Architecture diagram of our conversion service. User requests for document conversion are handled by a REST API service, which can dispatch workloads asynchronously to the compute infrastructure through a queueing mechanism. Workers pick up queued tasks from a message broker and store the results for later retrieval on a document database and cloud object storage. The ML models are served through separate microservices, which are consumed by workers when executing the document conversion pipeline.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/1'}, {'prov': [{'bbox': [47.96165084838867, 72.57586669921875, 300.37664794921875, 406.59539794921875], 'page': 4, 'span': [0, 1699], '__ref_s3_data': None}], 'text': \"For these reasons, we favored an asynchronous task-based queue-worker architecture suitable for high-volume batchprocessing, involving a task queue and containerized worker processes in the backend. Here, the user-facing API only accepts a document conversion request and enqueues a corresponding task on a message broker. Clients receive an immediate response with the task's identifier, which can be used to retrieve the conversion result once the processing is completed. The worker processes attach to a task queue, consume tasks competitively, and write status information and task output to a (transient) results-backend and a persistent database (see Figure 2). Since large conversion workloads can be partitioned horizontally, workers are not required to communicate to each other or share resources. Hence, worker processes can be run isolated in containers and trivially replicated both inside and across cluster nodes through kubernetes. Tasks produced in a conversion job can reside on the task queue or on a worker process and eventually persist their state on the results-backend. Together, this ensures that a task remains traceable over its whole lifetime. As such, a queue-worker architecture protects the system from compute congestion through request overload, promises reliability, and enables simple scaling, at the cost of potentially delayed processing. However, queue mechanisms may also add I/O overhead and latency to the system, even in idle state. Consequently, TTS in ad-hoc conversion may be handicapped. To minimize such adverse effects, we chose to use online workers, which boot at service deployment time. This makes their lifetime independent of any conversion job\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.16973876953125, 670.67041015625, 563.1245727539062, 740.8549194335938], 'page': 4, 'span': [0, 349], '__ref_s3_data': None}], 'text': 'and allows to pre-load the codebase, initialize resources, and keep internal state across tasks (such as cached connections and database drivers). Further, we chose to implement a lightweight library which enables low-latency task orchestration as well as fairness between multiple conversion jobs. Details are provided in the following subsections.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9786071777344, 396.32208251953125, 563.35595703125, 669.229736328125], 'page': 4, 'span': [0, 1328], '__ref_s3_data': None}], 'text': 'We introduce a notable exception from the queue-worker pattern for serving ML models. Instead of executing ML inference codes inside the workers, we externalize ML models as microservices with a simple REST API. The slightly less efficient interface and added I/O compared to direct codebinding and shared memory inside a worker process has proven to be a reasonable sacrifice to the significantly lower integration effort for new models. Ease of integration is a key requirement in the fast-evolving ML model landscape. Additionally, model serving can be resource-budgeted and scaled out independently from workers. The latter is particularly relevant for resource efficiency since our ML inference is computationally far more expensive and at the same time far less dynamic in memory use than other operations (e.g., PDF splitting, parsing, and merging). Leveraging this benefit would otherwise demand several different worker types and queues (one for each model), therefore increasing the complexity in the core system. In our service implementation, we wrap ML model codes in a python aiohttp webserver runtime and rely on knative serving for scaling and load-balancing [21]. This compares well to the technology used in popular ML serving frameworks such as ray.io $^{7}$, Seldon Core $^{8}$, or TensorFlow Serving $^{9}$.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.2190856933594, 378.6492004394531, 451.3511657714844, 388.47711181640625], 'page': 4, 'span': [0, 34], '__ref_s3_data': None}], 'text': 'B. Task orchestration architecture', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [311.0847473144531, 255.86019897460938, 563.4871215820312, 373.316162109375], 'page': 4, 'span': [0, 572], '__ref_s3_data': None}], 'text': \"We define one conversion job as one (asynchronous) call to our service's API endpoint, which may request conversion of any number and length of PDF files. To organize the operations within a conversion job, we define tasks . A task is defined by a code function which performs an operation, by the data it processes, and an identifier which makes it traceable across the backend architecture. All tasks belong to a conversion job, which itself acts as the root-task. Tasks will be executed on the workers and cover all operations, with the exception of ML model inference.\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.08941650390625, 112.442138671875, 563.5247192382812, 253.7100830078125], 'page': 4, 'span': [0, 729], '__ref_s3_data': None}], 'text': 'Obviously, implementing the pipeline outlined in Figure 1 in a purely serial fashion, meaning as a single task for each conversion job, would not promise any reasonable efficiency, even if multiple jobs were processed in parallel on different workers. To use available cluster resources efficiently, we focus on two strategies in particular. First of all, we try to balance the workload distribution evenly. Therefore, we split the conversion jobs into smaller tasks, which can be processed independently on different workers. Secondly, we strive to avoid that workers are underutilizing CPU resources while waiting for I/O-bound operations, such as reading and writing files, database transactions, or network requests to the ML', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [319.5000915527344, 93.22607421875, 382.4632263183594, 102.552001953125], 'page': 4, 'span': [0, 24], '__ref_s3_data': None}], 'text': '$^{7}$https://www.ray.io', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.1501159667969, 83.304443359375, 509.3135986328125, 91.548828125], 'page': 4, 'span': [0, 63], '__ref_s3_data': None}], 'text': '$^{8}$https://www.seldon.io/solutions/open-source-projects/core', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [319.06390380859375, 73.2734375, 466.4934387207031, 81.6090087890625], 'page': 4, 'span': [0, 50], '__ref_s3_data': None}], 'text': '$^{9}$https://www.tensorflow.org/tfx/guide/serving', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [48.68336868286133, 718.9821166992188, 300.251708984375, 740.7255859375], 'page': 5, 'span': [0, 83], '__ref_s3_data': None}], 'text': 'models. Therefore, we enable concurrency between multiple tasks on the same worker.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.233646392822266, 346.260009765625, 300.12921142578125, 390.9906005859375], 'page': 5, 'span': [0, 395], '__ref_s3_data': None}], 'text': 'Fig. 3. Sketch of workload distribution schemes on the document-level (top) and page-level (bottom). A conversion job is submitted at time t$_{0}$. Tasks are produced and consumed by the workers through the task queue. The queue drains at time t$_{d}$. Sustained throughput is upheld until the first worker finds no more work (t$_{w}$). The job only finishes after completion of all tasks (TTS).', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/2'}, {'prov': [{'bbox': [48.275936126708984, 168.78912353515625, 300.3795166015625, 334.2211608886719], 'page': 5, 'span': [0, 800], '__ref_s3_data': None}], 'text': 'Data partitioning and workload distribution: We explore two schemes for partitioning data and forming tasks in a conversion job: a) per-document and b) in equal-sized batches of pages, across document boundaries. In the former case, each document contained in a conversion job is fully processed into the corresponding JSON output on its own subtask, which we further refer to as the document-level distribution scheme . In the latter case, we further increase granularity by producing tasks for equal-sized batches of pages, further referred to as page-level distribution scheme (see Fig. 3). As sketched out, we expect to see stronger workload imbalance in the document-level distribution scheme, leading to underutilization of workers in the tail part of a conversion job (from t$_{w}$ until TTS).', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.253902435302734, 72.8404541015625, 300.1933288574219, 166.87823486328125], 'page': 5, 'span': [0, 459], '__ref_s3_data': None}], 'text': 'A conversion job using the document-level distribution scheme consists of N + 1 tasks for N PDF documents, where the root task has the responsibility of iterating over the data source and submitting one task for every document to the queue. While the document-level scheme can be implemented rather straightforward without any dependencies between tasks, the page-level scheme introduces significantly more complexity. It becomes evident from Fig. 1 that some', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.8545837402344, 539.6549072265625, 563.4945068359375, 740.6552734375], 'page': 5, 'span': [0, 976], '__ref_s3_data': None}], 'text': 'stages in the pipeline require to work on the full document (e.g., merging pages into the full document JSON output and exporting to the target), while others can be run pageby page (e.g., PDF parsing and applying ML models). We therefore chose to define specialized tasks responsible for each processing stage, which depend on the results of tasks from the preceding stage. Hence, many tasks need to be produced on the fly and awaited at multiple points from other tasks. Their count depends on factors determined by the PDF content. Another consequence is that partial results from each task need to be stored intermediately for downstream tasks to be picked up. Since downstream tasks may schedule on any worker in any node, this incurs additional data transmission to and from a database or object storage. This particular requirement is not present in the document-level pipeline, because all intermediate data can remain worker-local until a document is fully converted.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9823913574219, 323.7270812988281, 563.3364868164062, 536.9470825195312], 'page': 5, 'span': [0, 1032], '__ref_s3_data': None}], 'text': 'Task concurrency: Keeping allocated cluster resources well saturated, while also not overbooking them, is key to efficient resource usage and high throughput in document conversion. The operations in the conversion pipeline can be roughly divided into those primarily compute-bound and primarily I/Obound. Examples for the former are parsing PDF contents, rendering an image of a PDF page, applying ML models or OCR. Examples for the latter are retrieving a PDF file over the network, unpacking an archive, exporting to a target database, or storing and fetching intermediate task results. A feasible approach we found is to interleave I/O-bound and computebound operations on the same worker, while allowing only one compute-bound operation to execute at the same time. Thus, precisely saturating resources on a cluster node turns into a matter of monitoring resource usage of workers under load and adjusting the amount of worker processes deployed on each node accordingly. Concrete evidence of this is presented in section IV-D.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9559020996094, 155.51666259765625, 563.2556762695312, 320.91015625], 'page': 5, 'span': [0, 825], '__ref_s3_data': None}], 'text': 'We evaluated and discarded multiple implementation options to achieve interleaving, such as threading and explicit callback-passing code. Eventually, we settled on implementing all task code in python asyncio 10 co-routines, which run in an asynchronous event loop. This cooperative concurrency scheme is more efficient compared to launching and managing threads, but it requires a different coding paradigm. Any active task arriving at code points which require to wait for I/O can choose to suspend and return control to the asyncio event loop, and resume at a later point after its waiting condition has been fulfilled. Compute-intense tasks may fill the waiting time and remain in control of execution until they are completed. As such, no second compute-intense task can compete for resources in the same worker process.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.0685729980469, 95.35310363769531, 563.1466674804688, 152.83831787109375], 'page': 5, 'span': [0, 308], '__ref_s3_data': None}], 'text': 'Dynamic task orchestration: Realising the dynamic traits of the proposed task distribution schemes prompted us to find an efficient mechanism to produce (sub-)tasks, submit these to the task queue, and wait for their completion during the pipeline execution. In the context outlined above, this demands for a', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [319.4994201660156, 73.4012451171875, 472.5478515625, 82.676025390625], 'page': 5, 'span': [0, 53], '__ref_s3_data': None}], 'text': '$^{10}$https://docs.python.org/3/library/asyncio.html', 'type': 'page-footer', 'name': 'Page-footer', 'font': None}, {'prov': [{'bbox': [48.14511489868164, 706.8296508789062, 300.26812744140625, 740.992919921875], 'page': 6, 'span': [0, 137], '__ref_s3_data': None}], 'text': 'task distribution code which can itself run inside an asyncio event-loop, such that in-worker concurrency between tasks can be leveraged.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.04045867919922, 371.0640869140625, 300.5950622558594, 704.4154052734375], 'page': 6, 'span': [0, 1685], '__ref_s3_data': None}], 'text': \"Several task distribution libraries have emerged in the community for different requirements and use-cases, for instance, ray.io, Celery$^{11}$, Dramatiq$^{12}$, or Apache Beam$^{13}$. To our surprise, none of the available options could meet our needs, since distribution and execution of asynchronous co-routines as tasks is widely unsupported. Few attempts to provide this capability have remained experimental and are poorly maintained or abandoned [22], [23]. Therefore, we decided to implement a custom library to orchestrate asynchronous tasks, which we make available as open source under the name Mognet $^{14}$. Fundamentally, it allows to create worker processes that initialize an asyncio event loop and attach to an amqp 15 message broker and a redis 16 instance for storage of every task's status. A worker process subscribes to a queue and fetches up to X tasks at once, which are then executed on the worker's event loop concurrently. To support the dynamic nature of our pipeline, we explicitly allow any task to produce (many) subtasks and await their completion. Subtasks are submitted to the task queue, like any task. Since all tasks are asynchronous co-routines, waiting for subtasks is a nonblocking and cheap operation. It is worth mentioning that waiting for subtasks creates a risk for deadlocks. A task may wait for subtasks forever while they cannot be scheduled on any worker, because all workers are occupied up to their limit X . To circumvent this situation, the local limit X of concurrently scheduling tasks on a worker is incremented by 1 each time a task produces any number of subtasks, and decremented by 1 again when the producing task completes.\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [47.953495025634766, 144.31390380859375, 300.4158630371094, 369.63275146484375], 'page': 6, 'span': [0, 1143], '__ref_s3_data': None}], 'text': 'Additionally to the orchestration capability outlined above, we exploit the property that such tasks which produce subtasks are very cheap to suspend and reactivate for another significant benefit. Instead of producing and enqueueing every possible subtask at once, the producing task may instead iteratively enqueue new subtasks only as previous subtasks finish. This allows precise control over how many subtasks are submitted from a producer task at once and therefore enables to keep the task queue short. A concrete example for this case is the root task of a conversion job, which produces one subtask for each document. Given a number of N workers, enqueueing much more than N tasks at once is to no benefit for distributed processing. Conversely, it can delay the scheduling of competing conversion jobs. Enqueueing the N +1 st document subtask only when the first document subtask finishes instead gives opportunity for better interleaving of tasks belonging to competing conversion jobs on the queue. The same principle translates to the level of pages inside one document. We demonstrate the effect of this strategy in section IV-F.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [56.923988342285156, 122.95361328125, 138.96153259277344, 132.4644775390625], 'page': 6, 'span': [0, 31], '__ref_s3_data': None}], 'text': '$^{11}$https://docs.celeryq.dev', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.82627868652344, 113.28555297851562, 122.49656677246094, 121.32855224609375], 'page': 6, 'span': [0, 26], '__ref_s3_data': None}], 'text': '$^{12}$https://dramatiq.io', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.90766906738281, 103.01483154296875, 139.6422119140625, 111.3055419921875], 'page': 6, 'span': [0, 30], '__ref_s3_data': None}], 'text': '$^{13}$https://beam.apache.org', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.93403625488281, 93.08990478515625, 198.8325958251953, 101.25537109375], 'page': 6, 'span': [0, 46], '__ref_s3_data': None}], 'text': '$^{14}$https://github.com/DS4SD/project-mognet', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.8766975402832, 82.97198486328125, 134.6250457763672, 91.07672119140625], 'page': 6, 'span': [0, 27], '__ref_s3_data': None}], 'text': '$^{15}$https://www.amqp.org', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.70504379272461, 73.50115966796875, 109.47432708740234, 81.83197021484375], 'page': 6, 'span': [0, 23], '__ref_s3_data': None}], 'text': '$^{16}$https://redis.io', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [400.010986328125, 730.9371337890625, 474.3590087890625, 740.70361328125], 'page': 6, 'span': [0, 14], '__ref_s3_data': None}], 'text': 'IV. EVALUATION', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [311.1755065917969, 667.5081787109375, 563.4439086914062, 724.8348388671875], 'page': 6, 'span': [0, 299], '__ref_s3_data': None}], 'text': 'To evaluate the real-world performance and behavior of our service, we outline our benchmark environment and characterize a representative test dataset used for conversion. In the following, measurements and observations regarding the scalability and multi-user fairness are presented and discussed.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.6365661621094, 648.5142211914062, 355.97283935546875, 658.2706909179688], 'page': 6, 'span': [0, 10], '__ref_s3_data': None}], 'text': 'A. Metrics', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [310.79632568359375, 345.7513122558594, 563.5660400390625, 643.2157592773438], 'page': 6, 'span': [0, 1525], '__ref_s3_data': None}], 'text': 'Following from the design goals, we establish several evaluation metrics to characterize the scaling behavior. The timeto-solution (TTS) for a particular conversion job is defined as the time difference between the submission of the first batch of documents and the retrieval of the last converted document. The throughput is defined as the number of processed pages per unit of time. Notice that the number of processed documents per unit of time is not a good metric as documents have a variable number of pages. The effective throughput is computed by determining the number of processed pages from the input dataset and dividing it by the TTS. The sustained throughput is defined as the number of processed pages from the input dataset divided by the time in which all compute resources are busy processing (from t$_{0}$ until t$_{w}$, see Fig. 3). Importantly, the effective throughput will be dependent on the data volume of the conversion job, while the sustained throughput is independent of the data volume of the conversion job. In the limit of a very large conversion job, the effective throughput will asymptotically reach the sustained throughput , as the time proportion of partially idle worker state at the end of a job will be negligible compared to the time in saturated worker state. Additionally, we observe the serial time of the benchmark conversion job. It is defined as the sum of all task runtimes in each conversion job and, in the ideal case, it is constant unless a resource bottleneck is present.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.34002685546875, 326.9412536621094, 381.1842346191406, 336.3915100097656], 'page': 6, 'span': [0, 17], '__ref_s3_data': None}], 'text': 'B. Infrastructure', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [310.9816589355469, 215.5965576171875, 563.470947265625, 320.7731018066406], 'page': 6, 'span': [0, 491], '__ref_s3_data': None}], 'text': 'For our benchmark environment, we created a managed OpenShift cluster (version 4.8, using kubernetes 1.21) hosted on IBM Cloud with default settings and we added a pool of virtualized dedicated cluster nodes. Each cluster node provides 16 CPU cores and 16 GB RAM. This choice of nodes falls well within the band of optimal resources-to-cost ratio on most cloud infrastructure providers. To enable ML model serving, we installed knative serving through the OpenShift serverless operator [21].', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.03338623046875, 155.8448486328125, 563.0993041992188, 213.60015869140625], 'page': 6, 'span': [0, 284], '__ref_s3_data': None}], 'text': 'Data blobs (i.e., source documents and conversion output) and intermediate results (e.g., model predictions) are stored on managed instances of IBM Cloud Object Storage (COS) and IBM Cloud MongoDB, respectively. All resources are hosted in an IBM Cloud location in Frankfurt, Germany.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.5181884765625, 136.80130004882812, 376.6218566894531, 146.42706298828125], 'page': 6, 'span': [0, 15], '__ref_s3_data': None}], 'text': 'C. Test Dataset', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [310.8953857421875, 72.79766845703125, 563.3804321289062, 130.986572265625], 'page': 6, 'span': [0, 291], '__ref_s3_data': None}], 'text': 'To obtain a realistic test dataset, we compiled a subset of 8053 PDF documents from arXiv (consecutive submissions 2106.00001 to 2106.08072, omitting those that do not provide a PDF). It contains 156 529 pages and measures 20.7 GB in binary size. We picked this dataset as it is available at', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.505126953125, 695.0720825195312, 300.1548767089844, 741.4332275390625], 'page': 7, 'span': [0, 252], '__ref_s3_data': None}], 'text': 'minimal cost 17 and fully reproducible. Furthermore, the arXiv is a representative dataset, as it is one of the main open-source libraries for disseminating scientific preprint articles. Detailed characteristics of the test dataset are shown in Fig. 4.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [59.584068298339844, 552.5806884765625, 60.722347259521484, 577.9385375976562], 'page': 7, 'span': [0, 1], '__ref_s3_data': None}], 'text': '#', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [102.52969360351562, 410.676513671875, 243.02830505371094, 418.9044494628906], 'page': 7, 'span': [0, 44], '__ref_s3_data': None}], 'text': 'Fig. 4. Characteristics of the test dataset.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/3'}, {'prov': [{'bbox': [48.54422378540039, 291.52410888671875, 300.34613037109375, 396.6930847167969], 'page': 7, 'span': [0, 519], '__ref_s3_data': None}], 'text': 'It is worth noting that we did not cherry-pick the documents in the dataset in any way to best reflect a real-world situation. We have observed that a fraction of documents reproducibly fail to convert or cause outliers in task runtimes. Three documents consistently fail to convert because of PDF interpretation issues. In another 160 documents, a total of 504 pages could not be converted due to memory constraints or rendering problems, which is a typical fraction that we also observed with other types of datasets.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [47.948448181152344, 267.3865966796875, 134.76904296875, 277.25396728515625], 'page': 7, 'span': [0, 20], '__ref_s3_data': None}], 'text': 'D. Application setup', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [48.122955322265625, 94.83416748046875, 300.5075988769531, 260.14739990234375], 'page': 7, 'span': [0, 779], '__ref_s3_data': None}], 'text': 'We evaluate two different profiles for the deployment and configuration of our system components to understand the impact of concurrent task interleaving on resource efficiency. For both profiles, we take the resource budget of a cluster node as the basis. To decide how many pod replicas of workers and ML models one can safely schedule on a cluster node without overbooking resources, we elected their average memory footprint under load as the primary criterion. Our target was to occupy 75% of the node memory, leaving 25% as overhead. This choice was made since memory, in contrast to CPU cores, cannot be oversubscribed and therefore strongly determines the required cost. Average memory footprint and CPU usage of the components, observed under load, are shown in table I.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [56.61177062988281, 73.37420654296875, 174.19342041015625, 83.37066650390625], 'page': 7, 'span': [0, 42], '__ref_s3_data': None}], 'text': '$^{17}$https://arxiv.org/help/bulk data s3', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [330.09259033203125, 713.3770751953125, 544.55517578125, 739.2872314453125], 'page': 7, 'span': [0, 98], '__ref_s3_data': None}], 'text': 'TABLE I Typical resource usage of workers and ML models under load in deployment profiles A and B.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Table', 'type': 'table', '$ref': '#/tables/0'}, {'prov': [{'bbox': [311.1868896484375, 518.7265014648438, 563.3357543945312, 600.181884765625], 'page': 7, 'span': [0, 404], '__ref_s3_data': None}], 'text': 'In profile A, we simulate a service which is not capable of interleaving concurrent tasks in the same worker process. Thus, we create equal counts of worker replicas and ML model replicas, and effectively disable worker-internal task concurrency by fetching only one task at a time from the queue. We schedule 17-18 pods (8-9 each for worker and ML model) per cluster node within the given memory budget.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.173828125, 422.8310852050781, 563.3305053710938, 516.508056640625], 'page': 7, 'span': [0, 471], '__ref_s3_data': None}], 'text': 'In profile B, we intend to optimize the conversion throughput. With the prior knowledge that ML model inference is the computationally most expensive operation in the pipeline, we create worker replicas and ML model replicas at a ratio of 1:4, and allow four concurrent tasks per worker to interleave. This allows to fit 15 pods (3 workers, 12 ML models) per cluster node, since now workers require more memory on average to interleave four tasks at a time (see table I).', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.1134948730469, 361.9398193359375, 563.2164306640625, 420.5632019042969], 'page': 7, 'span': [0, 291], '__ref_s3_data': None}], 'text': \"Further, we do not enforce limits on CPU usage per worker or ML model replica through kubernetes. Worker processes are naturally bounded to a single core due to python's global interpreter lock [24]. Each replica of the ML models is configured to use only one thread to avoid CPU congestion.\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.0853576660156, 266.850341796875, 563.2699584960938, 360.21392822265625], 'page': 7, 'span': [0, 465], '__ref_s3_data': None}], 'text': 'As for the ML models, we deliberately set up a rather expensive object-detection network (Faster R-CNN with ResNet50 backbone, GLYPH 63M weights) [25] for layout segmentation, which we feed PDF pages rasterized to 1025 × 1025 pixels. Bare inference time using one CPU core is in the order of 3 seconds. The structure of identified tables is reconstructed by a secondary model, here using a very cheap topological algorithm with negligible resource demand.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.39276123046875, 245.30401611328125, 368.1570739746094, 254.8785400390625], 'page': 7, 'span': [0, 14], '__ref_s3_data': None}], 'text': 'E. Scalability', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [311.0267333984375, 181.4732666015625, 563.1416625976562, 238.85894775390625], 'page': 7, 'span': [0, 255], '__ref_s3_data': None}], 'text': 'To evaluate the scaling behavior of the service, we measure the runtime and throughput of exactly one conversion job at a time, repeated with increasing node pool sizes and matching application deployment scale on the benchmark environment outlined above.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [310.9446716308594, 73.07958984375, 563.3133544921875, 178.65673828125], 'page': 7, 'span': [0, 486], '__ref_s3_data': None}], 'text': 'Benchmark series and protocol: All evaluation metrics defined above are measured repeatedly in both deployment profiles after scaling the pool size to 12, 48, 96, and 192 cluster nodes (using 192, 768, 1536, and 3072 CPU cores). The scaling level of 12 cluster nodes acts as the baseline measurement to determine the speedup for the higher scales. On a second dimension, the whole test series is carried out separately for both task distribution schemes (document-level and page-level).', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/4'}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/5'}, {'prov': [{'bbox': [48.3709602355957, 575.2971801757812, 563.189453125, 593.0181274414062], 'page': 8, 'span': [0, 261], '__ref_s3_data': None}], 'text': 'Fig. 5. Scaling of time-to-solution (A), effective throughput and sustained throughput on document-level distribution scheme (B), page-level distribution scheme (C) in both deployment profiles with node count. Gray diagonals indicate theoretical linear scaling.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/6'}, {'prov': [{'bbox': [48.08693313598633, 256.1873474121094, 300.58367919921875, 552.7544555664062], 'page': 8, 'span': [0, 1457], '__ref_s3_data': None}], 'text': 'Observations in scaling behavior: Several observations can be made in the context of our scaling benchmark series, as shown in Fig. 5. First of all, we find that the TTS at the lowest scale (12 nodes) is very similar across both deployment profiles and task distribution schemes. As we scale up the number of cluster nodes, we first recognize that both distribution schemes achieve reasonable speedup in TTS. However, the TTS in the document-level distribution scheme beats the TTS in page-level distribution scheme by a growing margin at increasing scales. This observation also mirrors in the effective throughput. At the largest scale (192 nodes), the achieved speedup in TTS starts to tail off to different degrees in both schemes, irrespective of the deployment profile. Our test dataset converts within 17 minutes in the best case (document-level scheme, profile B) and 25 min in the worst case (page-level scheme, profile A). Contrary to our theoretical considerations, the loss in scaling efficiency affects the pagelevel scheme much stronger than the document-level scheme. Deeper investigation revealed that two different causes are responsible for the observed loss in scaling efficiency. In the document-level distribution scheme, long documents increasingly dominate the TTS of the full conversion job, some of which take over 14 minutes to convert alone (see Fig 6). Thus, TTS would be lower-bounded at 14 minutes even with infinite resources.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.17839431762695, 72.85797119140625, 300.47991943359375, 250.44354248046875], 'page': 8, 'span': [0, 907], '__ref_s3_data': None}], 'text': \"In the page-level distribution scheme, despite the finegrained workload balancing achieved through equal-sized batches of pages, we find that the amount of I/O created by storing and loading intermediate task results creates a scaling bottleneck. Our MongoDB instance cannot keep up with the concurrent transaction load. This bottleneck is completely absent in the document-level distribution scheme since it's implementation creates no database transactions at all. Further, interleaving tasks on the same worker (profile B) does not demonstrate significant benefit to TTS or effective throughput over the non-interleaving setup (profile A) in either of the distribution schemes. A different picture shows when looking at the sustained throughput. In the document-level distribution scheme, we are observing even slightly better-than-linear scaling, which is clearly distinct from the effective throughput.\", 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.075439453125, 387.6934509277344, 563.6383666992188, 552.6748657226562], 'page': 8, 'span': [0, 853], '__ref_s3_data': None}], 'text': 'At first glance, this artifact may seem questionable. However, deeper verification shows two contributing factors to this. The first is owed to small imperfections in the load-balancing of requests to our ML model replicas. The fewer ML model replicas exist, the more pronounced is the impact of an unbalanced distribution of requests to those. Relatively speaking, a larger fraction of requests will be subject to additional waittimes for the response. The second factor is a peculiarity of our worker implementation. To regularly clean up the excess memory allocated (but not used) in the python runtime, worker pods reboot after every 64 completed (document-level) tasks. This causes a delay of approximately 10 seconds each time. In each conversion job, such reboots occur more frequently when fewer workers need to consume more tasks. Therefore, we', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.0782470703125, 73.94544982910156, 563.5233154296875, 126.7979736328125], 'page': 8, 'span': [0, 381], '__ref_s3_data': None}], 'text': 'Fig. 6. Active tasks over job runtime (top) and time schedule in 70 of 834 workers (bottom), using document-level scheme, profile A on 96 nodes. Each red bar marks the runtime of one task, equal to one document. The job completes only 14 minutes after the first worker finds no more work due to few, long documents in the tail. An anomaly around 7 min is caused by worker restarts.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/7'}, {'prov': [{'bbox': [48.542991638183594, 718.9821166992188, 300.4215087890625, 740.6807250976562], 'page': 9, 'span': [0, 69], '__ref_s3_data': None}], 'text': 'see sustained throughput improve overproportionally at higher scales.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.19097900390625, 551.491943359375, 300.4952697753906, 717.0626831054688], 'page': 9, 'span': [0, 812], '__ref_s3_data': None}], 'text': 'The significant difference between sustained and effective throughput in the document-level distribution scheme is clearly explained through the workload imbalance between workers, as shown in figure 6. Moreover, we find that deployment profile B, which exploits in-worker task concurrency, achieves consistently higher sustained throughput than profile A with the same total amount of resources. At the highest scale of 192 nodes, sustained throughput of 296 pages/second is achieved in profile B, compared to 220 pages/second in profile A. In the page-level distribution scheme, effective and sustained throughput remain much closer together and follow similar curves across scale levels. While this indicates better workload balancing, both metrics are equally impacted by the I/O bottleneck described before.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.219970703125, 360.1738586425781, 300.2220458984375, 376.9077453613281], 'page': 9, 'span': [0, 107], '__ref_s3_data': None}], 'text': 'Fig. 7. Measured serial times of operations in the document-le v el pipeline, profile A, across all scales.', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Picture', 'type': 'figure', '$ref': '#/figures/8'}, {'prov': [{'bbox': [48.07781219482422, 204.2110595703125, 300.3043212890625, 345.63861083984375], 'page': 9, 'span': [0, 706], '__ref_s3_data': None}], 'text': 'An important conte xt for the interpretation of the observ ations abov e is pro vided by the serial time, dif ferentiated by processing stage (see figure 7). W e see consistent serial times on every tested scaling le v el in the document pipeline, which confirms that no resource congestion or bandwidth limitation is present. In the page-le v el pipeline (not sho wn), serial times, in particular for upload and mer ge operations, increase noticeably on the lar gest scale. Finally , we clearly recognize that applying ML models is the most time consuming operation, responsible for approximately 76% (page-le v el scheme) to 84% (document-le v el scheme) of the task runtimes in our test conversion job .', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.22081756591797, 184.77928161621094, 95.30005645751953, 193.93328857421875], 'page': 9, 'span': [0, 11], '__ref_s3_data': None}], 'text': 'F. Fairness', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [47.95774459838867, 73.27685546875, 300.39031982421875, 178.79351806640625], 'page': 9, 'span': [0, 536], '__ref_s3_data': None}], 'text': 'To understand both ho w f ast and ho w f air our service handles multiple concurrent con v ersion jobs, we analyze an extreme case. While saturating our service with the con version of our benchmark dataset, we submit a second con version job with a single a v erage-length document (15 pages) one, two, and three minutes later . W e measure the TTS of the single-document job repeatedly and compare it to the TTS of the same job submitted on an idle sys tem. This e xperiment is carried out at a scale of 48 nodes and repeated for both', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [325.976318359375, 713.4354858398438, 548.9337768554688, 730.4822387695312], 'page': 9, 'span': [0, 113], '__ref_s3_data': None}], 'text': 'TTS for a 15-page document in idle and busy system states. Values represent mean ± standard deviation in seconds.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [420.9889831542969, 731.3684692382812, 454.0250244140625, 738.4937744140625], 'page': 9, 'span': [0, 8], '__ref_s3_data': None}], 'text': 'TABLE II', 'type': 'caption', 'name': 'Caption', 'font': None}, {'name': 'Table', 'type': 'table', '$ref': '#/tables/1'}, {'prov': [{'bbox': [311.104248046875, 573.2300415039062, 563.035400390625, 594.8715209960938], 'page': 9, 'span': [0, 81], '__ref_s3_data': None}], 'text': 'deployment profiles and task distribution schemes. Results are shown in table II.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.1533508300781, 496.09405517578125, 563.3656616210938, 565.8314208984375], 'page': 9, 'span': [0, 295], '__ref_s3_data': None}], 'text': 'The single document converts with a reproducible TTS of 33s (document-level scheme) or 26s (page-level scheme). On a busy system, this increases by a factor of 3.5 (documentlevel scheme) or 7.5 (page-level scheme) on average, with a substantial standard deviation between 30% and 45% of the TTS.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.07275390625, 371.1371765136719, 563.5538330078125, 488.30364990234375], 'page': 9, 'span': [0, 609], '__ref_s3_data': None}], 'text': 'One can draw multiple conclusions from these results. First, we see good evidence that our strategy to keep the length of the task queue short (see section III-B) pays off. Concurrent conversion workloads of very different volume are processed in a reasonably fair manner, all while avoiding the complexity of job priorities or separate queues. Still, the TTS on a busy system is significantly higher in the page-level distribution scheme, since the single-document conversion job produces a total of 12 tasks, which pass through the task queue, compared to only one in the document-level distribution scheme.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.04754638671875, 138.58425903320312, 563.3732299804688, 363.76458740234375], 'page': 9, 'span': [0, 1077], '__ref_s3_data': None}], 'text': 'Second, we find that the page-level distribution scheme on this 15-page document yields 20% lower TTS (1.25x speedup) than the document-level scheme in an idle system. Disregarding all non-parallelizable operations (upload, merge, and export), the theoretical speedup would be bounded at 4x for 15 pages, because we chose to configure our system to create tasks for batches of up to four pages. Dynamically deciding the optimum page-batch size based on the page count could improve this aspect. In reality, we must consider two factors: On one hand, profiling the page-level distribution scheme reveals that approximately one quarter of the total conversion job run-time is spent in the non-parallelizable operations for this document. On the other hand, the pagelevel distribution pays a high price on additional I/O, as shown earlier. In the observed case, it requires 12 distinct store and retrieve operations, while the document-level scheme requires only two. As such, TTS in ad-hoc conversion can profit from the page-level distribution scheme only with longer documents.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [311.07318115234375, 73.40324401855469, 563.1641845703125, 130.89666748046875], 'page': 9, 'span': [0, 244], '__ref_s3_data': None}], 'text': 'Third, we find that the deployment profile (A or B) has no relevant impact on the measurements above. Processing 15 pages only utilizes a fraction of the available worker and ML model replicas here, which explains why no difference is observed.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [135.48716735839844, 730.9381103515625, 212.7260284423828, 740.87451171875], 'page': 10, 'span': [0, 14], '__ref_s3_data': None}], 'text': 'V. CONCLUSIONS', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [48.13857650756836, 618.2142333984375, 300.3543701171875, 723.6151733398438], 'page': 10, 'span': [0, 497], '__ref_s3_data': None}], 'text': 'We have carefully established a scalable cloud service design for the task of document conversion and presented the impact of different workload distribution schemes and implementation options on both absolute speed and scaling behavior. With the best-performing setup, we achieve a sustained conversion throughput scaling linearly with the resource budget up to 192 nodes (equal to 3072 CPU cores and 3072 GB of memory). In practice, this allows us to convert over one million PDF pages per hour.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.06001281738281, 498.42889404296875, 300.3832702636719, 615.6994018554688], 'page': 10, 'span': [0, 564], '__ref_s3_data': None}], 'text': 'An important lesson we learned is that distributing the workload more evenly at a page-level cannot compensate for the excess of I/O expenses and synchronization need it creates over document-level distribution. In terms of sustainable throughput, it ultimately steers into a scaling bottleneck. More efficient intermediate data storage and locality may push this bottleneck further up the scale, but it will eventually prevail. We find good potential in using page-level distribution, however, to achieve short response time in ad-hoc conversion of few documents.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.03425979614258, 330.3664855957031, 300.15289306640625, 495.8798522949219], 'page': 10, 'span': [0, 817], '__ref_s3_data': None}], 'text': 'To drive a production-grade deployment of our conversion service, we need to consider some important differences to the benchmark setup presented here. For cost reasons, it is highly advisable to rely on automatic scaling mechanisms. The ML model microservices can be easily transferred to a managed platform-as-a-service where the replicas can be dynamically scaled according to the request load without preallocating cluster infrastructure (e.g., Google App Engine$^{18}$, IBM Cloud Code Engine$^{19}$, or Amazon ECS$^{20}$). Additionally, worker pods and even cluster nodes may be automatically added and removed based on the length of the task queue. In deployments for open audiences, we enforce strict timeouts on tasks to ensure that very heavy or even poisonous PDF files are not locking up resources forever.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [47.99211883544922, 139.13909912109375, 300.3812255859375, 328.5460510253906], 'page': 10, 'span': [0, 923], '__ref_s3_data': None}], 'text': 'The investment of implementing all pipeline logic in asynchronous co-routines and developing a task distribution library which works natively within an event-loop has proven to be worthwhile. Distributing and executing code with dynamic subtasks and dependencies becomes very cheap and it helps to achieve fairness in multi-tenant usage with little effort and complexity. Additionally, it allows to write idiomatic code. It should be noted however that the efficiency advantage of interleaving tasks as proposed here depends significantly both on the amount of opportunity to avoid blocking I/O and on the proportion of compute-bound code executing in the workers. Externalizing the ML models as web-services has proven to be a sensible choice in this regard. Considering the large fraction of total compute-time spent in ML inference, investing effort into cheaper ML models will remain a top priority in our ongoing work.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [48.339088439941406, 114.763427734375, 300.40673828125, 136.94744873046875], 'page': 10, 'span': [0, 119], '__ref_s3_data': None}], 'text': 'In the landscape of data-driven business, several applications share important properties with document conversion. One', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [56.891944885253906, 92.89056396484375, 177.87632751464844, 102.00689697265625], 'page': 10, 'span': [0, 41], '__ref_s3_data': None}], 'text': '$^{18}$https://cloud.google.com/appengine', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.821067810058594, 83.01531982421875, 193.50592041015625, 91.6480712890625], 'page': 10, 'span': [0, 44], '__ref_s3_data': None}], 'text': '$^{19}$https://www.ibm.com/cloud/code-engine', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [56.264488220214844, 73.61920166015625, 152.8022003173828, 81.8521728515625], 'page': 10, 'span': [0, 33], '__ref_s3_data': None}], 'text': '$^{20}$https://aws.amazon.com/ecs', 'type': 'footnote', 'name': 'Footnote', 'font': None}, {'prov': [{'bbox': [310.8520812988281, 599.430908203125, 563.4625854492188, 740.8935546875], 'page': 10, 'span': [0, 671], '__ref_s3_data': None}], 'text': 'such case is automated knowledge-base construction, where several data processing pipelines have been developed for extraction, normalization, and analysis of knowledge [26], often targeting specific domains like material sciences, geology, or biomedicine [27]-[31]. They commonly process complex or unstructured input data in bulk (e.g., literature, experiment reports, and instrument data), employ machine-learning (e.g., language understanding), and often require complex dynamic pipelines. As such, the insights presented and conclusions drawn in this paper would be of value for the design and validation of future work on scalable processing pipelines in the cloud.', 'type': 'paragraph', 'name': 'Text', 'font': None}, {'prov': [{'bbox': [409.0566101074219, 577.389892578125, 465.4123840332031, 586.37548828125], 'page': 10, 'span': [0, 10], '__ref_s3_data': None}], 'text': 'REFERENCES', 'type': 'subtitle-level-1', 'name': 'Section-header', 'font': None}, {'prov': [{'bbox': [315.4861145019531, 515.8212890625, 563.2164306640625, 569.1727905273438], 'page': 10, 'span': [0, 364], '__ref_s3_data': None}], 'text': '- [1] C. Gopal, C. L. Marshall, D. Vesset, N. Ward-Dutton, J. Hamel, R. Jyoti, P. Rutten, C. W. Olofson, J. Rydning, S. Rau, and J. Duke, \"IDC FutureScape: Worldwide future of intelligence 2022 predictions,\" International Data Group, Inc., Needham, MA, Research Report US47913321, Oct. 2021. [Online]. Available: https://www.idc.com/getdoc.jsp?containerId=US47913321', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.63177490234375, 470.57928466796875, 563.3629150390625, 515.1875610351562], 'page': 10, 'span': [0, 285], '__ref_s3_data': None}], 'text': '- [2] D. Vile, \"The road to becoming a data driven business,\" Freeform Dynamics Ltd., New Milton, United Kingdom, Research Report US47913321, Nov. 2020. [Online]. Available: https://www.freeformdynamics.com/wp-content/uploads/2020/11/ 2020-The road to becoming a data driven business.pdf', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.6318664550781, 452.4910888671875, 563.1107177734375, 470.129638671875], 'page': 10, 'span': [0, 119], '__ref_s3_data': None}], 'text': '- [3] M. Aslett and N. Patience, \"Data platforms market map 2021,\" S&P Global Market Intelligence, Tech. Rep., Sep. 2021.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.5053405761719, 416.533447265625, 563.2227172851562, 451.75634765625], 'page': 10, 'span': [0, 231], '__ref_s3_data': None}], 'text': '- [4] G. Aggarwal. (2021, Jan.) How the pandemic has accelerated cloud adoption. Forbes. Jersey City, NJ. [Online]. Available: https://www.forbes.com/sites/forbestechcouncil/2021/01/15/ how-the-pandemic-has-accelerated-cloud-adoption', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.3817443847656, 389.4144287109375, 563.0360717773438, 415.70733642578125], 'page': 10, 'span': [0, 200], '__ref_s3_data': None}], 'text': '- [5] \"Enterprise survey series: DevOps and the cloud,\" Evans Data Corporation, Santa Cruz, CA, Research Report, Aug. 2021. [Online]. Available: https://evansdata.com/reports/viewRelease.php?reportID=45', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.73175048828125, 361.80242919921875, 563.03662109375, 388.3616027832031], 'page': 10, 'span': [0, 179], '__ref_s3_data': None}], 'text': \"- [6] J. Arundel and J. Domingus, Cloud Native DevOps with Kubernetes: Building, Deploying, and Scaling Modern Applications in the Cloud . Sebastopol, CA: O'Reilly Media, Apr. 2019.\", 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.62811279296875, 335.11053466796875, 563.2806396484375, 360.9382629394531], 'page': 10, 'span': [0, 175], '__ref_s3_data': None}], 'text': '- [7] H. Lin, P. Yang, and F. Zhang, \"Review of scene text detection and recognition,\" Archives of computational methods in engineering , vol. 27, no. 2, pp. 433-454, Apr. 2020.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.67388916015625, 289.9249267578125, 563.1982421875, 334.34613037109375], 'page': 10, 'span': [0, 330], '__ref_s3_data': None}], 'text': '- [8] Y. Xu, M. Li, L. Cui, S. Huang, F. Wei, and M. Zhou, \"Layoutlm: Pre-training of text and layout for document image understanding,\" in Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining , Aug. 2020, pp. 1192-1200. [Online]. Available: https://dl.acm.org/doi/10.1145/3394486.3403172', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [315.701904296875, 244.821533203125, 563.0390014648438, 289.1856994628906], 'page': 10, 'span': [0, 311], '__ref_s3_data': None}], 'text': '- [9] B. Pfitzmann, C. Auer, M. Dolfi, A. Nassar, and P. W. Staar, \"Doclaynet: A large human-annotated dataset for document-layout analysis,\" in Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery & Data Mining , 2022, to be published. [Online]. Available: https://doi.org/10.1145/3534678.3539043', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [311.4954833984375, 190.67242431640625, 563.2008666992188, 243.8887939453125], 'page': 10, 'span': [0, 378], '__ref_s3_data': None}], 'text': '- [10] N. Livathinos, C. Berrospi, M. Lysak, V. Kuropiatnyk, A. Nassar, A. Carvalho, M. Dolfi, C. Auer, K. Dinkla, and P. Staar, \"Robust pdf document conversion using recurrent neural networks,\" Proceedings of the AAAI Conference on Artificial Intelligence , vol. 35, no. 17, pp. 15 137-15 145, May 2021. [Online]. Available: https://ojs.aaai.org/index.php/AAAI/article/view/17777', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [311.4048767089844, 146.0043182373047, 563.1834106445312, 189.85186767578125], 'page': 10, 'span': [0, 297], '__ref_s3_data': None}], 'text': '- [11] X. Zheng, D. Burdick, L. Popa, X. Zhong, and N. X. R. Wang, \"Global table extractor (gte): A framework for joint table identification and cell structure recognition using visual context,\" in Proceedings of the IEEE/CVF winter conference on applications of computer vision , 2021, pp. 697-706.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [311.75091552734375, 109.6461181640625, 563.2018432617188, 144.9952392578125], 'page': 10, 'span': [0, 255], '__ref_s3_data': None}], 'text': '- [12] A. Nassar, N. Livathinos, M. Lysak, and P. Staar, \"Tableformer: Table structure understanding with transformers,\" IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) , Jun. 2022. [Online]. Available: https://arxiv.org/abs/2203.01017', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [311.4164733886719, 73.83430480957031, 564.18408203125, 108.98297119140625], 'page': 10, 'span': [0, 223], '__ref_s3_data': None}], 'text': '- [13] N. Siegel, N. Lourie, R. Power, and W. Ammar, \"Extracting scientific figures with distantly supervised neural networks,\" in Proceedings of the 18th ACM/IEEE on joint conference on digital libraries , 2018, pp. 223-232.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.361778259277344, 713.4354858398438, 300.5360412597656, 739.5120849609375], 'page': 11, 'span': [0, 192], '__ref_s3_data': None}], 'text': '- [14] D. Duma, M. Liakata, A. Clare, J. Ravenscroft, and E. Klein, \"Rhetorical classification of anchor text for citation recommendation,\" D-Lib Magazine , vol. 22, no. 9/10, pp. 10-1045, 2016.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.49642562866211, 659.49267578125, 300.3289794921875, 712.3699340820312], 'page': 11, 'span': [0, 396], '__ref_s3_data': None}], 'text': '- [15] P. W. J. Staar, M. Dolfi, C. Auer, and C. Bekas, \"Corpus conversion service: A machine learning platform to ingest documents at scale,\" in Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining , ser. KDD \\'18. New York, NY, USA: Association for Computing Machinery, Jul. 2018, p. 774-782. [Online]. Available: https://doi.org/10.1145/3219819.3219834', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.4224853515625, 632.6595458984375, 300.2565612792969, 658.837890625], 'page': 11, 'span': [0, 157], '__ref_s3_data': None}], 'text': '- [16] G. M. Binmakhashen and S. A. Mahmoud, \"Document layout analysis: a comprehensive survey,\" ACM Computing Surveys (CSUR) , vol. 52, no. 6, pp. 1-36, 2019.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.28340530395508, 614.7494506835938, 300.21734619140625, 631.591064453125], 'page': 11, 'span': [0, 143], '__ref_s3_data': None}], 'text': '- [17] (2021, Dec.) Top computer languages. StatisticsTimes.com. [Online]. Available: https://statisticstimes.com/tech/top-computer-languages.php', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.29648208618164, 577.9435424804688, 300.60833740234375, 613.808349609375], 'page': 11, 'span': [0, 227], '__ref_s3_data': None}], 'text': \"- [18] V. Kumar. (2019, Sep.) Python vs R: What's best for machine learning. Towards Data Science Inc. Toronto, Canada. [Online]. Available: https://towardsdatascience.com/ python-vs-r-whats-best-for-machine-learning-93432084b480\", 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.440486907958984, 551.7584228515625, 300.3661193847656, 577.9423217773438], 'page': 11, 'span': [0, 175], '__ref_s3_data': None}], 'text': '- [19] G. Aggarwal. (2021) The state of developer ecosystem 2021. JetBrains. Prague, Czech Republic. [Online]. Available: https://www.jetbrains. com/lp/devecosystem-2021/python/', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.526912689208984, 525.1416015625, 300.47991943359375, 550.9553833007812], 'page': 11, 'span': [0, 197], '__ref_s3_data': None}], 'text': '- [20] M. Zaharia, M. Chowdhury, M. J. Franklin, S. Shenker, and I. Stoica, \"Spark: Cluster computing with working sets,\" in 2nd USENIX Workshop on Hot Topics in Cloud Computing (HotCloud 10) , 2010.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.384796142578125, 498.01690673828125, 300.4748840332031, 524.2509765625], 'page': 11, 'span': [0, 180], '__ref_s3_data': None}], 'text': '- [21] (2022) About openshift serverless. Red Hat, Inc. Raleigh, NC. [Online]. Available: https://docs.openshift.com/container-platform/4.8/serverless/ discover/about-serverless.html', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.64189147949219, 480.0333557128906, 300.0221862792969, 496.8435363769531], 'page': 11, 'span': [0, 140], '__ref_s3_data': None}], 'text': '- [22] D. Garcia. (2017, Mar.) aiotasks. Next Technology Professionals. Warsaw, Poland. [Online]. Available: https://github.com/cr0hn/aiotasks', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.587677001953125, 462.358642578125, 300.02215576171875, 479.4700012207031], 'page': 11, 'span': [0, 120], '__ref_s3_data': None}], 'text': '- [23] A. Kovalevich. (2020, May) Celery pool asyncio. [Online]. Available: https://github.com/kai3341/celery-pool-asyncio', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.62297058105469, 444.0994567871094, 300.0257263183594, 461.73748779296875], 'page': 11, 'span': [0, 101], '__ref_s3_data': None}], 'text': '- [24] D. Beazley, \"Understanding the python gil,\" in PyCON Python Conference. Atlanta, Georgia , 2010.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.359004974365234, 417.5455627441406, 300.7257385253906, 443.3598937988281], 'page': 11, 'span': [0, 158], '__ref_s3_data': None}], 'text': '- [25] G. Aggarwal. (2021, Jul.) Detectron2 model zoo and baselines. [Online]. Available: https://github.com/facebookresearch/detectron2/ blob/main/MODEL ZOO.md', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.410465240478516, 390.0207824707031, 300.456298828125, 416.18792724609375], 'page': 11, 'span': [0, 196], '__ref_s3_data': None}], 'text': '- [26] P. W. Staar, M. Dolfi, and C. Auer, \"Corpus processing service: A knowledge graph platform to perform deep data exploration on corpora,\" Applied AI Letters , vol. 1, no. 2, p. e20, Dec. 2020.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.504295349121094, 345.8144226074219, 300.5445556640625, 389.45355224609375], 'page': 11, 'span': [0, 314], '__ref_s3_data': None}], 'text': '- [27] T. J. Jacobsson, A. Hultqvist, A. Garc\\'ıa-Fern\\'andez, A. Anand, A. AlAshouri, A. Hagfeldt, A. Crovetto, A. Abate, A. G. Ricciardulli, A. Vijayan et al. , \"An open-access database and analysis tool for perovskite solar cells based on the FAIR data principles,\" Nature Energy , vol. 7, no. 1, pp. 107-115, 2022.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.52201461791992, 309.53143310546875, 300.3795166015625, 344.7828063964844], 'page': 11, 'span': [0, 298], '__ref_s3_data': None}], 'text': '- [28] E. O. Pyzer-Knapp, J. W. Pitera, P. W. Staar, S. Takeda, T. Laino, D. P. Sanders, J. Sexton, J. R. Smith, and A. Curioni, \"Accelerating materials discovery using artificial intelligence, high performance computing and robotics,\" npj Computational Materials , vol. 8, no. 1, pp. 1-9, Apr. 2022.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.547607421875, 274.017822265625, 300.5572814941406, 308.9217224121094], 'page': 11, 'span': [0, 261], '__ref_s3_data': None}], 'text': '- [29] M. Piantanida, E. Bonamini, C. Caborni, F. Bergero, P. Staar, M. Dolfi, C. Auer, and V. Saturnino, \"Using knowledge graphs to navigate through geological concepts extracted from documents,\" in OMC Med Energy Conference and Exhibition . OnePetro, Sep. 2021.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.598052978515625, 238.21734619140625, 300.70361328125, 273.0455322265625], 'page': 11, 'span': [0, 231], '__ref_s3_data': None}], 'text': '- [30] V. D. Badal, D. Wright, Y. Katsis, H.-C. Kim, A. D. Swafford, R. Knight, and C.-N. Hsu, \"Challenges in the construction of knowledge bases for human microbiome-disease associations,\" Microbiome , vol. 7, no. 1, pp. 1-15, 2019.', 'type': 'paragraph', 'name': 'List-item', 'font': None}, {'prov': [{'bbox': [48.57107162475586, 193.02166748046875, 300.49127197265625, 237.1055908203125], 'page': 11, 'span': [0, 321], '__ref_s3_data': None}], 'text': '- [31] M. Manica, C. Auer, V. Weber, F. Zipoli, M. Dolfi, P. W. J. Staar, T. Laino, C. Bekas, A. Fujita, H. Toda, S. Hirose, and Y. Orii, \"An information extraction and knowledge graph platform for accelerating biochemical discoveries,\" CoRR , vol. abs/1907.08400, 2019. [Online]. Available: http://arxiv.org/abs/1907.08400', 'type': 'paragraph', 'name': 'List-item', 'font': None}], 'figures': [{'prov': [{'bbox': [50.88604736328125, 558.77099609375, 561.7911376953125, 742.2131958007812], 'page': 2, 'span': [0, 78], '__ref_s3_data': None}], 'text': 'Fig. 1. Sketch of operation dependency graph in a document conversion pipeline', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [48.31047821044922, 502.1199951171875, 299.5975341796875, 643.0848388671875], 'page': 4, 'span': [0, 510], '__ref_s3_data': None}], 'text': 'Fig. 2. Architecture diagram of our conversion service. User requests for document conversion are handled by a REST API service, which can dispatch workloads asynchronously to the compute infrastructure through a queueing mechanism. Workers pick up queued tasks from a message broker and store the results for later retrieval on a document database and cloud object storage. The ML models are served through separate microservices, which are consumed by workers when executing the document conversion pipeline.', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [47.52158737182617, 404.80792236328125, 300.072998046875, 710.0579223632812], 'page': 5, 'span': [0, 395], '__ref_s3_data': None}], 'text': 'Fig. 3. Sketch of workload distribution schemes on the document-level (top) and page-level (bottom). A conversion job is submitted at time t$_{0}$. Tasks are produced and consumed by the workers through the task queue. The queue drains at time t$_{d}$. Sustained throughput is upheld until the first worker finds no more work (t$_{w}$). The job only finishes after completion of all tasks (TTS).', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [61.860626220703125, 431.9028015136719, 288.02362060546875, 679.3151245117188], 'page': 7, 'span': [0, 44], '__ref_s3_data': None}], 'text': 'Fig. 4. Characteristics of the test dataset.', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [48.7349739074707, 604.4910278320312, 214.92897033691406, 741.4573974609375], 'page': 8, 'span': [0, 0], '__ref_s3_data': None}], 'text': '', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [220.35333251953125, 604.5574951171875, 384.72698974609375, 741.0494384765625], 'page': 8, 'span': [0, 0], '__ref_s3_data': None}], 'text': '', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [391.38787841796875, 604.5574951171875, 556.16259765625, 740.4262084960938], 'page': 8, 'span': [0, 261], '__ref_s3_data': None}], 'text': 'Fig. 5. Scaling of time-to-solution (A), effective throughput and sustained throughput on document-level distribution scheme (B), page-level distribution scheme (C) in both deployment profiles with node count. Gray diagonals indicate theoretical linear scaling.', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [338.3061218261719, 138.53965759277344, 535.2787475585938, 364.2861328125], 'page': 8, 'span': [0, 381], '__ref_s3_data': None}], 'text': 'Fig. 6. Active tasks over job runtime (top) and time schedule in 70 of 834 workers (bottom), using document-level scheme, profile A on 96 nodes. Each red bar marks the runtime of one task, equal to one document. The job completes only 14 minutes after the first worker finds no more work due to few, long documents in the tail. An anomaly around 7 min is caused by worker restarts.', 'type': 'figure', 'bounding-box': None}, {'prov': [{'bbox': [62.99921798706055, 389.0814514160156, 281.9828796386719, 538.5746459960938], 'page': 9, 'span': [0, 107], '__ref_s3_data': None}], 'text': 'Fig. 7. Measured serial times of operations in the document-le v el pipeline, profile A, across all scales.', 'type': 'figure', 'bounding-box': None}], 'tables': [{'prov': [{'bbox': [339.1385803222656, 624.9138793945312, 523.4959716796875, 703.262939453125], 'page': 7, 'span': [0, 0], '__ref_s3_data': None}], 'text': 'TABLE I Typical resource usage of workers and ML models under load in deployment profiles A and B.', 'type': 'table', '#-cols': 3, '#-rows': 6, 'data': [[{'bbox': None, 'spans': [[0, 0]], 'text': '', 'type': 'body', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 0, 'row-header': False, 'row-span': [0, 1]}, {'bbox': [461.5480041503906, 694.345458984375, 496.9671325683594, 701.4707641601562], 'spans': [[0, 1], [0, 2]], 'text': 'component', 'type': 'col_header', 'col': 1, 'col-header': True, 'col-span': [1, 3], 'row': 0, 'row-header': False, 'row-span': [0, 1]}, {'bbox': [461.5480041503906, 694.345458984375, 496.9671325683594, 701.4707641601562], 'spans': [[0, 1], [0, 2]], 'text': 'component', 'type': 'col_header', 'col': 2, 'col-header': True, 'col-span': [1, 3], 'row': 0, 'row-header': False, 'row-span': [0, 1]}], [{'bbox': None, 'spans': [[1, 0]], 'text': '', 'type': 'body', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 1, 'row-header': False, 'row-span': [1, 2]}, {'bbox': [441.1610107421875, 684.482421875, 463.57293701171875, 691.6077270507812], 'spans': [[1, 1]], 'text': 'worker', 'type': 'col_header', 'col': 1, 'col-header': True, 'col-span': [1, 2], 'row': 1, 'row-header': False, 'row-span': [1, 2]}, {'bbox': [482.68524169921875, 684.482421875, 517.3551635742188, 691.6077270507812], 'spans': [[1, 2]], 'text': 'ML model', 'type': 'col_header', 'col': 2, 'col-header': True, 'col-span': [2, 3], 'row': 1, 'row-header': False, 'row-span': [1, 2]}], [{'bbox': [387.4590148925781, 664.7554931640625, 414.9080505371094, 681.7437133789062], 'spans': [[2, 0]], 'text': 'Memory CPU', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 2, 'row-header': True, 'row-span': [2, 3]}, {'bbox': [441.1610107421875, 664.7554321289062, 470.7300720214844, 681.7437744140625], 'spans': [[2, 1]], 'text': '450 MB 0.4 cores', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 2, 'row-header': False, 'row-span': [2, 3]}, {'bbox': [482.6852111816406, 664.7554321289062, 512.2542724609375, 681.7437744140625], 'spans': [[2, 2]], 'text': '500 MB 0.7 cores', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 2, 'row-header': False, 'row-span': [2, 3]}], [{'bbox': [387.4590148925781, 654.8924560546875, 429.2063903808594, 662.0177612304688], 'spans': [[3, 0]], 'text': 'Replica ratio', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 3, 'row-header': True, 'row-span': [3, 4]}, {'bbox': [441.1610107421875, 654.8924560546875, 445.14605712890625, 662.0177612304688], 'spans': [[3, 1]], 'text': '1', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 3, 'row-header': False, 'row-span': [3, 4]}, {'bbox': [482.68524169921875, 654.8924560546875, 486.6702880859375, 662.0177612304688], 'spans': [[3, 2]], 'text': '1', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 3, 'row-header': False, 'row-span': [3, 4]}], [{'bbox': [387.4590148925781, 635.1664428710938, 414.9080505371094, 652.1547241210938], 'spans': [[4, 0]], 'text': 'Memory CPU', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 4, 'row-header': True, 'row-span': [4, 5]}, {'bbox': [441.1610107421875, 635.1664428710938, 470.7300720214844, 652.1547241210938], 'spans': [[4, 1]], 'text': '700 MB 1.2 cores', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 4, 'row-header': False, 'row-span': [4, 5]}, {'bbox': [482.6852111816406, 635.1664428710938, 512.2542724609375, 652.1547241210938], 'spans': [[4, 2]], 'text': '500 MB 0.7 cores', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 4, 'row-header': False, 'row-span': [4, 5]}], [{'bbox': [387.4590148925781, 625.303466796875, 429.2063903808594, 632.4287719726562], 'spans': [[5, 0]], 'text': 'Replica ratio', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 5, 'row-header': True, 'row-span': [5, 6]}, {'bbox': [441.1610107421875, 625.303466796875, 445.14605712890625, 632.4287719726562], 'spans': [[5, 1]], 'text': '1', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 5, 'row-header': False, 'row-span': [5, 6]}, {'bbox': [482.68524169921875, 625.303466796875, 486.6702880859375, 632.4287719726562], 'spans': [[5, 2]], 'text': '4', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 5, 'row-header': False, 'row-span': [5, 6]}]], 'model': None, 'bounding-box': None}, {'prov': [{'bbox': [337.73248291015625, 632.7647094726562, 537.3443603515625, 700.9937744140625], 'page': 9, 'span': [0, 0], '__ref_s3_data': None}], 'text': 'TABLE II', 'type': 'table', '#-cols': 4, '#-rows': 5, 'data': [[{'bbox': None, 'spans': [[0, 0]], 'text': '', 'type': 'body', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 0, 'row-header': False, 'row-span': [0, 1]}, {'bbox': None, 'spans': [[0, 1]], 'text': '', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 0, 'row-header': False, 'row-span': [0, 1]}, {'bbox': [428.04998779296875, 681.4334716796875, 511.2825622558594, 700.2147827148438], 'spans': [[0, 2]], 'text': 'distribution scheme document-level', 'type': 'col_header', 'col': 2, 'col-header': True, 'col-span': [2, 3], 'row': 0, 'row-header': False, 'row-span': [0, 1]}, {'bbox': [489.26800537109375, 681.4334716796875, 522.1445922851562, 688.5587768554688], 'spans': [[0, 3]], 'text': 'page-level', 'type': 'col_header', 'col': 3, 'col-header': True, 'col-span': [3, 4], 'row': 0, 'row-header': False, 'row-span': [0, 1]}], [{'bbox': [343.7909851074219, 681.4334716796875, 364.6009216308594, 688.5587768554688], 'spans': [[1, 0]], 'text': 'profile', 'type': 'body', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 1, 'row-header': False, 'row-span': [1, 2]}, {'bbox': [376.5559997558594, 669.37841796875, 416.09564208984375, 688.5587768554688], 'spans': [[1, 1]], 'text': 'system state idle', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 1, 'row-header': False, 'row-span': [1, 2]}, {'bbox': [428.04998779296875, 669.37841796875, 462.0344543457031, 676.5037231445312], 'spans': [[1, 2]], 'text': '32.6 ± 1.1', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 1, 'row-header': False, 'row-span': [1, 2]}, {'bbox': [489.26800537109375, 669.37841796875, 523.2525024414062, 676.5037231445312], 'spans': [[1, 3]], 'text': '26.3 ± 0.9', 'type': 'body', 'col': 3, 'col-header': False, 'col-span': [3, 4], 'row': 1, 'row-header': False, 'row-span': [1, 2]}], [{'bbox': [351.3190002441406, 664.0884399414062, 357.07342529296875, 671.2137451171875], 'spans': [[2, 0]], 'text': 'A', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 2, 'row-header': True, 'row-span': [2, 3]}, {'bbox': [376.5559997558594, 657.722412109375, 391.4521179199219, 664.8477172851562], 'spans': [[2, 1]], 'text': 'busy', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 2, 'row-header': False, 'row-span': [2, 3]}, {'bbox': [428.04998779296875, 657.722412109375, 470.00457763671875, 664.8477172851562], 'spans': [[2, 2]], 'text': '114.9 ± 17.5', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 2, 'row-header': False, 'row-span': [2, 3]}, {'bbox': [489.26800537109375, 657.722412109375, 531.22265625, 664.8477172851562], 'spans': [[2, 3]], 'text': '248.1 ± 17.3', 'type': 'body', 'col': 3, 'col-header': False, 'col-span': [3, 4], 'row': 2, 'row-header': False, 'row-span': [2, 3]}], [{'bbox': [351.5379943847656, 640.37744140625, 356.85406494140625, 647.5027465820312], 'spans': [[3, 0], [4, 0]], 'text': 'B', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 3, 'row-header': True, 'row-span': [3, 5]}, {'bbox': [376.5559997558594, 645.6674194335938, 388.5111389160156, 652.792724609375], 'spans': [[3, 1]], 'text': 'idle', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 3, 'row-header': False, 'row-span': [3, 4]}, {'bbox': [428.04998779296875, 645.6674194335938, 462.0344543457031, 652.792724609375], 'spans': [[3, 2]], 'text': '32.6 ± 0.2', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 3, 'row-header': False, 'row-span': [3, 4]}, {'bbox': [489.26800537109375, 645.6674194335938, 523.2525024414062, 652.792724609375], 'spans': [[3, 3]], 'text': '25.7 ± 0.7', 'type': 'body', 'col': 3, 'col-header': False, 'col-span': [3, 4], 'row': 3, 'row-header': False, 'row-span': [3, 4]}], [{'bbox': [351.5379943847656, 640.37744140625, 356.85406494140625, 647.5027465820312], 'spans': [[3, 0], [4, 0]], 'text': 'B', 'type': 'row_header', 'col': 0, 'col-header': False, 'col-span': [0, 1], 'row': 4, 'row-header': True, 'row-span': [3, 5]}, {'bbox': [376.5559997558594, 634.0114135742188, 391.4521179199219, 641.13671875], 'spans': [[4, 1]], 'text': 'busy', 'type': 'body', 'col': 1, 'col-header': False, 'col-span': [1, 2], 'row': 4, 'row-header': False, 'row-span': [4, 5]}, {'bbox': [428.04998779296875, 634.0114135742188, 470.00457763671875, 641.13671875], 'spans': [[4, 2]], 'text': '109.6 ± 47.7', 'type': 'body', 'col': 2, 'col-header': False, 'col-span': [2, 3], 'row': 4, 'row-header': False, 'row-span': [4, 5]}, {'bbox': [489.26800537109375, 634.0114135742188, 531.22265625, 641.13671875], 'spans': [[4, 3]], 'text': '220.4 ± 34.2', 'type': 'body', 'col': 3, 'col-header': False, 'col-span': [3, 4], 'row': 4, 'row-header': False, 'row-span': [4, 5]}]], 'model': None, 'bounding-box': None}], 'bitmaps': None, 'equations': [], 'footnotes': [], 'page-dimensions': [{'height': 792.0, 'page': 1, 'width': 612.0}, {'height': 792.0, 'page': 2, 'width': 612.0}, {'height': 792.0, 'page': 3, 'width': 612.0}, {'height': 792.0, 'page': 4, 'width': 612.0}, {'height': 792.0, 'page': 5, 'width': 612.0}, {'height': 792.0, 'page': 6, 'width': 612.0}, {'height': 792.0, 'page': 7, 'width': 612.0}, {'height': 792.0, 'page': 8, 'width': 612.0}, {'height': 792.0, 'page': 9, 'width': 612.0}, {'height': 792.0, 'page': 10, 'width': 612.0}, {'height': 792.0, 'page': 11, 'width': 612.0}], 'page-footers': [], 'page-headers': [], '_s3_data': {'pdf-pages': [], 'pdf-images': [{'mime': 'application/png', 'path': 'PDFImages/2a300d05af346f00bf424abc993bf4e09513666576197c92e57de30873c9133c.png', 'page': 1, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/2a300d05af346f00bf424abc993bf4e09513666576197c92e57de30873c9133c.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=ed857506c3efbc32f1aba9893c340ac9906d202b5fc831ca8017fe9572ee7340'}, {'mime': 'application/png', 'path': 'PDFImages/ee955828d2a26c15cef8f022cd482985df9ab6d906243bcf1e3af729e43b5661.png', 'page': 2, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/ee955828d2a26c15cef8f022cd482985df9ab6d906243bcf1e3af729e43b5661.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=024434fb4e0c44fcd199b2766375b0790c6968bfb710632b6e05a02acdfc2704'}, {'mime': 'application/png', 'path': 'PDFImages/a49ebf5cfb15672e98271aee72636d1e041710bfe352320b146f560ff02aacdb.png', 'page': 3, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/a49ebf5cfb15672e98271aee72636d1e041710bfe352320b146f560ff02aacdb.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1b9f5e0eec14e4064046c030374d46da4a48ed4bb7f557f683f3c14a82d20053'}, {'mime': 'application/png', 'path': 'PDFImages/0e57f7ffa2a2d3eaedd1502f106a14f81a19091ca2460be698c5d04a4edf71f9.png', 'page': 4, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/0e57f7ffa2a2d3eaedd1502f106a14f81a19091ca2460be698c5d04a4edf71f9.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=191c3a08578b0900b922625bcb1ec32a54fb8682fa14baf2fcc69f1768dcf7a6'}, {'mime': 'application/png', 'path': 'PDFImages/6c93ed8b4b868881037950c521ba93bbd8ff677ac55ee5a1c05cf6a9346fcb17.png', 'page': 5, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/6c93ed8b4b868881037950c521ba93bbd8ff677ac55ee5a1c05cf6a9346fcb17.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6560faa0bf0e256b0808be2d9d89f21aebd5f67919ab86c0f8698548e5e87c22'}, {'mime': 'application/png', 'path': 'PDFImages/e44ae6fd182bf2abbec705340aaff0e29de664cfd7790828894404010ab63ce2.png', 'page': 6, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/e44ae6fd182bf2abbec705340aaff0e29de664cfd7790828894404010ab63ce2.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=01e923aebe7854f24c2e1967aedbad54cbd4bbe638e37dbf154266a33d157e1d'}, {'mime': 'application/png', 'path': 'PDFImages/8261bcdbc98c7879ef87cabbe2ba4d7b002d2040051f8b4cc83c228782d57510.png', 'page': 7, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/8261bcdbc98c7879ef87cabbe2ba4d7b002d2040051f8b4cc83c228782d57510.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=bb0a8dea03c27322f2c320dd5e5b5a830ac02236097b61f4ebca4ef5de6da93e'}, {'mime': 'application/png', 'path': 'PDFImages/3dbbde09f9dc45906938702df7b92a06e65a54cc999b8cb5f545ffa6aa715b9b.png', 'page': 8, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/3dbbde09f9dc45906938702df7b92a06e65a54cc999b8cb5f545ffa6aa715b9b.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=dea199fe482db207add00d2839eaf0f04b419f21b7867e9ea6c715204d37cf90'}, {'mime': 'application/png', 'path': 'PDFImages/1e196e60db8fa7b4623e4266b86454f480414a1f49063df5519cf68c72797cba.png', 'page': 9, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/1e196e60db8fa7b4623e4266b86454f480414a1f49063df5519cf68c72797cba.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=bb8243319fb8ac2d5a19ab2b9de0ef6d35ab25b674b85eda43b37351343e05ea'}, {'mime': 'application/png', 'path': 'PDFImages/c57c6efaaca7a74f8607dfc05314027ef8b37b1a3c1b74993171935c9557b3ca.png', 'page': 10, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/c57c6efaaca7a74f8607dfc05314027ef8b37b1a3c1b74993171935c9557b3ca.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6a9150a6376da3199d24cdbde777600cb2dc22a0db9b215f852ed0356bb24e53'}, {'mime': 'application/png', 'path': 'PDFImages/0a87df6f7456df78ef7a9eb25768d923d0f2136e91378cffb5cc9fcde7317619.png', 'page': 11, 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFImages/0a87df6f7456df78ef7a9eb25768d923d0f2136e91378cffb5cc9fcde7317619.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1457638715a3f64b8a0fad5cab82dca779ff56152ad4fee54a07528002b150f5'}], 'pdf-document': [{'mime': 'application/pdf', 'path': 'PDFDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.pdf', 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/PDFDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=784252b1b012a1040bfac3c686ca413b522cbf1045e4af96ef0b5005e61badfd'}], 'markdown-document': {'mime': 'text/markdown', 'path': 'MD/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.md', 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/MD/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=331cdbc2cb4753f6ff1cab92fb0c8244f81374ebb471fad23a0761aee03269ee'}, 'json-document': {'mime': 'application/json', 'path': 'JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.json', 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=5c6545cdaf7b562594a41741080098c30feeb62928fab95afd84f65ee2df3a76'}, 'json-meta': {'mime': 'application/json', 'path': 'JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.meta.json', 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.meta.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1781f8864b34b51b5419efb311b188b75d335c1420838d1c9f270dbe9af6ee4d'}, 'legacy-json-document': {'mime': 'application/json', 'path': 'JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.legacy.json', 'url': 'https://s3.eu-de.cloud-object-storage.appdomain.cloud/cps-dev-deepsearch-dev-bags/cps-dev-deepsearch-dev-projdata/kouros_468b81/entities/cps-dev-deepsearch-dev-projdata3ae2e3/JSONDocuments/6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea.legacy.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=b7d02de376e24e97904c2f698795e3d0%2F20250116%2Feu-de-standard%2Fs3%2Faws4_request&X-Amz-Date=20250116T135319Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2d055c76c073dd83b5bb05736eea503e8a6192222ccb29f583140ffab859dbdd'}}, 'identifiers': None}, 'sort': ['6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea']}\n", + "Finished fetching all data. Total is 1 records.\n", + "Data downloaded in /tmp/tmphf8euhqf\n" ] }, { @@ -508,39 +520,21 @@ " \n", " \n", " 0\n", - " 2206.01062.pdf\n", - " \n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", - " \n", - " \n", - " 1\n", " 2206.00785.pdf\n", " \n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", - " \n", - " \n", - " 2\n", - " 20140197356.pdf\n", - " \n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", - " /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp...\n", + " /tmp/tmphf8euhqf/6627d1b67955c51ff1aa8858de671...\n", + " /tmp/tmphf8euhqf/6627d1b67955c51ff1aa8858de671...\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Filename Title JSON Path \\\n", - "0 2206.01062.pdf /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... \n", - "1 2206.00785.pdf /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... \n", - "2 20140197356.pdf /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... \n", + " Filename Title JSON Path \\\n", + "0 2206.00785.pdf /tmp/tmphf8euhqf/6627d1b67955c51ff1aa8858de671... \n", "\n", " Markdown Path \n", - "0 /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... \n", - "1 /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... \n", - "2 /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp... " + "0 /tmp/tmphf8euhqf/6627d1b67955c51ff1aa8858de671... " ] }, "metadata": {}, @@ -560,6 +554,7 @@ "all_results = []\n", "for result_page in tqdm(cursor):\n", " for row in result_page.outputs[\"data_outputs\"]:\n", + " print(row)\n", " metadata = row[\"_source\"].get(\n", " \"description\", {}\n", " ) # setting default, in case no title and authors are detected\n", @@ -593,7 +588,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 32, "id": "fee869dd-6f23-4999-b262-b034d2161deb", "metadata": { "execution": { @@ -620,25 +615,25 @@ { "data": { "text/markdown": [ - "## DocLayNet: A Large Human-Annotated Dataset for Document-Layout Analysis\n", + "## Delivering Document Conversion as a Cloud Service with High Throughput and Responsiveness\n", "\n", - "Birgit Pfitzmann IBM Research Rueschlikon, Switzerland bpf@zurich.ibm.com\n", + "1 st Christoph Auer IBM Research Ruschlikon, Switzerland cau@zurich.ibm.com\n", "\n", - "Christoph Auer IBM Research Rueschlikon, Switzerland cau@zurich.ibm.com\n", + "4 th Cesar Berrospi Ramis IBM Research Ruschlikon, Switzerland ceb@zurich.ibm.com\n", "\n", - "Michele Dolfi IBM Research Rueschlikon, Switzerland dol@zurich.ibm.com\n", + "2 nd Michele Dolfi IBM Research Ruschlikon, Switzerland dol@zurich.ibm.com\n", "\n", - "Ahmed S. Nassar IBM Research Rueschlikon, Switzerland ahn@zurich.ibm.com\n", + "5 th Peter W.J. Staar IBM Research Ruschlikon, Switzerland taa@zurich.ibm.com\n", "\n", - "Peter Staar IBM Research Rueschlikon, Switzerland taa@zurich.ibm.com\n", + "Abstract -Document understanding is a key business process in the data-driven economy since documents are central to knowledge discovery and business insights. Converting documents into a machine-processable format is a particular challenge here due to their huge variability in formats and complex structure. Accordingly, many algorithms and machine-learning methods emerged to solve particular tasks such as Optical Character Recognition (OCR), layout analysis, table-structure recovery, figure understanding, etc. We observe the adoption of such methods in document understanding solutions offered by all major cloud providers. Yet, publications outlining how such services are designed and optimized to scale in the cloud are scarce. In this paper, we focus on the case of document conversion to illustrate the particular challenges of scaling a complex data processing pipeline with a strong reliance on machine-learning methods on cloud infrastructure. Our key objective is to achieve high scalability and responsiveness for different workload profiles in a well-defined resource budget. We outline the requirements, design, and implementation choices of our document conversion service and reflect on the challenges we faced. Evidence for the scaling behavior and resource efficiency is provided for two alternative workload distribution strategies and deployment configurations. Our best-performing method achieves sustained throughput of over one million PDF pages per hour on 3072 CPU cores across 192 nodes.\n", "\n", - "## ABSTRACT\n", + "Index Terms -cloud applications, document understanding, distributed computing, artificial intelligence\n", "\n", - "Accurate document layout analysis is a key requirement for highquality PDF document conversion. With the recent availability of public, large ground-truth datasets such as PubLayNet and DocBank, deep-learning models have proven to be very effective at layout detection and segmentation. While these datasets are of adequate size to train such models, they severely lack in layout variability since they are sourced from scientific article repositories such as PubMed and arXiv only. Consequently, the accuracy of the layout segmentation drops significantly when these models are applied on more challenging and diverse layouts. In this paper, we present DocLayNet, a new, publicly available, document-layout annotation dataset in COCO format. It contains 80863 manually annotated pages from diverse data sources to represent a wide variability in layouts. For each PDF page, the layout annotations provide labelled bounding-boxes with a choice of 11 distinct classes. DocLayNet also provides a subset of double-and triple-annotated pages to determine the inter-annotator agreement. In multiple experiments, we provide baseline accuracy scores (in mAP) for a set of popular object detection models. We also demonstrate that these models fall approximately 10% behind the inter-annotator agreement. Furthermore, we provide evidence that DocLayNet is of sufficient size. Lastly, we compare models trained on PubLayNet, DocBank and DocLayNet, showing that layout predictions of the DocLayNettrained models are more robust and thus the preferred choice for general-purpose document-layout analysis.\n", + "## I. INTRODUCTION\n", "\n", - "## CCS CONCEPTS\n", + "Over the past decade, many organizations have accelerated their transformation into data-driven businesses, as studies have shown its positive impact in efficiency, decision making, or financial performance [1], [2]. Leading companies are increasingly deploying workloads on public and private cloud infrastructure, including business intelligence processing and machine learning models in data analytics platforms [3]. This is owed to several factors such as high availability, lower cost for compute, and storage [4], as well as the flexibility to scale up or down a cloud-based business process to fit the operational needs. Workloads and services can be container-\n", "\n", - "· Information systems → Document structure; · Applied computing → Document analysis; · Computing methodologies → Machine learning; Computer vision; Object detection;\n", + "ized, deployed, and orchestrated through widely adopted and standardized platforms like Kubernetes [5], [6].\n", "\n" ], "text/plain": [ @@ -664,25 +659,25 @@ "data": { "text/markdown": [ "{\n", - " \"_name\": \"2206.01062.pdf\",\n", - " \"bitmaps\": [],\n", + " \"_name\": \"\",\n", + " \"type\": \"pdf-document\",\n", " \"description\": {\n", " \"logs\": [\n", " {\n", - " \"agent\": \"CCS\",\n", + " \"agent\": \"CPS Docling\",\n", " \"type\": \"parsing\",\n", - " \"comment\": \"CCS v10.5.0 parsing of documents\",\n", - " \"date\": \"2024-05-27T10:47:36.503487+00:00\"\n", + " \"comment\": \"Docling 2.7.1 parsing of documents\",\n", + " \"date\": \"2025-01-16T13:53:04.836922+00:00\"\n", " }\n", " ],\n", " \"collection\": {\n", " \"type\": \"Document\"\n", " }\n", " },\n", - " \"equations\": [],\n", - " \"figures\": [\n", - " {\n", - " \"confidence\": 0.0,\n", + " \"file-info\": {\n", + " \"filename\": \"2206.00785.pdf\",\n", + " \"document-hash\": \"6627d1b67955c51ff1aa8858de671bb5a62ad70c77e62e0ac57c153d0078b7ea\",\n", + " \"#-pages\": 11,\n", "" ], "text/plain": [ @@ -735,7 +730,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 33, "id": "58c15840-b342-44e8-b654-32b3e35f3991", "metadata": { "execution": { @@ -753,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 34, "id": "d477507f-bcbe-45b5-9557-dd0e3109c81c", "metadata": { "execution": { @@ -773,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 35, "id": "57ac3ecb-f411-4dd2-936e-4e73825da323", "metadata": { "execution": { @@ -789,7 +784,7 @@ "data": { "text/markdown": [ "#### Results\n", - "The data is now available. This file will now display the text from the scanned pages. Access it via the Deep Search UI at
https://cps.foc-deepsearch.zurich.ibm.com//projects/e74892839ff04df16a87cae3e96248a24eec7756/library/private/a9d5732282cacf822d94086f492992542a271692" + "The data is now available. This file will now display the text from the scanned pages. Access it via the Deep Search UI at
https://pr-516-cps-dev.deepsearch-dev.zurich.ibm.com/projects/468b81ffe515a99172f93b07dd20cd50d4c19a3b/library/private/ad7097d15b2793b975c4caf0a2cbd7472336344f" ], "text/plain": [ "" @@ -801,8 +796,8 @@ ], "source": [ "# Load conversion settings and enable OCR\n", - "cs = ConversionSettings.from_project(api, proj_key=PROJ_KEY)\n", - "cs.ocr.enabled = True # Enable or disable OCR\n", + "cs = ConversionSettings()\n", + "cs.ocr.do_ocr = True # Enable or disable OCR\n", "\n", "# Upload and convert documents with custom conversion settings\n", "data_indices_utils.upload_files(\n", @@ -841,7 +836,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 36, "id": "16655fea-becc-4236-9ad3-ac1e7ba13c46", "metadata": { "execution": { @@ -859,7 +854,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 37, "id": "4c3c8d9a-b06c-4966-98ee-335be9b659aa", "metadata": { "execution": { @@ -879,7 +874,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 38, "id": "d5060e1e-f8da-4948-8d34-56ed86f5ddb3", "metadata": { "execution": { @@ -890,23 +885,34 @@ "shell.execute_reply.started": "2024-05-27T10:48:43.224475Z" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['SUCCESS']" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Set custom target settings with raw pdf cells enabled\n", - "tsettings = TargetSettings(add_raw_pages=True)\n", + "tsettings = TargetSettings(add_raw_pages=True, add_annotations=False)\n", "\n", "# Upload and convert documents with custom conversion settings\n", "data_indices_utils.upload_files(\n", " api=api,\n", " coords=data_index.source,\n", - " local_file=INPUT_FILES_FOLDER,\n", + " local_file=INPUT_FILE_PATH,\n", " target_settings=tsettings,\n", ")" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 39, "id": "8d6dc87a-1501-4564-9914-f2787a85508b", "metadata": { "execution": { @@ -922,8 +928,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Finished fetching all data. Total is 31 records.\n", - "Data downloaded in /var/folders/32/5m4rnj816kl4pxl4vm97_wbh0000kp/T/tmpzb6oosaa\n" + "Finished fetching all data. Total is 0 records.\n", + "Data downloaded in /tmp/tmphf8euhqf\n" ] }, { @@ -946,198 +952,9 @@ " \n", " \n", " \n", - " Filename\n", - " Page\n", - " RAW file\n", " \n", " \n", " \n", - " \n", - " 0\n", - " 2206.01062.pdf\n", - " 1\n", - " Link\n", - " \n", - " \n", - " 1\n", - " 2206.01062.pdf\n", - " 2\n", - " Link\n", - " \n", - " \n", - " 2\n", - " 2206.01062.pdf\n", - " 3\n", - " Link\n", - " \n", - " \n", - " 3\n", - " 2206.01062.pdf\n", - " 4\n", - " Link\n", - " \n", - " \n", - " 4\n", - " 2206.01062.pdf\n", - " 5\n", - " Link\n", - " \n", - " \n", - " 5\n", - " 2206.01062.pdf\n", - " 6\n", - " Link\n", - " \n", - " \n", - " 6\n", - " 2206.01062.pdf\n", - " 7\n", - " Link\n", - " \n", - " \n", - " 7\n", - " 2206.01062.pdf\n", - " 8\n", - " Link\n", - " \n", - " \n", - " 8\n", - " 2206.01062.pdf\n", - " 9\n", - " Link\n", - " \n", - " \n", - " 9\n", - " 2206.00785.pdf\n", - " 1\n", - " Link\n", - " \n", - " \n", - " 10\n", - " 2206.00785.pdf\n", - " 2\n", - " Link\n", - " \n", - " \n", - " 11\n", - " 2206.00785.pdf\n", - " 3\n", - " Link\n", - " \n", - " \n", - " 12\n", - " 2206.00785.pdf\n", - " 4\n", - " Link\n", - " \n", - " \n", - " 13\n", - " 2206.00785.pdf\n", - " 5\n", - " Link\n", - " \n", - " \n", - " 14\n", - " 2206.00785.pdf\n", - " 6\n", - " Link\n", - " \n", - " \n", - " 15\n", - " 2206.00785.pdf\n", - " 7\n", - " Link\n", - " \n", - " \n", - " 16\n", - " 2206.00785.pdf\n", - " 8\n", - " Link\n", - " \n", - " \n", - " 17\n", - " 2206.00785.pdf\n", - " 9\n", - " Link\n", - " \n", - " \n", - " 18\n", - " 2206.00785.pdf\n", - " 10\n", - " Link\n", - " \n", - " \n", - " 19\n", - " 2206.00785.pdf\n", - " 11\n", - " Link\n", - " \n", - " \n", - " 20\n", - " 20140197356.pdf\n", - " 1\n", - " Link\n", - " \n", - " \n", - " 21\n", - " 20140197356.pdf\n", - " 2\n", - " Link\n", - " \n", - " \n", - " 22\n", - " 20140197356.pdf\n", - " 3\n", - " Link\n", - " \n", - " \n", - " 23\n", - " 20140197356.pdf\n", - " 4\n", - " Link\n", - " \n", - " \n", - " 24\n", - " 20140197356.pdf\n", - " 5\n", - " Link\n", - " \n", - " \n", - " 25\n", - " 20140197356.pdf\n", - " 6\n", - " Link\n", - " \n", - " \n", - " 26\n", - " 20140197356.pdf\n", - " 7\n", - " Link\n", - " \n", - " \n", - " 27\n", - " 20140197356.pdf\n", - " 8\n", - " Link\n", - " \n", - " \n", - " 28\n", - " 20140197356.pdf\n", - " 9\n", - " Link\n", - " \n", - " \n", - " 29\n", - " 20140197356.pdf\n", - " 10\n", - " Link\n", - " \n", - " \n", - " 30\n", - " 20140197356.pdf\n", - " 11\n", - " Link\n", - " \n", " \n", "" ], @@ -1197,7 +1014,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 40, "id": "9a0b82b8", "metadata": { "execution": { @@ -1213,9 +1030,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Data index tmp_20240527124643 deleted\n", - "Data index tmp_20240527124643-ocr deleted\n", - "Data index tmp_20240527124643-raw deleted\n" + "Data index tmp_20250115104829 deleted\n", + "Data index tmp_20250115104829-ocr deleted\n", + "Data index tmp_20250115104829-raw deleted\n" ] } ], @@ -1238,7 +1055,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, diff --git a/examples/data_query_chemistry/chemistry.ipynb b/examples/data_query_chemistry/chemistry.ipynb index 395fc18..b2cac90 100644 --- a/examples/data_query_chemistry/chemistry.ipynb +++ b/examples/data_query_chemistry/chemistry.ipynb @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "id": "f915761b", "metadata": { "scrolled": false @@ -176,19 +176,162 @@ " \n", " \n", " 0\n", + " BioRxiv\n", + " Document\n", + " 357.76K\n", + " 2023-11-09\n", + " default/biorxiv\n", + " \n", + " \n", + " 1\n", + " Brenda\n", + " Record\n", + " 7.12K\n", + " 2023-01-03\n", + " default/brenda\n", + " \n", + " \n", + " 2\n", + " ChEMBL\n", + " Record\n", + " 2.42M\n", + " 2024-04-26\n", + " default/chembl\n", + " \n", + " \n", + " 3\n", + " ChEMBL (DEPRECATED)\n", + " Record\n", + " 2.11M\n", + " 2023-01-03\n", + " default/chembl-deprecated\n", + " \n", + " \n", + " 4\n", + " ChemRxiv\n", + " Document\n", + " 8.82K\n", + " 2023-11-23\n", + " default/chemrxiv\n", + " \n", + " \n", + " 5\n", + " COD\n", + " Record\n", + " 503.78K\n", + " 2023-07-24\n", + " default/cod\n", + " \n", + " \n", + " 6\n", + " DeepSearch materials\n", + " Record\n", + " 360.54K\n", + " 2023-01-03\n", + " default/ds4sd-material\n", + " \n", + " \n", + " 7\n", + " Material Components\n", + " Document\n", + " 16.32K\n", + " 2023-01-30\n", + " default/experiment\n", + " \n", + " \n", + " 8\n", + " NMRShift\n", + " Record\n", + " 44.33K\n", + " 2023-01-03\n", + " default/nmrshift\n", + " \n", + " \n", + " 9\n", + " PatCID\n", + " Record\n", + " 23.91M\n", + " 2024-10-04\n", + " default/patcid\n", + " \n", + " \n", + " 10\n", " PubChem\n", " Record\n", " 118.24M\n", - " 2023-06-23\n", + " 2023-07-06\n", " default/pubchem\n", " \n", + " \n", + " 11\n", + " RxNorm\n", + " Record\n", + " 374.18K\n", + " 2023-01-03\n", + " default/rxnorm\n", + " \n", + " \n", + " 12\n", + " SMILES from USPTO\n", + " Record\n", + " 116.48M\n", + " 2022-12-25\n", + " default/patent-uspto-smiles\n", + " \n", + " \n", + " 13\n", + " SMILES from USPTO (fingerprints)\n", + " Record\n", + " 85.81M\n", + " 2024-07-31\n", + " default/patent-uspto-smiles-fp\n", + " \n", + " \n", + " 14\n", + " UMLS\n", + " Record\n", + " 2.69M\n", + " 2023-01-03\n", + " default/umls\n", + " \n", " \n", "\n", "" ], "text/plain": [ - " Name Type Num entries Date Coords\n", - "0 PubChem Record 118.24M 2023-06-23 default/pubchem" + " Name Type Num entries Date \\\n", + "0 BioRxiv Document 357.76K 2023-11-09 \n", + "1 Brenda Record 7.12K 2023-01-03 \n", + "2 ChEMBL Record 2.42M 2024-04-26 \n", + "3 ChEMBL (DEPRECATED) Record 2.11M 2023-01-03 \n", + "4 ChemRxiv Document 8.82K 2023-11-23 \n", + "5 COD Record 503.78K 2023-07-24 \n", + "6 DeepSearch materials Record 360.54K 2023-01-03 \n", + "7 Material Components Document 16.32K 2023-01-30 \n", + "8 NMRShift Record 44.33K 2023-01-03 \n", + "9 PatCID Record 23.91M 2024-10-04 \n", + "10 PubChem Record 118.24M 2023-07-06 \n", + "11 RxNorm Record 374.18K 2023-01-03 \n", + "12 SMILES from USPTO Record 116.48M 2022-12-25 \n", + "13 SMILES from USPTO (fingerprints) Record 85.81M 2024-07-31 \n", + "14 UMLS Record 2.69M 2023-01-03 \n", + "\n", + " Coords \n", + "0 default/biorxiv \n", + "1 default/brenda \n", + "2 default/chembl \n", + "3 default/chembl-deprecated \n", + "4 default/chemrxiv \n", + "5 default/cod \n", + "6 default/ds4sd-material \n", + "7 default/experiment \n", + "8 default/nmrshift \n", + "9 default/patcid \n", + "10 default/pubchem \n", + "11 default/rxnorm \n", + "12 default/patent-uspto-smiles \n", + "13 default/patent-uspto-smiles-fp \n", + "14 default/umls " ] }, "metadata": {}, @@ -196,13 +339,14 @@ } ], "source": [ + "from datetime import datetime\n", "# Visualize summary table\n", "results = [\n", " {\n", " \"Name\": c.name,\n", " \"Type\": c.metadata.type,\n", " \"Num entries\": numerize(c.documents),\n", - " \"Date\": c.metadata.created.strftime(\"%Y-%m-%d\"),\n", + " \"Date\": datetime.fromisoformat(c.metadata.created).strftime(\"%Y-%m-%d\"),\n", " \"Coords\": f\"{c.source.elastic_id}/{c.source.index_key}\",\n", " }\n", " for c in collections\n", @@ -225,14 +369,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "id": "239fdea6", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e57cd03fd5aa4db6aad7d911428561ff", + "model_id": "7dbd3af0d7474eb0a0321ce5f5a070cd", "version_major": 2, "version_minor": 0 }, @@ -247,7 +391,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Finished fetching all data. Total is 15 records.\n" + "Finished fetching all data. Total is 1 records.\n" ] } ], @@ -292,7 +436,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, "id": "bf08bbcc", "metadata": { "scrolled": false @@ -324,365 +468,80 @@ " SMILES\n", " ec_number\n", " cas_number\n", - " paragraph\n", - " boiling point\n", - " melting point\n", - " solubility\n", " molecular weight\n", - " dissociation constant\n", + " xlogp3\n", + " hydrogen bond donor count\n", + " hydrogen bond acceptor count\n", + " rotatable bond count\n", + " ...\n", + " monoisotopic mass\n", + " topological polar surface area\n", + " heavy atom count\n", + " formal charge\n", + " complexity\n", + " isotope atom count\n", + " defined atom stereocenter count\n", + " undefined atom stereocenter count\n", + " covalently-bonded unit count\n", + " compound is canonicalized\n", " \n", " \n", " \n", " \n", " 0\n", - " 6575\n", - " Trichloroethylene\n", - " C(=C(Cl)Cl)Cl\n", - " 201-167-4\n", - " 79-01-6\n", - " IDENTIFICATION AND USE: Trichloroethylene (TCE...\n", - " 1,1,2-trichloroethene has boiling point = 87.2 °C\n", - " 1,1,2-trichloroethene has melting point = -99°F\n", - " 1,1,2-trichloroethene has solubility = less th...\n", - " 131.38\n", - " NaN\n", - " \n", - " \n", - " 1\n", - " 73981\n", - " Magnesium hydroxide\n", - " [OH-].[OH-].[Mg+2]\n", - " 215-170-3\n", - " 1309-42-8\n", - " LD50=8500 mg/kg (rat, oral) Common side effe...\n", - " NaN\n", - " NaN\n", - " magnesium;dihydroxide has solubility = Practic...\n", - " 58.32\n", - " NaN\n", - " \n", - " \n", - " 2\n", - " 3825\n", - " Ketoprofen\n", - " CC(C1=CC(=CC=C1)C(=O)C2=CC=CC=C2)C(=O)O\n", - " 244-759-8\n", - " 22071-15-4\n", - " Prospective studies show that 1% to 2% of pati...\n", - " NaN\n", - " 2-(3-benzoylphenyl)propanoic acid has melting ...\n", - " 2-(3-benzoylphenyl)propanoic acid has solubili...\n", - " 254.28\n", - " NaN\n", - " \n", - " \n", - " 3\n", - " 2662\n", - " Celecoxib\n", - " CC1=CC=C(C=C1)C2=CC(=NN2C3=CC=C(C=C3)S(=O)(=O)...\n", - " \n", - " 169590-42-5\n", - " Likelihood score: B (highly likely cause of cl...\n", - " 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz...\n", - " 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz...\n", - " 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz...\n", - " 381.40\n", - " 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz...\n", - " \n", - " \n", - " 4\n", - " 154699635\n", - " \n", - " CC(CC1=CC=C(C=C1)C(C)C(=O)O)CO\n", - " \n", - " \n", - " 3-Hydroxyibuprofen is a known human metabolite...\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 222.28\n", - " NaN\n", - " \n", - " \n", - " 5\n", - " 39912\n", - " Dexibuprofen\n", - " CC(C)CC1=CC=C(C=C1)C(C)C(=O)O\n", - " \n", - " 51146-56-6\n", - " Oral LD50 value in rats is 636 mg/kg.[A19261] ...\n", - " NaN\n", - " (2S)-2-[4-(2-methylpropyl)phenyl]propanoic aci...\n", - " (2S)-2-[4-(2-methylpropyl)phenyl]propanoic aci...\n", - " 206.28\n", - " NaN\n", - " \n", - " \n", - " 6\n", - " 154699636\n", - " \n", - " CC(CC1=CC=C(C=C1)C(C)C(=O)O)CO\n", - " \n", - " \n", - " R,S-3-Hydroxyibuprofen is a known human metabo...\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 222.28\n", - " NaN\n", - " \n", - " \n", - " 7\n", - " 5284569\n", - " Hydrocodone\n", - " CN1CCC23C4C1CC5=C2C(=C(C=C5)OC)OC3C(=O)CC4\n", - " 204-733-9\n", - " 125-29-1\n", - " References on the safety and potential hepatot...\n", - " NaN\n", - " (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,...\n", - " (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,...\n", - " 299.40\n", - " (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,...\n", - " \n", - " \n", - " 8\n", - " 1775\n", - " Phenytoin\n", - " C1=CC=C(C=C1)C2(C(=O)NC(=O)N2)C3=CC=CC=C3\n", - " 211-148-2\n", - " 630-93-3\n", - " Prospective studies indicate that a fairly hig...\n", - " NaN\n", - " 5,5-diphenylimidazolidine-2,4-dione has meltin...\n", - " 5,5-diphenylimidazolidine-2,4-dione has solubi...\n", - " 252.27\n", - " 5,5-diphenylimidazolidine-2,4-dione has logari...\n", - " \n", - " \n", - " 9\n", " 3672\n", " Ibuprofen\n", " CC(C)CC1=CC=C(C=C1)C(C)C(=O)O\n", " 239-784-6\n", " 79261-49-7 (potassium salt)\n", - " The appearance of clinically apparent liver in...\n", - " 2-[4-(2-methylpropyl)phenyl]propanoic acid has...\n", - " 2-[4-(2-methylpropyl)phenyl]propanoic acid has...\n", - " 2-[4-(2-methylpropyl)phenyl]propanoic acid has...\n", " 206.28\n", - " 2-[4-(2-methylpropyl)phenyl]propanoic acid has...\n", - " \n", - " \n", - " 10\n", - " 3394\n", - " \n", - " CC(C1=CC(=C(C=C1)C2=CC=CC=C2)F)C(=O)O\n", - " 257-262-6\n", - " 51543-38-5\n", - " Prospective studies show that mild elevations ...\n", - " NaN\n", - " 2-(3-fluoro-4-phenylphenyl)propanoic acid has ...\n", - " 2-(3-fluoro-4-phenylphenyl)propanoic acid has ...\n", - " 244.26\n", - " NaN\n", - " \n", - " \n", - " 11\n", - " 7028\n", - " Pseudoephedrine\n", - " CC(C(C1=CC=CC=C1)O)NC\n", - " 202-018-6\n", - " 90-82-4\n", - " Common adverse reactions include nervousness, ...\n", - " NaN\n", - " (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha...\n", - " (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha...\n", - " 165.23\n", - " (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha...\n", - " \n", - " \n", - " 12\n", - " 156391\n", - " Naproxen\n", - " CC(C1=CC2=C(C=C1)C=C(C=C2)OC)C(=O)O\n", - " 247-485-7\n", - " 26159-31-9\n", - " Serum aminotransferase levels can be elevated ...\n", - " NaN\n", - " (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci...\n", - " (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci...\n", - " 230.26\n", - " (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci...\n", - " \n", - " \n", - " 13\n", - " 2581\n", - " Carprofen\n", - " CC(C1=CC2=C(C=C1)C3=C(N2)C=CC(=C3)Cl)C(=O)O\n", - " 258-712-4\n", - " 53716-49-7\n", - " Symptoms of NSAID overdose include dizziness a...\n", - " NaN\n", - " 2-(6-chloro-9H-carbazol-2-yl)propanoic acid ha...\n", - " 2-(6-chloro-9H-carbazol-2-yl)propanoic acid ha...\n", - " 273.71\n", - " NaN\n", - " \n", - " \n", - " 14\n", - " 154699469\n", - " \n", - " CC(C)CC1=CC=C(C=C1)C(C)C(=O)OC2C(C(C(C(O2)C(=O...\n", - " \n", - " \n", - " (2S,3S,4S,5R)-3,4,5-trihydroxy-6-[(2R)-2-[4-(2...\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 382.40\n", - " NaN\n", + " 3.5\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " ...\n", + " 206.13068\n", + " 37.3\n", + " 15.0\n", + " 0.0\n", + " 203.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " Yes\n", " \n", " \n", "\n", + "

1 rows × 21 columns

\n", "" ], "text/plain": [ - " cid chemical_name \\\n", - "0 6575 Trichloroethylene \n", - "1 73981 Magnesium hydroxide \n", - "2 3825 Ketoprofen \n", - "3 2662 Celecoxib \n", - "4 154699635 \n", - "5 39912 Dexibuprofen \n", - "6 154699636 \n", - "7 5284569 Hydrocodone \n", - "8 1775 Phenytoin \n", - "9 3672 Ibuprofen \n", - "10 3394 \n", - "11 7028 Pseudoephedrine \n", - "12 156391 Naproxen \n", - "13 2581 Carprofen \n", - "14 154699469 \n", - "\n", - " SMILES ec_number \\\n", - "0 C(=C(Cl)Cl)Cl 201-167-4 \n", - "1 [OH-].[OH-].[Mg+2] 215-170-3 \n", - "2 CC(C1=CC(=CC=C1)C(=O)C2=CC=CC=C2)C(=O)O 244-759-8 \n", - "3 CC1=CC=C(C=C1)C2=CC(=NN2C3=CC=C(C=C3)S(=O)(=O)... \n", - "4 CC(CC1=CC=C(C=C1)C(C)C(=O)O)CO \n", - "5 CC(C)CC1=CC=C(C=C1)C(C)C(=O)O \n", - "6 CC(CC1=CC=C(C=C1)C(C)C(=O)O)CO \n", - "7 CN1CCC23C4C1CC5=C2C(=C(C=C5)OC)OC3C(=O)CC4 204-733-9 \n", - "8 C1=CC=C(C=C1)C2(C(=O)NC(=O)N2)C3=CC=CC=C3 211-148-2 \n", - "9 CC(C)CC1=CC=C(C=C1)C(C)C(=O)O 239-784-6 \n", - "10 CC(C1=CC(=C(C=C1)C2=CC=CC=C2)F)C(=O)O 257-262-6 \n", - "11 CC(C(C1=CC=CC=C1)O)NC 202-018-6 \n", - "12 CC(C1=CC2=C(C=C1)C=C(C=C2)OC)C(=O)O 247-485-7 \n", - "13 CC(C1=CC2=C(C=C1)C3=C(N2)C=CC(=C3)Cl)C(=O)O 258-712-4 \n", - "14 CC(C)CC1=CC=C(C=C1)C(C)C(=O)OC2C(C(C(C(O2)C(=O... \n", - "\n", - " cas_number \\\n", - "0 79-01-6 \n", - "1 1309-42-8 \n", - "2 22071-15-4 \n", - "3 169590-42-5 \n", - "4 \n", - "5 51146-56-6 \n", - "6 \n", - "7 125-29-1 \n", - "8 630-93-3 \n", - "9 79261-49-7 (potassium salt) \n", - "10 51543-38-5 \n", - "11 90-82-4 \n", - "12 26159-31-9 \n", - "13 53716-49-7 \n", - "14 \n", - "\n", - " paragraph \\\n", - "0 IDENTIFICATION AND USE: Trichloroethylene (TCE... \n", - "1 LD50=8500 mg/kg (rat, oral) Common side effe... \n", - "2 Prospective studies show that 1% to 2% of pati... \n", - "3 Likelihood score: B (highly likely cause of cl... \n", - "4 3-Hydroxyibuprofen is a known human metabolite... \n", - "5 Oral LD50 value in rats is 636 mg/kg.[A19261] ... \n", - "6 R,S-3-Hydroxyibuprofen is a known human metabo... \n", - "7 References on the safety and potential hepatot... \n", - "8 Prospective studies indicate that a fairly hig... \n", - "9 The appearance of clinically apparent liver in... \n", - "10 Prospective studies show that mild elevations ... \n", - "11 Common adverse reactions include nervousness, ... \n", - "12 Serum aminotransferase levels can be elevated ... \n", - "13 Symptoms of NSAID overdose include dizziness a... \n", - "14 (2S,3S,4S,5R)-3,4,5-trihydroxy-6-[(2R)-2-[4-(2... \n", - "\n", - " boiling point \\\n", - "0 1,1,2-trichloroethene has boiling point = 87.2 °C \n", - "1 NaN \n", - "2 NaN \n", - "3 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz... \n", - "4 NaN \n", - "5 NaN \n", - "6 NaN \n", - "7 NaN \n", - "8 NaN \n", - "9 2-[4-(2-methylpropyl)phenyl]propanoic acid has... \n", - "10 NaN \n", - "11 NaN \n", - "12 NaN \n", - "13 NaN \n", - "14 NaN \n", - "\n", - " melting point \\\n", - "0 1,1,2-trichloroethene has melting point = -99°F \n", - "1 NaN \n", - "2 2-(3-benzoylphenyl)propanoic acid has melting ... \n", - "3 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz... \n", - "4 NaN \n", - "5 (2S)-2-[4-(2-methylpropyl)phenyl]propanoic aci... \n", - "6 NaN \n", - "7 (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,... \n", - "8 5,5-diphenylimidazolidine-2,4-dione has meltin... \n", - "9 2-[4-(2-methylpropyl)phenyl]propanoic acid has... \n", - "10 2-(3-fluoro-4-phenylphenyl)propanoic acid has ... \n", - "11 (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha... \n", - "12 (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci... \n", - "13 2-(6-chloro-9H-carbazol-2-yl)propanoic acid ha... \n", - "14 NaN \n", - "\n", - " solubility molecular weight \\\n", - "0 1,1,2-trichloroethene has solubility = less th... 131.38 \n", - "1 magnesium;dihydroxide has solubility = Practic... 58.32 \n", - "2 2-(3-benzoylphenyl)propanoic acid has solubili... 254.28 \n", - "3 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz... 381.40 \n", - "4 NaN 222.28 \n", - "5 (2S)-2-[4-(2-methylpropyl)phenyl]propanoic aci... 206.28 \n", - "6 NaN 222.28 \n", - "7 (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,... 299.40 \n", - "8 5,5-diphenylimidazolidine-2,4-dione has solubi... 252.27 \n", - "9 2-[4-(2-methylpropyl)phenyl]propanoic acid has... 206.28 \n", - "10 2-(3-fluoro-4-phenylphenyl)propanoic acid has ... 244.26 \n", - "11 (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha... 165.23 \n", - "12 (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci... 230.26 \n", - "13 2-(6-chloro-9H-carbazol-2-yl)propanoic acid ha... 273.71 \n", - "14 NaN 382.40 \n", - "\n", - " dissociation constant \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 4-[5-(4-methylphenyl)-3-(trifluoromethyl)pyraz... \n", - "4 NaN \n", - "5 NaN \n", - "6 NaN \n", - "7 (4R,4aR,7aR,12bS)-9-methoxy-3-methyl-1,2,4,4a,... \n", - "8 5,5-diphenylimidazolidine-2,4-dione has logari... \n", - "9 2-[4-(2-methylpropyl)phenyl]propanoic acid has... \n", - "10 NaN \n", - "11 (1S,2S)-2-(methylamino)-1-phenylpropan-1-ol ha... \n", - "12 (2S)-2-(6-methoxynaphthalen-2-yl)propanoic aci... \n", - "13 NaN \n", - "14 NaN " + " cid chemical_name SMILES ec_number \\\n", + "0 3672 Ibuprofen CC(C)CC1=CC=C(C=C1)C(C)C(=O)O 239-784-6 \n", + "\n", + " cas_number molecular weight xlogp3 \\\n", + "0 79261-49-7 (potassium salt) 206.28 3.5 \n", + "\n", + " hydrogen bond donor count hydrogen bond acceptor count \\\n", + "0 1.0 2.0 \n", + "\n", + " rotatable bond count ... monoisotopic mass \\\n", + "0 4.0 ... 206.13068 \n", + "\n", + " topological polar surface area heavy atom count formal charge \\\n", + "0 37.3 15.0 0.0 \n", + "\n", + " complexity isotope atom count defined atom stereocenter count \\\n", + "0 203.0 0.0 0.0 \n", + "\n", + " undefined atom stereocenter count covalently-bonded unit count \\\n", + "0 1.0 1.0 \n", + "\n", + " compound is canonicalized \n", + "0 Yes \n", + "\n", + "[1 rows x 21 columns]" ] }, "metadata": {}, @@ -750,14 +609,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 14, "id": "dd3ed56e", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b7e4dd82e9a49b69a1683a50f49f68c", + "model_id": "da0483e59a58496f9a6d44fd7d7e0e66", "version_major": 2, "version_minor": 0 }, @@ -771,373 +630,1474 @@ { "data": { "text/html": [ + "\n", + "\n", "" ], "text/plain": [ "" ] }, - "execution_count": 8, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1450,392 +2625,1485 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 15, "id": "b3de6455", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "87531afa29214ba9b4fd0ec8a92a5a24", + "model_id": "9bedd0aee2e241719e9359282f0ab390", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cidchemical_nameSMILESec_numbercas_numbermolecular weightxlogp3hydrogen bond donor counthydrogen bond acceptor countrotatable bond count...monoisotopic masstopological polar surface areaheavy atom countformal chargecomplexityisotope atom countdefined atom stereocenter countundefined atom stereocenter countcovalently-bonded unit countcompound is canonicalized
03672IbuprofenCC(C)CC1=CC=C(C=C1)C(C)C(=O)O239-784-679261-49-7 (potassium salt)206.283.51.02.04.0...206.1306837.315.00.0203.00.00.01.01.0Yes
\n", + "

1 rows × 21 columns

\n", + "" + ], + "text/plain": [ + " cid chemical_name SMILES ec_number \\\n", + "0 3672 Ibuprofen CC(C)CC1=CC=C(C=C1)C(C)C(=O)O 239-784-6 \n", + "\n", + " cas_number molecular weight xlogp3 \\\n", + "0 79261-49-7 (potassium salt) 206.28 3.5 \n", + "\n", + " hydrogen bond donor count hydrogen bond acceptor count \\\n", + "0 1.0 2.0 \n", + "\n", + " rotatable bond count ... monoisotopic mass \\\n", + "0 4.0 ... 206.13068 \n", + "\n", + " topological polar surface area heavy atom count formal charge \\\n", + "0 37.3 15.0 0.0 \n", + "\n", + " complexity isotope atom count defined atom stereocenter count \\\n", + "0 203.0 0.0 0.0 \n", + "\n", + " undefined atom stereocenter count covalently-bonded unit count \\\n", + "0 1.0 1.0 \n", + "\n", + " compound is canonicalized \n", + "0 Yes \n", + "\n", + "[1 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "91b3896a3aeb40068a700e28196c2072", "version_major": 2, "version_minor": 0 }, "text/plain": [ - " 0%| | 0/1 [00:00\n", - "\n", + "\n", + "" ], "text/plain": [ "" ] }, - "execution_count": 10, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -2341,14 +4858,14 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 17, "id": "10f3937d", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3535a3e242f64515a8420e80aa852ff0", + "model_id": "b94c2c00070c47db99dd4ce1fab7eb23", "version_major": 2, "version_minor": 0 }, @@ -2409,7 +4926,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 18, "id": "df310ef1", "metadata": {}, "outputs": [ @@ -2440,7 +4957,21 @@ " ec_number\n", " cas_number\n", " molecular weight\n", - " melting point\n", + " xlogp3\n", + " hydrogen bond donor count\n", + " hydrogen bond acceptor count\n", + " rotatable bond count\n", + " ...\n", + " monoisotopic mass\n", + " topological polar surface area\n", + " heavy atom count\n", + " formal charge\n", + " complexity\n", + " isotope atom count\n", + " defined atom stereocenter count\n", + " undefined atom stereocenter count\n", + " covalently-bonded unit count\n", + " compound is canonicalized\n", " \n", " \n", " \n", @@ -2452,7 +4983,21 @@ " \n", " \n", " 166.23\n", - " NaN\n", + " 1.8\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " ...\n", + " 166.115448\n", + " 36.0\n", + " 12.0\n", + " 0.0\n", + " 149.0\n", + " 5.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " Yes\n", " \n", " \n", " 1\n", @@ -2462,7 +5007,21 @@ " \n", " \n", " 165.22\n", - " NaN\n", + " 1.8\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " ...\n", + " 165.109171\n", + " 36.0\n", + " 12.0\n", + " 0.0\n", + " 149.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " Yes\n", " \n", " \n", " 2\n", @@ -2472,10 +5031,25 @@ " 208-393-2\n", " 526-55-6\n", " 161.20\n", - " 2-(1H-indol-3-yl)ethanol has melting point = 59°C\n", + " 1.8\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " ...\n", + " 161.084064\n", + " 36.0\n", + " 12.0\n", + " 0.0\n", + " 149.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " Yes\n", " \n", " \n", "\n", + "

3 rows × 21 columns

\n", "" ], "text/plain": [ @@ -2484,10 +5058,37 @@ "1 101132237 C1=CC=C2C(=C1)C(=CN2)CCO \n", "2 10685 Tryptophol C1=CC=C2C(=C1)C(=CN2)CCO 208-393-2 526-55-6 \n", "\n", - " molecular weight melting point \n", - "0 166.23 NaN \n", - "1 165.22 NaN \n", - "2 161.20 2-(1H-indol-3-yl)ethanol has melting point = 59°C " + " molecular weight xlogp3 hydrogen bond donor count \\\n", + "0 166.23 1.8 2.0 \n", + "1 165.22 1.8 2.0 \n", + "2 161.20 1.8 2.0 \n", + "\n", + " hydrogen bond acceptor count rotatable bond count ... monoisotopic mass \\\n", + "0 1.0 2.0 ... 166.115448 \n", + "1 1.0 2.0 ... 165.109171 \n", + "2 1.0 2.0 ... 161.084064 \n", + "\n", + " topological polar surface area heavy atom count formal charge \\\n", + "0 36.0 12.0 0.0 \n", + "1 36.0 12.0 0.0 \n", + "2 36.0 12.0 0.0 \n", + "\n", + " complexity isotope atom count defined atom stereocenter count \\\n", + "0 149.0 5.0 0.0 \n", + "1 149.0 4.0 0.0 \n", + "2 149.0 0.0 0.0 \n", + "\n", + " undefined atom stereocenter count covalently-bonded unit count \\\n", + "0 0.0 1.0 \n", + "1 0.0 1.0 \n", + "2 0.0 1.0 \n", + "\n", + " compound is canonicalized \n", + "0 Yes \n", + "1 Yes \n", + "2 Yes \n", + "\n", + "[3 rows x 21 columns]" ] }, "metadata": {}, @@ -2496,7 +5097,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5d1c2710e63c47938f348ed0b69bddd2", + "model_id": "3e7a6666be5c4fc38baa0352c6a3b70f", "version_major": 2, "version_minor": 0 }, @@ -2510,201 +5111,1292 @@ { "data": { "text/html": [ + "\n", + "\n", "" ], "text/plain": [ "" ] }, - "execution_count": 12, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -3201,7 +7142,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -3215,7 +7156,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/data_query_chemistry_patcid/chemistry_patcid.ipynb b/examples/data_query_chemistry_patcid/chemistry_patcid.ipynb index df2dd2a..e0e31e7 100644 --- a/examples/data_query_chemistry_patcid/chemistry_patcid.ipynb +++ b/examples/data_query_chemistry_patcid/chemistry_patcid.ipynb @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "id": "4a9b4de7-bace-4c39-a4e7-b563292a2a30", "metadata": {}, "outputs": [], @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "1ea3cd26", "metadata": {}, "outputs": [], @@ -95,6 +95,15 @@ " DocumentsByIds,\n", " DocumentsHaving,\n", ")\n", + "from deepsearch.chemistry.queries import (\n", + " query_chemistry,\n", + " CompoundsBySubstructure,\n", + " CompoundsBySimilarity,\n", + " CompoundsBySmarts,\n", + " CompoundsIn,\n", + " DocumentsByIds,\n", + " DocumentsHaving,\n", + ")\n", "from deepsearch.chemistry.queries.molecules import MolId, MolIdType, MolQueryType\n", "from deepsearch.cps.client.components.elastic import ElasticDataCollectionSource\n", "from deepsearch.documents.core.lookup import EntitiesLookup\n", @@ -114,10 +123,38 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 10, "id": "fae4dee3", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "The API Key or User is invalid.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mApiException\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/client/api.py:99\u001b[0m, in \u001b[0;36mCpsApiClient._authenticate_with_api_key\u001b[0;34m(host, username, api_key)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 99\u001b[0m access_token \u001b[38;5;241m=\u001b[39m \u001b[43mapi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_access_token\u001b[49m\u001b[43m(\u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43madmin\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39maccess_token\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m deepsearch\u001b[38;5;241m.\u001b[39mcps\u001b[38;5;241m.\u001b[39mapis\u001b[38;5;241m.\u001b[39muser\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mApiException \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api/users_api.py:167\u001b[0m, in \u001b[0;36mUsersApi.get_access_token\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 166\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_return_http_data_only\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_access_token_with_http_info\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api/users_api.py:242\u001b[0m, in \u001b[0;36mUsersApi.get_access_token_with_http_info\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 240\u001b[0m auth_settings \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBearer\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mUserAPIKey\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;66;03m# noqa: E501\u001b[39;00m\n\u001b[0;32m--> 242\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapi_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_api\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 243\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m/user/token\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 244\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 245\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 246\u001b[0m \u001b[43m \u001b[49m\u001b[43mheader_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 247\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 248\u001b[0m \u001b[43m \u001b[49m\u001b[43mpost_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mform_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 249\u001b[0m \u001b[43m \u001b[49m\u001b[43mfiles\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_var_files\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 250\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mAccessToken\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# noqa: E501\u001b[39;49;00m\n\u001b[1;32m 251\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth_settings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth_settings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[43masync_req\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_var_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43masync_req\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[43m_return_http_data_only\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_var_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_return_http_data_only\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# noqa: E501\u001b[39;49;00m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[43m_preload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_var_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_preload_content\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43m_request_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_var_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m_request_timeout\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[43m \u001b[49m\u001b[43mcollection_formats\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcollection_formats\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api_client.py:364\u001b[0m, in \u001b[0;36mApiClient.call_api\u001b[0;34m(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, async_req, _return_http_data_only, collection_formats, _preload_content, _request_timeout, _host)\u001b[0m\n\u001b[1;32m 363\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m async_req:\n\u001b[0;32m--> 364\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__call_api\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresource_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 365\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheader_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 366\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpost_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfiles\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 367\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_type\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth_settings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 368\u001b[0m \u001b[43m \u001b[49m\u001b[43m_return_http_data_only\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcollection_formats\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 369\u001b[0m \u001b[43m \u001b[49m\u001b[43m_preload_content\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_request_timeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_host\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 371\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool\u001b[38;5;241m.\u001b[39mapply_async(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__call_api, (resource_path,\n\u001b[1;32m 372\u001b[0m method, path_params,\n\u001b[1;32m 373\u001b[0m query_params,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 381\u001b[0m _request_timeout,\n\u001b[1;32m 382\u001b[0m _host))\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api_client.py:188\u001b[0m, in \u001b[0;36mApiClient.__call_api\u001b[0;34m(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, _return_http_data_only, collection_formats, _preload_content, _request_timeout, _host)\u001b[0m\n\u001b[1;32m 187\u001b[0m e\u001b[38;5;241m.\u001b[39mbody \u001b[38;5;241m=\u001b[39m e\u001b[38;5;241m.\u001b[39mbody\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m six\u001b[38;5;241m.\u001b[39mPY3 \u001b[38;5;28;01melse\u001b[39;00m e\u001b[38;5;241m.\u001b[39mbody\n\u001b[0;32m--> 188\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 190\u001b[0m content_type \u001b[38;5;241m=\u001b[39m response_data\u001b[38;5;241m.\u001b[39mgetheader(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent-type\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api_client.py:181\u001b[0m, in \u001b[0;36mApiClient.__call_api\u001b[0;34m(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, _return_http_data_only, collection_formats, _preload_content, _request_timeout, _host)\u001b[0m\n\u001b[1;32m 179\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 180\u001b[0m \u001b[38;5;66;03m# perform request and return response\u001b[39;00m\n\u001b[0;32m--> 181\u001b[0m response_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 182\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheader_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 183\u001b[0m \u001b[43m \u001b[49m\u001b[43mpost_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpost_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[43m \u001b[49m\u001b[43m_preload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_preload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 185\u001b[0m \u001b[43m \u001b[49m\u001b[43m_request_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_request_timeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 186\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ApiException \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/api_client.py:407\u001b[0m, in \u001b[0;36mApiClient.request\u001b[0;34m(self, method, url, query_params, headers, post_params, body, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPOST\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 407\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrest_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPOST\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 408\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 409\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 410\u001b[0m \u001b[43m \u001b[49m\u001b[43mpost_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpost_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 411\u001b[0m \u001b[43m \u001b[49m\u001b[43m_preload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_preload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 412\u001b[0m \u001b[43m \u001b[49m\u001b[43m_request_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_request_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 413\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 414\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPUT\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/rest.py:265\u001b[0m, in \u001b[0;36mRESTClientObject.POST\u001b[0;34m(self, url, headers, query_params, post_params, body, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mPOST\u001b[39m(\u001b[38;5;28mself\u001b[39m, url, headers\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, query_params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, post_params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 264\u001b[0m body\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, _preload_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, _request_timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m--> 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 266\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 267\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 268\u001b[0m \u001b[43m \u001b[49m\u001b[43mpost_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpost_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 269\u001b[0m \u001b[43m \u001b[49m\u001b[43m_preload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_preload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 270\u001b[0m \u001b[43m \u001b[49m\u001b[43m_request_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_request_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 271\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/apis/user/rest.py:224\u001b[0m, in \u001b[0;36mRESTClientObject.request\u001b[0;34m(self, method, url, query_params, headers, body, post_params, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mstatus \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m299\u001b[39m:\n\u001b[0;32m--> 224\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ApiException(http_resp\u001b[38;5;241m=\u001b[39mr)\n\u001b[1;32m 226\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m r\n", + "\u001b[0;31mApiException\u001b[0m: (503)\nReason: Service Unavailable\nHTTP response headers: HTTPHeaderDict({'pragma': 'no-cache', 'cache-control': 'private, max-age=0, no-cache, no-store', 'content-type': 'text/html'})\nHTTP response body: \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n

Application is not available

\r\n

The application is currently not serving requests at this endpoint. It may not have been started or is still starting.

\r\n\r\n
\r\n

\r\n Possible reasons you are seeing this page:\r\n

\r\n
    \r\n
  • \r\n The host doesn't exist.\r\n Make sure the hostname was typed correctly and that a route matching this hostname exists.\r\n
  • \r\n
  • \r\n The host exists, but doesn't have a matching path.\r\n Check if the URL path was typed correctly and that the route was created using the desired path.\r\n
  • \r\n
  • \r\n Route and path matches, but all pods are down.\r\n Make sure that the resources exposed by this route (pods, services, deployment configs, etc) have at least one pod running.\r\n
  • \r\n
\r\n
\r\n
\r\n \r\n\r\n\n", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m api \u001b[38;5;241m=\u001b[39m \u001b[43mCpsApi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_env\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprofile_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mPROFILE_NAME\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/client/api.py:182\u001b[0m, in \u001b[0;36mCpsApi.from_env\u001b[0;34m(cls, profile_name)\u001b[0m\n\u001b[1;32m 180\u001b[0m settings_mgr \u001b[38;5;241m=\u001b[39m SettingsManager()\n\u001b[1;32m 181\u001b[0m settings \u001b[38;5;241m=\u001b[39m settings_mgr\u001b[38;5;241m.\u001b[39mget_profile_settings(profile_name\u001b[38;5;241m=\u001b[39mprofile_name)\n\u001b[0;32m--> 182\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_settings\u001b[49m\u001b[43m(\u001b[49m\u001b[43msettings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msettings\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/client/api.py:203\u001b[0m, in \u001b[0;36mCpsApi.from_settings\u001b[0;34m(cls, settings)\u001b[0m\n\u001b[1;32m 194\u001b[0m auth \u001b[38;5;241m=\u001b[39m DeepSearchKeyAuth(\n\u001b[1;32m 195\u001b[0m username\u001b[38;5;241m=\u001b[39msettings\u001b[38;5;241m.\u001b[39musername,\n\u001b[1;32m 196\u001b[0m api_key\u001b[38;5;241m=\u001b[39msettings\u001b[38;5;241m.\u001b[39mapi_key\u001b[38;5;241m.\u001b[39mget_secret_value(),\n\u001b[1;32m 197\u001b[0m )\n\u001b[1;32m 198\u001b[0m config \u001b[38;5;241m=\u001b[39m DeepSearchConfig(\n\u001b[1;32m 199\u001b[0m host\u001b[38;5;241m=\u001b[39msettings\u001b[38;5;241m.\u001b[39mhost,\n\u001b[1;32m 200\u001b[0m auth\u001b[38;5;241m=\u001b[39mauth,\n\u001b[1;32m 201\u001b[0m verify_ssl\u001b[38;5;241m=\u001b[39msettings\u001b[38;5;241m.\u001b[39mverify_ssl,\n\u001b[1;32m 202\u001b[0m )\n\u001b[0;32m--> 203\u001b[0m client \u001b[38;5;241m=\u001b[39m \u001b[43mCpsApiClient\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mcls\u001b[39m(client)\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/client/api.py:37\u001b[0m, in \u001b[0;36mCpsApiClient.__init__\u001b[0;34m(self, config)\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig \u001b[38;5;241m=\u001b[39m config\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mauth, DeepSearchKeyAuth):\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbearer_token_auth \u001b[38;5;241m=\u001b[39m DeepSearchBearerTokenAuth(\n\u001b[0;32m---> 37\u001b[0m bearer_token\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_authenticate_with_api_key\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 38\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 39\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43musername\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapi_key\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 41\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 42\u001b[0m )\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# config.auth is of type DeepSearchAuth, which is either DeepSearchKeyAuth or DeepSearchBearerTokenAuth\u001b[39;00m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbearer_token_auth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mauth\n", + "File \u001b[0;32m~/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/deepsearch/cps/client/api.py:101\u001b[0m, in \u001b[0;36mCpsApiClient._authenticate_with_api_key\u001b[0;34m(host, username, api_key)\u001b[0m\n\u001b[1;32m 99\u001b[0m access_token \u001b[38;5;241m=\u001b[39m api\u001b[38;5;241m.\u001b[39mget_access_token(options\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124madmin\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mFalse\u001b[39;00m})\u001b[38;5;241m.\u001b[39maccess_token\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m deepsearch\u001b[38;5;241m.\u001b[39mcps\u001b[38;5;241m.\u001b[39mapis\u001b[38;5;241m.\u001b[39muser\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mApiException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe API Key or User is invalid.\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m access_token\n", + "\u001b[0;31mRuntimeError\u001b[0m: The API Key or User is invalid." + ] + } + ], "source": [ "api = CpsApi.from_env(profile_name=PROFILE_NAME)" ] diff --git a/examples/data_query_quick_start/quick_start.ipynb b/examples/data_query_quick_start/quick_start.ipynb index 0d3aa3a..a724f70 100644 --- a/examples/data_query_quick_start/quick_start.ipynb +++ b/examples/data_query_quick_start/quick_start.ipynb @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "id": "1ea3cd26", "metadata": { "execution": { @@ -92,6 +92,7 @@ "source": [ "# Import standard dependenices\n", "from copy import deepcopy\n", + "from datetime import datetime\n", "import pandas as pd\n", "from numerize.numerize import numerize\n", "from tqdm.notebook import tqdm\n", @@ -185,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "id": "f915761b", "metadata": { "execution": { @@ -231,7 +232,7 @@ " AAAI\n", " Document\n", " 16.02K\n", - " 2024-01-23\n", + " 2023-08-29\n", " default/aaai\n", " \n", " \n", @@ -239,7 +240,7 @@ " ACL Anthology\n", " Document\n", " 55.28K\n", - " 2023-10-05\n", + " 2023-08-22\n", " default/acl\n", " \n", " \n", @@ -247,193 +248,106 @@ " Annual Reports\n", " Document\n", " 107.38K\n", - " 2024-01-23\n", + " 2024-04-15\n", " default/annual-report\n", " \n", " \n", " 3\n", " arXiv abstracts\n", " Document\n", - " 2.35M\n", - " 2023-10-24\n", + " 2.48M\n", + " 2024-05-22\n", " default/arxiv-abstract\n", " \n", " \n", " 4\n", - " arXiv full documents\n", - " Document\n", - " 2.29M\n", - " 2024-01-27\n", - " default/arxiv\n", - " \n", - " \n", - " 5\n", - " ClinicalTrials\n", - " Document\n", - " 426.42K\n", - " 2023-06-01\n", - " default/clinical-trials\n", - " \n", - " \n", - " 6\n", - " Cord19\n", - " Document\n", - " 655.45K\n", - " 2023-04-14\n", - " default/cord19\n", - " \n", - " \n", - " 7\n", - " Crossref\n", - " Document\n", - " 131.86M\n", - " 2023-04-15\n", - " default/crossref\n", - " \n", - " \n", - " 8\n", - " ESG Reports\n", - " Document\n", - " 17.36K\n", - " 2024-01-22\n", - " default/esg-report\n", - " \n", - " \n", - " 9\n", - " IBM Redbooks\n", - " Document\n", - " 2.75K\n", - " 2023-08-02\n", - " default/ibm-redbooks\n", - " \n", - " \n", - " 10\n", - " IPCC\n", - " Document\n", - " 819\n", - " 2023-06-15\n", - " default/ipcc\n", - " \n", - " \n", - " 11\n", - " PatCID\n", + " arXiv category taxonomy\n", " Record\n", - " 13.03M\n", - " 2023-09-05\n", - " default/patcid\n", + " 155\n", + " 2024-05-22\n", + " default/arxiv-category\n", " \n", " \n", - " 12\n", - " Patent SMILES\n", - " Document\n", - " 2.84M\n", - " 2024-01-21\n", - " default/patent-smiles\n", - " \n", - " \n", - " 13\n", - " Patents from USPTO\n", - " Document\n", - " 15.76M\n", - " 2023-09-07\n", - " default/patent-uspto\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 14\n", - " PLOS\n", - " Document\n", - " 340.28K\n", - " 2024-01-22\n", - " default/plos\n", - " \n", - " \n", - " 15\n", - " Press Release\n", - " Document\n", - " 43.04K\n", - " 2024-02-27\n", - " default/press-release\n", + " 56\n", + " UMLS\n", + " Record\n", + " 2.69M\n", + " 2023-01-03\n", + " default/umls\n", " \n", " \n", - " 16\n", - " PubChem\n", + " 57\n", + " UniProt\n", " Record\n", - " 118.24M\n", - " 2023-10-06\n", - " default/pubchem\n", + " 567.48K\n", + " 2023-01-03\n", + " default/uniprot\n", " \n", " \n", - " 17\n", - " PubMed Central\n", + " 58\n", + " USPTO patents for NER\n", " Document\n", - " 5.08M\n", - " 2023-04-12\n", - " default/pubmed\n", + " 2.64K\n", + " 2023-03-20\n", + " default/uspto-for-ner\n", " \n", " \n", - " 18\n", - " Red Hat\n", + " 59\n", + " VHDL articles\n", " Document\n", - " 6.21K\n", - " 2023-07-14\n", - " default/redhat\n", + " 215\n", + " 2024-04-23\n", + " default/vhdl\n", " \n", " \n", - " 19\n", - " Semantic Scholar Academic Graph\n", + " 60\n", + " Wikipedia\n", " Document\n", - " 212.11M\n", - " 2023-05-28\n", - " default/semantic-scholar\n", + " 6.45M\n", + " 2024-02-26\n", + " default/wikipedia\n", " \n", " \n", "\n", + "

61 rows × 5 columns

\n", "" ], "text/plain": [ - " Name Type Num entries Date \\\n", - "0 AAAI Document 16.02K 2024-01-23 \n", - "1 ACL Anthology Document 55.28K 2023-10-05 \n", - "2 Annual Reports Document 107.38K 2024-01-23 \n", - "3 arXiv abstracts Document 2.35M 2023-10-24 \n", - "4 arXiv full documents Document 2.29M 2024-01-27 \n", - "5 ClinicalTrials Document 426.42K 2023-06-01 \n", - "6 Cord19 Document 655.45K 2023-04-14 \n", - "7 Crossref Document 131.86M 2023-04-15 \n", - "8 ESG Reports Document 17.36K 2024-01-22 \n", - "9 IBM Redbooks Document 2.75K 2023-08-02 \n", - "10 IPCC Document 819 2023-06-15 \n", - "11 PatCID Record 13.03M 2023-09-05 \n", - "12 Patent SMILES Document 2.84M 2024-01-21 \n", - "13 Patents from USPTO Document 15.76M 2023-09-07 \n", - "14 PLOS Document 340.28K 2024-01-22 \n", - "15 Press Release Document 43.04K 2024-02-27 \n", - "16 PubChem Record 118.24M 2023-10-06 \n", - "17 PubMed Central Document 5.08M 2023-04-12 \n", - "18 Red Hat Document 6.21K 2023-07-14 \n", - "19 Semantic Scholar Academic Graph Document 212.11M 2023-05-28 \n", + " Name Type Num entries Date \\\n", + "0 AAAI Document 16.02K 2023-08-29 \n", + "1 ACL Anthology Document 55.28K 2023-08-22 \n", + "2 Annual Reports Document 107.38K 2024-04-15 \n", + "3 arXiv abstracts Document 2.48M 2024-05-22 \n", + "4 arXiv category taxonomy Record 155 2024-05-22 \n", + ".. ... ... ... ... \n", + "56 UMLS Record 2.69M 2023-01-03 \n", + "57 UniProt Record 567.48K 2023-01-03 \n", + "58 USPTO patents for NER Document 2.64K 2023-03-20 \n", + "59 VHDL articles Document 215 2024-04-23 \n", + "60 Wikipedia Document 6.45M 2024-02-26 \n", + "\n", + " Coords \n", + "0 default/aaai \n", + "1 default/acl \n", + "2 default/annual-report \n", + "3 default/arxiv-abstract \n", + "4 default/arxiv-category \n", + ".. ... \n", + "56 default/umls \n", + "57 default/uniprot \n", + "58 default/uspto-for-ner \n", + "59 default/vhdl \n", + "60 default/wikipedia \n", "\n", - " Coords \n", - "0 default/aaai \n", - "1 default/acl \n", - "2 default/annual-report \n", - "3 default/arxiv-abstract \n", - "4 default/arxiv \n", - "5 default/clinical-trials \n", - "6 default/cord19 \n", - "7 default/crossref \n", - "8 default/esg-report \n", - "9 default/ibm-redbooks \n", - "10 default/ipcc \n", - "11 default/patcid \n", - "12 default/patent-smiles \n", - "13 default/patent-uspto \n", - "14 default/plos \n", - "15 default/press-release \n", - "16 default/pubchem \n", - "17 default/pubmed \n", - "18 default/redhat \n", - "19 default/semantic-scholar " + "[61 rows x 5 columns]" ] }, "metadata": {}, @@ -447,7 +361,7 @@ " \"Name\": c.name,\n", " \"Type\": c.metadata.type,\n", " \"Num entries\": numerize(c.documents),\n", - " \"Date\": c.metadata.created.strftime(\"%Y-%m-%d\"),\n", + " \"Date\": datetime.fromisoformat(c.metadata.created).strftime(\"%Y-%m-%d\"),\n", " \"Coords\": f\"{c.source.elastic_id}/{c.source.index_key}\",\n", " }\n", " for c in collections\n", @@ -469,7 +383,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "id": "81df4c38", "metadata": { "execution": { @@ -484,12 +398,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ebe3e6e6cd604219bccebb0b6d93f30c", + "model_id": "c1eafade180c44bd8f392727d20b0ed5", "version_major": 2, "version_minor": 0 }, "text/plain": [ - " 0%| | 0/20 [00:00\n", " \n", " 0\n", - " Semantic Scholar Academic Graph\n", - " 10939\n", + " Patents from USPTO\n", + " 11755\n", " \n", " \n", " 1\n", - " Patents from USPTO\n", - " 10487\n", + " Semantic Scholar Academic Graph\n", + " 11648\n", " \n", " \n", " 2\n", @@ -538,103 +452,229 @@ " \n", " \n", " 3\n", + " Patents from EPO\n", + " 2929\n", + " \n", + " \n", + " 4\n", " arXiv full documents\n", " 2031\n", " \n", " \n", - " 4\n", + " 5\n", + " News\n", + " 1478\n", + " \n", + " \n", + " 6\n", " PLOS\n", " 570\n", " \n", " \n", - " 5\n", + " 7\n", + " Wikipedia\n", + " 477\n", + " \n", + " \n", + " 8\n", + " BioRxiv\n", + " 447\n", + " \n", + " \n", + " 9\n", + " Patents from KIPO\n", + " 212\n", + " \n", + " \n", + " 10\n", " Annual Reports\n", " 194\n", " \n", " \n", - " 6\n", + " 11\n", + " IEEE\n", + " 187\n", + " \n", + " \n", + " 12\n", " Cord19\n", " 93\n", " \n", " \n", - " 7\n", + " 13\n", + " ChemRxiv\n", + " 79\n", + " \n", + " \n", + " 14\n", " arXiv abstracts\n", + " 75\n", + " \n", + " \n", + " 15\n", + " PubMed Central (PDF)\n", " 70\n", " \n", " \n", - " 8\n", + " 16\n", + " DOAB\n", + " 62\n", + " \n", + " \n", + " 17\n", " ESG Reports\n", " 33\n", " \n", " \n", - " 9\n", + " 18\n", + " Patents from JPO\n", + " 31\n", + " \n", + " \n", + " 19\n", + " SEC Edgar filings\n", + " 26\n", + " \n", + " \n", + " 20\n", + " MedRxiv\n", + " 24\n", + " \n", + " \n", + " 21\n", " IBM Redbooks\n", " 20\n", " \n", " \n", - " 10\n", + " 22\n", + " USPTO patents for NER\n", + " 17\n", + " \n", + " \n", + " 23\n", + " engrXiv\n", + " 12\n", + " \n", + " \n", + " 24\n", " ACL Anthology\n", " 9\n", " \n", " \n", - " 11\n", + " 25\n", " IPCC\n", " 7\n", " \n", " \n", - " 12\n", - " Press Release\n", - " 4\n", + " 26\n", + " OpenCVF\n", + " 6\n", " \n", " \n", - " 13\n", + " 27\n", " AAAI\n", " 2\n", " \n", " \n", - " 14\n", + " 28\n", " ClinicalTrials\n", " 1\n", " \n", " \n", - " 15\n", + " 29\n", + " OpenStax\n", + " 1\n", + " \n", + " \n", + " 30\n", " Crossref\n", " 0\n", " \n", " \n", - " 16\n", + " 31\n", + " FDA Adverse Event Reporting System (FAERS)\n", + " 0\n", + " \n", + " \n", + " 32\n", + " HBCP Open Access Corpus\n", + " 0\n", + " \n", + " \n", + " 33\n", + " Material Components\n", + " 0\n", + " \n", + " \n", + " 34\n", + " NeurIPS\n", + " 0\n", + " \n", + " \n", + " 35\n", " Patent SMILES\n", " 0\n", " \n", " \n", - " 17\n", + " 36\n", + " Patents from CNIPR\n", + " 0\n", + " \n", + " \n", + " 37\n", " Red Hat\n", " 0\n", " \n", + " \n", + " 38\n", + " VHDL articles\n", + " 0\n", + " \n", " \n", "\n", "" ], "text/plain": [ - " name matches\n", - "0 Semantic Scholar Academic Graph 10939\n", - "1 Patents from USPTO 10487\n", - "2 PubMed Central 6050\n", - "3 arXiv full documents 2031\n", - "4 PLOS 570\n", - "5 Annual Reports 194\n", - "6 Cord19 93\n", - "7 arXiv abstracts 70\n", - "8 ESG Reports 33\n", - "9 IBM Redbooks 20\n", - "10 ACL Anthology 9\n", - "11 IPCC 7\n", - "12 Press Release 4\n", - "13 AAAI 2\n", - "14 ClinicalTrials 1\n", - "15 Crossref 0\n", - "16 Patent SMILES 0\n", - "17 Red Hat 0" + " name matches\n", + "0 Patents from USPTO 11755\n", + "1 Semantic Scholar Academic Graph 11648\n", + "2 PubMed Central 6050\n", + "3 Patents from EPO 2929\n", + "4 arXiv full documents 2031\n", + "5 News 1478\n", + "6 PLOS 570\n", + "7 Wikipedia 477\n", + "8 BioRxiv 447\n", + "9 Patents from KIPO 212\n", + "10 Annual Reports 194\n", + "11 IEEE 187\n", + "12 Cord19 93\n", + "13 ChemRxiv 79\n", + "14 arXiv abstracts 75\n", + "15 PubMed Central (PDF) 70\n", + "16 DOAB 62\n", + "17 ESG Reports 33\n", + "18 Patents from JPO 31\n", + "19 SEC Edgar filings 26\n", + "20 MedRxiv 24\n", + "21 IBM Redbooks 20\n", + "22 USPTO patents for NER 17\n", + "23 engrXiv 12\n", + "24 ACL Anthology 9\n", + "25 IPCC 7\n", + "26 OpenCVF 6\n", + "27 AAAI 2\n", + "28 ClinicalTrials 1\n", + "29 OpenStax 1\n", + "30 Crossref 0\n", + "31 FDA Adverse Event Reporting System (FAERS) 0\n", + "32 HBCP Open Access Corpus 0\n", + "33 Material Components 0\n", + "34 NeurIPS 0\n", + "35 Patent SMILES 0\n", + "36 Patents from CNIPR 0\n", + "37 Red Hat 0\n", + "38 VHDL articles 0" ] }, "metadata": {}, @@ -666,7 +706,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "id": "115b4ee0", "metadata": { "execution": { @@ -681,16 +721,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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ZKhFNWJTYjWlMTktGTJBBgPBADLZ63+FrP+Vy+SwNLaEoQFLHxHpPxZEIiIiItIikzoAERERERUuLIhEREREpIUFkYiIiIi0sCASERERkRYWRCIiIiLSwoJIRERERFpYEImIiIhICwsiEREREWlhQSQiIiIiLSyIRERERKSFBZGIiIiItLAgEhEREZEWFkQiIiIi0sKCSERERERaWBCJiIiISAsLIhERERFpYUEkIiIiIi0siERERESkhQWRiIiIiLSwIBIRERGRFhZEIiIiItLCgkhEREREWlgQiYiIiEgLCyIRERERaWFBJCIiIiItLIhEREREpIUFkYiIiIi0sCASERERkRYWRCIiIiLSwoJIRERERFpYEImIiIhICwsiEREREWlhQSQiIiIiLSyIRERERKSFBZGIiIiItLAgEhEREZEWFkQiIiIi0sKCSERERERaWBCJiIiISAsLIhERERFpYUEkIiIiIi3ynD5ApVIhNTU1P7IQERERUT4wNDSEgYFBtqfPdkEURRFPnjxBdHT0x+QiIiIiIglZWlrC3t4egiB8cNpsF8SMcmhrawszM7NszZyIiIiIpCWKIhISEvDs2TMAgIODwwcfk62CqFKpNOXQxsYmdymJiIiIqECZmpoCAJ49ewZbW9sPbm7O1kEqGfscmpmZ5TIeEREREUkho8dl51iSHB3FzM3KRERERLopJz2Op7khIiIiIi0siDomLCwMgiAgICBAsgwuLi5YunRprubRv39/tG/fPk/yFBYzZsxAlSpV8n05+vLaNW7cGGPHjpU6Br2HIAjYtWuX1DGICq2CWu9LIcfnQXyby6S9eZEjW8LmfZaj6Z8/f45p06Zh7969ePr0KaysrFC5cmVMmzYN9erVy6eUead///6Ijo7WWkE7OjoiIiICxYsX/+j57ty5E/Pnz0dwcDDUajWcnJzQokWLXJe+wuaHH37AlClTMG/ePHz99ddSx8kzy5YtgyiKuZrHkydP8MMPP2Dv3r14+PAhihUrBnd3d/Tu3Rv9+vUrkvsbP5x0okCXV3peg4963JMnTzBnzhzs3bsXjx49gq2tLapUqYKxY8eiWbNmeZxSW8ZyAwICYGRklOVpz/z8/DB16lQEBQVBoVCgX79+mDNnDuTyXL/d0BsqbqhYoMsL6heUo+n79++PDRs2AEg//56TkxP69u2Lb7/9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5BMsWbIkRyvLUqVKaQ52sbOz0zqNwNsqV66MxYsXY/78+ahQoQI2bdqEH374IdvLIqL/279/PxwcHLS+6tevDwAoV64czMzMMH78eFSpUgWffPIJtm3bht9++w19+vTRzOPHH3/E5s2bceXKFbRp0wYeHh7o0qUL1Go1zpw5AwsLixxlatmyJcqUKYM5c+bAzMwMx48fh5OTEzp27Ahvb2/NabrenG+zZs3g4eGBhg0bolu3bvj888+19g2fN28eOnXqhD59+qBatWq4ffs2Dhw4kOVWmTd16tQJLVu2RJMmTVCiRAls2bIFlpaWWLNmDerVq4dKlSrh8OHD+Pfff/Pt/HmUztXVFZcvX0aTJk0wfvx4VKhQAS1atICfnx9WrVqVL8vs168fli5dip9//hnly5dHmzZtEBoaCkCa96IpU6agWrVq8PHxQePGjWFvb4/27du/c3pLS0vs2LEDTZs2hbe3N1avXo0tW7agfPny+ZrzXQQxG3uTJiUl4d69eyhTpozWfmpEREQ50b9/f0RHR2susUZEBScnfa5IjyASERERUWYsiERERESkpUgfpEJERAVr/fr1UkcgomzgCCIRERERaWFBJCIiIiItLIhEREREpIUFkYiIiIi0sCASERERkRYWRCIiIiLSwoKYCy4uLli6dGmu5rFr1y64u7vDwMAAY8eOzdZj+vfvr3W5nsaNG2f7sRlmzJiBKlWq5OgxRER5xd/fH4IgIDo6GkD66W8sLS3zfblc91FOiaKIIUOGwNraGoIgICAgQOpIBSLX50EMLuudFzmyxftm3l/cOyurVq3C5MmTERQUBEdHR83to0aNwoEDBxAQEAAzMzNcuHABCoUiV8v68ssvMWDAAIwePRrm5ua5jU7vIAgCdu7c+d7rYFLRZn80oECX96RJlRxN//Yl6vr3748NGzZo7re2tkbNmjWxYMECVKpUSXO7IAgAgDNnzuCTTz7R3J6cnIySJUsiKioKR48eRePGjd+53IzlyOVylC5dGl26dMGsWbN46VUJLerWpkCXN37rnhw/5smTJ5gzZw727t2LR48ewdbWFlWqVMHYsWPRrFmzfEiZP/bv34/169fD398frq6uKF68uNSRCgRHEN+SmpqKoUOHolatWhg0aJDm9owLjK9fvx5mZmYAgBIlSmi+/xhxcXF49uwZfHx8ULJkSRZE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", + "image/png": "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rkSlrVLpOIpa9GsKNFv3Kh2jQYJej4DLLkPwpOth6N5d6ThERORlWDiJiMhtzHYz1hxfg58O/YS/T/wNu2RXOlKrm78hDf6rtysdow5Dz54IGD8OgePHQxUQoHQcIiLyUiycRETUKkrMJfj1yK/46dBP2J63HTJ84+Xnrd29EP3DZqVjAAB0KSkIGDsWAWPHQtsuVuk4RETkA1g4iYio1Z2oOIGfD/+M1cdWY3fBbq+e5fbFw73Q6QvlCqcuNRUBl14C/0suhS6xg2I5iIjIN7FwEhGRokrMJfj75N/46/hfWHdyHUosJUpHcqkHcnpg4CdbW217otEIvwsugHHwIJiGDoU2Lq7Vtk1ERHQ2Fk4iIvIYkixhV/4u/HXiL/x1/C/sL9rf5ofeTi5JxRXv/eO+DYgi9F271hTMCy+EoWdPCGq1+7ZHRETUBCycRETksYrMRdiZtxM783diR/4O7C3ci2p7tdKxmmR4VQLufOuA61ao0UCfkgJ99zQY+/eHceBAqIKCXLd+IiIiF2LhJCKiNsMu2ZFenO4soTvzd+JExQmlY51Tii0UL72e27wbCwK07dtD3707DGlpMHRPgy41FaJO59qQREREbsLCSUREbVqxuRiHSg/hUOkhHC49XPNvyWFkV2Z7xHBcvazGp7PN515IEKCOiIC2QwdoE+KhTUiALikZhrRuUAUGtk5QIiIiN2DhJCIir1Rlq0JWWRYOlx7G0bKjyK/OR351PgqqCpBfnY9Cc2GrnRd0yTw/CIIAdXgY1OHh0EREQhPfHroOHaBNSIA2Ph6in1+rZCEiImpNLJxEROSTZFlGiaWkpoRWF6DIXASL3QKzwwyLw1Lr/2Z7zb9WhxUalQZaUQutSguNqKn19el/A3WBCNYFI0gfhGBdMCI0wVDp9ErfZSIiolbHwklERERERERuISodgIiIiIiIiLwTCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuQULJxEREREREbkFCycRERERERG5BQsnERERERERuYW6KQvLsgy73Q6Hw+GuPEREREREROShVCoV1Go1BEFo1PKNLpxWqxXZ2dmoqqpqdjgiIiIiIiJq2/z8/BAdHQ2tVnveZQVZluXzLSRJEjIzM6FSqRAeHg6tVtvoRktERERERERtnyzLsFqtyM/Ph8PhQHJyMkTx3EdpNmoPp9VqhSRJiIuLg5+fn0vCEhERERERUdtiMBig0Whw5MgRWK1W6PX6cy7fpEmDztdeiYiIiIiIyLs1pReyQRIREREREZFbsHASERERERGRWzTptCj1SXj8J1fkaJSs2WNbbVttxcyZM/Hee+8hLy8P3333Ha688kqlIxG1Sfs6p7bq9lL373PLegVBaNPPBQsWLMCMGTNQUlKidBRSyPHH/2rV7bWbPaRVt0dE5Gu8eg/nLbfcAkEQIAgCtFotkpKS8MILL8Butzfq9gsWLEBQUJDbsrX0DeG+ffvw/PPP47///S+ys7Nx2WWXuSZcCwwbNgwzZsyoc/nZj2VVVRWeeOIJdOzYEXq9HuHh4bjooouwdOnSWus6/f3T6/Xo0qUL3n333TrX1fdn2LBhzvWsW7cOY8aMQXBwMPR6PdLS0jBnzhyeT5bapJycHNx7771ITEyETqdDXFwcxo8fj1WrVimaKysrq9bvYEhICC666CL89VfTysPEiRORkZHhppRErnPs2DFMnToVMTEx0Gq1iI+Px/3334/CwkJF8pzrucFqtSIsLAyzZ8+u97YvvvgiIiMjYbPZsGDBgnpfVz/66KNWvkdE5C1avIfT040ePRqffPIJLBYLli9fjunTp0Oj0eCJJ55QOlqLHTx4EABwxRVXNHiaGqvV2qjz47S2O++8Exs3bsTbb7+NLl26oLCwEOvWravzQn377bfjhRdeQFVVFT799FNMnz4dwcHB+Pbbb2G1WgHUvOj3798fK1euRNeuXQHAeZ+/++47TJgwAbfeeitWr16NoKAgrFy5Eo8++ijWr1+Pr776iqf4oTYjKysLgwcPRlBQEF577TWkpaXBZrNhxYoVmD59Ovbv3690ROfvYUFBAWbNmoVx48YhIyMDkZGRjbq9wWCAwWBwc0qiljl06BAGDhyIlJQULF68GB06dMCePXvwyCOP4Oeff8aGDRsQEhLSanka89xw44034pNPPsHjjz9e67ayLGPBggW46aaboNFoAAABAQFIT0+vtVxgYGCr3R8i8i5evYcTAHQ6HaKiohAfH4+77roLI0eOxLJlywAAc+bMQVpaGoxGI+Li4nD33XejoqICALBmzRrceuutKC0tdX66N3PmTACAxWLBww8/jNjYWBiNRlxwwQVYs2aNc5un9+atWLECqampMJlMGD16NLKzswHUDINduHAhli5d6lz3mjVrYLVacc899yA6Ohp6vR7x8fH497//Xe/9mjlzJsaPHw+gZpao06Xp9J7TWbNmISYmBp06dQIA/PPPPxg+fDgMBgNCQ0Nxxx13OO/rmbd7+eWXERkZiaCgIOfe4EceeQQhISFo164dPvnkE5d8X5YtW4Ynn3wSY8aMQUJCAvr06YN7770XU6dOrbWcn58foqKikJiYiJkzZyI5ORnLli1DSEgIoqKiEBUVhfDwcABAaGio87KQkBBUVlbi9ttvx+WXX44PPvgAPXv2REJCAm677TYsXLgQX3/9Nb766iuX3B+i1nD33XdDEARs2rQJ11xzDVJSUtC1a1c8+OCD2LBhg3O5goICXHXVVfDz83P+zpxp9+7duOyyy2AymRAZGYkpU6agoKDAef2wYcNw7733YsaMGQgODkZkZCQ+/PBDVFZW4tZbb4W/vz+SkpLw888/18l4+vewW7duePLJJ1FWVoaNGzcCAMxmM7p27Yo77rjDufzBgwfh7++Pjz/+GEDt0RAZGRkQBKFOkX7zzTfRsWPHlj2YRC0wffp0aLVa/Prrr7jooovQvn17XHbZZVi5ciVOnDiBp556CgCQkJCAF198EZMmTYLRaERsbCzmzZtXa10lJSW47bbbEB4ejoCAAAwfPhw7d+50Xj9z5kz07NkTn332GRISEhAYGIjrr78e5eXlzmUa89wwbdo0ZGRk4O+//661/T/++AOHDh3CtGnTnJcJguB8PT39hx8EEVFzeX3hPJvBYHDuGRNFEXPnzsWePXuwcOFC/P7773j00UcBAIMGDcJ//vMfBAQEIDs7G9nZ2Xj44YcBAPfccw/Wr1+PL774Art27cJ1112H0aNHIzMz07mdqqoqvP766/jss8/w559/4ujRo87bP/zww5gwYYKzhGZnZ2PQoEGYO3culi1bhq+++grp6elYtGgREhIS6r0fDz/8sLP8nV7HaatWrUJ6ejp+++03/Pjjj6isrMSll16K4OBgbN68GUuWLMHKlStxzz331Frn77//jpMnT+LPP//EnDlz8Nxzz2HcuHEIDg7Gxo0bceedd+Jf//oXjh8/3uLvQ1RUFJYvX17rBbMxzvz+nc+vv/6KwsJC5+N+pvHjxzs/mSZqC4qKivDLL79g+vTpMBqNda4/c8j6888/jwkTJmDXrl0YM2YMJk+ejKKiIgA1b26HDx+OXr16YcuWLfjll1+Qm5uLCRMm1FrfwoULERYWhk2bNuHee+/FXXfdheuuuw6DBg3Ctm3bcMkll2DKlCmoqqqqN291dTU+/fRTAP8/4kCv12PRokXOD9wcDgduvPFGjBo1qs6HTQCQkpKCvn37YtGiRbUuX7RoEW644YbGP3hELlRUVIQVK1bg7rvvrlPCoqKiMHnyZHz55ZeQZRkA8Nprr6FHjx7Yvn07Hn/8cdx///347bffnLe57rrrkJeXh59//hlbt25F7969MWLECOfvLFDzwcz333+PH3/8ET/++CP++OMP5/DYxj43pKWloV+/fs4Pd0775JNPMGjQIHTu3Nkljw8R0dl8pnDKsoyVK1dixYoVGD58OABgxowZuPjii5GQkIDhw4fjpZdecu7x0mq1CAwMrPUpn8lkwtGjR/HJJ59gyZIlGDJkCDp27IiHH34YF154Ya29fzabDe+//z769u2L3r1745577nEeY2UymWAwGJx7X6OioqDVanH06FEkJyfjwgsvRHx8PC688EJMmjSp3vtjMpmcLyKn13Ga0WjERx99hK5du6Jr1674/PPPYTab8emnn6Jbt24YPnw43nnnHXz22WfIzc113i4kJARz585Fp06dMHXqVHTq1AlVVVV48sknkZycjCeeeAJarbbOp6PN8cEHH2DdunUIDQ1Fv3798MADD2Dt2rUNLu9wOPC///0Pu3btcn7/zuf0cWCpqfVPBtO5c2ceK0ZtxoEDByDLcqPeFN5yyy2YNGkSkpKS8PLLL6OiogKbNm0CALzzzjvo1asXXn75ZXTu3Bm9evXCxx9/jNWrV9f6fejRoweefvpp5+++Xq9HWFgYbr/9diQnJ+PZZ59FYWEhdu3aVWvbgwYNgslkgtFoxOuvv44+ffpgxIgRzut79uyJl156CbfddhtmzJiBI0eO4MMPP2zwvkyePLnWB0MZGRnYunUrJk+e3OjHjsiVMjMzIctyg68tqampKC4uRn5+PgBg8ODBePzxx5GSkoJ7770X1157Ld58800AwN9//41NmzZhyZIl6Nu3L5KTk/H6668jKCgIX3/9tXOdkiRhwYIF6NatG4YMGYIpU6Y431M05blh2rRpWLJkiXOEU3l5Ob7++us6H/iUlpbCZDI5/5z5HoOIqKm8vnD++OOPMJlM0Ov1uOyyyzBx4kTn0NiVK1dixIgRiI2Nhb+/P6ZMmYLCwsIGP7EHaoamOhwOpKSk1Hoy/uOPP5zHVAI1Q0HPHPIVHR2NvLy8c2a95ZZbsGPHDnTq1An33Xcffv3112bd57S0tFrHbe7btw89evSo9cnn4MGDIUlSrWM0unbtWuskrpGRkUhLS3N+rVKpEBoaet770RhDhw7FoUOHsGrVKlx77bXYs2cPhgwZghdffLHWcu+++66zoN9+++144IEHcNdddzVpW6c/ZSZqy5ryc9y9e3fn/41GIwICApy/tzt37sTq1atrPX+dfqN65nPYmes4/bt/5vPB6WMyz34++PLLL7F9+3Z88803SEpKwoIFC5zHhZ320EMPISUlBe+88w4+/vhjhIaGNnhfrr/+emRlZTmHBS5atAi9e/fm3hhSXGN/JwcOHFjn6337amap3rlzJyoqKhAaGlrrd/Lw4cO1fh8TEhLg7+/v/PrM9xRNeW6YNGkSHA6H88P1L7/8EqIoYuLEibWW8/f3x44dO5x/1q1b1+htEBGdzesnDbr44ovx3nvvQavVIiYmBmp1zV3OysrCuHHjcNddd2HWrFkICQnB33//jWnTpsFqtcLPz6/e9VVUVEClUmHr1q1QqVS1rjOZTM7/n/0GSxCE874o9O7dG4cPH8bPP/+MlStXYsKECRg5cmStTzkbo74hNY1RX+b6LpMkqcF1BAQEoLS0tM7lJSUldSYc0Gg0GDJkCIYMGYLHHnsML730El544QU89thjzsI8efJkPPXUUzAYDIiOjq5ViM8nJSUFQE3hHjRoUJ3r9+3bhy5dujR6fURKSk5Orvd4xvqc6/e2oqIC48ePxyuvvFLndtHR0edcx5mXnT5u/Ozng7i4OCQnJyM5ORl2ux1XXXUVdu/eDZ1O51wmLy8PGRkZUKlUyMzMxOjRoxu8L1FRURg+fDg+//xzDBgwAJ9//nmTP3QicqWkpCQIgoB9+/bhqquuqnP9vn37EBwc7Jxf4FwqKioQHR1dax6I084cJn+u3+mmPDcEBATg2muvxSeffIKpU6fik08+wYQJE2q9fwFqDjlKSko67/qIiBrD6/dwGo1GJCUloX379s6yCQBbt26FJEl44403MGDAAKSkpODkyZO1bqvVauucOqNXr15wOBzIy8tDUlJSrT9NGXJS37qBmheDiRMn4sMPP8SXX36Jb775ptZxHM2RmpqKnTt3orKy0nnZ2rVrIYqic1IhV+nUqRO2bdtW5/Jt27Y5C2BDunTpArvdDrPZ7LwsMDAQSUlJiI2NbVLZBIBLLrkEISEheOONN+pct2zZMmRmZjY4ZJnI04SEhODSSy/FvHnzav0un9bY81b27t0be/bsQUJCQp3nsOZ+WNWQa6+9Fmq12nk6o9OmTp2KtLQ0LFy4EI899phzb09DTh8Tt379ehw6dAjXX3+9S3MSNUVoaChGjRqFd999F9XV1bWuy8nJwaJFizBx4kTnhzJnTuh1+uvTw3F79+6NnJwcqNXqOr+PYWFhjcrT1OeGadOm4e+//8aPP/6IdevW1ZosiIjIHby+cDYkKSkJNpsNb7/9Ng4dOoTPPvsM77//fq1lEhISUFFRgVWrVqGgoABVVVVISUnB5MmTcdNNN+Hbb7/F4cOHsWnTJvz73//GTz/91OjtJyQkYNeuXUhPT0dBQQFsNhvmzJmDxYsXY//+/cjIyMCSJUsQFRXV4nOBTp48GXq9HjfffDN2796N1atX495778WUKVMafaqCxrrrrruQkZGB++67z3n/Tt+vhx56yLncsGHD8N///hdbt25FVlYWli9fjieffBIXX3wxAgICXJLFaDTiv//9L5YuXYo77rgDu3btQlZWFubPn49bbrkF1157bZ2JUog82bx58+BwONC/f3988803yMzMxL59+zB37tw6w/YaMn36dBQVFWHSpEnYvHkzDh48iBUrVuDWW291+blpBUHAfffdh9mzZzsPVZg3bx7Wr1+PhQsXYvLkybjyyisxefLkc04GdvXVV6O8vBx33XUXLr74YsTExLg0J1FTvfPOO7BYLLj00kvx559/4tixY/jll18watQoxMbGYtasWc5l165di1dffRUZGRmYN28elixZgvvvvx8AMHLkSAwcOBBXXnklfv31V2RlZWHdunV46qmnsGXLlkbnacpzw9ChQ5GUlISbbroJnTt3rncEEBGRK7V4SG3W7LGuyNHqevTogTlz5uCVV17BE088gaFDh+Lf//43brrpJucygwYNwp133omJEyeisLAQzz33HGbOnIlPPvkEL730Eh566CGcOHECYWFhGDBgAMaNG9fo7d9+++1Ys2YN+vbti4qKCqxevRr+/v549dVXkZmZCZVKhX79+mH58uVN3rN3Nj8/P6xYsQL3338/+vXrBz8/P1xzzTWYM2dOi9Zbn8TERPz555946qmnMHLkSFitVnTu3BlLliypNWzu0ksvxcKFC/Hkk0+iqqoKMTExGDduHJ599lmX5rn22muxevVqzJo1C0OGDIHZbEZycjKeeuopzJgxg+fgJKfU/efey+YJEhMTsW3bNsyaNQsPPfQQsrOzER4ejj59+uC9995r1DpiYmKwdu1aPPbYY7jkkktgsVgQHx+P0aNHt/i5pj4333wznnrqKbzzzju4/PLL8cgjj2D+/PmIi4sDUHOcdvfu3fHMM8/UO8wXqDmebPz48fjqq6/qzLBJ3qfd7CFKRziv5ORkbNmyBc899xwmTJiAoqIiREVF4corr8Rzzz1X6xycDz30ELZs2YLnn38eAQEBmDNnDi699FIANR/KLF++HE899RRuvfVW5OfnIyoqCkOHDm3SB8JNeW4QBAFTp07Fk08+6RXnJCcizyfIjTja3Gw24/Dhw+jQoQP0en1r5CIiIiJq0xISEjBjxgzMmDFD6ShERC7VlH7os0NqiYiIiIiIyL1YOImIiIiIiMgtvP60KERERERKyMrKUjoCEZHiuIeTiIiIiIiI3IKFk4iIiIiIiNyChZOIiIiIiIjcgoWTiIiIiIiI3IKFk4iIiIiIiNyChZOIiIiIiIjcouWnRZkZ6IIYjd1Waetty0NlZWWhQ4cO2L59O3r27KlIhoSEBMyYMQMzZsxo9jpuueUWlJSU4Pvvv3dZLqXNnDkT33//PXbs2OHW7XjLYzds2DD07NkT//nPf5SOAgCYd+fvrbq96e8Pb9XtnY8rfq/Px9O+5+SZZs6c6dXbIyLyNV69hzM/Px933XUX2rdvD51Oh6ioKFx66aVYu3at0tEa5ZZbbsGVV15Z67K4uDhkZ2ejW7duzV7vd999hwEDBiAwMBD+/v7o2rWrW99kKuXf//43VCoVXnvtNaWjuNRbb72FBQsWtGgdOTk5uP/++5GUlAS9Xo/IyEgMHjwY7733HqqqqlwTlDzCe++9h6CgIBw7dqzW5ffeey9SUlKc3+/NmzfjjjvuUCJiow0bNqzVnqvWrFkDQRBQUlLSKtujtmf9+vVQqVQYO3Zsg8ssXrwYKpUK06dPP+e6zvV6tWDBAgQFBbU0LhGRYry6cF5zzTXYvn07Fi5ciIyMDCxbtgzDhg1DYWGh0tGaTaVSISoqCmp183ZOr1q1ChMnTsQ111yDTZs2YevWrZg1axZsNpuLk7rf+TJ//PHHePTRR/Hxxx+3UqLWERgY2KI3H4cOHUKvXr3w66+/4uWXX8b27duxfv16PProo/jxxx+xcuXKBm/bFn9OfJnNZsOdd96J/v37Y9q0ac7LV61ahffeew8LFiyAn58fACA8PNz5/7ZMlmXY7XalY5APmD9/Pu699178+eefOHnyZIPLPProo1i8eDHMZnOD6/LW1ysiIsCLC2dJSQn++usvvPLKK7j44osRHx+P/v3744knnsDll19ea7nbbrsN4eHhCAgIwPDhw7Fz507n9TNnzkTPnj3x8ccfo3379jCZTLj77rvhcDjw6quvIioqChEREZg1a1at7c+ZMwdpaWkwGo2Ii4vD3XffjYqKCuf1pz+xXLFiBVJTU2EymTB69GhkZ2c7t7tw4UIsXboUgiBAEASsWbMGWVlZEASh1rDNPXv2YNy4cQgICIC/vz+GDBmCgwcP1vu4/PDDDxg8eDAeeeQRdOrUCSkpKbjyyisxb968Osv169cPer0eYWFhuOqqq2pdX1VVhalTp8Lf3x/t27fHBx98UOv6f/75B8OHD4fBYEBoaCjuuOOOWvf/bL/88gsuvPBCBAUFITQ0FOPGjat1H07f7y+//BIXXXQR9Ho9Fi1a1OD6/vjjD1RXV+OFF15AWVkZ1q1bV+t6SZLw6quvIikpCTqdDu3bt6/1PXzssceQkpICPz8/JCYm4plnnqlTtmbPno3IyEj4+/tj2rRp9b6Z+Oijj5Camgq9Xo/OnTvj3XffrXOfvvrqKwwZMgQGgwH9+vVDRkYGNm/ejL59+8JkMuGyyy5Dfn6+83Zn7/k+330529133w21Wo0tW7ZgwoQJSE1NRWJiIq644gr89NNPGD9+vHNZQRDw3nvv4fLLL4fRaMSsWbPgcDgwbdo0dOjQAQaDAZ06dcJbb71VaxunMz7//PPO360777wTVqu1zvfh0UcfRUhICKKioji07Rya+zsiCALmz5+PjRs34v3330dZWRmmTp2KBx98EIMGDXLePiEhwTnU9YYbbsDEiRNrbd9msyEsLAyffvppvfkKCwsxadIkxMbGws/PD2lpaVi8eHGd5ex2O+655x4EBgYiLCwMzzzzDGRZdl7/7rvvIjk52bnn/dprrwVQ8zP1xx9/4K233nI+J2ZlZTn3RP7888/o06cPdDod/v77bxw8eBBXXHEFIiMjYTKZ0K9fvzofplgsFjz22GOIi4uDTqdDUlIS5s+fj6ysLFx88cUAgODgYAiCgFtuuQUA8PXXXyMtLc353DZy5EhUVlY28rtI3qKiogJffvkl7rrrLowdO7beUSeHDx/GunXr8PjjjyMlJQXffvttves63+sVEVFb57WF02QywWQy4fvvv4fFYmlwueuuuw55eXn4+eefsXXrVvTu3RsjRoxAUVGRc5mDBw/i559/xi+//ILFixdj/vz5GDt2LI4fP44//vgDr7zyCp5++mls3LjReRtRFDF37lzs2bMHCxcuxO+//45HH3201rarqqrw+uuv47PPPsOff/6Jo0eP4uGHHwYAPPzww5gwYYKzhGZnZ9d6c3jaiRMnMHToUOh0Ovz+++/YunUrpk6d2uAn/FFRUdizZw92797d4GPy008/4aqrrsKYMWOwfft2rFq1Cv3796+1zBtvvIG+ffti+/btuPvuu3HXXXchPT0dAFBZWYlLL70UwcHB2Lx5M5YsWYKVK1finnvuaXCblZWVePDBB7FlyxasWrUKoijiqquugiRJtZZ7/PHHcf/992Pfvn249NJLG1zf/PnzMWnSJGg0GkyaNAnz58+vdf0TTzyB2bNn45lnnsHevXvx+eefIzIy0nm9v78/FixYgL179+Ktt97Chx9+iDfffNN5/VdffYWZM2fi5ZdfxpYtWxAdHV2rTALAokWL8Oyzz2LWrFnYt28fXn75ZTzzzDNYuHBhreWee+45PP3009i2bRvUajVuuOEGPProo3jrrbfw119/4cCBA3j22WcbvK/nuy9nKiwsxK+//orp06fDaDTWu4wgCLW+njlzJq666ir8888/mDp1KiRJQrt27bBkyRLs3bsXzz77LJ588kl89dVXtW63atUq7Nu3D2vWrMHixYvx7bff4vnnn6+1zMKFC2E0GrFx40a8+uqreOGFF/Dbb781eF99WUt+R+Li4vCf//wHjzzyCG688UaYTCa8+OKLDW5r8uTJ+OGHH2p9SLRixQpUVVXV+fDpNLPZjD59+uCnn37C7t27cccdd2DKlCnYtGlTreUWLlwItVqNTZs24a233sKcOXPw0UcfAQC2bNmC++67Dy+88ALS09Pxyy+/YOjQoQBqhpIPHDgQt99+u/M5MS4urtb9nj17Nvbt24fu3bujoqICY8aMwapVq7B9+3aMHj0a48ePx9GjR523uemmm7B48WLMnTsX+/btw3//+1+YTCbExcXhm2++AQCkp6cjOzsbb731FrKzszFp0iRMnTrV+bN99dVX1yrM5Bu++uordO7cGZ06dcKNN96Ijz/+uM7PwSeffIKxY8ciMDAQN954Y53XodPO93pFRNTWCXIjXinNZjMOHz6MDh06QK/X177SgycN+uabb3D77bejuroavXv3xkUXXYTrr78e3bt3BwD8/fffGDt2LPLy8qDT6Zy3S0pKwqOPPoo77rgDM2fOxGuvvYacnBz4+/sDAEaPHo309HQcPHgQoljT2Tt37oxbbrkFjz/+eL1Zvv76a9x5550oKCgAULOH89Zbb8WBAwfQsWNHADWf7L/wwgvIyckBUP/kMGdPGvTkk0/iiy++QHp6OjQazXkfk8rKSkyYMAHLly9HfHw8BgwYgEsuuQSTJ092PgaDBg1CYmIi/ve//9W7joSEBAwZMgSfffYZgJohbFFRUXj++edx55134sMPP8Rjjz2GY8eOOUvN8uXLMX78eJw8eRKRkZHnnfimoKAA4eHh+Oeff9CtWzfn/f7Pf/6D+++//5z3saysDFFRUVi/fj169OiBHTt2YMiQIcjOzobJZEJ5eTnCw8Pxzjvv4LbbbjvvYwYAr7/+Or744gts2bLF+Rj1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1q5di0GDBuHuu+9Gr169kJSUVO8kVTt37kR1dbXz6w0bNjiPj6OmaenvyAsvvICioiK8+eabuPnmmzFq1Cjceuut5yz3gwYNQlxcHL788kssWrQI11133TlHUqxduxZXXHEFbrzxRvTo0QOJiYnIyMios1x9vzfJyclQqVQAavYWjRw5Eq+++ip27dqFrKws/P57zXDnxjwnnpnnlltuwVVXXYW0tDRERUUhKyvLeX1aWhokScIff/xR7+21Wi0A1NmeIAgYPHgwnn/+eWzfvh1arRbfffddozJR22e32/Hpp5/ijTfeqPUas3PnTsTExGDx4sUoLCzE0qVL8cUXX9RaZvv27SguLsavv/4KoHGvV0RE3qB559ZoAwoLC3Hddddh6tSp6N69O/z9/bFlyxa8+uqrzuN8Ro4ciYEDB+LKK6/Eq6++6iyGpyfNaczwzfokJSXBZrPh7bffxvjx47F27Vq8//77TV5PQkICVqxYgfT0dISGhiIwsO7xsvfccw/efvttXH/99XjiiScQGBiIDRs2oH///vWWu5kzZ6KqqgpjxoxBfHw8SkpKMHfuXNhsNowaNQpAzSQ2I0aMQMeOHXH99dfDbrdj+fLleOyxxxqVe/LkyXjuuedw8803Y+bMmcjPz8e9996LKVOm1DuZTXBwMEJDQ/HBBx8gOjoaR48ebfBY2POZP38++vfv75xo5Ez9+vXD/Pnz8dprr+Gxxx7Do48+Cq1Wi8GDByM/Px979uzBtGnTkJycjKNHj+KLL75Av3798NNPP9V5Q3n//ffjlltuQd++fTF48GAsWrQIe/bsQWJionOZ559/Hvfddx8CAwMxevRoWCwWbNmyBcXFxXjwwQebdf/Optfrz3lf6vPuu+9i8ODB6Nu3L2bOnInu3btDFEVs3rwZ+/fvR58+fc65zeTkZHz66adYsWIFOnTogM8++wybN2+uU6StViumTZuGp59+GllZWXjuuedwzz331BqKTo3Tkt+RzZs345VXXsFPP/3kfA7573//i27duuHNN9/EQw891OBtb7jhBrz//vvIyMjA6tWrz7md5ORkfP3111i3bh2Cg4MxZ84c5ObmokuXLrWWO3r0KB588EH861//wrZt2/D222/jjTfeAAD8+OOPOHToEIYOHYrg4GAsX74ckiQ5n8sSEhKwceNGZGVlwWQyISQk5Jx5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", "text/plain": [ "
" ] @@ -1126,7 +1166,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -1140,7 +1180,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/data_query_snippets/snippets.ipynb b/examples/data_query_snippets/snippets.ipynb index a1c9710..5b972a0 100644 --- a/examples/data_query_snippets/snippets.ipynb +++ b/examples/data_query_snippets/snippets.ipynb @@ -52,12 +52,13 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Import standard dependencies\n", "import pandas as pd\n", + "from datetime import datetime\n", "from numerize.numerize import numerize\n", "from tqdm import tqdm\n", "\n", @@ -121,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -181,7 +182,7 @@ " \"Name\": c.name,\n", " \"Type\": c.metadata.type,\n", " \"Num entries\": numerize(c.documents),\n", - " \"Date\": c.metadata.created.strftime(\"%Y-%m-%d\"),\n", + " \"Date\": datetime.fromisoformat(c.metadata.created).strftime(\"%Y-%m-%d\"),\n", " \"Coords\": f\"{c.source.elastic_id}/{c.source.index_key}\",\n", " }\n", " for c in collections\n", diff --git a/examples/document_conversion_custom_settings/convert_documents_custom.ipynb b/examples/document_conversion_custom_settings/convert_documents_custom.ipynb index 387b556..247e130 100644 --- a/examples/document_conversion_custom_settings/convert_documents_custom.ipynb +++ b/examples/document_conversion_custom_settings/convert_documents_custom.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "72ad8a8e", "metadata": {}, "outputs": [], @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "502cdef8", "metadata": { "ExecuteTime": { @@ -67,11 +67,6 @@ "import deepsearch as ds\n", "from deepsearch.documents.core.models import (\n", " ConversionSettings,\n", - " DefaultConversionModel,\n", - " ProjectConversionModel,\n", - " OCRSettings,\n", - " AlpineOcrEngine,\n", - " AlpineOcrLanguage,\n", ")" ] }, @@ -85,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "391cb5ee", "metadata": {}, "outputs": [], @@ -103,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "ec83eb0b", "metadata": { "ExecuteTime": { @@ -111,37 +106,16 @@ "start_time": "2022-08-02T12:14:25.380757Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 29.94it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:09<00:00, 9.70s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:51<00:00, 51.34s/it]\u001b[38;2;15;98;254m \u001b[0m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Total documents': 1, 'Successfully converted documents': 1}\n" - ] - } - ], + "outputs": [], "source": [ "## Modify conversion pipeline\n", - "cs = ConversionSettings.from_project(api, proj_key=PROJ_KEY)\n", + "cs = ConversionSettings()\n", "\n", "# OCR\n", - "cs.ocr.enabled = True # Enable or disable OCR\n", - "# cs.ocr.merge_mode = \"prioritize-ocr\" # Pick how OCR cells are treated when mixed with programmatic content\n", + "cs.ocr.do_ocr = True # Enable or disable OCR\n", "\n", - "# backends = OCRSettings.get_backends(api) # list OCR backends\n", - "cs.ocr.engine = AlpineOcrEngine() # Pick OCR backend\n", + "cs.ocr.kind = \"tesserocr\" # Pick OCR backend\n", "\n", - "# enable OCR languages\n", - "# cs.ocr.engine = AlpineOcrEngine(languages=[AlpineOcrLanguage.Japanese])\n", "\n", "documents = ds.convert_documents(\n", " api=api,\n", @@ -158,7 +132,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -172,7 +146,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.10.4" }, "toc": { "base_numbering": 1, @@ -186,11 +160,6 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false - }, - "vscode": { - "interpreter": { - "hash": "23663f76e1e243f0a6319b8ef58f504b6b45c83666dfefd3138ba8cf69ab01fa" - } } }, "nbformat": 4, diff --git a/examples/document_conversion_extract_tables/extract_tables.ipynb b/examples/document_conversion_extract_tables/extract_tables.ipynb index 08bd481..7452dda 100644 --- a/examples/document_conversion_extract_tables/extract_tables.ipynb +++ b/examples/document_conversion_extract_tables/extract_tables.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "efd12ce7", "metadata": {}, "outputs": [], @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "f34f9dc1", "metadata": {}, "outputs": [], @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "246f6ac7", "metadata": {}, "outputs": [], @@ -146,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "2718becb", "metadata": { "scrolled": false @@ -186,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "a8454a53", "metadata": {}, "outputs": [], @@ -196,20 +196,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "5fc7d427", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 124.56it/s]\u001b[38;2;15;98;254m\u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:11<00:00, 11.18s/it]\u001b[38;2;15;98;254m\u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:23<00:00, 23.61s/it]\u001b[38;2;15;98;254m\u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "# Launch the docucment conversion and download the results\n", "documents = ds.convert_documents(\n", @@ -219,135 +209,28 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "3ac07b8c", "metadata": { "scrolled": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading result: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 1.23it/s]\u001b[38;2;15;98;254m\u001b[0m\n" - ] - }, - { - "data": { - "text/markdown": [ - "## Table 1 on page 7" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
  component
  worker ML model
Profile A Memory CPU Replica ratio 450 MB 0.4 cores 1 500 MB 0.7 cores 1
Profile B Memory CPU Replica ratio 700 MB 1.2 cores 1 500 MB 0.7 cores 4
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "## Table 1 on page 9" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
profile system state distribution scheme document-level page-level
A idle busy 32.6 ± 1.1 114.9 ± 17.5 26.3 ± 0.9 248.1 ± 17.3
B idle busy 32.6 ± 0.2 109.6 ± 47.7 25.7 ± 0.7 220.4 ± 34.2
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "output_dir = (\n", - " tempfile.mkdtemp()\n", - ") # TODO: switch to tempfile.TemporaryDirectory() and use `with`\n", - "\n", - "documents.download_all(result_dir=output_dir, progress_bar=True)\n", + "with tempfile.TemporaryDirectory() as output_dir:\n", + " documents.download_all(result_dir=output_dir, progress_bar=True)\n", "\n", - "for output_file in Path(output_dir).rglob(\"json*.zip\"):\n", - " with ZipFile(output_file) as archive:\n", - " all_files = archive.namelist()\n", - " for name in all_files:\n", - " if not name.endswith(\".json\"):\n", - " continue\n", - "\n", - " basename = name.rstrip(\".json\")\n", - " doc_jsondata = json.loads(archive.read(f\"{basename}.json\"))\n", + " # group output files and visualize the output\n", + " json_file = list(Path(output_dir).glob(\"*.json\"))[0]\n", "\n", - " visualize_document_tables(doc_jsondata)" + " with open(json_file) as f:\n", + " doc_jsondata = json.loads(f.read())\n", + " visualize_document_tables(doc_jsondata)\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -361,12 +244,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" - } + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/document_conversion_quick_start/convert_documents.ipynb b/examples/document_conversion_quick_start/convert_documents.ipynb index 7598702..f8e014c 100644 --- a/examples/document_conversion_quick_start/convert_documents.ipynb +++ b/examples/document_conversion_quick_start/convert_documents.ipynb @@ -30,18 +30,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "id": "b01a4fd1", "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Project key: 1234567890abcdefghijklmnopqrstvwyz123456\n" - ] - } - ], + "outputs": [], "source": [ "from dsnotebooks.settings import ProjectNotebookSettings\n", "\n", @@ -64,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "502cdef8", "metadata": { "ExecuteTime": { @@ -75,13 +67,10 @@ "outputs": [], "source": [ "import deepsearch as ds\n", - "import json\n", "\n", "from pathlib import Path\n", - "from zipfile import ZipFile\n", "\n", - "from deepsearch.documents.core.export import export_to_markdown, export_to_html\n", - "from IPython.display import display, Markdown, HTML, display_html" + "from IPython.display import display, Markdown" ] }, { @@ -94,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "id": "f44fbf08", "metadata": {}, "outputs": [], @@ -104,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "ec83eb0b", "metadata": { "ExecuteTime": { @@ -112,24 +101,7 @@ "start_time": "2022-08-02T12:14:25.380757Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 39.65it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:04<00:00, 4.48s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:36<00:00, 36.90s/it]\u001b[38;2;15;98;254m \u001b[0m\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Total documents': 1, 'Successfully converted documents': 1}\n" - ] - } - ], + "outputs": [], "source": [ "output_dir = Path(\"./converted_docs\")\n", "\n", @@ -138,6 +110,7 @@ " proj_key=PROJ_KEY,\n", " source_path=\"../../data/samples/2206.01062.pdf\",\n", " progress_bar=True,\n", + " export_md=True,\n", ")\n", "documents.download_all(result_dir=output_dir)\n", "info = documents.generate_report(result_dir=output_dir)\n", @@ -146,46 +119,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "id": "382c4869-cca9-43fc-8052-c0ab7e9c175d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "writing converted_docs/2206.01062.md\n", - "writing converted_docs/2206.01062.html\n" - ] - } - ], + "outputs": [], "source": [ - "# Iterare output files and visualize the output\n", - "for output_file in output_dir.rglob(\"json*.zip\"):\n", - " with ZipFile(output_file) as archive:\n", - " all_files = archive.namelist()\n", - " for name in all_files:\n", - " if not name.endswith(\".json\"):\n", - " continue\n", - "\n", - " basename = name.rstrip(\".json\")\n", - " doc_json = json.loads(archive.read(f\"{basename}.json\"))\n", - "\n", - " doc_md = export_to_markdown(doc_json)\n", - "\n", - " ofile = output_dir / f\"{basename}.md\"\n", - " print(f\"writing {ofile}\")\n", - "\n", - " with ofile.open(\"w\") as fw:\n", - " fw.write(doc_md)\n", - "\n", - " doc_html = export_to_html(doc_json)\n", - "\n", - " ofile = output_dir / f\"{basename}.html\"\n", - " print(f\"writing {ofile}\")\n", - "\n", - " with ofile.open(\"w\") as fw:\n", - " fw.write(doc_html)" + "# group output files and visualize the output\n", + "md_files = list(output_dir.glob(\"*.md\"))\n", + "json_files = list(output_dir.glob(\"*.json\"))" ] }, { @@ -196,7 +137,7 @@ "outputs": [], "source": [ "# display last document\n", - "# display(Markdown(doc_md))" + "# display(Markdown(md_files[-1]))" ] }, { @@ -263,7 +204,7 @@ "documents = ds.convert_documents(\n", " api=api,\n", " proj_key=PROJ_KEY,\n", - " urls=\"https://arxiv.org/pdf/2206.00785.pdf\",\n", + " url=\"https://arxiv.org/pdf/2206.00785.pdf\",\n", " progress_bar=True,\n", ")" ] @@ -324,7 +265,7 @@ "outputs": [], "source": [ "# the documents object stores some additional info like:\n", - "documents.statuses, documents.task_ids" + "documents.result, documents.task_id" ] }, { @@ -347,43 +288,7 @@ }, "outputs": [], "source": [ - "# let's create a list of urls we want to convert:\n", - "urls = [\"https://arxiv.org/pdf/2206.00785.pdf\", \"https://arxiv.org/pdf/2206.01062.pdf\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7126c7b1", - "metadata": { - "ExecuteTime": { - "end_time": "2022-08-02T12:16:22.641187Z", - "start_time": "2022-08-02T12:15:19.026607Z" - } - }, - "outputs": [], - "source": [ - "# Process multiple urls\n", - "documents = ds.convert_documents(\n", - " api=api, proj_key=PROJ_KEY, urls=urls, progress_bar=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e630e1e3", - "metadata": { - "ExecuteTime": { - "end_time": "2022-08-02T12:16:28.414101Z", - "start_time": "2022-08-02T12:16:22.643995Z" - } - }, - "outputs": [], - "source": [ - "# as before we can use the documents object to download all jsons. We can also iterate over them individually.\n", - "for doc in documents:\n", - " doc.download(result_dir=result_dir, progress_bar=True)" + "# please use deepsearch UI for multiple conversion" ] }, { @@ -434,41 +339,7 @@ }, "outputs": [], "source": [ - "documents = ds.convert_documents(\n", - " api=api, proj_key=PROJ_KEY, source_path=\"../../data/samples\", progress_bar=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03d11356", - "metadata": { - "ExecuteTime": { - "end_time": "2022-08-02T12:17:15.703537Z", - "start_time": "2022-08-02T12:17:14.639699Z" - } - }, - "outputs": [], - "source": [ - "info = documents.generate_report(result_dir)\n", - "print(info)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "192ea2e7", - "metadata": { - "ExecuteTime": { - "end_time": "2022-08-02T12:17:19.794439Z", - "start_time": "2022-08-02T12:17:15.705771Z" - } - }, - "outputs": [], - "source": [ - "# let's download all the converted documents:\n", - "documents.download_all(result_dir=result_dir, progress_bar=True)" + "# please use deepsearch UI for multiple conversion" ] }, { @@ -504,7 +375,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -518,7 +389,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.4" }, "toc": { "base_numbering": 1, @@ -532,11 +403,6 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false - }, - "vscode": { - "interpreter": { - "hash": "23663f76e1e243f0a6319b8ef58f504b6b45c83666dfefd3138ba8cf69ab01fa" - } } }, "nbformat": 4, diff --git a/examples/document_conversion_visualize_bbox/README.md b/examples/document_conversion_visualize_bbox/README.md deleted file mode 100644 index ef64dd9..0000000 --- a/examples/document_conversion_visualize_bbox/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Document conversion - Visualize bboxes - -In this example we will use the output of the converted document and create an image of elements detected on each page. - -:point_right: Run the [visualize_bbox.ipynb](./visualize_bbox.ipynb) example. - - -### Additional dependencies - -The PDF to image conversion relies on the `pdftoppm` executable of the Poppler library (GPL license) -https://poppler.freedesktop.org/ -The Poppler library can be installed from the most common packaging systems, for example -- On macOS, `brew install poppler` -- On Debian (and Ubuntu), `apt-get install poppler-utils` -- On RHEL, `yum install poppler-utils` diff --git a/examples/document_conversion_visualize_bbox/visualize_bbox.ipynb b/examples/document_conversion_visualize_bbox/visualize_bbox.ipynb deleted file mode 100644 index 08d6b2e..0000000 --- a/examples/document_conversion_visualize_bbox/visualize_bbox.ipynb +++ /dev/null @@ -1,531 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1a5e95e0", - "metadata": {}, - "source": [ - "# Convert and visualize text bounding boxes\n", - "\n", - "\n", - "In this example we will use the output of the converted document and create an image of elements detected on each page.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "5fdc4d28", - "metadata": {}, - "source": [ - "### System dependencies\n", - "This script is converting a PDF document with Deep Search and exports the figures into PNG files.\n", - "\n", - "The PDF to image conversion relies on the `pdftoppm` executable of the Poppler library (GPL license)\n", - "https://poppler.freedesktop.org/\n", - "The Poppler library can be installed from the most common packaging systems, for example\n", - "- On macOS, `brew install poppler`\n", - "- On Debian (and Ubuntu), `apt-get install poppler-utils`\n", - "- On RHEL, `yum install poppler-utils`\n" - ] - }, - { - "cell_type": "markdown", - "id": "142d6129", - "metadata": {}, - "source": [ - "### Notebooks parameters\n", - "\n", - "The following block defines the parameters used to execute the notebook\n", - "\n", - "- `INPUT_FILE`: the input PDF to converted and analyzed\n", - "- `SHOW_PDF_IMAGE`: if enabled, the background will contain the rendered PDF page\n", - "- `SHOW_CLUSTER_BOXES`: if enabled, the cluster boxes will be visualized\n", - "- `SHOW_TEXT_CELLS_BOXES`: if enabled, the PDF raw text cells will be visualized\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "efd12ce7", - "metadata": {}, - "outputs": [], - "source": [ - "from dsnotebooks.settings import ProjectNotebookSettings\n", - "from pathlib import Path\n", - "\n", - "# notebook settings auto-loaded from .env / env vars\n", - "notebook_settings = ProjectNotebookSettings()\n", - "\n", - "PROFILE_NAME = notebook_settings.profile # the profile to use\n", - "PROJ_KEY = notebook_settings.proj_key # the project to use\n", - "# INPUT_FILE = Path(\"../../data/samples/2206.01062.pdf\")\n", - "INPUT_FILE = Path(\"../../data/samples/2206.00785.pdf\")\n", - "\n", - "# Visualization options. Which layers should be included in the visualization\n", - "SHOW_PDF_IMAGE = True\n", - "SHOW_CLUSTER_BOXES = True\n", - "SHOW_TEXT_CELLS_BOXES = True" - ] - }, - { - "cell_type": "markdown", - "id": "d12e55af", - "metadata": {}, - "source": [ - "## Helper functions\n", - "\n", - "The following blocks define the helper functions used for the visualization of the output" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f34f9dc1", - "metadata": {}, - "outputs": [], - "source": [ - "# Import standard dependenices\n", - "import json\n", - "import tempfile\n", - "import typing\n", - "from zipfile import ZipFile\n", - "\n", - "# Dependencies for the visualization\n", - "import math\n", - "from PIL import Image, ImageDraw\n", - "from IPython.display import display, Markdown, HTML, display_html\n", - "import base64\n", - "import io\n", - "from subprocess import check_call, CalledProcessError\n", - "\n", - "# Import the deepsearch-toolkit\n", - "import deepsearch as ds" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "659da821", - "metadata": {}, - "outputs": [], - "source": [ - "def resolve_item(raw_item, doc):\n", - " \"\"\"\n", - " Resolved jsonref used in the main-text document items\n", - " \"\"\"\n", - " if not \"$ref\" in raw_item:\n", - " return raw_item\n", - " parts = raw_item[\"$ref\"].split(\"/\")\n", - " item = doc\n", - " for i, k in enumerate(parts[1:]):\n", - " if isinstance(item, typing.Mapping) and not k in item:\n", - " print(f\"k={k} not found\")\n", - " return {}\n", - "\n", - " if isinstance(item, typing.List):\n", - " try:\n", - " k = int(k)\n", - " except:\n", - " print(f\"cannot cast {k} to int\")\n", - " return {}\n", - " item = item[k]\n", - " return item" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "5e27677d", - "metadata": {}, - "outputs": [], - "source": [ - "def page_elements_from_json_document(doc_jsondata):\n", - " \"\"\"\n", - " Collect all the document elements with a bounding box\n", - " and organize them per page.\n", - "\n", - " Parameters\n", - " ----------\n", - " doc_jsondata :\n", - " Converted document\n", - "\n", - " Returns\n", - " -------\n", - " Dict[PageNumber, List[BoxDescription]]\n", - " A dictionary mapping the page number to a list of the\n", - " document boxes on that page.\n", - " BoxDescription will contain the page, type, and bbox.\n", - " \"\"\"\n", - " clusters = {}\n", - " for raw_item in doc_jsondata[\"main-text\"]:\n", - " item = resolve_item(raw_item, doc_jsondata)\n", - " if not \"prov\" in item:\n", - " print(\"PROV not found\")\n", - " print(item)\n", - " continue\n", - " page = item[\"prov\"][0][\"page\"]\n", - " item_type = item[\"type\"]\n", - " clusters.setdefault(page, []).append(\n", - " {\n", - " \"page\": page,\n", - " \"type\": item_type,\n", - " \"bbox\": item[\"prov\"][0][\"bbox\"],\n", - " }\n", - " )\n", - " return clusters" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "74d6c68d", - "metadata": {}, - "outputs": [], - "source": [ - "def page_elements_from_text_cells(doc_cellsdata):\n", - " \"\"\"\n", - " Collect all the text cells with a bounding box and\n", - " organize them per page.\n", - "\n", - " Parameters\n", - " ----------\n", - " doc_cellsdata :\n", - " Cells document provided by the Deep Search conversion\n", - "\n", - " Returns\n", - " -------\n", - " Dict[PageNumber, List[BoxDescription]]\n", - " A dictionary mapping the page number to a list of the\n", - " document boxes on that page.\n", - " BoxDescription will contain the page, type, and bbox.\n", - " \"\"\"\n", - "\n", - " cells = {}\n", - " for item in doc_cellsdata[\"cells\"][\"data\"]:\n", - " page = item[0] + 1\n", - " item_type = item[5]\n", - " cells.setdefault(page, []).append(\n", - " {\n", - " \"page\": page,\n", - " \"type\": item_type,\n", - " \"bbox\": item[1:5],\n", - " }\n", - " )\n", - "\n", - " return cells" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "7d0aa65c", - "metadata": {}, - "outputs": [], - "source": [ - "# The\n", - "labels_colors_clusters = {\n", - " \"table\": ((240, 128, 128, 100), (255, 0, 0)),\n", - " \"caption\": ((243, 156, 18, 100), (255, 0, 0)),\n", - " \"citation\": ((14, 210, 234, 100), (255, 0, 0)),\n", - " \"picture\": ((255, 236, 204, 100), (255, 0, 0)),\n", - " \"formula\": ((128, 139, 150, 100), (255, 0, 0)),\n", - " \"subtitle-level-1\": ((204, 51, 102, 100), (255, 0, 0)),\n", - " \"paragraph\": ((234, 234, 43, 100), (255, 0, 0)),\n", - "}\n", - "\n", - "labels_colors_cells = {\n", - " \"table\": ((240, 128, 128, 100), (0, 0, 0, 0)),\n", - " \"caption\": ((243, 156, 18, 100), (0, 0, 0, 0)),\n", - " \"citation\": ((14, 210, 234, 100), (0, 0, 0, 0)),\n", - " \"picture\": ((255, 236, 204, 100), (0, 0, 0, 0)),\n", - " \"formula\": ((128, 139, 150, 100), (0, 0, 0, 0)),\n", - " \"subtitle-level-1\": ((204, 51, 102, 100), (0, 0, 0, 0)),\n", - " \"paragraph\": ((234, 234, 43, 100), (0, 0, 0, 0)),\n", - "}\n", - "\n", - "\n", - "def draw_boxes(img, dims, boxes, colors_map={}):\n", - " \"\"\"\n", - " Draw bounding boxes on the input PIL Image `img`\n", - "\n", - " Parameters\n", - " ----------\n", - " img : Image\n", - " PIL image on which the boxes are drawn.\n", - " dims : List[int]\n", - " Page dimensions as `dims=(width, height)`.\n", - " boxes : List[dict]\n", - " List of boxes to draw, in the format of `{type: str, bbox: List[int]`}.\n", - " colors_map : Dict[str, Tuple[RGBA, RGBA]]\n", - " Dictionary with the color to use for the bbox, the map value is a tuple\n", - " of style for the fill color and for the line color.\n", - " Colors can be defined as a list of RGB or RGBA, with values in the range\n", - " 0 to 255.\n", - " \"\"\"\n", - " drw = ImageDraw.Draw(img, \"RGBA\")\n", - " for cluster in boxes:\n", - "\n", - " bbox = cluster[\"bbox\"]\n", - " rect = [\n", - " round(bbox[0]),\n", - " round(dims[1] - bbox[3]),\n", - " round(bbox[2]),\n", - " round(dims[1] - bbox[1]),\n", - " ]\n", - "\n", - " c_fill, c_outline = colors_map.get(\n", - " cluster[\"type\"].lower(), ((128, 128, 128, 100), (0, 0, 0, 0))\n", - " )\n", - " drw.rectangle(rect, outline=c_outline, fill=c_fill)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "20e546cb", - "metadata": {}, - "outputs": [], - "source": [ - "def pdf_to_page_image(pdf_filename, page, resolution=72):\n", - " \"\"\"\n", - " Convert the page number `page` of the PDF document to an image\n", - "\n", - " Parameters\n", - " ----------\n", - " pdf_filename : Path\n", - " Input PDF file.\n", - " page : int\n", - " Page number where the bounding box is located.\n", - " resolution : int, Default=72\n", - " Resolution of the extracted image.\n", - "\n", - " Returns\n", - " -------\n", - " Image\n", - " PIL Image of the PDF page.\n", - " \"\"\"\n", - "\n", - " with tempfile.NamedTemporaryFile() as output_file:\n", - " output_filename = output_file.name\n", - " cmd = [\n", - " \"pdftoppm\",\n", - " \"-png\",\n", - " \"-singlefile\",\n", - " \"-f\",\n", - " str(page),\n", - " \"-l\",\n", - " str(page),\n", - " \"-cropbox\",\n", - " \"-r\",\n", - " str(resolution),\n", - " pdf_filename,\n", - " output_filename,\n", - " ]\n", - " try:\n", - " check_call(cmd)\n", - " except CalledProcessError as cpe:\n", - " raise RuntimeError(\n", - " f\"PDFTOPPM PROCESSING ERROR. Exited with: {cpe.returncode}\"\n", - " ) from cpe\n", - " png_file = output_filename + \".png\"\n", - " img = Image.open(png_file)\n", - " return img" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "2718becb", - "metadata": {}, - "outputs": [], - "source": [ - "def visualize_document_bboxes(doc_jsondata, doc_cellsdata, ncols=3):\n", - " \"\"\"\n", - " Visualize the document pages overlaying the PDF image with the\n", - " bounding boxes of the text cells and the segmentation clusters.\n", - "\n", - " Parameters\n", - " ----------\n", - " doc_jsondata :\n", - " Converted document\n", - " doc_cellsdata :\n", - " Cells document provided by the Deep Search conversion\n", - " ncols : int, Default=3\n", - " Number of columns in the display table.\n", - " \"\"\"\n", - "\n", - " clusters = page_elements_from_json_document(doc_jsondata)\n", - " cells = page_elements_from_text_cells(doc_cellsdata)\n", - " pages_to_dims = {dims[\"page\"]: dims for dims in doc_jsondata[\"page-dimensions\"]}\n", - "\n", - " output_html = \"\"\n", - " for i, page in enumerate(sorted(clusters.keys())):\n", - " dims = pages_to_dims[page][\"width\"], pages_to_dims[page][\"height\"]\n", - " page_cells = cells[page]\n", - " page_clusters = clusters[page]\n", - "\n", - " if SHOW_PDF_IMAGE:\n", - " img = pdf_to_page_image(INPUT_FILE, page=page)\n", - " img = img.resize((math.ceil(dims[0]), math.ceil(dims[1])))\n", - " else:\n", - " img = Image.new(\n", - " \"RGB\", (math.ceil(dims[0]), math.ceil(dims[1])), (255, 255, 255)\n", - " )\n", - " img = img.resize((math.ceil(dims[0]), math.ceil(dims[1])))\n", - "\n", - " # Draw page rectangle\n", - " drw = ImageDraw.Draw(img)\n", - " drw.rectangle([0, 0, dims[0] - 1, dims[1] - 1], outline=(0, 0, 0))\n", - "\n", - " # Draw bounding boxes\n", - " if SHOW_TEXT_CELLS_BOXES:\n", - " draw_boxes(img, dims, page_cells, labels_colors_cells)\n", - " if SHOW_CLUSTER_BOXES:\n", - " draw_boxes(img, dims, page_clusters, labels_colors_clusters)\n", - "\n", - " if i == 0:\n", - " output_html += \"\"\n", - " elif i % ncols == 0:\n", - " output_html += \"\"\n", - "\n", - " buffer = io.BytesIO()\n", - " img.save(buffer, format=\"PNG\")\n", - " img_str = base64.b64encode(buffer.getvalue()).decode(\"utf8\")\n", - "\n", - " output_html += \"\"\n", - "\n", - " output_html += \"
\"\n", - " output_html += f\"Page {page}
\"\n", - " output_html += f\"\"\n", - " output_html += \"
\"\n", - " display(HTML(output_html))" - ] - }, - { - "cell_type": "markdown", - "id": "499aad65", - "metadata": {}, - "source": [ - "## Document conversion and visualization with Deep Search" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "a8454a53", - "metadata": {}, - "outputs": [], - "source": [ - "# Connect to Deep Search\n", - "api = ds.CpsApi.from_env(profile_name=PROFILE_NAME)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "5fc7d427", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 232.18it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:05<00:00, 5.16s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:23<00:00, 23.38s/it]\u001b[38;2;15;98;254m \u001b[0m\n" - ] - } - ], - "source": [ - "# Launch the document conversion\n", - "documents = ds.convert_documents(\n", - " api=api, proj_key=PROJ_KEY, source_path=INPUT_FILE, progress_bar=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "fba35c81-d20d-4109-8fda-41a796313610", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading result: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 1.40it/s]\u001b[38;2;15;98;254m \u001b[0m\n" - ] - } - ], - "source": [ - "# Download results\n", - "output_dir = (\n", - " tempfile.mkdtemp()\n", - ") # TODO: switch to tempfile.TemporaryDirectory() and use `with`\n", - "documents.download_all(result_dir=output_dir, progress_bar=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "bea81486-7159-4360-9845-54716c96b262", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Iterare output files and visualize the output\n", - "for output_file in Path(output_dir).rglob(\"json*.zip\"):\n", - " with ZipFile(output_file) as archive:\n", - " all_files = archive.namelist()\n", - " for name in all_files:\n", - " if not name.endswith(\".json\"):\n", - " continue\n", - "\n", - " basename = name.rstrip(\".json\")\n", - " doc_jsondata = json.loads(archive.read(f\"{basename}.json\"))\n", - " doc_cellsdata = json.loads(archive.read(f\"{basename}.cells\"))\n", - "\n", - " visualize_document_bboxes(doc_jsondata, doc_cellsdata)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - }, - "vscode": { - "interpreter": { - "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/integration_argilla/argilla_upload.ipynb b/examples/integration_argilla/argilla_upload.ipynb index 8497f08..c2c4b89 100644 --- a/examples/integration_argilla/argilla_upload.ipynb +++ b/examples/integration_argilla/argilla_upload.ipynb @@ -43,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "83bf44a3", "metadata": {}, "outputs": [], @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "e4fef9b2", "metadata": {}, "outputs": [], @@ -95,61 +95,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "d6caf04b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting en-core-web-sm==3.6.0\n", - " Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.6.0/en_core_web_sm-3.6.0-py3-none-any.whl (12.8 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m17.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: spacy<3.7.0,>=3.6.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from en-core-web-sm==3.6.0) (3.6.1)\n", - "Requirement already satisfied: numpy>=1.15.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.23.5)\n", - "Requirement already satisfied: typer<0.10.0,>=0.3.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (0.9.0)\n", - "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.0.12)\n", - "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2.0.9)\n", - "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2.4.8)\n", - "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.3.0)\n", - "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.0.10)\n", - "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.0.9)\n", - "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (4.66.1)\n", - "Requirement already satisfied: setuptools in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (68.2.2)\n", - "Requirement already satisfied: pathy>=0.10.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (0.10.2)\n", - "Requirement already satisfied: jinja2 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.1.2)\n", - "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.0.5)\n", - "Requirement already satisfied: smart-open<7.0.0,>=5.2.1 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (6.4.0)\n", - "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.1.2)\n", - "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.10.12)\n", - "Requirement already satisfied: thinc<8.2.0,>=8.1.8 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (8.1.12)\n", - "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2.0.8)\n", - "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2.31.0)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (23.1)\n", - "Requirement already satisfied: typing-extensions>=4.2.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (4.8.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.4)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (3.2.0)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (1.26.16)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2023.7.22)\n", - "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from thinc<8.2.0,>=8.1.8->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (0.1.3)\n", - "Requirement already satisfied: blis<0.8.0,>=0.7.8 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from thinc<8.2.0,>=8.1.8->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (0.7.11)\n", - "Requirement already satisfied: click<9.0.0,>=7.1.1 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from typer<0.10.0,>=0.3.0->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (8.1.7)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/dol/Library/Caches/pypoetry/virtualenvs/deepsearch-examples-QdWiv-Yx-py3.10/lib/python3.10/site-packages (from jinja2->spacy<3.7.0,>=3.6.0->en-core-web-sm==3.6.0) (2.1.3)\n", - "Installing collected packages: en-core-web-sm\n", - " Attempting uninstall: en-core-web-sm\n", - " Found existing installation: en-core-web-sm 3.5.0\n", - " Uninstalling en-core-web-sm-3.5.0:\n", - " Successfully uninstalled en-core-web-sm-3.5.0\n", - "Successfully installed en-core-web-sm-3.6.0\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n", - "You can now load the package via spacy.load('en_core_web_sm')\n" - ] - } - ], + "outputs": [], "source": [ "# Download the spaCy model\n", "!python -m spacy download {SPACY_MODEL}" @@ -157,15 +106,17 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "8c815fe1", "metadata": {}, "outputs": [], "source": [ + "from typing import Optional\n", + "\n", "class DocTextSegment(BaseModel):\n", " page: int # page number\n", " idx: int # index of text segment in the document\n", - " title: str # title of the document\n", + " title: Optional[str] = None # title of the document\n", " name: str # flavour of text segment\n", " type: str # type of text segment\n", " text: str # content of the text segment\n", @@ -187,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "904944e4", "metadata": {}, "outputs": [], @@ -198,20 +149,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "e88e025b", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 214.55it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:04<00:00, 4.34s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:17<00:00, 17.77s/it]\u001b[38;2;15;98;254m \u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "# Launch the docucment conversion and download the results\n", "documents = ds.convert_documents(\n", @@ -221,47 +162,21 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "ded25c58", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading result: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 1.46it/s]\u001b[38;2;15;98;254m \u001b[0m" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 documents have been loaded after conversion.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], + "outputs": [], "source": [ "output_dir = tempfile.mkdtemp()\n", "\n", "documents.download_all(result_dir=output_dir, progress_bar=True)\n", "\n", "converted_docs = {}\n", - "for output_file in Path(output_dir).rglob(\"json*.zip\"):\n", - " with ZipFile(output_file) as archive:\n", - " all_files = archive.namelist()\n", - " for name in all_files:\n", - " if not name.endswith(\".json\"):\n", - " continue\n", - "\n", - " doc_jsondata = json.loads(archive.read(name))\n", - " converted_docs[f\"{output_file}//{name}\"] = doc_jsondata\n", + "# group output files and visualize the output\n", + "for output_file in Path(output_dir).rglob(\"*.json\"):\n", + " with open(output_file, 'r') as file:\n", + " doc_jsondata = json.loads(file.read())\n", + " converted_docs[f\"{output_file}//{output_file.name}\"] = doc_jsondata\n", "\n", "print(f\"{len(converted_docs)} documents have been loaded after conversion.\")" ] @@ -276,18 +191,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "325b3f75", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "133 text segments got extracted from the document\n" - ] - } - ], + "outputs": [], "source": [ "text_segments = []\n", "for doc in converted_docs.values():\n", @@ -329,7 +236,7 @@ "outputs": [], "source": [ "# Initialize the Argilla SDK\n", - "rg.init(api_url=ARGILLA_API_URL, api_key=ARGILLA_API_KEY)\n", + "client = rg.Argilla(api_url=ARGILLA_API_URL, api_key=ARGILLA_API_KEY)\n", "\n", "# Initialize the spaCy NLP model for the tokenization of the text\n", "nlp = spacy.load(\"en_core_web_sm\")" @@ -347,12 +254,12 @@ "records_text_classificaiton = []\n", "for segment in text_segments:\n", " records_text_classificaiton.append(\n", - " rg.TextClassificationRecord(\n", - " text=segment.text,\n", + " rg.Record(\n", + " fields={\"text\":segment.text},\n", " vectors={},\n", - " prediction=segment.text_classification,\n", + " suggestions=segment.text_classification,\n", " metadata=segment.dict(\n", - " exclude={\"text\", \"text_classification\", \"token_classification\"}\n", + " exclude={\"text\", \"text_classification\", \"token_classification\", \"idx\", \"title\", \"name\"}\n", " ),\n", " )\n", " )" @@ -366,7 +273,24 @@ "outputs": [], "source": [ "# Submit text for classification\n", - "rg.log(records_text_classificaiton, name=f\"{ARGILLA_DATASET}-text\")" + "settings = rg.Settings(\n", + " fields=[\n", + " rg.TextField(name=\"text\"),\n", + " ],\n", + " questions=[\n", + " rg.TextQuestion(name=\"text_generation\"),\n", + " ],\n", + " metadata=[\n", + " rg.TermsMetadataProperty(name=\"type\"),\n", + " rg.TermsMetadataProperty(name=\"page\"),\n", + " ],\n", + " vectors=[\n", + " rg.VectorField(name='mini-lm-sentence-transformers', dimensions=384),\n", + " ],\n", + ")\n", + "dataset = rg.Dataset(name=f\"{ARGILLA_DATASET}-text\", workspace=\"argilla\", settings=settings)\n", + "dataset.create()\n", + "dataset.records.log(records_text_classificaiton)" ] }, { @@ -380,14 +304,14 @@ "\n", "records_token_classificaiton = []\n", "for segment in text_segments:\n", + " text = [\" \".join(token.text) for token in nlp(segment.text)]\n", " records_token_classificaiton.append(\n", - " rg.TokenClassificationRecord(\n", - " text=segment.text,\n", - " tokens=[token.text for token in nlp(segment.text)],\n", - " prediction=segment.token_classification,\n", + " rg.Record(\n", + " fields={\"text\": \" \".join(str(x) for x in text)},\n", " vectors={},\n", + " suggestions=segment.token_classification,\n", " metadata=segment.dict(\n", - " exclude={\"text\", \"text_classification\", \"token_classification\"}\n", + " exclude={\"text\", \"text_classification\", \"token_classification\", \"idx\", \"title\", \"name\"}\n", " ),\n", " )\n", " )" @@ -401,7 +325,25 @@ "outputs": [], "source": [ "# Submit tokens for classification\n", - "rg.log(records_token_classificaiton, name=f\"{ARGILLA_DATASET}-token\")" + "# Submit text for classification\n", + "settings = rg.Settings(\n", + " fields=[\n", + " rg.TextField(name=\"text\"),\n", + " ],\n", + " questions=[\n", + " rg.TextQuestion(name=\"text_generation\"),\n", + " ],\n", + " metadata=[\n", + " rg.TermsMetadataProperty(name=\"type\"),\n", + " rg.TermsMetadataProperty(name=\"page\"),\n", + " ],\n", + " vectors=[\n", + " rg.VectorField(name='mini-lm-sentence-transformers', dimensions=384),\n", + " ],\n", + ")\n", + "dataset = rg.Dataset(name=f\"{ARGILLA_DATASET}-token\", workspace=\"argilla\", settings=settings)\n", + "dataset.create()\n", + "dataset.records.log(records_token_classificaiton)" ] }, { @@ -419,7 +361,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -433,7 +375,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/kg_download_quick_start/kg_download_quick_start.ipynb b/examples/kg_download_quick_start/kg_download_quick_start.ipynb old mode 100644 new mode 100755 index bcdc525..a864c4c --- a/examples/kg_download_quick_start/kg_download_quick_start.ipynb +++ b/examples/kg_download_quick_start/kg_download_quick_start.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "01767c40", "metadata": {}, "outputs": [], @@ -42,7 +42,7 @@ "from dsnotebooks.settings import KGProjectNotebookSettings\n", "\n", "# notebook settings auto-loaded from .env / env vars\n", - "notebook_settings = KGProjectNotebookSettings()\n", + "notebook_settings = KGProjectNotebookSettings(kg_key=\"\")\n", "\n", "PROFILE_NAME = notebook_settings.profile # the profile to use\n", "PROJECT_KEY = notebook_settings.proj_key\n", @@ -60,19 +60,18 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "1b897f31", "metadata": {}, "outputs": [], "source": [ "# Import standard dependencies\n", "import os\n", - "import ssl\n", "import json\n", "import pandas as pd\n", "from tqdm import tqdm\n", "import tarfile\n", - "from urllib.request import urlopen\n", + "import requests\n", "\n", "# Dependencies related to PyTorch Geometric\n", "import torch\n", @@ -83,13 +82,14 @@ "from IPython.display import display\n", "\n", "# Import deepsearch-toolkit\n", + "import deepsearch as ds\n", "from deepsearch.core.client import DeepSearchConfig\n", "from deepsearch.cps.client.api import CpsApi, CpsApiClient" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a282398b", "metadata": {}, "outputs": [], @@ -124,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "004e7de9", "metadata": {}, "outputs": [], @@ -146,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "d5c38ba8", "metadata": {}, "outputs": [], @@ -166,31 +166,19 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "f8b24fe9", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 99.79631035475828/100 [00:41<00:00, 2.60it/s]/Users/shubham/Experiments/KGDownload-Example/deepsearch-examples/.venv/lib/python3.10/site-packages/tqdm/std.py:533: TqdmWarning: clamping frac to range [0, 1]\n", - " full_bar = Bar(frac,\n", - "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 100.00000000004945/100 [00:41<00:00, 2.39it/s]\n" - ] - } - ], - "source": [ - "# Download the knowledge graph using urlopen\n", + "outputs": [], + "source": [ + "# Download the knowledge graph using requests\n", "zipped_file_path = os.path.join(BASE_DIR, \"kg_data.tar.gz\")\n", - "context = ssl.create_default_context()\n", - "context.check_hostname = False\n", - "context.verify_mode = ssl.CERT_NONE\n", "\n", - "with open(zipped_file_path, \"wb+\") as download_file, urlopen(\n", - " download_url, context=context\n", + "\n", + "with open(zipped_file_path, \"wb+\") as download_file, requests.get(\n", + " download_url\n", ") as response:\n", - " content_length = int(response.getheader(\"content-length\"))\n", + " content_length = int(response.headers.get(\"content-length\"))\n", " with tqdm(total=100, position=0) as pbar:\n", " for line in response:\n", " download_file.write(line)\n", @@ -208,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "c1dada55", "metadata": {}, "outputs": [], @@ -231,50 +219,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "3f9cb932", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['_edges.jsonl',\n", - " 'abbreviation.jsonl',\n", - " 'affiliations.jsonl',\n", - " 'authors.jsonl',\n", - " 'classifications.jsonl',\n", - " 'documents.jsonl',\n", - " 'identifiers.jsonl',\n", - " 'images.jsonl',\n", - " 'material-attribute.jsonl',\n", - " 'material-class.jsonl',\n", - " 'material-part.jsonl',\n", - " 'material-to-abbreviation.jsonl',\n", - " 'material-to-material-class.jsonl',\n", - " 'material-to-property.jsonl',\n", - " 'material.jsonl',\n", - " 'model-type.jsonl',\n", - " 'property-to-property-value.jsonl',\n", - " 'property-value-type.jsonl',\n", - " 'property-value.jsonl',\n", - " 'property.jsonl',\n", - " 'publishers.jsonl',\n", - " 'smiles.jsonl',\n", - " 'statement.jsonl',\n", - " 'tables.jsonl',\n", - " 'terms.jsonl',\n", - " 'text-type.jsonl',\n", - " 'texts.jsonl',\n", - " 'unit-si.jsonl',\n", - " 'unit.jsonl',\n", - " 'year-month.jsonl',\n", - " 'year.jsonl']" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Get a list of all the files in the unzipped data\n", "files = list(os.walk(os.path.join(BASE_DIR, \"unzipped_data\")))[0][2]\n", @@ -291,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "7408bb61", "metadata": {}, "outputs": [], @@ -310,37 +258,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "b6293224", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "_id 6411a23382b445f4a85ab6b9\n", - "_hash 6f9f25a0a0ef3246314db75f7184489c\n", - "_name Pb iodide\n", - "_synonyms [Pb iodide]\n", - "_type material\n", - "identifiers [{'_name': 'ent_id#64efbff3', 'type': 'ent_id'...\n", - "labels [non-atomic]\n", - "model [IUPACNameAnnotator]\n", - "names [{'_name': 'chemical_name#lead iodide', 'type'...\n", - "prov [text, data]\n", - "flags {'aggregations': {'@smi': True, 'model': True}}\n", - "coor [0, 8, 13, 15, 17, 21, 24, 31, 2, 1]\n", - "doping-parameter NaN\n", - "element-parameter NaN\n", - "Name: 0, dtype: object" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Show the first record in the materials file\n", - "materials = jsonl2df(os.path.join(BASE_DIR, \"unzipped_data\", \"material.jsonl\"))\n", + "outputs": [], + "source": [ + "# Show the first record in the documents file\n", + "materials = jsonl2df(os.path.join(BASE_DIR, \"unzipped_data\", \"documents.jsonl\"))\n", "display(materials.iloc[0])" ] }, @@ -359,116 +283,24 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "883bfa79", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
source_collectiontarget_collectionsource_hashtarget_hashsymmetric
0documentstextsc4d297ab8e33f5419e2bf081cf8b9f2cac6753cb167f782854d66f49ef8a47fcTrue
1documentstexts6db1ccc0bdb23fe0256571ca6e7020b0d8843473fe754654733260c16936f051True
2documentstexts6db1ccc0bdb23fe0256571ca6e7020b091d5b26959546063b595ea75f7b99bdeTrue
3documentstexts6db1ccc0bdb23fe0256571ca6e7020b04435cbe3ce0b1c8feea9a593f1e31c1dTrue
4documentstextsc4d297ab8e33f5419e2bf081cf8b9f2c8c3f5d93479d56f7a204c65fe1a3daafTrue
\n", - "
" - ], - "text/plain": [ - " source_collection target_collection source_hash \\\n", - "0 documents texts c4d297ab8e33f5419e2bf081cf8b9f2c \n", - "1 documents texts 6db1ccc0bdb23fe0256571ca6e7020b0 \n", - "2 documents texts 6db1ccc0bdb23fe0256571ca6e7020b0 \n", - "3 documents texts 6db1ccc0bdb23fe0256571ca6e7020b0 \n", - "4 documents texts c4d297ab8e33f5419e2bf081cf8b9f2c \n", - "\n", - " target_hash symmetric \n", - "0 ac6753cb167f782854d66f49ef8a47fc True \n", - "1 d8843473fe754654733260c16936f051 True \n", - "2 91d5b26959546063b595ea75f7b99bde True \n", - "3 4435cbe3ce0b1c8feea9a593f1e31c1d True \n", - "4 8c3f5d93479d56f7a204c65fe1a3daaf True " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Show the first few edges\n", "edges = jsonl2df(os.path.join(BASE_DIR, \"unzipped_data\", \"_edges.jsonl\"))\n", - "edges = edges[\n", - " [\n", - " \"source_collection\",\n", - " \"target_collection\",\n", - " \"source_hash\",\n", - " \"target_hash\",\n", - " \"symmetric\",\n", + "if len(edges) > 0:\n", + " edges = edges[\n", + " [\n", + " \"source_collection\",\n", + " \"target_collection\",\n", + " \"source_hash\",\n", + " \"target_hash\",\n", + " \"symmetric\",\n", + " ]\n", " ]\n", - "]\n", - "display(edges.head())" + " display(edges.head())" ] }, { @@ -493,7 +325,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "396ab9c2", "metadata": {}, "outputs": [], @@ -513,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "02fc20f4", "metadata": {}, "outputs": [], @@ -524,12 +356,13 @@ "}\n", "\n", "for nodetype in nodetypes:\n", - " data = jsonl2df(nodetypes[nodetype])\n", - " hetero_kg[nodetype].x = torch.eye(data.shape[0])\n", - " hetero_kg[nodetype][\"_hash\"] = dict(\n", - " (_hash, _idx) for _idx, _hash in enumerate(data[\"_hash\"].to_list())\n", - " )\n", - " hetero_kg[nodetype][\"_name\"] = data[\"_name\"].to_list()" + " if os.path.isfile(nodetypes[nodetype]):\n", + " data = jsonl2df(nodetypes[nodetype])\n", + " hetero_kg[nodetype].x = torch.eye(data.shape[0])\n", + " hetero_kg[nodetype][\"_hash\"] = dict(\n", + " (_hash, _idx) for _idx, _hash in enumerate(data[\"_hash\"].to_list())\n", + " )\n", + " hetero_kg[nodetype][\"_name\"] = data[\"_name\"].to_list()" ] }, { @@ -544,35 +377,36 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "21fd8c27", "metadata": {}, "outputs": [], "source": [ "# Find the relevant edges\n", "edges = jsonl2df(os.path.join(BASE_DIR, \"unzipped_data\", \"_edges.jsonl\"))\n", - "edges = edges[\n", - " (edges.source_collection == \"material\") & (edges.target_collection == \"property\")\n", - "]\n", - "edges = [edges[\"source_hash\"].to_list(), edges[\"target_hash\"].to_list()]\n", - "\n", - "# Create the edge index\n", - "edge_index = []\n", - "for hash_mat, hash_prop in zip(*edges):\n", - " edge_index.append(\n", - " [\n", - " hetero_kg[\"material\"][\"_hash\"][hash_mat],\n", - " hetero_kg[\"property\"][\"_hash\"][hash_prop],\n", - " ]\n", + "if len(edges)>0:\n", + " edges = edges[\n", + " (edges.source_collection == \"material\") & (edges.target_collection == \"property\")\n", + " ]\n", + " edges = [edges[\"source_hash\"].to_list(), edges[\"target_hash\"].to_list()]\n", + "\n", + " # Create the edge index\n", + " edge_index = []\n", + " for hash_mat, hash_prop in zip(*edges):\n", + " edge_index.append(\n", + " [\n", + " hetero_kg[\"material\"][\"_hash\"][hash_mat],\n", + " hetero_kg[\"property\"][\"_hash\"][hash_prop],\n", + " ]\n", + " )\n", + "\n", + " # Add edge index to the KG\n", + " hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index = (\n", + " torch.tensor(edge_index).long().t()\n", " )\n", "\n", - "# Add edge index to the KG\n", - "hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index = (\n", - " torch.tensor(edge_index).long().t()\n", - ")\n", - "\n", - "# Make the graph undirected\n", - "hetero_kg = ToUndirected()(hetero_kg)" + " # Make the graph undirected\n", + " hetero_kg = ToUndirected()(hetero_kg)" ] }, { @@ -585,26 +419,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "6e1e2e48", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of nodes\n", - "\tmaterial -> 9040\n", - "\tproperty -> 16581\n", - "Total number of nodes: 25621\n", - "\n", - "Number of edges\n", - "\t('material', 'mat2prop', 'property') -> 12752\n", - "\t('property', 'rev_mat2prop', 'material') -> 12752\n", - "Total number of edges: 25504\n" - ] - } - ], + "outputs": [], "source": [ "# Summarize the KG\n", "print(\"Number of nodes\")\n", @@ -638,127 +456,45 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "90d1ec78", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
materialProperty0Property1Property2Property3
0perovskite/Siband gapenergy yieldrough surfacetemperature
1O(2) Ti(1)optical bandgappH valueambient temperatureelectrical conductivity
2A(1) I(3) M(1) Pb(1)free energy surfacekinetic energydomain sizeoptical bandgap
3O(1) Zn(1)density-of-stateshigh temperaturework functionsymmetry-class
\n", - "
" - ], - "text/plain": [ - " material Property0 Property1 \\\n", - "0 perovskite/Si band gap energy yield \n", - "1 O(2) Ti(1) optical bandgap pH value \n", - "2 A(1) I(3) M(1) Pb(1) free energy surface kinetic energy \n", - "3 O(1) Zn(1) density-of-states high temperature \n", - "\n", - " Property2 Property3 \n", - "0 rough surface temperature \n", - "1 ambient temperature electrical conductivity \n", - "2 domain size optical bandgap \n", - "3 work function symmetry-class " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Select materials to display\n", - "materials = [\"perovskite/Si\", \"O(2) Ti(1)\", \"A(1) I(3) M(1) Pb(1)\", \"O(1) Zn(1)\"]\n", - "mat_idx = [hetero_kg[\"material\"][\"_name\"].index(mat) for mat in materials]\n", + "if hetero_kg[\"material\"]:\n", + " materials = [\"perovskite/Si\", \"O(2) Ti(1)\", \"A(1) I(3) M(1) Pb(1)\", \"O(1) Zn(1)\"]\n", + " mat_idx = [hetero_kg[\"material\"][\"_name\"].index(mat) for mat in materials]\n", + "\n", + " # Get properties corresponding to each material\n", + " properties = dict()\n", + " for m_idx, material in zip(mat_idx, materials):\n", + " current_edges = (\n", + " hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[0, :] == m_idx\n", + " )\n", + " prop_idx = hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[\n", + " 1, current_edges\n", + " ]\n", + " properties[material] = [\n", + " hetero_kg[\"property\"][\"_name\"][idx] for idx in prop_idx.tolist()\n", + " ]\n", "\n", - "# Get properties corresponding to each material\n", - "properties = dict()\n", - "for m_idx, material in zip(mat_idx, materials):\n", - " current_edges = (\n", - " hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[0, :] == m_idx\n", - " )\n", - " prop_idx = hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[\n", - " 1, current_edges\n", - " ]\n", - " properties[material] = [\n", - " hetero_kg[\"property\"][\"_name\"][idx] for idx in prop_idx.tolist()\n", - " ]\n", + " # Show up to four randomly chosen properties for each material\n", + " df = pd.DataFrame()\n", + " for mat, prop in properties.items():\n", + " # Restrict to four properties\n", + " if len(prop) > 4:\n", + " prop = [prop[idx] for idx in torch.randperm(len(prop)).tolist()[:4]]\n", "\n", - "# Show up to four randomly chosen properties for each material\n", - "df = pd.DataFrame()\n", - "for mat, prop in properties.items():\n", - " # Restrict to four properties\n", - " if len(prop) > 4:\n", - " prop = [prop[idx] for idx in torch.randperm(len(prop)).tolist()[:4]]\n", - "\n", - " # Add the row to the dataframe\n", - " curr_dict = dict(\n", - " [(\"material\", [mat])]\n", - " + [(f\"Property{p_idx}\", [p]) for p_idx, p in enumerate(prop)]\n", - " )\n", - " curr_df = pd.DataFrame(curr_dict)\n", - " df = pd.concat([df, curr_df]).reset_index(drop=True)\n", + " # Add the row to the dataframe\n", + " curr_dict = dict(\n", + " [(\"material\", [mat])]\n", + " + [(f\"Property{p_idx}\", [p]) for p_idx, p in enumerate(prop)]\n", + " )\n", + " curr_df = pd.DataFrame(curr_dict)\n", + " df = pd.concat([df, curr_df]).reset_index(drop=True)\n", "\n", - "display(df)" + " display(df)" ] }, { @@ -771,33 +507,25 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "fc57fd5f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Is perovskite/Si linked to power conversion efficiency: True\n", - "Is perovskite/Si linked to band gap: True\n" - ] - } - ], - "source": [ - "# Find properties linked to perovskite/Si\n", - "m_idx = hetero_kg[\"material\"][\"_name\"].index(\"perovskite/Si\")\n", - "perovskite_edges = (\n", - " hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[0, :] == m_idx\n", - ")\n", - "prop_idx = hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[1, perovskite_edges]\n", - "properties = [hetero_kg[\"property\"][\"_name\"][idx] for idx in prop_idx.tolist()]\n", - "\n", - "# Check if the desired properties are linked\n", - "print(\n", - " f'Is perovskite/Si linked to power conversion efficiency: {\"power conversion efficiency\" in properties}'\n", - ")\n", - "print(f'Is perovskite/Si linked to band gap: {\"band gap\" in properties}')" + "outputs": [], + "source": [ + "if hetero_kg[\"material\"]:\n", + " # Find properties linked to perovskite/Si\n", + " m_idx = hetero_kg[\"material\"][\"_name\"].index(\"perovskite/Si\")\n", + " perovskite_edges = (\n", + " hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[0, :] == m_idx\n", + " )\n", + " prop_idx = hetero_kg[\"material\", \"mat2prop\", \"property\"].edge_index[1, perovskite_edges]\n", + " properties = [hetero_kg[\"property\"][\"_name\"][idx] for idx in prop_idx.tolist()]\n", + "\n", + " # Check if the desired properties are linked\n", + " print(\n", + " f'Is perovskite/Si linked to power conversion efficiency: {\"power conversion efficiency\" in properties}'\n", + " )\n", + " print(f'Is perovskite/Si linked to band gap: {\"band gap\" in properties}')" ] }, { @@ -832,7 +560,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -846,7 +574,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/examples/nlp_for_materials/nlp_for_materials.ipynb b/examples/nlp_for_materials/nlp_for_materials.ipynb index 189d0cf..9e436e3 100644 --- a/examples/nlp_for_materials/nlp_for_materials.ipynb +++ b/examples/nlp_for_materials/nlp_for_materials.ipynb @@ -33,15 +33,7 @@ "execution_count": 1, "id": "b01a4fd1", "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Project key: 1234567890abcdefghijklmnopqrstvwyz123456\n" - ] - } - ], + "outputs": [], "source": [ "from dsnotebooks.settings import ProjectNotebookSettings\n", "\n", @@ -129,16 +121,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 206.31it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:03<00:00, 3.48s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:23<00:00, 23.54s/it]\u001b[38;2;15;98;254m \u001b[0m\n" + "Submitting input: : 0%|\u001b[38;2;15;98;254m \u001b[0m| 0/1 [00:00Annual Reports\n", " Document\n", " 107.38K\n", - " 2024-01-12\n", + " 2024-04-15\n", " default/annual-report\n", " \n", " \n", " 3\n", " arXiv abstracts\n", " Document\n", - " 2.37M\n", - " 2023-12-07\n", + " 2.48M\n", + " 2024-05-22\n", " default/arxiv-abstract\n", " \n", " \n", @@ -407,7 +381,7 @@ " arXiv category taxonomy\n", " Record\n", " 155\n", - " 2023-12-05\n", + " 2024-05-22\n", " default/arxiv-category\n", " \n", " \n", @@ -438,17 +412,17 @@ " 8\n", " ChEMBL\n", " Record\n", - " 2.11M\n", - " 2023-01-03\n", + " 2.42M\n", + " 2024-04-26\n", " default/chembl\n", " \n", " \n", " 9\n", - " ChemRxiv\n", - " Document\n", - " 8.82K\n", - " 2023-11-23\n", - " default/chemrxiv\n", + " ChEMBL (DEPRECATED)\n", + " Record\n", + " 2.11M\n", + " 2023-01-03\n", + " default/chembl-deprecated\n", " \n", " \n", "\n", @@ -458,26 +432,26 @@ " Name Type Num entries Date \\\n", "0 AAAI Document 16.02K 2023-08-29 \n", "1 ACL Anthology Document 55.28K 2023-08-22 \n", - "2 Annual Reports Document 107.38K 2024-01-12 \n", - "3 arXiv abstracts Document 2.37M 2023-12-07 \n", - "4 arXiv category taxonomy Record 155 2023-12-05 \n", + "2 Annual Reports Document 107.38K 2024-04-15 \n", + "3 arXiv abstracts Document 2.48M 2024-05-22 \n", + "4 arXiv category taxonomy Record 155 2024-05-22 \n", "5 arXiv full documents Document 2.29M 2023-10-29 \n", "6 BioRxiv Document 357.76K 2023-11-09 \n", "7 Brenda Record 7.12K 2023-01-03 \n", - "8 ChEMBL Record 2.11M 2023-01-03 \n", - "9 ChemRxiv Document 8.82K 2023-11-23 \n", + "8 ChEMBL Record 2.42M 2024-04-26 \n", + "9 ChEMBL (DEPRECATED) Record 2.11M 2023-01-03 \n", "\n", - " Coords \n", - "0 default/aaai \n", - "1 default/acl \n", - "2 default/annual-report \n", - "3 default/arxiv-abstract \n", - "4 default/arxiv-category \n", - "5 default/arxiv \n", - "6 default/biorxiv \n", - "7 default/brenda \n", - "8 default/chembl \n", - "9 default/chemrxiv " + " Coords \n", + "0 default/aaai \n", + "1 default/acl \n", + "2 default/annual-report \n", + "3 default/arxiv-abstract \n", + "4 default/arxiv-category \n", + "5 default/arxiv \n", + "6 default/biorxiv \n", + "7 default/brenda \n", + "8 default/chembl \n", + "9 default/chembl-deprecated " ] }, "metadata": {}, @@ -486,6 +460,7 @@ ], "source": [ "from numerize.numerize import numerize\n", + "from datetime import datetime\n", "\n", "# Fetch list of all data collections\n", "collections = api.elastic.list()\n", @@ -497,7 +472,7 @@ " \"Name\": c.name,\n", " \"Type\": c.metadata.type,\n", " \"Num entries\": numerize(c.documents),\n", - " \"Date\": c.metadata.created.strftime(\"%Y-%m-%d\"),\n", + " \"Date\": datetime.fromisoformat(c.metadata.created).strftime(\"%Y-%m-%d\"),\n", " \"Coords\": f\"{c.source.elastic_id}/{c.source.index_key}\",\n", " }\n", " for c in collections\n", @@ -507,7 +482,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "d5394460-3427-4a89-a6e3-d655b28b0412", "metadata": {}, "outputs": [ @@ -515,14 +490,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "#-found documents: RunQueryResult(outputs={'data_outputs': [], 'data_count': 2, 'data_aggs': {'deepsearch_total_size': {'value': 713388.0}}}, next_pages={}, timings=RunQueryResult.QueryTimings(overall=0.28376056300476193, tasks={'0_ElasticQuery': RunQueryResult.QueryTimings.TaskTimings(overall=0.2827732330188155, details={})}))\n" + "#-found documents: RunQueryResult(outputs={'data_outputs': [], 'data_count': 2, 'data_aggs': {'deepsearch_total_size': {'value': 780743.0}}}, next_pages={}, timings=RunQueryResult.QueryTimings(overall=3.036691223969683, tasks={'0_ElasticQuery': RunQueryResult.QueryTimings.TaskTimings(overall=3.035835279035382, details={})}))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "3it [00:02, 1.13it/s] " + "3it [00:02, 1.26it/s] " ] }, { @@ -588,7 +563,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 12, "id": "8717419b-6d96-4848-bbbf-3d4149406872", "metadata": {}, "outputs": [ @@ -736,19 +711,11 @@ "metadata": {}, "outputs": [], "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adf0256c-f8f9-42d8-957d-a5c54f388a75", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -762,7 +729,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.4" }, "toc": { "base_numbering": 1, @@ -776,11 +743,6 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false - }, - "vscode": { - "interpreter": { - "hash": "23663f76e1e243f0a6319b8ef58f504b6b45c83666dfefd3138ba8cf69ab01fa" - } } }, "nbformat": 4, diff --git a/examples/nlp_on_documents/nlp_on_documents.ipynb b/examples/nlp_on_documents/nlp_on_documents.ipynb index 507f193..3955a56 100644 --- a/examples/nlp_on_documents/nlp_on_documents.ipynb +++ b/examples/nlp_on_documents/nlp_on_documents.ipynb @@ -30,18 +30,10 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 10, "id": "b01a4fd1", "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Project key: 1234567890abcdefghijklmnopqrstvwyz123456\n" - ] - } - ], + "outputs": [], "source": [ "from dsnotebooks.settings import ProjectNotebookSettings\n", "\n", @@ -64,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "id": "502cdef8", "metadata": { "ExecuteTime": { @@ -98,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 12, "id": "f44fbf08", "metadata": {}, "outputs": [], @@ -116,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 13, "id": "ec83eb0b", "metadata": { "ExecuteTime": { @@ -129,16 +121,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Processing input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:00<00:00, 126.92it/s]\u001b[38;2;15;98;254m \u001b[0m\n", - "Submitting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:03<00:00, 3.65s/it]\u001b[38;2;15;98;254m \u001b[0m\n", - "Converting input: : 100%|\u001b[38;2;15;98;254m██████████████████████████████\u001b[0m| 1/1 [00:14<00:00, 14.24s/it]\u001b[38;2;15;98;254m \u001b[0m\n" + "Submitting input: : 0%|\u001b[38;2;15;98;254m \u001b[0m| 0/1 [00:00\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-02-20 12:55:01.725 (8965.383s) [ 6E06DF] utils.h:270 INFO| initialising models-expression: spm;term\n", - "2024-02-20 12:55:01.725 (8965.383s) [ 6E06DF] utils.h:77 INFO| initialising model: SPM\n", - "2024-02-20 12:55:01.749 (8965.407s) [ 6E06DF] utils.h:77 INFO| initialising model: TERM\n", - "2024-02-20 12:55:01.749 (8965.407s) [ 6E06DF] utils.h:77 INFO| initialising model: LAPOS\n", - "2024-02-20 12:55:03.354 (8967.012s) [ 6E06DF] utils.h:77 INFO| initialising model: LANGUAGE\n", - "2024-02-20 12:55:03.453 (8967.111s) [ 6E06DF] utils.h:77 INFO| initialising model: SENTENCE\n", - "2024-02-20 12:55:03.453 (8967.111s) [ 6E06DF] utils.h:77 INFO| initialising model: NUMVAL\n", - "2024-02-20 12:55:03.453 (8967.111s) [ 6E06DF] utils.h:77 INFO| initialising model: CITE\n", - "2024-02-20 12:55:03.453 (8967.111s) [ 6E06DF] utils.h:77 INFO| initialising model: LINK\n", - "2024-02-20 12:55:03.453 (8967.111s) [ 6E06DF] utils.h:77 INFO| initialising model: NAME\n", - "2024-02-20 12:55:03.463 (8967.121s) [ 6E06DF] utils.h:77 INFO| initialising model: QUOTE\n", - "2024-02-20 12:55:03.463 (8967.121s) [ 6E06DF] utils.h:77 INFO| initialising model: PARENTHESIS\n", - "2024-02-20 12:55:03.463 (8967.121s) [ 6E06DF] utils.h:77 INFO| initialising model: EXPRESSION\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:77 INFO| initialising model: SENTENCE\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [0] SPM\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [1] LANGUAGE\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [2] NUMVAL\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [3] CITE\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [4] LINK\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [5] NAME\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [6] QUOTE\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [7] PARENTHESIS\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [8] EXPRESSION\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [9] SENTENCE\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [10] LAPOS\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] utils.h:301 INFO| [11] TERM\n", - "2024-02-20 12:55:03.463 (8967.122s) [ 6E06DF] glm.h:96 INFO| #-models: 12\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] base_producer.h:263 INFO| item: ./converted_docs/20140197356.json\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] base_producer.h:300 INFO| found 1 files to ingest!\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] base_producer.h:263 INFO| item: ./converted_docs/20140197356.json\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] base_producer.h:300 INFO| found 1 files to ingest!\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] create.h:150 INFO| initialise glm: \n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] create.h:151 INFO| -> reserve nodes: 10000000\n", - "2024-02-20 12:55:03.464 (8967.122s) [ 6E06DF] create.h:154 INFO| -> reserve edges: 100000000\n", - "2024-02-20 12:55:03.493 (8967.151s) [ 6E06DF] create.h:175 INFO| start creating glm (#-threads: 4) ...\n", - "2024-02-20 12:55:03.787 (8967.446s) [ 6E06DF] edges.h:132 INFO| show_bucket_distribution (bucket-size versus count): 32\n", - "2024-02-20 12:55:03.787 (8967.446s) [ 6E06DF] create.h:219 INFO| launching 4 threads ...\n", - "2024-02-20 12:55:05.734 (8969.392s) [ 701072] document.h:217 INFO| reading: ./converted_docs/20140197356.json\n", - "2024-02-20 12:55:05.776 (8969.434s) [ 701070] logger.h:169 INFO| id, tot-text (loc-text), #-nodes, #-edges, #-token, #-terms: [#-nodes %, #-edges %, #-token %, #-terms %]\n", - "2024-02-20 12:55:05.776 (8969.434s) [ 701070] logger.h:188 INFO| 1, 0.00e+00 (0.00e+00), 1.00e+01, 0.00e+00, 4.00e+00, 0.00e+00: [1.00e+02 %, 1.00e+02 %, 1.00e+02 %, 1.00e+02 %]\n", - "2024-02-20 12:55:05.806 (8969.464s) [ 70106F] logger.h:188 INFO| 0, 0.00e+00 (0.00e+00), 1.00e+01, 0.00e+00, 4.00e+00, 0.00e+00: [0.00e+00 %, 0.00e+00 %, 0.00e+00 %, 0.00e+00 %]\n", - "2024-02-20 12:55:05.807 (8969.465s) [ 701071] logger.h:188 INFO| 2, 0.00e+00 (0.00e+00), 1.00e+01, 0.00e+00, 4.00e+00, 0.00e+00: [0.00e+00 %, 0.00e+00 %, 0.00e+00 %, 0.00e+00 %]\n", - "2024-02-20 12:55:06.192 (8969.850s) [ 701072] logger.h:188 INFO| 3, 1.00e+00 (1.00e+00), 3.76e+03, 3.47e+04, 1.20e+03, 7.69e+02: [3.75e+04 %, 3.47e+12 %, 2.98e+04 %, 7.69e+10 %]\n", - "2024-02-20 12:55:06.202 (8969.860s) [ 6E06DF] create.h:258 INFO| total text read: 1\n", - "2024-02-20 12:55:06.202 (8969.860s) [ 6E06DF] create.h:260 INFO| final GLM: #-nodes: 3758, #-edges: 34733\n", - "2024-02-20 12:55:06.203 (8969.861s) [ 6E06DF] nodes.h:143 INFO| show_bucket_distribution (bucket-size versus count): 32\n", - "2024-02-20 12:55:06.203 (8969.861s) [ 6E06DF] nodes.h:148 INFO| \t1: 3724\n", - "2024-02-20 12:55:06.203 (8969.861s) [ 6E06DF] nodes.h:148 INFO| \t2: 17\n", - "2024-02-20 12:55:06.208 (8969.866s) [ 6E06DF] edges.h:132 INFO| show_bucket_distribution (bucket-size versus count): 32\n", - "2024-02-20 12:55:06.208 (8969.866s) [ 6E06DF] edges.h:137 INFO| \t1: 34373\n", - "2024-02-20 12:55:06.208 (8969.866s) [ 6E06DF] edges.h:137 INFO| \t2: 177\n", - "2024-02-20 12:55:06.208 (8969.866s) [ 6E06DF] edges.h:137 INFO| \t3: 2\n", - "2024-02-20 12:55:06.789 (8970.447s) [ 6E06DF] create.h:165 INFO| finalise glm\n", - "2024-02-20 12:55:06.789 (8970.447s) [ 6E06DF] singplur.h:50 INFO| keeping terms up to length: 2\n", - "2024-02-20 12:55:06.790 (8970.448s) [ 6E06DF] singplur.h:131 INFO| add_singplur --> new nodes: 49\n", - "2024-02-20 12:55:06.790 (8970.448s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-singular]: 170\n", - "2024-02-20 12:55:06.790 (8970.448s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-plural]: 170\n", - "2024-02-20 12:55:06.790 (8970.448s) [ 6E06DF] taxtree.h:52 INFO| add_taxupdn\n", - "2024-02-20 12:55:06.793 (8970.452s) [ 6E06DF] nodes.h:329 INFO| sort\n", - "2024-02-20 12:55:06.794 (8970.452s) [ 6E06DF] edges.h:375 INFO| sort\n", - "2024-02-20 12:55:06.794 (8970.452s) [ 6E06DF] edges.h:325 INFO| sorting edge [ prev]: 10239\n", - "2024-02-20 12:55:06.796 (8970.454s) [ 6E06DF] edges.h:325 INFO| sorting edge [ next]: 10304\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ tax-dn]: 800\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ tax-up]: 1294\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-token]: 362\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-token]: 362\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-pos]: 1339\n", - "2024-02-20 12:55:06.798 (8970.456s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-pos]: 1339\n", - "2024-02-20 12:55:06.798 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-label]: 1232\n", - "2024-02-20 12:55:06.799 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-label]: 1232\n", - "2024-02-20 12:55:06.799 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-root]: 832\n", - "2024-02-20 12:55:06.799 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-root]: 849\n", - "2024-02-20 12:55:06.799 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-sent]: 1378\n", - "2024-02-20 12:55:06.799 (8970.457s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-sent]: 1378\n", - "2024-02-20 12:55:06.799 (8970.458s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-text]: 1283\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-text]: 1283\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] edges.h:325 INFO| sorting edge [ to-doc]: 769\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] edges.h:325 INFO| sorting edge [ from-doc]: 769\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] nodes.h:329 INFO| sort\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] edges.h:375 INFO| sort\n", - "2024-02-20 12:55:06.800 (8970.458s) [ 6E06DF] topology.h:482 INFO| computing topology ...\n", - "2024-02-20 12:55:06.800 (8970.459s) [ 6E06DF] topology.h:499 INFO| computing nodes-topology ...\n", - "2024-02-20 12:55:06.801 (8970.459s) [ 6E06DF] topology.h:531 INFO| computing edges-topology ...\n", - "2024-02-20 12:55:06.802 (8970.460s) [ 6E06DF] topology.h:124 INFO| \n", - "2024-02-20 12:55:06.802 (8970.460s) [ 6E06DF] topology.h:195 INFO| node table: \n", - "| ----------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| flavor | node-name | count | 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536 | \n", - "| ----------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| 0 | subw_token | 1353 | 0 | 0 | 6.4e+02 | 3.5e+02 | 1.9e+02 | 9.2e+01 | 5.8e+01 | 2.2e+01 | 4.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 1 | word_token | 1196 | 4.0e+00 | 0 | 6.9e+02 | 2.5e+02 | 1.4e+02 | 6.6e+01 | 2.7e+01 | 1.5e+01 | 4.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 2 | syntax | 35 | 0 | 0 | 3.0e+00 | 1.0e+00 | 1.0e+00 | 6.0e+00 | 4.0e+00 | 1.2e+01 | 8.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 4 | label | 6 | 6.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 5 | sublabel | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 8 | cont | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 9 | conn | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 10 | term | 818 | 4.9e+01 | 0 | 5.9e+02 | 1.2e+02 | 4.3e+01 | 1.7e+01 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 11 | verb | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 16 | sentence | 238 | 0 | 0 | 2.3e+02 | 3.0e+00 | 3.0e+00 | 2.0e+00 | 1.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 32 | text | 160 | 1.0e+02 | 0 | 6.0e+01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 48 | table | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 64 | section | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 65 | chapter | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 96 | document | 1 | 1.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 97 | book | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| ----------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| total (cnt) | | 3.8e+03 | 1.6e+02 | 0 | 2.2e+03 | 7.2e+02 | 3.7e+02 | 1.8e+02 | 9.3e+01 | 4.9e+01 | 1.6e+01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| total (%) | | 1.0e+00 | 4.2e-02 | 0.0e+00 | 5.8e-01 | 1.9e-01 | 9.8e-02 | 4.8e-02 | 2.4e-02 | 1.3e-02 | 4.2e-03 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | \n", - "| cumul (%) | | 1.0e+00 | 4.2e-02 | 4.2e-02 | 6.2e-01 | 8.1e-01 | 9.1e-01 | 9.6e-01 | 9.8e-01 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | \n", - "| ----------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "\n", - "2024-02-20 12:55:06.803 (8970.461s) [ 6E06DF] topology.h:268 INFO| edge table: \n", - "| ----------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| flavor | edge-name | count | 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536 | \n", - "| ----------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| -6 | prev-6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| -5 | prev-5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| -4 | prev-4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| -3 | prev-3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| -2 | prev-2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| -1 | prev | 1.0e+04 | 0 | 6.0e+03 | 2.1e+03 | 1.0e+03 | 5.7e+02 | 3.0e+02 | 1.4e+02 | 7.8e+01 | 2.7e+01 | 5.0e+00 | 5.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 1 | next | 1.0e+04 | 0 | 6.0e+03 | 2.1e+03 | 1.0e+03 | 5.7e+02 | 3.1e+02 | 1.4e+02 | 8.1e+01 | 2.7e+01 | 5.0e+00 | 5.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 2 | next-2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 3 | next-3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 4 | next-4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 5 | next-5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 6 | next-6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 32 | tax-dn | 8.0e+02 | 6.7e+01 | 1.8e+02 | 4.1e+02 | 7.4e+01 | 3.7e+01 | 2.2e+01 | 6.0e+00 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 33 | tax-up | 1.3e+03 | 6.7e+01 | 4.6e+02 | 4.9e+02 | 1.3e+02 | 7.7e+01 | 4.7e+01 | 1.6e+01 | 7.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 64 | to-lower | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 65 | to-upper | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 66 | to-singular | 1.7e+02 | 0 | 1.7e+02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 67 | to-plural | 1.7e+02 | 0 | 1.7e+02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 96 | to-token | 3.6e+02 | 0 | 2.2e+02 | 5.7e+01 | 4.0e+01 | 2.0e+01 | 1.4e+01 | 6.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 97 | from-token | 3.6e+02 | 0 | 2.2e+02 | 5.7e+01 | 4.0e+01 | 2.0e+01 | 1.4e+01 | 6.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 98 | to-pos | 1.3e+03 | 0 | 7.2e+02 | 2.0e+02 | 1.7e+02 | 1.1e+02 | 8.0e+01 | 3.3e+01 | 1.7e+01 | 7.0e+00 | 4.0e+00 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 99 | from-pos | 1.3e+03 | 0 | 7.2e+02 | 2.0e+02 | 1.7e+02 | 1.1e+02 | 8.0e+01 | 3.3e+01 | 1.7e+01 | 7.0e+00 | 4.0e+00 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 100 | to-label | 1.2e+03 | 0 | 7.3e+02 | 2.0e+02 | 1.4e+02 | 8.2e+01 | 5.2e+01 | 2.1e+01 | 1.0e+01 | 0 | 1.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 101 | from-label | 1.2e+03 | 0 | 7.3e+02 | 2.0e+02 | 1.4e+02 | 8.2e+01 | 5.2e+01 | 2.1e+01 | 1.0e+01 | 0 | 1.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 102 | to-root | 8.3e+02 | 7.0e+01 | 5.9e+02 | 9.0e+01 | 4.4e+01 | 2.8e+01 | 1.2e+01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 103 | from-root | 8.5e+02 | 5.3e+01 | 4.1e+02 | 2.5e+02 | 7.2e+01 | 3.5e+01 | 2.1e+01 | 8.0e+00 | 1.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 128 | to-sent | 1.4e+03 | 0 | 1.3e+03 | 6.7e+01 | 2.2e+01 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 129 | from-sent | 1.4e+03 | 0 | 1.3e+03 | 6.7e+01 | 2.2e+01 | 3.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 130 | to-text | 1.3e+03 | 0 | 1.1e+03 | 1.1e+02 | 2.9e+01 | 9.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 131 | from-text | 1.3e+03 | 0 | 1.1e+03 | 1.1e+02 | 2.9e+01 | 9.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 132 | to-table | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 133 | from-table | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 134 | to-doc | 7.7e+02 | 0 | 5.5e+02 | 1.0e+02 | 6.0e+01 | 3.0e+01 | 2.0e+01 | 6.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| 135 | from-doc | 7.7e+02 | 0 | 5.5e+02 | 1.0e+02 | 6.0e+01 | 3.0e+01 | 2.0e+01 | 6.0e+00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| ----------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "| total (cnt) | | 3.7e+04 | 2.6e+02 | 2.3e+04 | 6.9e+03 | 3.3e+03 | 1.8e+03 | 1.0e+03 | 4.3e+02 | 2.2e+02 | 6.8e+01 | 2.0e+01 | 1.6e+01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | \n", - "| total (%) | | 1.0e+00 | 6.9e-03 | 6.2e-01 | 1.8e-01 | 8.9e-02 | 4.9e-02 | 2.8e-02 | 1.2e-02 | 6.0e-03 | 1.8e-03 | 5.3e-04 | 4.3e-04 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | 0.0e+00 | \n", - "| cumul (%) | | 1.0e+00 | 6.9e-03 | 6.3e-01 | 8.1e-01 | 9.0e-01 | 9.5e-01 | 9.8e-01 | 9.9e-01 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | 1.0e+00 | \n", - "| ----------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | \n", - "\n", - "2024-02-20 12:55:06.803 (8970.461s) [ 6E06DF] create.h:144 INFO| done creating glm!\n", - "2024-02-20 12:55:06.803 (8970.461s) [ 6E06DF] save.h:145 INFO| writing started ...\n", - "2024-02-20 12:55:06.803 (8970.461s) [ 6E06DF] save.h:155 INFO| writing ./glm/parameters.json\n", - "2024-02-20 12:55:06.803 (8970.461s) [ 6E06DF] save.h:165 INFO| writing ./glm/topology.json\n", - "2024-02-20 12:55:06.806 (8970.464s) [ 6E06DF] save.h:171 INFO| writing ./glm/topology.txt\n", - "2024-02-20 12:55:06.807 (8970.465s) [ 6E06DF] nodes.h:329 INFO| sort\n", - "2024-02-20 12:55:06.807 (8970.466s) [ 6E06DF] save.h:182 INFO| writing ./glm/nodes.bin\n", - "2024-02-20 12:55:06.810 (8970.468s) [ 6E06DF] save.h:208 INFO| writing ./glm/edges.bin\n", - "2024-02-20 12:55:06.817 (8970.475s) [ 6E06DF] save.h:283 INFO| writing CSV started ...\n", - "2024-02-20 12:55:06.817 (8970.475s) [ 6E06DF] save.h:292 INFO| writing ./glm/nodes.csv\n", - "2024-02-20 12:55:06.846 (8970.504s) [ 6E06DF] save.h:324 INFO| writing ./glm/edges.csv\n", - "2024-02-20 12:55:06.900 (8970.558s) [ 6E06DF] save.h:365 INFO| writing done!\n" - ] - } - ], + "outputs": [], "source": [ - "ifile = \"./converted_docs/20140197356.json\"\n", - "\n", "odir = \"./glm\"\n", "os.makedirs(odir, exist_ok=True)\n", "\n", "model_names = \"spm;term\"\n", - "json_files = [ifile]\n", + "json_files = [str(file) for file in json_files]\n", "\n", "odir, glm = create_glm_from_docs(odir, json_files, model_names)" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "id": "175550c9-8b1e-4b02-8069-6c36aceafd99", "metadata": {}, "outputs": [ @@ -603,24 +384,11 @@ "name": "stdout", "output_type": "stream", "text": [ - " total-count nodes-text\n", - "2590 30 composition\n", - "2591 29 invention\n", - "2592 27 substrate\n", - "2593 24 ppm\n", - "2594 19 compositions\n", - "... ... ...\n", - "3403 0 Suitable polymer\n", - "3404 0 film\n", - "3405 0 › tion\n", - "3406 0 insulator material\n", - "3407 0 A\n", - "\n", - "[818 rows x 2 columns]\n", + "None\n", " weight prob cumul text count\n", - "0 0.5625 0.5625 0.5625 CMP composition 9\n", - "1 0.3750 0.3750 0.9375 polishing composition 6\n", - "2 0.0625 0.0625 1.0000 abrasive composition 1\n" + "0 0.5625 0.5625 0.5625 CMP composition 27\n", + "1 0.3750 0.3750 0.9375 polishing composition 18\n", + "2 0.0625 0.0625 1.0000 abrasive composition 3\n" ] } ], @@ -629,8 +397,9 @@ "# print(nodes)\n", "\n", "# Get all terms of the document\n", - "terms = nodes[nodes[\"name\"] == \"term\"][[\"total-count\", \"nodes-text\"]]\n", - "print(terms)\n", + "if nodes:\n", + " terms = nodes[nodes[\"name\"] == \"term\"][[\"total-count\", \"nodes-text\"]]\n", + " print(terms)\n", "\n", "# Get all terms of the document with `composition`\n", "res = expand_terms(glm, \"composition\")\n", @@ -654,7 +423,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -668,7 +437,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.4" }, "toc": { "base_numbering": 1, @@ -682,11 +451,6 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false - }, - "vscode": { - "interpreter": { - "hash": "23663f76e1e243f0a6319b8ef58f504b6b45c83666dfefd3138ba8cf69ab01fa" - } } }, "nbformat": 4, diff --git a/examples/qa/qa_quick_start.ipynb b/examples/qa/qa_quick_start.ipynb index 0fdc3c3..5c8b9a2 100644 --- a/examples/qa/qa_quick_start.ipynb +++ b/examples/qa/qa_quick_start.ipynb @@ -153,8 +153,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/pva/work/github.com/DS4SD/deepsearch-examples/.venv/lib/python3.10/site-packages/pydantic/main.py:347: UserWarning: Pydantic serializer warnings:\n", - " Expected `list[str]` but got `_LiteralGenericAlias` - serialized value may not be as expected\n", + "/home/santana/Documents/dev/deepsearch-examples/venv/lib/python3.10/site-packages/pydantic/main.py:426: UserWarning: Pydantic serializer warnings:\n", + " Expected `list[str]` but got `_LiteralGenericAlias` with value `typing.Literal['SemanticI...emanticIngestSourceUrl']` - serialized value may not be as expected\n", " return self.__pydantic_serializer__.to_python(\n" ] }, @@ -201,11 +201,11 @@ { "data": { "text/html": [ - "
Where was the first European IBM lab located?\n",
+       "
sentiment analysis\n",
        "
\n" ], "text/plain": [ - "Where was the first European IBM lab located?\n" + "sentiment analysis\n" ] }, "metadata": {}, @@ -217,23 +217,30 @@ "
RAGResult(\n",
        "    answers=[\n",
        "        RAGAnswerItem(\n",
-       "            answer='The first European IBM lab was located in Adliswil, Switzerland, near Zurich.',\n",
+       "            answer=\"The context information provided does not contain any information related to sentiment \n",
+       "analysis. Sentiment analysis is a field of study that analyzes people's sentiments, attitudes, or emotions towards \n",
+       "certain entities, such as products, services, individuals, issues, events, topics, and their attributes. It \n",
+       "involves the use of natural language processing, text analysis, computational linguistics, and biometrics to \n",
+       "systematically identify, extract, quantify, and study affective states and subjective information.\\nTherefore, it \n",
+       "is not possible to perform sentiment analysis based on the context information provided.\",\n",
        "            grounding=RAGGroundingInfo(\n",
        "                retr_items=[\n",
        "                    SearchResultItem(\n",
-       "                        doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "                        chunk='Switzerland\\nIn 1956, IBM opened their first European research laboratory in \n",
-       "Adliswil, Switzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich \n",
-       "lab is staffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, \n",
-       "graduate students and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a \n",
-       "Client Center (formerly the Industry Solutions Lab), an executive briefing facility demonstrating technology \n",
-       "prototypes and solutions.',\n",
-       "                        main_path='main-text.71',\n",
-       "                        path_group=['main-text.69', 'main-text.71'],\n",
+       "                        doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "                        main_path='main-text.65',\n",
+       "                        path_group=['main-text.47', 'main-text.65'],\n",
+       "                        chunk='References\\n- 18. \n",
+       "https://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \n",
+       "Stretches Brands in New Directions',\n",
        "                        source_is_text=True\n",
        "                    )\n",
        "                ],\n",
        "                gen_ctx_paths=[\n",
+       "                    'main-text.55',\n",
+       "                    'main-text.56',\n",
+       "                    'main-text.57',\n",
+       "                    'main-text.58',\n",
+       "                    'main-text.59',\n",
        "                    'main-text.60',\n",
        "                    'main-text.61',\n",
        "                    'main-text.62',\n",
@@ -243,16 +250,7 @@
        "                    'main-text.66',\n",
        "                    'main-text.67',\n",
        "                    'main-text.68',\n",
-       "                    'main-text.69',\n",
-       "                    'main-text.70',\n",
-       "                    'main-text.71',\n",
-       "                    'main-text.72',\n",
-       "                    'main-text.73',\n",
-       "                    'main-text.74',\n",
-       "                    'main-text.75',\n",
-       "                    'main-text.76',\n",
-       "                    'main-text.77',\n",
-       "                    'main-text.78'\n",
+       "                    'main-text.69'\n",
        "                ]\n",
        "            ),\n",
        "            prompt=None\n",
@@ -260,33 +258,30 @@
        "    ],\n",
        "    search_result_items=[\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk='Switzerland\\nIn 1956, IBM opened their first European research laboratory in Adliswil, \n",
-       "Switzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich lab is \n",
-       "staffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, graduate \n",
-       "students and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a Client Center\n",
-       "(formerly the Industry Solutions Lab), an executive briefing facility demonstrating technology prototypes and \n",
-       "solutions.',\n",
-       "            main_path='main-text.71',\n",
-       "            path_group=['main-text.69', 'main-text.71'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.65',\n",
+       "            path_group=['main-text.47', 'main-text.65'],\n",
+       "            chunk='References\\n- 18. \n",
+       "https://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \n",
+       "Stretches Brands in New Directions',\n",
        "            source_is_text=True\n",
        "        ),\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk='Switzerland\\nIBM Research-Zurich (previously called IBM Zurich Research Laboratory, ZRL) is the \n",
-       "European branch of IBM Research. It was opened in 1956 and is located in Rüschlikon, near Zurich, Switzerland.',\n",
-       "            main_path='main-text.70',\n",
-       "            path_group=['main-text.69', 'main-text.70'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.61',\n",
+       "            path_group=['main-text.47', 'main-text.61'],\n",
+       "            chunk='References\\n- 14. \"17\" \n",
+       "(https://web.archive.org/web/20050226123115/http://www.washingtontechnology.com/news/1 1_1/news/10284-1.html). \n",
+       "www.washingtontechnology.com . Archived from the original (http://www. \n",
+       "washingtontechnology.com/news/11_1/news/10284-1.html) on 26 February 2005. Retrieved 15 January 2022.',\n",
        "            source_is_text=True\n",
        "        ),\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk=\"History\\nThe roots of today's IBM Research began with the 1945 opening of the Watson Scientific \n",
-       "Computing Laboratory at Columbia University. $^{[4]}$ This was the first IBM laboratory devoted to pure science and\n",
-       "later expanded into additional IBM Research locations in Westchester County, New York, starting in the 1950s, \n",
-       "$^{[5][6]}$ including the Thomas J. Watson Research Center in 1961. [5][6]\",\n",
-       "            main_path='main-text.8',\n",
-       "            path_group=['main-text.7', 'main-text.8'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.63',\n",
+       "            path_group=['main-text.47', 'main-text.63'],\n",
+       "            chunk='References\\n- 16. Nathan Schueth. \"Ultra Electronics - USSI, Innovation Through Experience\" \n",
+       "(http://www.ultra-uss i.com/). Ultra-ussi.com . Retrieved 25 October 2014.',\n",
        "            source_is_text=True\n",
        "        )\n",
        "    ]\n",
@@ -297,23 +292,30 @@
        "\u001b[1;35mRAGResult\u001b[0m\u001b[1m(\u001b[0m\n",
        "    \u001b[33manswers\u001b[0m=\u001b[1m[\u001b[0m\n",
        "        \u001b[1;35mRAGAnswerItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33manswer\u001b[0m=\u001b[32m'The first European IBM lab was located in Adliswil, Switzerland, near Zurich.'\u001b[0m,\n",
+       "            \u001b[33manswer\u001b[0m=\u001b[32m\"The\u001b[0m\u001b[32m context information provided does not contain any information related to sentiment \u001b[0m\n",
+       "\u001b[32manalysis. Sentiment analysis is a field of study that analyzes people's sentiments, attitudes, or emotions towards \u001b[0m\n",
+       "\u001b[32mcertain entities, such as products, services, individuals, issues, events, topics, and their attributes. It \u001b[0m\n",
+       "\u001b[32minvolves the use of natural language processing, text analysis, computational linguistics, and biometrics to \u001b[0m\n",
+       "\u001b[32msystematically identify, extract, quantify, and study affective states and subjective information.\\nTherefore, it \u001b[0m\n",
+       "\u001b[32mis not possible to perform sentiment analysis based on the context information provided.\"\u001b[0m,\n",
        "            \u001b[33mgrounding\u001b[0m=\u001b[1;35mRAGGroundingInfo\u001b[0m\u001b[1m(\u001b[0m\n",
        "                \u001b[33mretr_items\u001b[0m=\u001b[1m[\u001b[0m\n",
        "                    \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "                        \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "                        \u001b[33mchunk\u001b[0m=\u001b[32m'Switzerland\\nIn 1956, IBM opened their first European research laboratory in \u001b[0m\n",
-       "\u001b[32mAdliswil, Switzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich \u001b[0m\n",
-       "\u001b[32mlab is staffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, \u001b[0m\n",
-       "\u001b[32mgraduate students and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a \u001b[0m\n",
-       "\u001b[32mClient Center \u001b[0m\u001b[32m(\u001b[0m\u001b[32mformerly the Industry Solutions Lab\u001b[0m\u001b[32m)\u001b[0m\u001b[32m, an executive briefing facility demonstrating technology \u001b[0m\n",
-       "\u001b[32mprototypes and solutions.'\u001b[0m,\n",
-       "                        \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.71'\u001b[0m,\n",
-       "                        \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.69'\u001b[0m, \u001b[32m'main-text.71'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "                        \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "                        \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.65'\u001b[0m,\n",
+       "                        \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.65'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "                        \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 18. \u001b[0m\n",
+       "\u001b[32mhttps://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \u001b[0m\n",
+       "\u001b[32mStretches Brands in New Directions'\u001b[0m,\n",
        "                        \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "                    \u001b[1m)\u001b[0m\n",
        "                \u001b[1m]\u001b[0m,\n",
        "                \u001b[33mgen_ctx_paths\u001b[0m=\u001b[1m[\u001b[0m\n",
+       "                    \u001b[32m'main-text.55'\u001b[0m,\n",
+       "                    \u001b[32m'main-text.56'\u001b[0m,\n",
+       "                    \u001b[32m'main-text.57'\u001b[0m,\n",
+       "                    \u001b[32m'main-text.58'\u001b[0m,\n",
+       "                    \u001b[32m'main-text.59'\u001b[0m,\n",
        "                    \u001b[32m'main-text.60'\u001b[0m,\n",
        "                    \u001b[32m'main-text.61'\u001b[0m,\n",
        "                    \u001b[32m'main-text.62'\u001b[0m,\n",
@@ -323,16 +325,7 @@
        "                    \u001b[32m'main-text.66'\u001b[0m,\n",
        "                    \u001b[32m'main-text.67'\u001b[0m,\n",
        "                    \u001b[32m'main-text.68'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.69'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.70'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.71'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.72'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.73'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.74'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.75'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.76'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.77'\u001b[0m,\n",
-       "                    \u001b[32m'main-text.78'\u001b[0m\n",
+       "                    \u001b[32m'main-text.69'\u001b[0m\n",
        "                \u001b[1m]\u001b[0m\n",
        "            \u001b[1m)\u001b[0m,\n",
        "            \u001b[33mprompt\u001b[0m=\u001b[3;35mNone\u001b[0m\n",
@@ -340,33 +333,30 @@
        "    \u001b[1m]\u001b[0m,\n",
        "    \u001b[33msearch_result_items\u001b[0m=\u001b[1m[\u001b[0m\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m'Switzerland\\nIn 1956, IBM opened their first European research laboratory in Adliswil, \u001b[0m\n",
-       "\u001b[32mSwitzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich lab is \u001b[0m\n",
-       "\u001b[32mstaffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, graduate \u001b[0m\n",
-       "\u001b[32mstudents and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a Client Center\u001b[0m\n",
-       "\u001b[32m(\u001b[0m\u001b[32mformerly the Industry Solutions Lab\u001b[0m\u001b[32m)\u001b[0m\u001b[32m, an executive briefing facility demonstrating technology prototypes and \u001b[0m\n",
-       "\u001b[32msolutions.'\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.71'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.69'\u001b[0m, \u001b[32m'main-text.71'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.65'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.65'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 18. \u001b[0m\n",
+       "\u001b[32mhttps://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \u001b[0m\n",
+       "\u001b[32mStretches Brands in New Directions'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m,\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m'Switzerland\\nIBM Research-Zurich \u001b[0m\u001b[32m(\u001b[0m\u001b[32mpreviously called IBM Zurich Research Laboratory, ZRL\u001b[0m\u001b[32m)\u001b[0m\u001b[32m is the \u001b[0m\n",
-       "\u001b[32mEuropean branch of IBM Research. It was opened in 1956 and is located in Rüschlikon, near Zurich, Switzerland.'\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.70'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.69'\u001b[0m, \u001b[32m'main-text.70'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.61'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.61'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 14. \"17\" \u001b[0m\n",
+       "\u001b[32m(\u001b[0m\u001b[32mhttps://web.archive.org/web/20050226123115/http://www.washingtontechnology.com/news/1 1_1/news/10284-1.html\u001b[0m\u001b[32m)\u001b[0m\u001b[32m. \u001b[0m\n",
+       "\u001b[32mwww.washingtontechnology.com . Archived from the original \u001b[0m\u001b[32m(\u001b[0m\u001b[32mhttp://www. \u001b[0m\n",
+       "\u001b[32mwashingtontechnology.com/news/11_1/news/10284-1.html\u001b[0m\u001b[32m)\u001b[0m\u001b[32m on 26 February 2005. Retrieved 15 January 2022.'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m,\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m\"History\u001b[0m\u001b[32m\\nThe roots of today's IBM Research began with the 1945 opening of the Watson Scientific \u001b[0m\n",
-       "\u001b[32mComputing Laboratory at Columbia University. $^\u001b[0m\u001b[32m{\u001b[0m\u001b[32m[\u001b[0m\u001b[32m4\u001b[0m\u001b[32m]\u001b[0m\u001b[32m}\u001b[0m\u001b[32m$ This was the first IBM laboratory devoted to pure science and\u001b[0m\n",
-       "\u001b[32mlater expanded into additional IBM Research locations in Westchester County, New York, starting in the 1950s, \u001b[0m\n",
-       "\u001b[32m$^\u001b[0m\u001b[32m{\u001b[0m\u001b[32m[\u001b[0m\u001b[32m5\u001b[0m\u001b[32m]\u001b[0m\u001b[32m[\u001b[0m\u001b[32m6\u001b[0m\u001b[32m]\u001b[0m\u001b[32m}\u001b[0m\u001b[32m$ including the Thomas J. Watson Research Center in 1961. \u001b[0m\u001b[32m[\u001b[0m\u001b[32m5\u001b[0m\u001b[32m]\u001b[0m\u001b[32m[\u001b[0m\u001b[32m6\u001b[0m\u001b[32m]\u001b[0m\u001b[32m\"\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.8'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.7'\u001b[0m, \u001b[32m'main-text.8'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.63'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.63'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 16. Nathan Schueth. \"Ultra Electronics - USSI, Innovation Through Experience\" \u001b[0m\n",
+       "\u001b[32m(\u001b[0m\u001b[32mhttp://www.ultra-uss i.com/\u001b[0m\u001b[32m)\u001b[0m\u001b[32m. Ultra-ussi.com . Retrieved 25 October 2014.'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m\n",
        "    \u001b[1m]\u001b[0m\n",
@@ -414,11 +404,11 @@
     {
      "data": {
       "text/html": [
-       "
Where was the first European IBM lab located?\n",
+       "
sentiment analysis\n",
        "
\n" ], "text/plain": [ - "Where was the first European IBM lab located?\n" + "sentiment analysis\n" ] }, "metadata": {}, @@ -430,33 +420,30 @@ "
SearchResult(\n",
        "    search_result_items=[\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk='Switzerland\\nIn 1956, IBM opened their first European research laboratory in Adliswil, \n",
-       "Switzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich lab is \n",
-       "staffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, graduate \n",
-       "students and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a Client Center\n",
-       "(formerly the Industry Solutions Lab), an executive briefing facility demonstrating technology prototypes and \n",
-       "solutions.',\n",
-       "            main_path='main-text.71',\n",
-       "            path_group=['main-text.69', 'main-text.71'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.65',\n",
+       "            path_group=['main-text.47', 'main-text.65'],\n",
+       "            chunk='References\\n- 18. \n",
+       "https://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \n",
+       "Stretches Brands in New Directions',\n",
        "            source_is_text=True\n",
        "        ),\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk='Switzerland\\nIBM Research-Zurich (previously called IBM Zurich Research Laboratory, ZRL) is the \n",
-       "European branch of IBM Research. It was opened in 1956 and is located in Rüschlikon, near Zurich, Switzerland.',\n",
-       "            main_path='main-text.70',\n",
-       "            path_group=['main-text.69', 'main-text.70'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.61',\n",
+       "            path_group=['main-text.47', 'main-text.61'],\n",
+       "            chunk='References\\n- 14. \"17\" \n",
+       "(https://web.archive.org/web/20050226123115/http://www.washingtontechnology.com/news/1 1_1/news/10284-1.html). \n",
+       "www.washingtontechnology.com . Archived from the original (http://www. \n",
+       "washingtontechnology.com/news/11_1/news/10284-1.html) on 26 February 2005. Retrieved 15 January 2022.',\n",
        "            source_is_text=True\n",
        "        ),\n",
        "        SearchResultItem(\n",
-       "            doc_hash='b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c',\n",
-       "            chunk=\"History\\nThe roots of today's IBM Research began with the 1945 opening of the Watson Scientific \n",
-       "Computing Laboratory at Columbia University. $^{[4]}$ This was the first IBM laboratory devoted to pure science and\n",
-       "later expanded into additional IBM Research locations in Westchester County, New York, starting in the 1950s, \n",
-       "$^{[5][6]}$ including the Thomas J. Watson Research Center in 1961. [5][6]\",\n",
-       "            main_path='main-text.8',\n",
-       "            path_group=['main-text.7', 'main-text.8'],\n",
+       "            doc_hash='029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3',\n",
+       "            main_path='main-text.63',\n",
+       "            path_group=['main-text.47', 'main-text.63'],\n",
+       "            chunk='References\\n- 16. Nathan Schueth. \"Ultra Electronics - USSI, Innovation Through Experience\" \n",
+       "(http://www.ultra-uss i.com/). Ultra-ussi.com . Retrieved 25 October 2014.',\n",
        "            source_is_text=True\n",
        "        )\n",
        "    ]\n",
@@ -467,33 +454,30 @@
        "\u001b[1;35mSearchResult\u001b[0m\u001b[1m(\u001b[0m\n",
        "    \u001b[33msearch_result_items\u001b[0m=\u001b[1m[\u001b[0m\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m'Switzerland\\nIn 1956, IBM opened their first European research laboratory in Adliswil, \u001b[0m\n",
-       "\u001b[32mSwitzerland, near Zurich. The lab moved to its own campus in neighboring Rüschlikon in 1962. The Zurich lab is \u001b[0m\n",
-       "\u001b[32mstaffed by a multicultural and interdisciplinary team of a few hundred permanent research staff members, graduate \u001b[0m\n",
-       "\u001b[32mstudents and post-doctoral fellows, representing about 45 nationalities. Collocated with the lab is a Client Center\u001b[0m\n",
-       "\u001b[32m(\u001b[0m\u001b[32mformerly the Industry Solutions Lab\u001b[0m\u001b[32m)\u001b[0m\u001b[32m, an executive briefing facility demonstrating technology prototypes and \u001b[0m\n",
-       "\u001b[32msolutions.'\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.71'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.69'\u001b[0m, \u001b[32m'main-text.71'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.65'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.65'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 18. \u001b[0m\n",
+       "\u001b[32mhttps://www.licensing.org/inside-licensing/at-ces-licensing-stretches-brands-in-new-directions/ At CES, Licensing \u001b[0m\n",
+       "\u001b[32mStretches Brands in New Directions'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m,\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m'Switzerland\\nIBM Research-Zurich \u001b[0m\u001b[32m(\u001b[0m\u001b[32mpreviously called IBM Zurich Research Laboratory, ZRL\u001b[0m\u001b[32m)\u001b[0m\u001b[32m is the \u001b[0m\n",
-       "\u001b[32mEuropean branch of IBM Research. It was opened in 1956 and is located in Rüschlikon, near Zurich, Switzerland.'\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.70'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.69'\u001b[0m, \u001b[32m'main-text.70'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.61'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.61'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 14. \"17\" \u001b[0m\n",
+       "\u001b[32m(\u001b[0m\u001b[32mhttps://web.archive.org/web/20050226123115/http://www.washingtontechnology.com/news/1 1_1/news/10284-1.html\u001b[0m\u001b[32m)\u001b[0m\u001b[32m. \u001b[0m\n",
+       "\u001b[32mwww.washingtontechnology.com . Archived from the original \u001b[0m\u001b[32m(\u001b[0m\u001b[32mhttp://www. \u001b[0m\n",
+       "\u001b[32mwashingtontechnology.com/news/11_1/news/10284-1.html\u001b[0m\u001b[32m)\u001b[0m\u001b[32m on 26 February 2005. Retrieved 15 January 2022.'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m,\n",
        "        \u001b[1;35mSearchResultItem\u001b[0m\u001b[1m(\u001b[0m\n",
-       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'b30bc667a324ae111d025526563b674a8d3fd869bc07c8fd204aa95b05d41f0c'\u001b[0m,\n",
-       "            \u001b[33mchunk\u001b[0m=\u001b[32m\"History\u001b[0m\u001b[32m\\nThe roots of today's IBM Research began with the 1945 opening of the Watson Scientific \u001b[0m\n",
-       "\u001b[32mComputing Laboratory at Columbia University. $^\u001b[0m\u001b[32m{\u001b[0m\u001b[32m[\u001b[0m\u001b[32m4\u001b[0m\u001b[32m]\u001b[0m\u001b[32m}\u001b[0m\u001b[32m$ This was the first IBM laboratory devoted to pure science and\u001b[0m\n",
-       "\u001b[32mlater expanded into additional IBM Research locations in Westchester County, New York, starting in the 1950s, \u001b[0m\n",
-       "\u001b[32m$^\u001b[0m\u001b[32m{\u001b[0m\u001b[32m[\u001b[0m\u001b[32m5\u001b[0m\u001b[32m]\u001b[0m\u001b[32m[\u001b[0m\u001b[32m6\u001b[0m\u001b[32m]\u001b[0m\u001b[32m}\u001b[0m\u001b[32m$ including the Thomas J. Watson Research Center in 1961. \u001b[0m\u001b[32m[\u001b[0m\u001b[32m5\u001b[0m\u001b[32m]\u001b[0m\u001b[32m[\u001b[0m\u001b[32m6\u001b[0m\u001b[32m]\u001b[0m\u001b[32m\"\u001b[0m,\n",
-       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.8'\u001b[0m,\n",
-       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.7'\u001b[0m, \u001b[32m'main-text.8'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mdoc_hash\u001b[0m=\u001b[32m'029210df929c78e70d74e6f141a46d8326905ce58562f2081819c80c3921d5a3'\u001b[0m,\n",
+       "            \u001b[33mmain_path\u001b[0m=\u001b[32m'main-text.63'\u001b[0m,\n",
+       "            \u001b[33mpath_group\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'main-text.47'\u001b[0m, \u001b[32m'main-text.63'\u001b[0m\u001b[1m]\u001b[0m,\n",
+       "            \u001b[33mchunk\u001b[0m=\u001b[32m'References\\n- 16. Nathan Schueth. \"Ultra Electronics - USSI, Innovation Through Experience\" \u001b[0m\n",
+       "\u001b[32m(\u001b[0m\u001b[32mhttp://www.ultra-uss i.com/\u001b[0m\u001b[32m)\u001b[0m\u001b[32m. Ultra-ussi.com . Retrieved 25 October 2014.'\u001b[0m,\n",
        "            \u001b[33msource_is_text\u001b[0m=\u001b[3;92mTrue\u001b[0m\n",
        "        \u001b[1m)\u001b[0m\n",
        "    \u001b[1m]\u001b[0m\n",
@@ -521,7 +505,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
+   "display_name": "venv",
    "language": "python",
    "name": "python3"
   },
diff --git a/poetry.lock b/poetry.lock
index 889e18e..b335e2c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,110 +1,123 @@
-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
 
 [[package]]
-name = "aiohttp"
-version = "3.9.5"
-description = "Async http client/server framework (asyncio)"
+name = "aiohappyeyeballs"
+version = "2.4.4"
+description = "Happy Eyeballs for asyncio"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"},
-    {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"},
-    {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"},
-    {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"},
-    {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"},
-    {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"},
-    {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"},
-    {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"},
-    {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"},
-    {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"},
-    {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"},
-    {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"},
-    {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"},
-    {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"},
-    {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"},
-    {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"},
-    {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"},
-    {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"},
-    {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"},
-    {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"},
-    {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"},
-    {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"},
-    {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"},
-    {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"},
-    {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"},
-    {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"},
-    {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"},
-    {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"},
-    {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"},
-    {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"},
-    {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"},
-    {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"},
-    {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"},
-    {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"},
-    {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"},
-    {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"},
-    {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"},
-    {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"},
-    {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"},
-    {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"},
-    {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"},
-    {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"},
-    {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"},
-    {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"},
-    {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"},
-    {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"},
-    {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"},
-    {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"},
-    {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"},
-    {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"},
-    {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"},
-    {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"},
-    {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"},
-    {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"},
-    {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"},
-    {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"},
-    {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"},
-    {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"},
-    {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"},
-    {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"},
-    {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"},
-    {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"},
-    {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"},
-    {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"},
-    {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"},
-    {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"},
-    {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"},
-    {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"},
-    {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"},
-    {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"},
-    {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"},
-    {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"},
-    {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"},
-    {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"},
-    {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"},
-    {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"},
+    {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"},
+    {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"},
+]
+
+[[package]]
+name = "aiohttp"
+version = "3.11.11"
+description = "Async http client/server framework (asyncio)"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"},
+    {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"},
+    {file = "aiohttp-3.11.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2"},
+    {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43"},
+    {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f"},
+    {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d"},
+    {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef"},
+    {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438"},
+    {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3"},
+    {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55"},
+    {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e"},
+    {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33"},
+    {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c"},
+    {file = "aiohttp-3.11.11-cp310-cp310-win32.whl", hash = "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745"},
+    {file = "aiohttp-3.11.11-cp310-cp310-win_amd64.whl", hash = "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9"},
+    {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76"},
+    {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538"},
+    {file = "aiohttp-3.11.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204"},
+    {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9"},
+    {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03"},
+    {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287"},
+    {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e"},
+    {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665"},
+    {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b"},
+    {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34"},
+    {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d"},
+    {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2"},
+    {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773"},
+    {file = "aiohttp-3.11.11-cp311-cp311-win32.whl", hash = "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62"},
+    {file = "aiohttp-3.11.11-cp311-cp311-win_amd64.whl", hash = "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac"},
+    {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886"},
+    {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2"},
+    {file = "aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c"},
+    {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a"},
+    {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231"},
+    {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e"},
+    {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8"},
+    {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8"},
+    {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c"},
+    {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab"},
+    {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da"},
+    {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853"},
+    {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e"},
+    {file = "aiohttp-3.11.11-cp312-cp312-win32.whl", hash = "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600"},
+    {file = "aiohttp-3.11.11-cp312-cp312-win_amd64.whl", hash = "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d"},
+    {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9"},
+    {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194"},
+    {file = "aiohttp-3.11.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f"},
+    {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104"},
+    {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff"},
+    {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3"},
+    {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1"},
+    {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4"},
+    {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d"},
+    {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87"},
+    {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2"},
+    {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12"},
+    {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5"},
+    {file = "aiohttp-3.11.11-cp313-cp313-win32.whl", hash = "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d"},
+    {file = "aiohttp-3.11.11-cp313-cp313-win_amd64.whl", hash = "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99"},
+    {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e"},
+    {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add"},
+    {file = "aiohttp-3.11.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a"},
+    {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350"},
+    {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6"},
+    {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1"},
+    {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e"},
+    {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd"},
+    {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1"},
+    {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c"},
+    {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e"},
+    {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28"},
+    {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226"},
+    {file = "aiohttp-3.11.11-cp39-cp39-win32.whl", hash = "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3"},
+    {file = "aiohttp-3.11.11-cp39-cp39-win_amd64.whl", hash = "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1"},
+    {file = "aiohttp-3.11.11.tar.gz", hash = "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e"},
 ]
 
 [package.dependencies]
+aiohappyeyeballs = ">=2.3.0"
 aiosignal = ">=1.1.2"
-async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""}
+async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""}
 attrs = ">=17.3.0"
 frozenlist = ">=1.1.1"
 multidict = ">=4.5,<7.0"
-yarl = ">=1.0,<2.0"
+propcache = ">=0.2.0"
+yarl = ">=1.17.0,<2.0"
 
 [package.extras]
-speedups = ["Brotli", "aiodns", "brotlicffi"]
+speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"]
 
 [[package]]
 name = "aiosignal"
-version = "1.3.1"
+version = "1.3.2"
 description = "aiosignal: a list of registered asynchronous callbacks"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.9"
 files = [
-    {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
-    {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+    {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"},
+    {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"},
 ]
 
 [package.dependencies]
@@ -121,30 +134,27 @@ files = [
     {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
 ]
 
-[package.dependencies]
-typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""}
-
 [[package]]
 name = "anyio"
-version = "4.4.0"
+version = "4.8.0"
 description = "High level compatibility layer for multiple asynchronous event loop implementations"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"},
-    {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"},
+    {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"},
+    {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"},
 ]
 
 [package.dependencies]
 exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
 idna = ">=2.8"
 sniffio = ">=1.1"
-typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
+typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""}
 
 [package.extras]
-doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
-test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
-trio = ["trio (>=0.23)"]
+doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"]
+trio = ["trio (>=0.26.1)"]
 
 [[package]]
 name = "appnope"
@@ -159,35 +169,24 @@ files = [
 
 [[package]]
 name = "argilla"
-version = "1.28.0"
-description = "Open-source tool for exploring, labeling, and monitoring data for NLP projects."
+version = "2.6.0"
+description = "The Argilla python server SDK"
 optional = false
-python-versions = "<3.12,>=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "argilla-1.28.0-py3-none-any.whl", hash = "sha256:cc3fb496e9b53b8321c3e8ad80c476275e430716dd2eb42d34a89b1320b53616"},
-    {file = "argilla-1.28.0.tar.gz", hash = "sha256:2f78c37a2d26c0a83f9c5eff7cdc26b506169cdf98ac3153f033ed1ae139467f"},
+    {file = "argilla-2.6.0-py3-none-any.whl", hash = "sha256:b7335c8db9705cb3ab1d9b16fd5c6dc9c1542e536fe110d6ab3d0323ca404a53"},
+    {file = "argilla-2.6.0.tar.gz", hash = "sha256:c0dde9873c4ede3a8d2a966bf9f4ae99ac8310c8b818dd4aeb91ad4822faa068"},
 ]
 
 [package.dependencies]
-backoff = "*"
-deprecated = ">=1.2.0,<1.3.0"
-httpx = ">=0.15,<=0.26"
-monotonic = "*"
-numpy = "<1.24.0"
-packaging = ">=20.0"
-pandas = ">=1.0.0"
-pydantic = ">=1.10.7"
-rich = "!=13.1.0"
-tqdm = ">=4.27.0"
-typer = ">=0.6.0,<0.10.0"
-wrapt = ">=1.13,<1.15"
-
-[package.extras]
-integrations = ["PyYAML (>=5.4.1,<6.1.0)", "datasets (>1.17.0,!=2.3.2)", "evaluate", "faiss-cpu", "flair (>=0.12.2)", "flyingsquid", "huggingface-hub (>=0.5.0)", "ipynbname", "openai (>=0.27.10,<1.0.0)", "peft", "pgmpy", "plotly (>=4.1.0)", "sentence-transformers", "sentence-transformers (>=2.0.0,<3.0.0)", "seqeval", "setfit (>=1.0.0)", "snorkel (>=0.9.7)", "spacy (>=3.5.0,<3.7.0)", "spacy-huggingface-hub (>=0.0.10)", "spacy-transformers (>=1.2.5)", "span-marker", "textdescriptives (>=2.7.0,<3.0.0)", "transformers[torch] (>=4.30.0)", "trl (>=0.5.0)"]
-listeners = ["schedule (>=1.1.0,<1.2.0)"]
-server = ["argilla-server (>=1.28.0,<1.29.0)"]
-server-postgresql = ["argilla-server[postgresql] (>=1.28.0,<1.29.0)"]
-tests = ["factory-boy (>=3.2.1,<3.3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock"]
+datasets = ">=2.0.0"
+httpx = ">=0.26.0"
+huggingface_hub = ">=0.22.0"
+pillow = ">=9.5.0"
+pydantic = ">=2.6.0,<3.0.0"
+rich = ">=10.0.0"
+standardwebhooks = ">=1.0.0"
+tqdm = ">=4.60.0"
 
 [[package]]
 name = "argon2-cffi"
@@ -267,21 +266,18 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock
 
 [[package]]
 name = "asttokens"
-version = "2.4.1"
+version = "3.0.0"
 description = "Annotate AST trees with source code positions"
 optional = false
-python-versions = "*"
+python-versions = ">=3.8"
 files = [
-    {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
-    {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
+    {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"},
+    {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"},
 ]
 
-[package.dependencies]
-six = ">=1.12.0"
-
 [package.extras]
-astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
-test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
+astroid = ["astroid (>=2,<4)"]
+test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"]
 
 [[package]]
 name = "async-lru"
@@ -299,73 +295,48 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""}
 
 [[package]]
 name = "async-timeout"
-version = "4.0.3"
+version = "5.0.1"
 description = "Timeout context manager for asyncio programs"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
-    {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
+    {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"},
+    {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"},
 ]
 
 [[package]]
 name = "attrs"
-version = "23.2.0"
+version = "24.3.0"
 description = "Classes Without Boilerplate"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
-    {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
+    {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"},
+    {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"},
 ]
 
 [package.extras]
-cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
-dev = ["attrs[tests]", "pre-commit"]
-docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
-tests = ["attrs[tests-no-zope]", "zope-interface"]
-tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
-tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
+benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
 
 [[package]]
 name = "babel"
-version = "2.15.0"
+version = "2.16.0"
 description = "Internationalization utilities"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"},
-    {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"},
+    {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"},
+    {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"},
 ]
 
-[package.dependencies]
-pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""}
-
 [package.extras]
 dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
 
-[[package]]
-name = "backcall"
-version = "0.2.0"
-description = "Specifications for callback functions passed in to an API"
-optional = false
-python-versions = "*"
-files = [
-    {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
-    {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
-]
-
-[[package]]
-name = "backoff"
-version = "2.2.1"
-description = "Function decoration for backoff and retry"
-optional = false
-python-versions = ">=3.7,<4.0"
-files = [
-    {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"},
-    {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"},
-]
-
 [[package]]
 name = "bashlex"
 version = "0.18"
@@ -437,80 +408,72 @@ uvloop = ["uvloop (>=0.15.2)"]
 
 [[package]]
 name = "bleach"
-version = "6.1.0"
+version = "6.2.0"
 description = "An easy safelist-based HTML-sanitizing tool."
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"},
-    {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"},
+    {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"},
+    {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"},
 ]
 
 [package.dependencies]
-six = ">=1.9.0"
+tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""}
 webencodings = "*"
 
 [package.extras]
-css = ["tinycss2 (>=1.1.0,<1.3)"]
+css = ["tinycss2 (>=1.1.0,<1.5)"]
 
 [[package]]
 name = "blis"
-version = "0.7.11"
+version = "1.2.0"
 description = "The Blis BLAS-like linear algebra library, as a self-contained C-extension."
 optional = false
-python-versions = "*"
-files = [
-    {file = "blis-0.7.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd5fba34c5775e4c440d80e4dea8acb40e2d3855b546e07c4e21fad8f972404c"},
-    {file = "blis-0.7.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:31273d9086cab9c56986d478e3ed6da6752fa4cdd0f7b5e8e5db30827912d90d"},
-    {file = "blis-0.7.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06883f83d4c8de8264154f7c4a420b4af323050ed07398c1ff201c34c25c0d2"},
-    {file = "blis-0.7.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee493683e3043650d4413d531e79e580d28a3c7bdd184f1b9cfa565497bda1e7"},
-    {file = "blis-0.7.11-cp310-cp310-win_amd64.whl", hash = "sha256:a73945a9d635eea528bccfdfcaa59dd35bd5f82a4a40d5ca31f08f507f3a6f81"},
-    {file = "blis-0.7.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b68df4d01d62f9adaef3dad6f96418787265a6878891fc4e0fabafd6d02afba"},
-    {file = "blis-0.7.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:162e60d941a8151418d558a94ee5547cb1bbeed9f26b3b6f89ec9243f111a201"},
-    {file = "blis-0.7.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:686a7d0111d5ba727cd62f374748952fd6eb74701b18177f525b16209a253c01"},
-    {file = "blis-0.7.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0421d6e44cda202b113a34761f9a062b53f8c2ae8e4ec8325a76e709fca93b6e"},
-    {file = "blis-0.7.11-cp311-cp311-win_amd64.whl", hash = "sha256:0dc9dcb3843045b6b8b00432409fd5ee96b8344a324e031bfec7303838c41a1a"},
-    {file = "blis-0.7.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dadf8713ea51d91444d14ad4104a5493fa7ecc401bbb5f4a203ff6448fadb113"},
-    {file = "blis-0.7.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5bcdaf370f03adaf4171d6405a89fa66cb3c09399d75fc02e1230a78cd2759e4"},
-    {file = "blis-0.7.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7de19264b1d49a178bf8035406d0ae77831f3bfaa3ce02942964a81a202abb03"},
-    {file = "blis-0.7.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea55c6a4a60fcbf6a0fdce40df6e254451ce636988323a34b9c94b583fc11e5"},
-    {file = "blis-0.7.11-cp312-cp312-win_amd64.whl", hash = "sha256:5a305dbfc96d202a20d0edd6edf74a406b7e1404f4fa4397d24c68454e60b1b4"},
-    {file = "blis-0.7.11-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:68544a1cbc3564db7ba54d2bf8988356b8c7acd025966e8e9313561b19f0fe2e"},
-    {file = "blis-0.7.11-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:075431b13b9dd7b411894d4afbd4212acf4d0f56c5a20628f4b34902e90225f1"},
-    {file = "blis-0.7.11-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:324fdf62af9075831aa62b51481960e8465674b7723f977684e32af708bb7448"},
-    {file = "blis-0.7.11-cp36-cp36m-win_amd64.whl", hash = "sha256:afebdb02d2dcf9059f23ce1244585d3ce7e95c02a77fd45a500e4a55b7b23583"},
-    {file = "blis-0.7.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2e62cd14b20e960f21547fee01f3a0b2ac201034d819842865a667c969c355d1"},
-    {file = "blis-0.7.11-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b01c05a5754edc0b9a3b69be52cbee03f645b2ec69651d12216ea83b8122f0"},
-    {file = "blis-0.7.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfee5ec52ba1e9002311d9191f7129d7b0ecdff211e88536fb24c865d102b50d"},
-    {file = "blis-0.7.11-cp37-cp37m-win_amd64.whl", hash = "sha256:844b6377e3e7f3a2e92e7333cc644095386548ad5a027fdc150122703c009956"},
-    {file = "blis-0.7.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6df00c24128e323174cde5d80ebe3657df39615322098ce06613845433057614"},
-    {file = "blis-0.7.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:809d1da1331108935bf06e22f3cf07ef73a41a572ecd81575bdedb67defe3465"},
-    {file = "blis-0.7.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfabd5272bbbe504702b8dfe30093653d278057656126716ff500d9c184b35a6"},
-    {file = "blis-0.7.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca684f5c2f05269f17aefe7812360286e9a1cee3afb96d416485efd825dbcf19"},
-    {file = "blis-0.7.11-cp38-cp38-win_amd64.whl", hash = "sha256:688a8b21d2521c2124ee8dfcbaf2c385981ccc27e313e052113d5db113e27d3b"},
-    {file = "blis-0.7.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2ff7abd784033836b284ff9f4d0d7cb0737b7684daebb01a4c9fe145ffa5a31e"},
-    {file = "blis-0.7.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9caffcd14795bfe52add95a0dd8426d44e737b55fcb69e2b797816f4da0b1d2"},
-    {file = "blis-0.7.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fb36989ed61233cfd48915896802ee6d3d87882190000f8cfe0cf4a3819f9a8"},
-    {file = "blis-0.7.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ea09f961871f880d5dc622dce6c370e4859559f0ead897ae9b20ddafd6b07a2"},
-    {file = "blis-0.7.11-cp39-cp39-win_amd64.whl", hash = "sha256:5bb38adabbb22f69f22c74bad025a010ae3b14de711bf5c715353980869d491d"},
-    {file = "blis-0.7.11.tar.gz", hash = "sha256:cec6d48f75f7ac328ae1b6fbb372dde8c8a57c89559172277f66e01ff08d4d42"},
+python-versions = "<3.13,>=3.6"
+files = [
+    {file = "blis-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:76998702acbb782e9bb298a5c446aaa1ed4652dbade853baa6a7a26f7b98105b"},
+    {file = "blis-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c290c1ba6cb5b633abe59b2fb9ae2ea5dcd7508202f65658fe816bb7e129485"},
+    {file = "blis-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd81489e4b1a4a6bc51f5578795bc9150a2e8b9babead1074ca51398aff51852"},
+    {file = "blis-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4896cc4c10c9856c9faaf89401dcb87894da06a18b4b986064acd737a6ed3e60"},
+    {file = "blis-1.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:60a29dcb1bba49cae70088d480b95042d4fbbe6b380f2f7c9e70b2781dc126dd"},
+    {file = "blis-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fc1de26073302a3713e487ea85d1ecd0bce204f6b102da498c3cd08528a1d69e"},
+    {file = "blis-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cc2aa5ce96f33162779e88add93b5051437f9c2701d24ee0d2dd89da9a9c23b1"},
+    {file = "blis-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:debafb46ad8b5e2d18932770639aa1d22b61580a07ec718e9efcf50c76e180d6"},
+    {file = "blis-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eb27e94b9dbd9c23595b95155607a57ad814bebd3cc1bf8551bee4af60e1b5d7"},
+    {file = "blis-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8ed98669144fb8ee30052f7259d0cb78b7b3755d9589d98cbb7986d22473ab7"},
+    {file = "blis-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08f62b6f114370d8449b4836ebd157980a5718a5c39266af9cdff67a9602a421"},
+    {file = "blis-1.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cc5c25fb12fd134812ea47e3fcbbd64d46d0717d307c5c2fb32a45ac8daf3226"},
+    {file = "blis-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:78a6498c748a42494a2cf58be489616a42ba0b925bc92ab23c3721dc779a4739"},
+    {file = "blis-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5ad68bc972f210a0227d9742bf6325600bb95c8188f97850634f6d97c3a08107"},
+    {file = "blis-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99df869b8998303cf78e9f408f0350b0c5cd12d733caa8df99682f046b83ea35"},
+    {file = "blis-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4001df564c43c8f2260b13c4f06327dee23831b178f65884c22b879062ebca14"},
+    {file = "blis-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6af5dec35acfc044e29b89bb9202e74edc747344f5a46fc27e8a8998f8229610"},
+    {file = "blis-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:986f125ad0215e975a0895505728644dff2669a739f6c2faf89436e3fcae21ac"},
+    {file = "blis-1.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea1f4ce1541cddbc9b0574a5969df2a518c5a6d4aa8787782dab5d82233a1458"},
+    {file = "blis-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6358168c4218a36e49c244c714f50248a1ef981874ae7bc785d68e76d55c57b5"},
+    {file = "blis-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:067f4f99fb3dc0cf50bbbf0ee4b850f13e64fbb84fdaab0864fd97af0bee0ced"},
+    {file = "blis-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f21d71f64aa32554d261d9c3308ac9276571d698546aa571bd393ff24b3df8f9"},
+    {file = "blis-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3b372b6a92de9694baa94792767434b37d08bda7d4020bd7f970adf99ebf460d"},
+    {file = "blis-1.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbe2e0f772909f66a0eed26dfa5146b8a0758e65aa3a9b9791155fd1fd69a0f9"},
+    {file = "blis-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d94255f50f54c98727e57d12beeb3cb9d8879fd895d2e8c61d1b975ac87685f"},
+    {file = "blis-1.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6f2ce3b35a66dc7ffff3f68b60a4eb622dbcb0128617c79bf02c098077e2745c"},
+    {file = "blis-1.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f4bdcd436eb08c541c9d44315db2647a30492091cd98a9651a4fe58460a091a3"},
+    {file = "blis-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:613a343acad0a254ab87e1b5ec92a031aef73c0640df1e1d09f0f27293654859"},
+    {file = "blis-1.2.0.tar.gz", hash = "sha256:f25f99d7f3cad72c86a7499212ee833fb5062d80ad1763a935e0e498bc147c69"},
 ]
 
 [package.dependencies]
-numpy = [
-    {version = ">=1.15.0", markers = "python_version < \"3.9\""},
-    {version = ">=1.19.0", markers = "python_version >= \"3.9\""},
-]
+numpy = {version = ">=1.19.0,<3.0.0", markers = "python_version >= \"3.9\""}
 
 [[package]]
 name = "bracex"
-version = "2.4"
+version = "2.5.post1"
 description = "Bash style brace expander."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"},
-    {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"},
+    {file = "bracex-2.5.post1-py3-none-any.whl", hash = "sha256:13e5732fec27828d6af308628285ad358047cec36801598368cb28bc631dbaf6"},
+    {file = "bracex-2.5.post1.tar.gz", hash = "sha256:12c50952415bfa773d2d9ccb8e79651b8cdb1f31a42f6091b804f6ba2b4a66b6"},
 ]
 
 [[package]]
@@ -526,74 +489,89 @@ files = [
 
 [[package]]
 name = "certifi"
-version = "2023.11.17"
+version = "2024.12.14"
 description = "Python package for providing Mozilla's CA Bundle."
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"},
-    {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"},
+    {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"},
+    {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"},
 ]
 
 [[package]]
 name = "cffi"
-version = "1.16.0"
+version = "1.17.1"
 description = "Foreign Function Interface for Python calling C code."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
-    {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
-    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
-    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
-    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
-    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
-    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
-    {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
-    {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
-    {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
-    {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
-    {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
-    {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
-    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
-    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
-    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
-    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
-    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
-    {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
-    {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
-    {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
-    {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
-    {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
-    {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
-    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
-    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
-    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
-    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
-    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
-    {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
-    {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
-    {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
-    {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
-    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
-    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
-    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
-    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
-    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
-    {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
-    {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
-    {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
-    {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
-    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
-    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
-    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
-    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
-    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
-    {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
-    {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
-    {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
-    {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
-    {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
+    {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
+    {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
+    {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
+    {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
+    {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
+    {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
+    {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
+    {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
+    {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
+    {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
+    {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
+    {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
+    {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
+    {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
+    {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
+    {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
+    {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
+    {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
+    {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
+    {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
+    {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
+    {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
+    {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
+    {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
+    {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
+    {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
+    {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
+    {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
+    {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
+    {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
+    {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
+    {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
+    {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
+    {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
+    {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
+    {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
+    {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
+    {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
+    {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
+    {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
+    {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
+    {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
+    {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
+    {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
+    {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
+    {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
+    {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
+    {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
+    {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
+    {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
+    {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
+    {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
+    {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
+    {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
+    {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
+    {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
+    {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
+    {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
+    {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
+    {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
+    {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
+    {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
+    {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
+    {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
+    {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
+    {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
+    {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
 ]
 
 [package.dependencies]
@@ -612,118 +590,121 @@ files = [
 
 [[package]]
 name = "charset-normalizer"
-version = "3.3.2"
+version = "3.4.1"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 optional = false
-python-versions = ">=3.7.0"
+python-versions = ">=3.7"
 files = [
-    {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
-    {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
-    {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
-    {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
-    {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
-    {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
-    {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
-    {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"},
+    {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"},
+    {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"},
+    {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"},
+    {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"},
+    {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"},
+    {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"},
+    {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"},
+    {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"},
+    {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"},
 ]
 
 [[package]]
 name = "cibuildwheel"
-version = "2.18.1"
+version = "2.22.0"
 description = "Build Python wheels on CI with minimal configuration."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "cibuildwheel-2.18.1-py3-none-any.whl", hash = "sha256:a3e911b34b10b015690f8332c5c78369191136462ec2626169e202f98a453a41"},
-    {file = "cibuildwheel-2.18.1.tar.gz", hash = "sha256:a1b0c17dfa690c452022962f2b8d676e39774c0ee1fd5f07a992364b7705e98e"},
+    {file = "cibuildwheel-2.22.0-py3-none-any.whl", hash = "sha256:c40bb7ac7b57fed8195fca624cc9bd68334375d32b75bea6fa8330ac1cd902c4"},
+    {file = "cibuildwheel-2.22.0.tar.gz", hash = "sha256:6651e775ac26a86a49d67639aa3540f19728caf0dfcd80f156ba4f241aad4940"},
 ]
 
 [package.dependencies]
 bashlex = "!=0.13"
 bracex = "*"
 certifi = "*"
+dependency-groups = ">=1.2"
 filelock = "*"
 packaging = ">=20.9"
 platformdirs = "*"
@@ -731,20 +712,17 @@ tomli = {version = "*", markers = "python_version < \"3.11\""}
 typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""}
 
 [package.extras]
-bin = ["click", "packaging (>=21.0)", "pip-tools", "pygithub", "pyyaml", "requests", "rich (>=9.6)"]
-dev = ["build", "click", "jinja2", "packaging (>=21.0)", "pip-tools", "pygithub", "pytest (>=6)", "pytest-timeout", "pytest-xdist", "pyyaml", "requests", "rich (>=9.6)", "tomli-w", "validate-pyproject"]
-docs = ["jinja2 (>=3.1.2)", "mkdocs (==1.3.1)", "mkdocs-include-markdown-plugin (==2.8.0)", "mkdocs-macros-plugin", "pymdown-extensions"]
-test = ["build", "jinja2", "pytest (>=6)", "pytest-timeout", "pytest-xdist", "tomli-w", "validate-pyproject"]
+uv = ["uv"]
 
 [[package]]
 name = "click"
-version = "8.1.7"
+version = "8.1.8"
 description = "Composable command line interface toolkit"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
-    {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+    {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
+    {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
 ]
 
 [package.dependencies]
@@ -752,13 +730,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [[package]]
 name = "cloudpathlib"
-version = "0.16.0"
+version = "0.20.0"
 description = "pathlib-style classes for cloud storage services."
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "cloudpathlib-0.16.0-py3-none-any.whl", hash = "sha256:f46267556bf91f03db52b5df7a152548596a15aabca1c8731ef32b0b25a1a6a3"},
-    {file = "cloudpathlib-0.16.0.tar.gz", hash = "sha256:cdfcd35d46d529587d744154a0bdf962aca953b725c8784cd2ec478354ea63a3"},
+    {file = "cloudpathlib-0.20.0-py3-none-any.whl", hash = "sha256:7af3bcefbf73392ae7f31c08b3660ec31607f8c01b7f6262d4d73469a845f641"},
+    {file = "cloudpathlib-0.20.0.tar.gz", hash = "sha256:f6ef7ca409a510f7ba4639ba50ab3fc5b6dee82d6dff0d7f5715fd0c9ab35891"},
 ]
 
 [package.dependencies]
@@ -766,9 +744,9 @@ typing_extensions = {version = ">4", markers = "python_version < \"3.11\""}
 
 [package.extras]
 all = ["cloudpathlib[azure]", "cloudpathlib[gs]", "cloudpathlib[s3]"]
-azure = ["azure-storage-blob (>=12)"]
+azure = ["azure-storage-blob (>=12)", "azure-storage-file-datalake (>=12)"]
 gs = ["google-cloud-storage"]
-s3 = ["boto3"]
+s3 = ["boto3 (>=1.34.0)"]
 
 [[package]]
 name = "colorama"
@@ -800,13 +778,13 @@ test = ["pytest"]
 
 [[package]]
 name = "confection"
-version = "0.1.4"
+version = "0.1.5"
 description = "The sweetest config system for Python"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "confection-0.1.4-py3-none-any.whl", hash = "sha256:a658818d004939069c3e2b3db74a2cb9d956a5e61a1c9ad61788e0ee09a7090f"},
-    {file = "confection-0.1.4.tar.gz", hash = "sha256:e80f22fd008b5231a2e8852fac6de9e28f2276a04031d0536cff74fe4a990c8f"},
+    {file = "confection-0.1.5-py3-none-any.whl", hash = "sha256:e29d3c3f8eac06b3f77eb9dfb4bf2fc6bcc9622a98ca00a698e3d019c6430b14"},
+    {file = "confection-0.1.5.tar.gz", hash = "sha256:8e72dd3ca6bd4f48913cd220f10b8275978e740411654b6e8ca6d7008c590f0e"},
 ]
 
 [package.dependencies]
@@ -815,74 +793,87 @@ srsly = ">=2.4.0,<3.0.0"
 
 [[package]]
 name = "contourpy"
-version = "1.1.1"
+version = "1.3.0"
 description = "Python library for calculating contours of 2D quadrilateral grids"
 optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"},
-    {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"},
-    {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"},
-    {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"},
-    {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"},
-    {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"},
-    {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"},
-    {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"},
-    {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"},
-    {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"},
-    {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"},
-    {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"},
-    {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"},
-    {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"},
-    {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"},
-    {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"},
-    {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"},
-    {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"},
-    {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"},
-    {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"},
-    {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"},
-    {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"},
-    {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"},
-    {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"},
-    {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"},
-    {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"},
-    {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"},
-    {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"},
-    {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"},
-    {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"},
-    {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"},
-    {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"},
-    {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"},
-    {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"},
-    {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"},
-    {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"},
-    {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"},
-    {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"},
-    {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"},
-    {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"},
-    {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"},
-    {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"},
-    {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"},
-    {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"},
-    {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"},
-    {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"},
-    {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"},
-    {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"},
-    {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"},
-    {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"},
-    {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"},
-    {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"},
+python-versions = ">=3.9"
+files = [
+    {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"},
+    {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"},
+    {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"},
+    {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"},
+    {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"},
+    {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"},
+    {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"},
+    {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"},
+    {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"},
+    {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"},
+    {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"},
+    {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"},
+    {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"},
+    {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"},
+    {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"},
+    {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"},
+    {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"},
+    {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"},
+    {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"},
+    {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"},
+    {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"},
+    {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"},
+    {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"},
+    {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"},
+    {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"},
+    {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"},
+    {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"},
+    {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"},
+    {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"},
+    {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"},
+    {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"},
+    {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"},
+    {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"},
+    {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"},
+    {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"},
+    {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"},
+    {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"},
+    {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"},
+    {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"},
+    {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"},
+    {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"},
+    {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"},
+    {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"},
+    {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"},
+    {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"},
+    {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"},
+    {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"},
+    {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"},
+    {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"},
+    {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"},
+    {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"},
+    {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"},
+    {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"},
+    {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"},
+    {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"},
+    {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"},
+    {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"},
+    {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"},
+    {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"},
+    {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"},
+    {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"},
+    {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"},
+    {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"},
+    {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"},
+    {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"},
 ]
 
 [package.dependencies]
-numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""}
+numpy = ">=1.23"
 
 [package.extras]
 bokeh = ["bokeh", "selenium"]
 docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"]
-mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"]
+mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"]
 test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
-test-no-images = ["pytest", "pytest-cov", "wurlitzer"]
+test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"]
 
 [[package]]
 name = "cycler"
@@ -901,75 +892,124 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"]
 
 [[package]]
 name = "cymem"
-version = "2.0.8"
+version = "2.0.11"
 description = "Manage calls to calloc/free through Cython"
 optional = false
 python-versions = "*"
 files = [
-    {file = "cymem-2.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77b5d3a73c41a394efd5913ab7e48512054cd2dabb9582d489535456641c7666"},
-    {file = "cymem-2.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bd33da892fb560ba85ea14b1528c381ff474048e861accc3366c8b491035a378"},
-    {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29a551eda23eebd6d076b855f77a5ed14a1d1cae5946f7b3cb5de502e21b39b0"},
-    {file = "cymem-2.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8260445652ae5ab19fff6851f32969a7b774f309162e83367dd0f69aac5dbf7"},
-    {file = "cymem-2.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:a63a2bef4c7e0aec7c9908bca0a503bf91ac7ec18d41dd50dc7dff5d994e4387"},
-    {file = "cymem-2.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b84b780d52cb2db53d4494fe0083c4c5ee1f7b5380ceaea5b824569009ee5bd"},
-    {file = "cymem-2.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d5f83dc3cb5a39f0e32653cceb7c8ce0183d82f1162ca418356f4a8ed9e203e"},
-    {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ac218cf8a43a761dc6b2f14ae8d183aca2bbb85b60fe316fd6613693b2a7914"},
-    {file = "cymem-2.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c993589d1811ec665d37437d5677b8757f53afadd927bf8516ac8ce2d3a50c"},
-    {file = "cymem-2.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:ab3cf20e0eabee9b6025ceb0245dadd534a96710d43fb7a91a35e0b9e672ee44"},
-    {file = "cymem-2.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cb51fddf1b920abb1f2742d1d385469bc7b4b8083e1cfa60255e19bc0900ccb5"},
-    {file = "cymem-2.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9235957f8c6bc2574a6a506a1687164ad629d0b4451ded89d49ebfc61b52660c"},
-    {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2cc38930ff5409f8d61f69a01e39ecb185c175785a1c9bec13bcd3ac8a614ba"},
-    {file = "cymem-2.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf49e3ea2c441f7b7848d5c61b50803e8cbd49541a70bb41ad22fce76d87603"},
-    {file = "cymem-2.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:ecd12e3bacf3eed5486e4cd8ede3c12da66ee0e0a9d0ae046962bc2bb503acef"},
-    {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:167d8019db3b40308aabf8183fd3fbbc256323b645e0cbf2035301058c439cd0"},
-    {file = "cymem-2.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cd2c2791c8f6b52f269a756ba7463f75bf7265785388a2592623b84bb02bf8"},
-    {file = "cymem-2.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6204f0a3307bf45d109bf698ba37997ce765f21e359284328e4306c7500fcde8"},
-    {file = "cymem-2.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9c05db55ea338648f8e5f51dd596568c7f62c5ae32bf3fa5b1460117910ebae"},
-    {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ce641f7ba0489bd1b42a4335a36f38c8507daffc29a512681afaba94a0257d2"},
-    {file = "cymem-2.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6b83a5972a64f62796118da79dfeed71f4e1e770b2b7455e889c909504c2358"},
-    {file = "cymem-2.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:ada6eb022e4a0f4f11e6356a5d804ceaa917174e6cf33c0b3e371dbea4dd2601"},
-    {file = "cymem-2.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e593cd57e2e19eb50c7ddaf7e230b73c890227834425b9dadcd4a86834ef2ab"},
-    {file = "cymem-2.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d513f0d5c6d76facdc605e42aa42c8d50bb7dedca3144ec2b47526381764deb0"},
-    {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e370dd54359101b125bfb191aca0542718077b4edb90ccccba1a28116640fed"},
-    {file = "cymem-2.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84f8c58cde71b8fc7024883031a4eec66c0a9a4d36b7850c3065493652695156"},
-    {file = "cymem-2.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:6a6edddb30dd000a27987fcbc6f3c23b7fe1d74f539656952cb086288c0e4e29"},
-    {file = "cymem-2.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b896c83c08dadafe8102a521f83b7369a9c5cc3e7768eca35875764f56703f4c"},
-    {file = "cymem-2.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f8f2bfee34f6f38b206997727d29976666c89843c071a968add7d61a1e8024"},
-    {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7372e2820fa66fd47d3b135f3eb574ab015f90780c3a21cfd4809b54f23a4723"},
-    {file = "cymem-2.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4e57bee56d35b90fc2cba93e75b2ce76feaca05251936e28a96cf812a1f5dda"},
-    {file = "cymem-2.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ceeab3ce2a92c7f3b2d90854efb32cb203e78cb24c836a5a9a2cac221930303b"},
-    {file = "cymem-2.0.8.tar.gz", hash = "sha256:8fb09d222e21dcf1c7e907dc85cf74501d4cea6c4ed4ac6c9e016f98fb59cbbf"},
+    {file = "cymem-2.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1b4dd8f8c2475c7c9948eefa89c790d83134600858d8d43b90276efd8df3882e"},
+    {file = "cymem-2.0.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d46ba0d2e0f749195297d16f2286b55af7d7c084db2b853fdfccece2c000c5dc"},
+    {file = "cymem-2.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739c4336b9d04ce9761851e9260ef77508d4a86ee3060e41302bfb6fa82c37de"},
+    {file = "cymem-2.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a69c470c2fb118161f49761f9137384f46723c77078b659bba33858e19e46b49"},
+    {file = "cymem-2.0.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:40159f6c92627438de970fd761916e745d70dfd84a7dcc28c1627eb49cee00d8"},
+    {file = "cymem-2.0.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f503f98e6aa333fffbe657a6854f13a9c3de68860795ae21171284213b9c5c09"},
+    {file = "cymem-2.0.11-cp310-cp310-win_amd64.whl", hash = "sha256:7f05ed5920cc92d6b958ec5da55bd820d326fe9332b90660e6fa67e3b476ceb1"},
+    {file = "cymem-2.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ee54039aad3ef65de82d66c40516bf54586287b46d32c91ea0530c34e8a2745"},
+    {file = "cymem-2.0.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c05ef75b5db217be820604e43a47ccbbafea98ab6659d07cea92fa3c864ea58"},
+    {file = "cymem-2.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d5381e5793ce531bac0dbc00829c8381f18605bb67e4b61d34f8850463da40"},
+    {file = "cymem-2.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b9d3f42d7249ac81802135cad51d707def058001a32f73fc7fbf3de7045ac7"},
+    {file = "cymem-2.0.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:39b78f2195d20b75c2d465732f6b8e8721c5d4eb012777c2cb89bdb45a043185"},
+    {file = "cymem-2.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2203bd6525a80d8fd0c94654a263af21c0387ae1d5062cceaebb652bf9bad7bc"},
+    {file = "cymem-2.0.11-cp311-cp311-win_amd64.whl", hash = "sha256:aa54af7314de400634448da1f935b61323da80a49484074688d344fb2036681b"},
+    {file = "cymem-2.0.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a0fbe19ce653cd688842d81e5819dc63f911a26e192ef30b0b89f0ab2b192ff2"},
+    {file = "cymem-2.0.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de72101dc0e6326f6a2f73e05a438d1f3c6110d41044236d0fbe62925091267d"},
+    {file = "cymem-2.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee4395917f6588b8ac1699499128842768b391fe8896e8626950b4da5f9a406"},
+    {file = "cymem-2.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02f2b17d760dc3fe5812737b1ce4f684641cdd751d67761d333a3b5ea97b83"},
+    {file = "cymem-2.0.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:04ee6b4041ddec24512d6e969ed6445e57917f01e73b9dabbe17b7e6b27fef05"},
+    {file = "cymem-2.0.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e1048dae7e627ee25f22c87bb670b13e06bc0aecc114b89b959a798d487d1bf4"},
+    {file = "cymem-2.0.11-cp312-cp312-win_amd64.whl", hash = "sha256:0c269c7a867d74adeb9db65fa1d226342aacf44d64b7931282f0b0eb22eb6275"},
+    {file = "cymem-2.0.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4a311c82f743275c84f708df89ac5bf60ddefe4713d532000c887931e22941f"},
+    {file = "cymem-2.0.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:02ed92bead896cca36abad00502b14fa651bdf5d8319461126a2d5ac8c9674c5"},
+    {file = "cymem-2.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44ddd3588379f8f376116384af99e3fb5f90091d90f520c341942618bf22f05e"},
+    {file = "cymem-2.0.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87ec985623624bbd298762d8163fc194a096cb13282731a017e09ff8a60bb8b1"},
+    {file = "cymem-2.0.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3385a47285435848e0ed66cfd29b35f3ed8703218e2b17bd7a0c053822f26bf"},
+    {file = "cymem-2.0.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5461e65340d6572eb64deadce79242a446a1d39cb7bf70fe7b7e007eb0d799b0"},
+    {file = "cymem-2.0.11-cp313-cp313-win_amd64.whl", hash = "sha256:25da111adf425c29af0cfd9fecfec1c71c8d82e2244a85166830a0817a66ada7"},
+    {file = "cymem-2.0.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1450498623d9f176d48578779c4e9d133c7f252f73c5a93b762f35d059a09398"},
+    {file = "cymem-2.0.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a407fd8766e1f666c48cb232f760267cecf0acb04cc717d8ec4de6adc6ab8e0"},
+    {file = "cymem-2.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6347aed08442679a57bcce5ad1e338f6b717e46654549c5d65c798552d910591"},
+    {file = "cymem-2.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d8f11149b1a154de0e93f5eda0a13ad9948a739b58a2aace996ca41bbb6d0f5"},
+    {file = "cymem-2.0.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7a2b4d1a9b1674d6ac0e4c5136b70b805535dc8d1060aa7c4ded3e52fb74e615"},
+    {file = "cymem-2.0.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dec13c1a84612815365939f59e128a0031cae5f6b5a86e4b8fd7c4efa3fad262"},
+    {file = "cymem-2.0.11-cp39-cp39-win_amd64.whl", hash = "sha256:332ea5bc1c13c9a186532a06846881288eb846425898b70f047a0820714097bf"},
+    {file = "cymem-2.0.11.tar.gz", hash = "sha256:efe49a349d4a518be6b6c6b255d4a80f740a341544bde1a807707c058b88d0bd"},
+]
+
+[[package]]
+name = "datasets"
+version = "3.2.0"
+description = "HuggingFace community-driven open-source library of datasets"
+optional = false
+python-versions = ">=3.9.0"
+files = [
+    {file = "datasets-3.2.0-py3-none-any.whl", hash = "sha256:f3d2ba2698b7284a4518019658596a6a8bc79f31e51516524249d6c59cf0fe2a"},
+    {file = "datasets-3.2.0.tar.gz", hash = "sha256:9a6e1a356052866b5dbdd9c9eedb000bf3fc43d986e3584d9b028f4976937229"},
 ]
 
+[package.dependencies]
+aiohttp = "*"
+dill = ">=0.3.0,<0.3.9"
+filelock = "*"
+fsspec = {version = ">=2023.1.0,<=2024.9.0", extras = ["http"]}
+huggingface-hub = ">=0.23.0"
+multiprocess = "<0.70.17"
+numpy = ">=1.17"
+packaging = "*"
+pandas = "*"
+pyarrow = ">=15.0.0"
+pyyaml = ">=5.1"
+requests = ">=2.32.2"
+tqdm = ">=4.66.3"
+xxhash = "*"
+
+[package.extras]
+audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0)"]
+benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"]
+dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "decord (==0.6.0)", "elasticsearch (>=7.17.12,<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch", "torch (>=2.0.0)", "torchdata", "transformers", "transformers (>=4.42.0)", "zstandard"]
+docs = ["s3fs", "tensorflow (>=2.6.0)", "torch", "transformers"]
+jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"]
+quality = ["ruff (>=0.3.0)"]
+s3 = ["s3fs"]
+tensorflow = ["tensorflow (>=2.6.0)"]
+tensorflow-gpu = ["tensorflow (>=2.6.0)"]
+tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "decord (==0.6.0)", "elasticsearch (>=7.17.12,<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tensorflow (>=2.16.0)", "tensorflow (>=2.6.0)", "tiktoken", "torch (>=2.0.0)", "torchdata", "transformers (>=4.42.0)", "zstandard"]
+tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "decord (==0.6.0)", "elasticsearch (>=7.17.12,<8.0.0)", "jax (>=0.3.14)", "jaxlib (>=0.3.14)", "joblib (<1.3.0)", "joblibspark", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0)", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "torchdata", "transformers (>=4.42.0)", "zstandard"]
+torch = ["torch"]
+vision = ["Pillow (>=9.4.0)"]
+
 [[package]]
 name = "debugpy"
-version = "1.8.1"
+version = "1.8.12"
 description = "An implementation of the Debug Adapter Protocol for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"},
-    {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"},
-    {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"},
-    {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"},
-    {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"},
-    {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"},
-    {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"},
-    {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"},
-    {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"},
-    {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"},
-    {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"},
-    {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"},
-    {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"},
-    {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"},
-    {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"},
-    {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"},
-    {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"},
-    {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"},
-    {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"},
-    {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"},
-    {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"},
-    {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"},
+    {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"},
+    {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"},
+    {file = "debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c"},
+    {file = "debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9"},
+    {file = "debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5"},
+    {file = "debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7"},
+    {file = "debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb"},
+    {file = "debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1"},
+    {file = "debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498"},
+    {file = "debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06"},
+    {file = "debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d"},
+    {file = "debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969"},
+    {file = "debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f"},
+    {file = "debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9"},
+    {file = "debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180"},
+    {file = "debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c"},
+    {file = "debugpy-1.8.12-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:b0232cd42506d0c94f9328aaf0d1d0785f90f87ae72d9759df7e5051be039738"},
+    {file = "debugpy-1.8.12-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9af40506a59450f1315168d47a970db1a65aaab5df3833ac389d2899a5d63b3f"},
+    {file = "debugpy-1.8.12-cp38-cp38-win32.whl", hash = "sha256:5cc45235fefac57f52680902b7d197fb2f3650112379a6fa9aa1b1c1d3ed3f02"},
+    {file = "debugpy-1.8.12-cp38-cp38-win_amd64.whl", hash = "sha256:557cc55b51ab2f3371e238804ffc8510b6ef087673303890f57a24195d096e61"},
+    {file = "debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41"},
+    {file = "debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a"},
+    {file = "debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018"},
+    {file = "debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069"},
+    {file = "debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6"},
+    {file = "debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce"},
 ]
 
 [[package]]
@@ -1019,32 +1059,34 @@ textColor = ">=3.0.1,<4.0.0"
 
 [[package]]
 name = "deepsearch-toolkit"
-version = "0.48.0"
+version = "2.0.0"
 description = "Interact with the Deep Search platform for new knowledge explorations and discoveries"
 optional = false
-python-versions = "<4.0,>=3.8"
+python-versions = "<4.0,>=3.9"
 files = [
-    {file = "deepsearch_toolkit-0.48.0-py3-none-any.whl", hash = "sha256:4f3140a36cdc8345e43545995480b7a6a6d32741ea38951177c71b3e25596b50"},
-    {file = "deepsearch_toolkit-0.48.0.tar.gz", hash = "sha256:c0dab8138e56ab6c22c41c08970eb518f62a3d0a73ac82fe81ace4c31a24d529"},
+    {file = "deepsearch_toolkit-2.0.0-py3-none-any.whl", hash = "sha256:cc02a7d4ce35d4674c61c0c45c0bc84eb2c23078c0220471a1ff18fc74424864"},
+    {file = "deepsearch_toolkit-2.0.0.tar.gz", hash = "sha256:e6fd9ce197e0dd59383e85480b43cc07ed90329bac59ed2fdb0aaa73943bd985"},
 ]
 
 [package.dependencies]
-certifi = ">=2023.07.22,<2024.0.0"
-platformdirs = ">=3.5.1,<4.0.0"
+certifi = ">=2024.07.04,<2025.0.0"
+docling-core = ">=2.0.0,<3.0.0"
+platformdirs = ">=3.5.1,<5.0.0"
 pluggy = ">=1.0.0,<2.0.0"
 pydantic = ">=2.0.3,<3.0.0"
+pydantic-settings = ">=2.4.0,<3.0.0"
 python-dateutil = ">=2.8.2,<3.0.0"
 python-dotenv = ">=1.0.0,<2.0.0"
 requests = ">=2.27.1,<3.0.0"
 six = ">=1.16.0,<2.0.0"
 tabulate = ">=0.8.9,<1.0.0"
 tqdm = ">=4.64.0,<5.0.0"
-typer = {version = ">=0.9.0,<0.10.0", extras = ["all"]}
+typer = {version = ">=0.9.0,<1.0.0", extras = ["all"]}
 urllib3 = ">=1.26.8,<2.0.0"
 
 [package.extras]
-all = ["anyio (>=3.6.2,<4.0.0)", "fastapi (>=0.109.2,<0.110.0)", "uvicorn (>=0.27.0.post1,<0.28.0)"]
-api = ["anyio (>=3.6.2,<4.0.0)", "fastapi (>=0.109.2,<0.110.0)", "uvicorn (>=0.27.0.post1,<0.28.0)"]
+all = ["anyio (>=3.6.2,<4.0.0)", "fastapi (>=0.115.3,<0.116.0)", "uvicorn (>=0.32.0)"]
+api = ["anyio (>=3.6.2,<4.0.0)", "fastapi (>=0.115.3,<0.116.0)", "uvicorn (>=0.32.0)"]
 
 [[package]]
 name = "defusedxml"
@@ -1057,54 +1099,112 @@ files = [
     {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
 ]
 
+[[package]]
+name = "dependency-groups"
+version = "1.3.0"
+description = "A tool for resolving PEP 735 Dependency Group data"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "dependency_groups-1.3.0-py3-none-any.whl", hash = "sha256:1abf34d712deda5581e80d507512664d52b35d1c2d7caf16c85e58ca508547e0"},
+    {file = "dependency_groups-1.3.0.tar.gz", hash = "sha256:5b9751d5d98fbd6dfd038a560a69c8382e41afcbf7ffdbcc28a2a3f85498830f"},
+]
+
+[package.dependencies]
+packaging = "*"
+tomli = {version = "*", markers = "python_version < \"3.11\""}
+
+[package.extras]
+cli = ["tomli"]
+
 [[package]]
 name = "deprecated"
-version = "1.2.14"
+version = "1.2.15"
 description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
 files = [
-    {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"},
-    {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"},
+    {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"},
+    {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"},
 ]
 
 [package.dependencies]
 wrapt = ">=1.10,<2"
 
 [package.extras]
-dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"]
+dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"]
 
 [[package]]
-name = "distlib"
+name = "dill"
 version = "0.3.8"
+description = "serialize all of Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"},
+    {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"},
+]
+
+[package.extras]
+graph = ["objgraph (>=1.7.2)"]
+profile = ["gprof2dot (>=2022.7.29)"]
+
+[[package]]
+name = "distlib"
+version = "0.3.9"
 description = "Distribution utilities"
 optional = false
 python-versions = "*"
 files = [
-    {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"},
-    {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"},
+    {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"},
+    {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"},
 ]
 
+[[package]]
+name = "docling-core"
+version = "2.14.0"
+description = "A python library to define and validate data types in Docling."
+optional = false
+python-versions = "<4.0,>=3.9"
+files = [
+    {file = "docling_core-2.14.0-py3-none-any.whl", hash = "sha256:05a7b89872260dcdba2b0fbcc3a4619aed4846f58f155d33a10b41b23eea5188"},
+    {file = "docling_core-2.14.0.tar.gz", hash = "sha256:0eb6a52e05f2a06e1777b0533d655a87b54a1a5d374b957beb244c8940aed7da"},
+]
+
+[package.dependencies]
+jsonref = ">=1.1.0,<2.0.0"
+jsonschema = ">=4.16.0,<5.0.0"
+pandas = ">=2.1.4,<3.0.0"
+pillow = ">=10.3.0,<11.0.0"
+pydantic = ">=2.6.0,<2.10.0 || >2.10.0,<2.10.1 || >2.10.1,<2.10.2 || >2.10.2,<3.0.0"
+pyyaml = ">=5.1,<7.0.0"
+tabulate = ">=0.9.0,<0.10.0"
+typer = ">=0.12.5,<0.13.0"
+typing-extensions = ">=4.12.2,<5.0.0"
+
+[package.extras]
+chunking = ["semchunk (>=2.2.0,<3.0.0)", "transformers (>=4.34.0,<5.0.0)"]
+
 [[package]]
 name = "et-xmlfile"
-version = "1.1.0"
+version = "2.0.0"
 description = "An implementation of lxml.xmlfile for the standard library"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"},
-    {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"},
+    {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"},
+    {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"},
 ]
 
 [[package]]
 name = "exceptiongroup"
-version = "1.2.1"
+version = "1.2.2"
 description = "Backport of PEP 654 (exception groups)"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"},
-    {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"},
+    {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
+    {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
 ]
 
 [package.extras]
@@ -1112,13 +1212,13 @@ test = ["pytest (>=6)"]
 
 [[package]]
 name = "executing"
-version = "2.0.1"
+version = "2.1.0"
 description = "Get the currently executing AST node of a frame, and other information"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
 files = [
-    {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
-    {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
+    {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"},
+    {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"},
 ]
 
 [package.extras]
@@ -1126,13 +1226,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
 
 [[package]]
 name = "fastjsonschema"
-version = "2.19.1"
+version = "2.21.1"
 description = "Fastest Python implementation of JSON schema"
 optional = false
 python-versions = "*"
 files = [
-    {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"},
-    {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"},
+    {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"},
+    {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"},
 ]
 
 [package.extras]
@@ -1140,69 +1240,77 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
 
 [[package]]
 name = "filelock"
-version = "3.14.0"
+version = "3.16.1"
 description = "A platform independent file lock."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"},
-    {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"},
+    {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"},
+    {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"},
 ]
 
 [package.extras]
-docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
-testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
-typing = ["typing-extensions (>=4.8)"]
+docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"]
+typing = ["typing-extensions (>=4.12.2)"]
 
 [[package]]
 name = "fonttools"
-version = "4.52.1"
+version = "4.55.3"
 description = "Tools to manipulate font files"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "fonttools-4.52.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:67a30b872e79577e5319ce660ede4a5131fa8a45de76e696746545e17db4437f"},
-    {file = "fonttools-4.52.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a5bff35738f8f6607c4303561ee1d1e5f64d5b14cf3c472d3030566c82e763"},
-    {file = "fonttools-4.52.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c9622593dfff042480a1b7e5b72c4d7dc00b96d2b4f98b0bf8acf071087e0db"},
-    {file = "fonttools-4.52.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33cfc9fe27af5e113d157d5147e24fc8e5bda3c5aadb55bea9847ec55341ce30"},
-    {file = "fonttools-4.52.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:aa5bec5027d947ee4b2242caecf7dc6e4ea03833e92e9b5211ebb6ab4eede8b2"},
-    {file = "fonttools-4.52.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10e44bf8e5654050a332a79285bacd6bd3069084540aec46c0862391147a1daa"},
-    {file = "fonttools-4.52.1-cp310-cp310-win32.whl", hash = "sha256:7fba390ac2ca18ebdd456f3a9acfb4557d6dcb2eaba5cc3eadce01003892a770"},
-    {file = "fonttools-4.52.1-cp310-cp310-win_amd64.whl", hash = "sha256:15df3517eb95035422a5c953ca19aac99913c16aa0e4ef061aeaef5f3bcaf369"},
-    {file = "fonttools-4.52.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40730aab9cf42286f314b985b483eea574f1bcf3a23e28223084cbb9e256457c"},
-    {file = "fonttools-4.52.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a19bc2be3af5b22ff5c7fe858c380862e31052c74f62e2c6d565ed0855bed7a6"},
-    {file = "fonttools-4.52.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f859066d8afde53f2ddabcd0705061e6d9d9868757c6ae28abe49bc885292df4"},
-    {file = "fonttools-4.52.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74cd3e3e9ba501e87a391b62e91f7b1610e8b3f3d706a368e5aee51614c1674e"},
-    {file = "fonttools-4.52.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:958957b81418647f66820480363cb617ba6b5bcf189ec6c4cea307d051048545"},
-    {file = "fonttools-4.52.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56addf1f995d94dad13aaaf56eb6def3d9ca97c2fada5e27af8190b3141e8633"},
-    {file = "fonttools-4.52.1-cp311-cp311-win32.whl", hash = "sha256:fea5456b2af42db8ecb1a6c2f144655ca6dcdcebd970f3145c56e668084ded7e"},
-    {file = "fonttools-4.52.1-cp311-cp311-win_amd64.whl", hash = "sha256:228faab7638cd726cdde5e2ec9ee10f780fbf9de9aa38d7f1e56a270437dff36"},
-    {file = "fonttools-4.52.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7c6aeb0d53e2ea92009b11c3d4ad9c03d0ecdfe602d547bed8537836e464f51e"},
-    {file = "fonttools-4.52.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e871123d12c92e2c9bda6369b69ce2da9cef40b119cc340451e413e90355fa38"},
-    {file = "fonttools-4.52.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ff8857dc9bb3e407c25aef3e025409cfbb23adb646a835636bebb1bdfc27a41"},
-    {file = "fonttools-4.52.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7685fdc6e23267844eef2b9af585d7f171cca695e4eb369d7682544c3e2e1123"},
-    {file = "fonttools-4.52.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1e1b2774485fbbb41a1beccc913b9c6f7971f78da61dd34207b9acc3cc2963e"},
-    {file = "fonttools-4.52.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e2c415160397fd6ed3964155aeec4bfefceeee365ab17161a5b3fe3f8dab077"},
-    {file = "fonttools-4.52.1-cp312-cp312-win32.whl", hash = "sha256:3ba2c4647e7decfb8e9cd346661c7d151dae1fba23d37b48bcf5fa8351f7b8c8"},
-    {file = "fonttools-4.52.1-cp312-cp312-win_amd64.whl", hash = "sha256:d39b926f14a2f7a7f92ded7d266b18f0108d867364769ab59da88ac2fa90d288"},
-    {file = "fonttools-4.52.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6e58d8097a269b6c43ec0abb3fa8d6c350ff0c7dfd23fc14d004610df88a4bb3"},
-    {file = "fonttools-4.52.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20f0fc969817c50539dc919ed8c4aef4de28c2d6e0111a064112301f157aede4"},
-    {file = "fonttools-4.52.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d62e84d38969491c6c1f6fe3dd63108e99d02de01bb3d98c160a5d4d24120910"},
-    {file = "fonttools-4.52.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eb5a389bbdee6f4c422881de422ee0e7efdfcd9310b13d540b12aa8ae2c9e7b"},
-    {file = "fonttools-4.52.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0caf05c969cbde6729dd97b64bea445ee152bb19215d5886f7b93bd0fb455468"},
-    {file = "fonttools-4.52.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df08bee1dd29a767311b50c62c0cfe4d72ae8c793e567d4c60b8c16c7c63a4f0"},
-    {file = "fonttools-4.52.1-cp38-cp38-win32.whl", hash = "sha256:82ffcf4782ceda09842b5b7875b36834c15d7cc0d5dd3d23a658ee9cf8819cd6"},
-    {file = "fonttools-4.52.1-cp38-cp38-win_amd64.whl", hash = "sha256:26b43bab5a3bce55ed4d9699b16568795eef5597d154f52dcabef5b4804c4b21"},
-    {file = "fonttools-4.52.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e8dbc13c4bc12e60df1b1f5e484112a5e96a6e8bba995e2965988ad73c5ea1b"},
-    {file = "fonttools-4.52.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7352ba2226e45e8fba11c3fb416363faf1b06f3f2e80d07d2930401265f3bf9c"},
-    {file = "fonttools-4.52.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8834d43763e9e92349ce8bb25dfb612aef6691eefefad885212d5e8f36a94a4"},
-    {file = "fonttools-4.52.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2a8c1101d06cc8fca7851dceb67afd53dd6fc0288bacaa632e647bc5afff58"},
-    {file = "fonttools-4.52.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a99b738227c0f6f2bbe381b45804a7c46653c95b9d7bf13f6f02884bc87e4930"},
-    {file = "fonttools-4.52.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:75aa00a16b9a64d1550e2e70d3582c7fe1ef18560e0cf066a4087fe6d11908a2"},
-    {file = "fonttools-4.52.1-cp39-cp39-win32.whl", hash = "sha256:c2f09b4aa699cfed4bbebc1829c5f044b41976707dac9230ed00d5a9fc6452c1"},
-    {file = "fonttools-4.52.1-cp39-cp39-win_amd64.whl", hash = "sha256:78ea6e0d4c89f8e216995923b854dd10bd09e48d3a5a3ccb48bb68f436a409ad"},
-    {file = "fonttools-4.52.1-py3-none-any.whl", hash = "sha256:faf5c83f83f7ddebdafdb453d02efdbea7fb494080d7a8d45a8a20db06ea8da5"},
-    {file = "fonttools-4.52.1.tar.gz", hash = "sha256:8c9204435aa6e5e9479a5ba4e669f05dea28b0c61958e0c0923cb164296d9329"},
+    {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"},
+    {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"},
+    {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"},
+    {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"},
+    {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"},
+    {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"},
+    {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"},
+    {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"},
+    {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"},
+    {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"},
+    {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"},
+    {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"},
+    {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"},
+    {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"},
+    {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"},
+    {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"},
+    {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"},
+    {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"},
+    {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"},
+    {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"},
+    {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"},
+    {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"},
+    {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"},
+    {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"},
+    {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"},
+    {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"},
+    {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"},
+    {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"},
+    {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"},
+    {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"},
+    {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"},
+    {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"},
+    {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"},
+    {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"},
+    {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"},
+    {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"},
+    {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"},
+    {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"},
+    {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"},
+    {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"},
+    {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"},
+    {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"},
+    {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"},
+    {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"},
+    {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"},
+    {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"},
+    {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"},
+    {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"},
+    {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"},
+    {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"},
 ]
 
 [package.extras]
@@ -1232,107 +1340,126 @@ files = [
 
 [[package]]
 name = "frozenlist"
-version = "1.4.1"
+version = "1.5.0"
 description = "A list-like structure which implements collections.abc.MutableSequence"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"},
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"},
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"},
-    {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"},
-    {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"},
-    {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"},
-    {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"},
-    {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"},
-    {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"},
-    {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"},
-    {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"},
-    {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"},
-    {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"},
-    {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"},
-    {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"},
+    {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"},
+    {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"},
+    {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"},
+    {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"},
+    {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"},
+    {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"},
+    {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"},
+    {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"},
+    {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"},
+    {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"},
+    {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"},
+    {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"},
+    {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"},
+    {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"},
+    {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"},
+    {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"},
+    {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"},
+    {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"},
+    {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"},
+    {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"},
+    {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"},
+    {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"},
+    {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"},
+    {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"},
+    {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"},
+    {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"},
+    {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"},
+    {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"},
+    {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"},
+    {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"},
+    {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"},
+    {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"},
+    {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"},
+    {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"},
+    {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"},
+    {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"},
+    {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"},
+    {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"},
+    {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"},
+    {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"},
+    {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"},
+    {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"},
+    {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"},
+    {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"},
+    {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"},
+    {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"},
+    {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"},
+    {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"},
+    {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"},
+    {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"},
+    {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"},
+    {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"},
+    {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"},
+    {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"},
+    {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"},
+    {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"},
+    {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"},
+    {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"},
+    {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"},
+    {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"},
+    {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"},
+    {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"},
+    {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"},
+    {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"},
+    {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"},
+    {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"},
+    {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"},
+    {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"},
+    {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"},
+    {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"},
+    {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"},
+    {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"},
+    {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"},
+    {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"},
+    {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"},
+    {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"},
+    {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"},
+    {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"},
+    {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"},
+    {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"},
+    {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"},
+    {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"},
+    {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"},
+    {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"},
+    {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"},
+    {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"},
+    {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"},
+    {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"},
+    {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"},
+    {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"},
+    {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"},
+    {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"},
 ]
 
 [[package]]
 name = "fsspec"
-version = "2024.5.0"
+version = "2024.9.0"
 description = "File-system specification"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "fsspec-2024.5.0-py3-none-any.whl", hash = "sha256:e0fdbc446d67e182f49a70b82cf7889028a63588fde6b222521f10937b2b670c"},
-    {file = "fsspec-2024.5.0.tar.gz", hash = "sha256:1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a"},
+    {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"},
+    {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"},
 ]
 
+[package.dependencies]
+aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""}
+
 [package.extras]
 abfs = ["adlfs"]
 adl = ["adlfs"]
 arrow = ["pyarrow (>=1)"]
 dask = ["dask", "distributed"]
 dev = ["pre-commit", "ruff"]
+doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"]
 dropbox = ["dropbox", "dropboxdrivefs", "requests"]
 full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
 fuse = ["fusepy"]
@@ -1367,13 +1494,13 @@ files = [
 
 [[package]]
 name = "httpcore"
-version = "1.0.5"
+version = "1.0.7"
 description = "A minimal low-level HTTP client."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"},
-    {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"},
+    {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"},
+    {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"},
 ]
 
 [package.dependencies]
@@ -1384,17 +1511,17 @@ h11 = ">=0.13,<0.15"
 asyncio = ["anyio (>=4.0,<5.0)"]
 http2 = ["h2 (>=3,<5)"]
 socks = ["socksio (==1.*)"]
-trio = ["trio (>=0.22.0,<0.26.0)"]
+trio = ["trio (>=0.22.0,<1.0)"]
 
 [[package]]
 name = "httpx"
-version = "0.26.0"
+version = "0.28.1"
 description = "The next generation HTTP client."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"},
-    {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"},
+    {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"},
+    {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"},
 ]
 
 [package.dependencies]
@@ -1402,23 +1529,57 @@ anyio = "*"
 certifi = "*"
 httpcore = "==1.*"
 idna = "*"
-sniffio = "*"
 
 [package.extras]
 brotli = ["brotli", "brotlicffi"]
 cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
 http2 = ["h2 (>=3,<5)"]
 socks = ["socksio (==1.*)"]
+zstd = ["zstandard (>=0.18.0)"]
+
+[[package]]
+name = "huggingface-hub"
+version = "0.27.1"
+description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+    {file = "huggingface_hub-0.27.1-py3-none-any.whl", hash = "sha256:1c5155ca7d60b60c2e2fc38cbb3ffb7f7c3adf48f824015b219af9061771daec"},
+    {file = "huggingface_hub-0.27.1.tar.gz", hash = "sha256:c004463ca870283909d715d20f066ebd6968c2207dae9393fdffb3c1d4d8f98b"},
+]
+
+[package.dependencies]
+filelock = "*"
+fsspec = ">=2023.5.0"
+packaging = ">=20.9"
+pyyaml = ">=5.1"
+requests = "*"
+tqdm = ">=4.42.1"
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
+cli = ["InquirerPy (==0.3.4)"]
+dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"]
+fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"]
+hf-transfer = ["hf-transfer (>=0.1.4)"]
+inference = ["aiohttp"]
+quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.5.0)"]
+tensorflow = ["graphviz", "pydot", "tensorflow"]
+tensorflow-testing = ["keras (<3.0)", "tensorflow"]
+testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"]
+torch = ["safetensors[torch]", "torch"]
+typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"]
 
 [[package]]
 name = "identify"
-version = "2.5.36"
+version = "2.6.5"
 description = "File identification library for Python"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"},
-    {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"},
+    {file = "identify-2.6.5-py2.py3-none-any.whl", hash = "sha256:14181a47091eb75b337af4c23078c9d09225cd4c48929f521f3bf16b09d02566"},
+    {file = "identify-2.6.5.tar.gz", hash = "sha256:c10b33f250e5bba374fae86fb57f3adcebf1161bce7cdf92031915fd480c13bc"},
 ]
 
 [package.extras]
@@ -1426,61 +1587,72 @@ license = ["ukkonen"]
 
 [[package]]
 name = "idna"
-version = "3.7"
+version = "3.10"
 description = "Internationalized Domain Names in Applications (IDNA)"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
 files = [
-    {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
-    {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
+    {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
+    {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
 ]
 
+[package.extras]
+all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
+
 [[package]]
 name = "importlib-metadata"
-version = "7.1.0"
+version = "8.5.0"
 description = "Read metadata from Python packages"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"},
-    {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"},
+    {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"},
+    {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"},
 ]
 
 [package.dependencies]
-zipp = ">=0.5"
+zipp = ">=3.20"
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+enabler = ["pytest-enabler (>=2.2)"]
 perf = ["ipython"]
-testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"]
+test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
+type = ["pytest-mypy"]
 
 [[package]]
 name = "importlib-resources"
-version = "6.4.0"
+version = "6.5.2"
 description = "Read resources from Python packages"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"},
-    {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"},
+    {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"},
+    {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"},
 ]
 
 [package.dependencies]
 zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
-testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"]
+type = ["pytest-mypy"]
 
 [[package]]
 name = "ipykernel"
-version = "6.29.4"
+version = "6.29.5"
 description = "IPython Kernel for Jupyter"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"},
-    {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"},
+    {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"},
+    {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"},
 ]
 
 [package.dependencies]
@@ -1507,42 +1679,40 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio
 
 [[package]]
 name = "ipython"
-version = "8.12.3"
+version = "8.18.1"
 description = "IPython: Productive Interactive Computing"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"},
-    {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"},
+    {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"},
+    {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"},
 ]
 
 [package.dependencies]
-appnope = {version = "*", markers = "sys_platform == \"darwin\""}
-backcall = "*"
 colorama = {version = "*", markers = "sys_platform == \"win32\""}
 decorator = "*"
+exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
 jedi = ">=0.16"
 matplotlib-inline = "*"
 pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
-pickleshare = "*"
-prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0"
+prompt-toolkit = ">=3.0.41,<3.1.0"
 pygments = ">=2.4.0"
 stack-data = "*"
 traitlets = ">=5"
 typing-extensions = {version = "*", markers = "python_version < \"3.10\""}
 
 [package.extras]
-all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
+all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
 black = ["black"]
-doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"]
+doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"]
 kernel = ["ipykernel"]
 nbconvert = ["nbconvert"]
 nbformat = ["nbformat"]
 notebook = ["ipywidgets", "notebook"]
 parallel = ["ipyparallel"]
 qtconsole = ["qtconsole"]
-test = ["pytest (<7.1)", "pytest-asyncio", "testpath"]
-test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"]
+test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"]
+test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"]
 
 [[package]]
 name = "ipython-genutils"
@@ -1557,13 +1727,13 @@ files = [
 
 [[package]]
 name = "ipywidgets"
-version = "7.8.1"
+version = "7.8.5"
 description = "IPython HTML widgets for Jupyter"
 optional = false
 python-versions = "*"
 files = [
-    {file = "ipywidgets-7.8.1-py2.py3-none-any.whl", hash = "sha256:29f7056d368bf0a7b35d51cf0c56b58582da57c78bb9f765965fef7c332e807c"},
-    {file = "ipywidgets-7.8.1.tar.gz", hash = "sha256:050b87bb9ac11641859af4c36cdb639ca072fb5e121f0f1a401f8a80f9fa008d"},
+    {file = "ipywidgets-7.8.5-py2.py3-none-any.whl", hash = "sha256:8055fe314edd4c101a5f1ea230620ef5e315b0ca87f940264b4eac1faf9746ef"},
+    {file = "ipywidgets-7.8.5.tar.gz", hash = "sha256:927439399d75f59f43864c13d7e73b05a4de522d3ea09d6048adc5c583b55c3b"},
 ]
 
 [package.dependencies]
@@ -1572,7 +1742,7 @@ ipython = {version = ">=4.0.0", markers = "python_version >= \"3.3\""}
 ipython-genutils = ">=0.2.0,<0.3.0"
 jupyterlab-widgets = {version = ">=1.0.0,<3", markers = "python_version >= \"3.6\""}
 traitlets = ">=4.3.1"
-widgetsnbextension = ">=3.6.6,<3.7.0"
+widgetsnbextension = ">=3.6.10,<3.7.0"
 
 [package.extras]
 test = ["ipykernel", "mock", "pytest (>=3.6.0)", "pytest-cov"]
@@ -1607,32 +1777,32 @@ colors = ["colorama (>=0.4.6)"]
 
 [[package]]
 name = "jedi"
-version = "0.19.1"
+version = "0.19.2"
 description = "An autocompletion tool for Python that can be used for text editors."
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
-    {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
+    {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"},
+    {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"},
 ]
 
 [package.dependencies]
-parso = ">=0.8.3,<0.9.0"
+parso = ">=0.8.4,<0.9.0"
 
 [package.extras]
 docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
 qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
-testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
+testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"]
 
 [[package]]
 name = "jinja2"
-version = "3.1.4"
+version = "3.1.5"
 description = "A very fast and expressive template engine."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
-    {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
+    {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"},
+    {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"},
 ]
 
 [package.dependencies]
@@ -1642,113 +1812,112 @@ MarkupSafe = ">=2.0"
 i18n = ["Babel (>=2.7)"]
 
 [[package]]
-name = "joblib"
-version = "1.4.2"
-description = "Lightweight pipelining with Python functions"
+name = "json5"
+version = "0.10.0"
+description = "A Python implementation of the JSON5 data format."
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.8.0"
 files = [
-    {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"},
-    {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
+    {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"},
+    {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"},
 ]
 
+[package.extras]
+dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"]
+
 [[package]]
-name = "json5"
-version = "0.9.25"
-description = "A Python implementation of the JSON5 data format."
+name = "jsonpointer"
+version = "3.0.0"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.7"
 files = [
-    {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"},
-    {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"},
+    {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"},
+    {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"},
 ]
 
 [[package]]
-name = "jsonpointer"
-version = "2.4"
-description = "Identify specific nodes in a JSON document (RFC 6901)"
+name = "jsonref"
+version = "1.1.0"
+description = "jsonref is a library for automatic dereferencing of JSON Reference objects for Python."
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
+python-versions = ">=3.7"
 files = [
-    {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"},
-    {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"},
+    {file = "jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9"},
+    {file = "jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552"},
 ]
 
 [[package]]
 name = "jsonschema"
-version = "4.22.0"
+version = "4.23.0"
 description = "An implementation of JSON Schema validation for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"},
-    {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"},
+    {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
+    {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
 ]
 
 [package.dependencies]
 attrs = ">=22.2.0"
 fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
-importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
 isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
 jsonschema-specifications = ">=2023.03.6"
-pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""}
 referencing = ">=0.28.4"
 rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
 rpds-py = ">=0.7.1"
 uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
-webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""}
+webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""}
 
 [package.extras]
 format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
-format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"]
 
 [[package]]
 name = "jsonschema-specifications"
-version = "2023.12.1"
+version = "2024.10.1"
 description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"},
-    {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"},
+    {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"},
+    {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"},
 ]
 
 [package.dependencies]
-importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
 referencing = ">=0.31.0"
 
 [[package]]
 name = "jupyter"
-version = "1.0.0"
+version = "1.1.1"
 description = "Jupyter metapackage. Install all the Jupyter components in one go."
 optional = false
 python-versions = "*"
 files = [
-    {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"},
-    {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"},
-    {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"},
+    {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"},
+    {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"},
 ]
 
 [package.dependencies]
 ipykernel = "*"
 ipywidgets = "*"
 jupyter-console = "*"
+jupyterlab = "*"
 nbconvert = "*"
 notebook = "*"
-qtconsole = "*"
 
 [[package]]
 name = "jupyter-client"
-version = "8.6.2"
+version = "8.6.3"
 description = "Jupyter protocol implementation and client libraries"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"},
-    {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"},
+    {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"},
+    {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"},
 ]
 
 [package.dependencies]
@@ -1809,13 +1978,13 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"
 
 [[package]]
 name = "jupyter-events"
-version = "0.10.0"
+version = "0.11.0"
 description = "Jupyter Event System library"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"},
-    {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"},
+    {file = "jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf"},
+    {file = "jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90"},
 ]
 
 [package.dependencies]
@@ -1829,7 +1998,7 @@ traitlets = ">=5.3"
 
 [package.extras]
 cli = ["click", "rich"]
-docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"]
+docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"]
 test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"]
 
 [[package]]
@@ -1849,13 +2018,13 @@ jupyter-server = ">=1.1.2"
 
 [[package]]
 name = "jupyter-server"
-version = "2.14.0"
+version = "2.15.0"
 description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"},
-    {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"},
+    {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"},
+    {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"},
 ]
 
 [package.dependencies]
@@ -1864,7 +2033,7 @@ argon2-cffi = ">=21.1"
 jinja2 = ">=3.0.3"
 jupyter-client = ">=7.4.4"
 jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
-jupyter-events = ">=0.9.0"
+jupyter-events = ">=0.11.0"
 jupyter-server-terminals = ">=0.4.4"
 nbconvert = ">=6.4.4"
 nbformat = ">=5.3.0"
@@ -1880,7 +2049,7 @@ traitlets = ">=5.6.0"
 websocket-client = ">=1.7"
 
 [package.extras]
-docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
+docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
 test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"]
 
 [[package]]
@@ -1904,20 +2073,19 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>
 
 [[package]]
 name = "jupyterlab"
-version = "4.2.1"
+version = "4.3.4"
 description = "JupyterLab computational environment"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "jupyterlab-4.2.1-py3-none-any.whl", hash = "sha256:6ac6e3827b3c890e6e549800e8a4f4aaea6a69321e2240007902aa7a0c56a8e4"},
-    {file = "jupyterlab-4.2.1.tar.gz", hash = "sha256:a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507"},
+    {file = "jupyterlab-4.3.4-py3-none-any.whl", hash = "sha256:b754c2601c5be6adf87cb5a1d8495d653ffb945f021939f77776acaa94dae952"},
+    {file = "jupyterlab-4.3.4.tar.gz", hash = "sha256:f0bb9b09a04766e3423cccc2fc23169aa2ffedcdf8713e9e0fb33cac0b6859d0"},
 ]
 
 [package.dependencies]
 async-lru = ">=1.0.0"
 httpx = ">=0.25.0"
 importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
-importlib-resources = {version = ">=1.4", markers = "python_version < \"3.9\""}
 ipykernel = ">=6.5.0"
 jinja2 = ">=3.0.3"
 jupyter-core = "*"
@@ -1926,16 +2094,17 @@ jupyter-server = ">=2.4.0,<3"
 jupyterlab-server = ">=2.27.1,<3"
 notebook-shim = ">=0.2"
 packaging = "*"
+setuptools = ">=40.8.0"
 tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""}
 tornado = ">=6.2.0"
 traitlets = "*"
 
 [package.extras]
-dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"]
-docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"]
-docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"]
+dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"]
+docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"]
+docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"]
 test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"]
-upgrade-extension = ["copier (>=8,<10)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"]
+upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"]
 
 [[package]]
 name = "jupyterlab-pygments"
@@ -1950,13 +2119,13 @@ files = [
 
 [[package]]
 name = "jupyterlab-server"
-version = "2.27.2"
+version = "2.27.3"
 description = "A set of server components for JupyterLab and JupyterLab like applications."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "jupyterlab_server-2.27.2-py3-none-any.whl", hash = "sha256:54aa2d64fd86383b5438d9f0c032f043c4d8c0264b8af9f60bd061157466ea43"},
-    {file = "jupyterlab_server-2.27.2.tar.gz", hash = "sha256:15cbb349dc45e954e09bacf81b9f9bcb10815ff660fb2034ecd7417db3a7ea27"},
+    {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"},
+    {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"},
 ]
 
 [package.dependencies]
@@ -1976,137 +2145,147 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v
 
 [[package]]
 name = "jupyterlab-widgets"
-version = "1.1.7"
+version = "1.1.11"
 description = "A JupyterLab extension."
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "jupyterlab_widgets-1.1.7-py3-none-any.whl", hash = "sha256:0c4548cf42032e490447e4180f2c7d49ba5c30b42164992b38fb8c9d56c4e1b2"},
-    {file = "jupyterlab_widgets-1.1.7.tar.gz", hash = "sha256:318dab34267915d658e7b0dc57433ff0ce0d52b3e283986b73b66f7ab9017ae8"},
+    {file = "jupyterlab_widgets-1.1.11-py3-none-any.whl", hash = "sha256:840e538021d87e020a8e7b786597f088431f4ebd8308655555e126c3950a1b27"},
+    {file = "jupyterlab_widgets-1.1.11.tar.gz", hash = "sha256:414cdbcd99db6e8f1174c7e4ed49c6ba368779f4659806fb1d824f3c377218e4"},
 ]
 
 [[package]]
 name = "kiwisolver"
-version = "1.4.5"
+version = "1.4.7"
 description = "A fast implementation of the Cassowary constraint solver"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"},
-    {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"},
-    {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"},
-    {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"},
-    {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"},
-    {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"},
-    {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"},
-    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"},
-    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"},
-    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"},
-    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"},
-    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"},
-    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"},
-    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"},
-    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"},
-    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"},
-    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"},
-    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"},
-    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"},
-    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"},
-    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"},
-    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"},
-    {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"},
+    {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"},
+    {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"},
+    {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"},
+    {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"},
+    {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"},
+    {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"},
+    {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"},
+    {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"},
+    {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"},
+    {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"},
 ]
 
 [[package]]
 name = "langcodes"
-version = "3.4.0"
+version = "3.5.0"
 description = "Tools for labeling human languages with IETF language tags"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "langcodes-3.4.0-py3-none-any.whl", hash = "sha256:10a4cc078b8e8937d8485d3352312a0a89a3125190db9f2bb2074250eef654e9"},
-    {file = "langcodes-3.4.0.tar.gz", hash = "sha256:ae5a77d1a01d0d1e91854a671890892b7ce9abb601ab7327fc5c874f899e1979"},
+    {file = "langcodes-3.5.0-py3-none-any.whl", hash = "sha256:853c69d1a35e0e13da2f427bb68fb2fa4a8f4fb899e0c62ad8df8d073dcfed33"},
+    {file = "langcodes-3.5.0.tar.gz", hash = "sha256:1eef8168d07e51e131a2497ffecad4b663f6208e7c3ae3b8dc15c51734a6f801"},
 ]
 
 [package.dependencies]
@@ -2118,17 +2297,17 @@ test = ["pytest", "pytest-cov"]
 
 [[package]]
 name = "language-data"
-version = "1.2.0"
+version = "1.3.0"
 description = "Supplementary data about languages used by the langcodes module"
 optional = false
 python-versions = "*"
 files = [
-    {file = "language_data-1.2.0-py3-none-any.whl", hash = "sha256:77d5cab917f91ee0b2f1aa7018443e911cf8985ef734ca2ba3940770f6a3816b"},
-    {file = "language_data-1.2.0.tar.gz", hash = "sha256:82a86050bbd677bfde87d97885b17566cfe75dad3ac4f5ce44b52c28f752e773"},
+    {file = "language_data-1.3.0-py3-none-any.whl", hash = "sha256:e2ee943551b5ae5f89cd0e801d1fc3835bb0ef5b7e9c3a4e8e17b2b214548fbf"},
+    {file = "language_data-1.3.0.tar.gz", hash = "sha256:7600ef8aa39555145d06c89f0c324bf7dab834ea0b0a439d8243762e3ebad7ec"},
 ]
 
 [package.dependencies]
-marisa-trie = ">=0.7.7"
+marisa-trie = ">=1.1.0"
 
 [package.extras]
 build = ["build", "twine"]
@@ -2136,99 +2315,87 @@ test = ["pytest", "pytest-cov"]
 
 [[package]]
 name = "marisa-trie"
-version = "1.1.1"
+version = "1.2.1"
 description = "Static memory-efficient and fast Trie-like structures for Python."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "marisa_trie-1.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:68e48a547b9a1fd64c648684cd375402ba521c2c4a724756a944ef4b88c3047c"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:615d7de907919bda16e9cafc1fa74942354273c299bf07e3c0adb2420d6fad48"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d587001ef30960eba6d4c9b1f6b03037480c1e4b277b305b5a2957a5eebe4f09"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11765ee9c2ad162bc7f8ab9cf383a21349673034bfac9bf00d6b06e44d70a4c9"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5abc72a7267de6a4e3aa7463e780ddfaac442ef3a385f9e1c60e7f32c0cc34"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c70f85ab67754e2f28af6cb1f1db826b5ec735beca2fa021a79c14f9afbc6167"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5c3a3d12f9c1a4312562b03ccbbd29d0aa28bda999c4f7fa7763f011c9d3a11"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:73eec66265424a548119648a6f38b119a525a767a86dc397e001bfe70f518b91"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:93c7129f410f9f3215d01ae7737cfc9afa528264c53ba8ee9859a29f164069e0"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-win32.whl", hash = "sha256:fe5b7ed1768409933d4457b8bf8d2b2b1af77b7333a27bd418ea0510289d4763"},
-    {file = "marisa_trie-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:9c5baad750994681ebb8a92bd577a9be31de6e6f9cd391156bf595b91f719db2"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bfc1a6b60bccee0f8b2edba893b9ad339e7607aee728f3bc4f75ba7d28185c7d"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d45329585ad3e068b7878ba929032987c6a53f85a40bd859b9a1a16324236dd6"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd028e97d418f092e18d451a0a42bffaa849457662d66747a03332dfff6c39d9"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37d423cb3a9fe4270ee2ad083d1bb62d6c4cc333dcb1197b024ee1ae7c5d6535"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cbcf88ddab9890a4942b52fff6c09d8b8aea59f4861b5d37e112a16a4218461"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4268b12a279c90450b39e062068ff4c878a6b9750d6ab52ade8285b1594b5d10"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bbfbbff3e94b3a0be44e010b093af1ce0e29c7ed081d2a020496e863333f5c11"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ecc678f562dd0cfe2406f0d5447e8200691509149c979334c2d0c26420d28ac"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1039316fc5899eee25df9302d81380e0be9a7fa0c10231322187b6d932b55a4a"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-win32.whl", hash = "sha256:67fa17083d5fb6d883c91ae512f9aab093a8a73ed77eae07e963014774909e81"},
-    {file = "marisa_trie-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:c3140312ecb40456490d2afe24594bfc62a5a18de5344672ce6526e4c6e79e0e"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:98270ed60d0906a185dca185a9ce92fb97fbb68878a6cd76bd61994725727402"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3ff16e08924f0c342a37b1b1762d8d1394c4cc3b29724e124af54edecbdbd820"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e2f867376a302d4770817f8caf1b1f22ac32a2a8a49629343391640054f8f7ab"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ae28c5ad4abc1e638db5b39c454a03b25e966836cb3b7edbf398b34393d5ed"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:597077e4687d1ab2df13a6d46e33a09e6edcb985566717fe52bcb262f592754b"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29414a4b49905c67b48c662f39894d7594be6e3a58b15d3e7eee3588188d5591"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:52414fd15573475c8f79f90c3b7bbc37723e54f9671ba7d0e491887bcdeac7e7"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5aa364e4ccda1af55784b6dd318954924870792f9fd336b941d9b2fd8a4311e0"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:86427594ee1024d092a1482c33ed857b74d55418a4385495e1e2c60de8ca7572"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-win32.whl", hash = "sha256:dea2583084f7d5e095676afc1cc6d342862911cd496095b636ef14ac74f14aa3"},
-    {file = "marisa_trie-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:8a2af61b5c3d9151b9320020499c3609651e24dd0c6178ec8f4826c78dbd5f42"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5be36ef0f5649e47f53302dc5317445c2764870d6a0ab5317a79381ff5ddf2bb"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:298a496ac0a7d06710e1ecc4df1f22b7384ca1a46d5295eb7b4445bbd15adb92"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:883ec31db8ec790a3ce6f39988a983b2c2b49ab018ec0d5bad4a248c8171f90d"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f839cddd130d1073a151eb13d709b4449eb4eb2a29c0f38b8e1436fd57eb4a4b"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:235a14f65fc453e6ffe1f4287d7eda832b6870f925adf9bf72a402b0417d2711"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a707aa9d0ad8fb2fcc074129652903801e5295e53c94d46fb66f46fe38ad8b19"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3fc5ba277a586a3fd97c56076d9bd84339ef8cef08f28527b2384d72f28df853"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:6c5519ff75e6001a62404b087774b517d669122b9b8b8ecf622f21e6d990700a"},
-    {file = "marisa_trie-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f9cc48c12556610d814e4b162123eee43a6048f032d3957554e664feb2f77504"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:73d7ae84293ea6986c168b0cf0d29cd3abf16cfef7375c33d423816ca0eebe48"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5f410c0c28ec0d411d75f56327de35df15656bdc308648312c983a15ee84023b"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b406bab536dde70b36a8e3e60d0b2f224b280281988d6b0a0c24e47bd71b2c18"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27567a8e8950ced08aa3c74da2ceeff1f433114064df15e9ed1ec981f30970af"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02578f4c709232caeb3bf404bfd6b1c49936db8899790dfe5cd21e1a72df18bb"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3edbb4373f20a5d62e33d8aad9d7f7ad40c2ccf8e41d0e2534f28c9a73d5613"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:86184796d384183da5e0068e6fb96b060fb437efc60ba264b125350e8c7f498c"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9992a5f0c90dfc21664d218cf016acc6d9ebeb2f97c57bb4aa4d063dcb2253b8"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dad3167eb1c8259afb183c3dddee070bc39c68857490ed61c5c90186ec380ab0"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-win32.whl", hash = "sha256:c0a0ae5d8b6c39f53f3711b8bcdda0fe559f52c1789438b8399ea8a81b399dff"},
-    {file = "marisa_trie-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:a127e3eebfb638799cf35a8504174462cf45395825f1ae9d45a5c434490b1bcd"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:76d7fd725dd7d7621f4202306ddb3f7a90ff3d1c511de9ea2c7ffa540169a7ca"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4241322c9022ad0f01e6049994c4eb95f35d8f64d2d7ab55f653d9e8bf51ba0f"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8780b5a43a0cc861cafd78b9b2a9849648bb86d3cabe5e95d80350986ad7e801"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4261285399b27c36a7ff0eb13e4eebaab8dd814a9512b3cd1191552c0af799f8"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f451948bfbdc9627318e3210683f7b8d4533d3174d7706ee94b6008c39e80753"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53d4ef171c77d4f0fd6278a0f1dab58562faa12cac3c5c9cc4cac4ba7e378f17"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aacb972faffbc208ed7f52ed50dd6710f38175d3673861405e0e82fa12d57269"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e5603cb20eeded143c5ff035978591b71bc0bc2c6cd9c2e6dfdaacdaab76907c"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:405ece63330b113040ed5b2371ff6e026d53c9c706ca9c58baf57f322e192895"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-win32.whl", hash = "sha256:b7a853063785e382d86eadea57363a0e2f04520d6ef948be88181df9e9ee5c0d"},
-    {file = "marisa_trie-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b44bd2bfc4bf080421a9ebac5f12434b36494effaa0ca8593a3df4e77cc6620e"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5dba7a60d6d340fd498f2a967c0a4c3aa7c4cab6ca7655cde0289cdc7bf3f747"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad624e95f46d8fc6f82af2d372ad55ef218babc323aa14338df843d907d040cc"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ccf3ae61a63dec06f3cfb8521fd9c8e6391761d47a4df0164954690b7cc3fab"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:493956e76e2c6276d1e804ee723b23eaba30beca43fc0ddf3a093abc178af3f4"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5207026332ed08957a3bc1391eb9c8861a1882e1517887ef423cfd3afc30e947"},
-    {file = "marisa_trie-1.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bae9ff4146b84ef0d51e0940e310d034d1e6a6ce1879a03a891c541dce8b26f9"},
-    {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:059a7b7cc0c7796c068e6ab07e522791c7addf3697616b2bcb73ed1d42a761aa"},
-    {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69ba62cbb74d2824cd49be9c2f592b306e5107d5005f0bb3b4d62c9b6ae7246"},
-    {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26232fe4442f89643b4206ded1be486a12fcf731d55c5e42ff86e2f2ba5e949a"},
-    {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fa3bd1d32faf6afdb877a1e1f65e33873d88d158a16f9e00830901519d428ca"},
-    {file = "marisa_trie-1.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a7e48ba7748c2090b58f911ea995b94ff590781e81d0a2e0fc8b583af4d26710"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:52f0d96d738831c81127377920e86fc8cb14638df1ea8f37ea392b545f9f984c"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:511e5d23070c166427de24742771a6040eb5c787c51145dddcc7af4106ec8b08"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec39c09c0bf850f01b15bbd18214a89b9730001fd1483de873f6b7dc73fb2316"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfe6454eb6d2a9b2bb5583b433048670f85f264e613d1f885251ce68070adad8"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5661d8974b4128a847deb282dbe040e5eed5b91c56ed9d207623ea4db24abc5"},
-    {file = "marisa_trie-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:08aed31f8164c7ec8ba6a449e6a18f4052bafe9dcaa2dcfd0e25fee9ddd94e36"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18a1440b01d87566a5c2bddd6a575180a3526ec9da5f7aa55769213153737d19"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7cc903512d5d7cf3a30624dde8adc5ba4312732c931746f18641e0a5762646b3"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c7785c04373d8d2844f6636d73c08384a587c098093a04166177fa45494d912"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0196e3a9ed3bfce20e32ff7d9ff1c929d0ceb8c380ae0f227e11ab819e70dc2c"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2601b320268a87a4a7accaf7c2e8fc99c568e13316903d2010eb09e0ff16b6a9"},
-    {file = "marisa_trie-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cd285b97204046e5c5018fa03752d243c6423df023963b52de39d4e90bb3024a"},
-    {file = "marisa_trie-1.1.1.tar.gz", hash = "sha256:363f1be2314b1f9e26b5a3de45b59fd9a0a3289bf157be61bbed770643a46f1a"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a2eb41d2f9114d8b7bd66772c237111e00d2bae2260824560eaa0a1e291ce9e8"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9e956e6a46f604b17d570901e66f5214fb6f658c21e5e7665deace236793cef6"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bd45142501300e7538b2e544905580918b67b1c82abed1275fe4c682c95635fa"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8443d116c612cfd1961fbf76769faf0561a46d8e317315dd13f9d9639ad500c"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:875a6248e60fbb48d947b574ffa4170f34981f9e579bde960d0f9a49ea393ecc"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:746a7c60a17fccd3cfcfd4326926f02ea4fcdfc25d513411a0c4fc8e4a1ca51f"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e70869737cc0e5bd903f620667da6c330d6737048d1f44db792a6af68a1d35be"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06b099dd743676dbcd8abd8465ceac8f6d97d8bfaabe2c83b965495523b4cef2"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d2a82eb21afdaf22b50d9b996472305c05ca67fc4ff5a026a220320c9c961db6"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-win32.whl", hash = "sha256:8951e7ce5d3167fbd085703b4cbb3f47948ed66826bef9a2173c379508776cf5"},
+    {file = "marisa_trie-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5685a14b3099b1422c4f59fa38b0bf4b5342ee6cc38ae57df9666a0b28eeaad3"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed3fb4ed7f2084597e862bcd56c56c5529e773729a426c083238682dba540e98"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fe69fb9ffb2767746181f7b3b29bbd3454d1d24717b5958e030494f3d3cddf3"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4728ed3ae372d1ea2cdbd5eaa27b8f20a10e415d1f9d153314831e67d963f281"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cf4f25cf895692b232f49aa5397af6aba78bb679fb917a05fce8d3cb1ee446d"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cca7f96236ffdbf49be4b2e42c132e3df05968ac424544034767650913524de"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7eb20bf0e8b55a58d2a9b518aabc4c18278787bdba476c551dd1c1ed109e509"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b1ec93f0d1ee6d7ab680a6d8ea1a08bf264636358e92692072170032dda652ba"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e2699255d7ac610dee26d4ae7bda5951d05c7d9123a22e1f7c6a6f1964e0a4e4"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c484410911182457a8a1a0249d0c09c01e2071b78a0a8538cd5f7fa45589b13a"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-win32.whl", hash = "sha256:ad548117744b2bcf0e3d97374608be0a92d18c2af13d98b728d37cd06248e571"},
+    {file = "marisa_trie-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:436f62d27714970b9cdd3b3c41bdad046f260e62ebb0daa38125ef70536fc73b"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:638506eacf20ca503fff72221a7e66a6eadbf28d6a4a6f949fcf5b1701bb05ec"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de1665eaafefa48a308e4753786519888021740501a15461c77bdfd57638e6b4"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f713af9b8aa66a34cd3a78c7d150a560a75734713abe818a69021fd269e927fa"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2a7d00f53f4945320b551bccb826b3fb26948bde1a10d50bb9802fabb611b10"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98042040d1d6085792e8d0f74004fc0f5f9ca6091c298f593dd81a22a4643854"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6532615111eec2c79e711965ece0bc95adac1ff547a7fff5ffca525463116deb"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:20948e40ab2038e62b7000ca6b4a913bc16c91a2c2e6da501bd1f917eeb28d51"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66b23e5b35dd547f85bf98db7c749bc0ffc57916ade2534a6bbc32db9a4abc44"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6704adf0247d2dda42e876b793be40775dff46624309ad99bc7537098bee106d"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-win32.whl", hash = "sha256:3ad356442c2fea4c2a6f514738ddf213d23930f942299a2b2c05df464a00848a"},
+    {file = "marisa_trie-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2806f75817392cedcacb24ac5d80b0350dde8d3861d67d045c1d9b109764114"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b5ea16e69bfda0ac028c921b58de1a4aaf83d43934892977368579cd3c0a2554"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f627f4e41be710b6cb6ed54b0128b229ac9d50e2054d9cde3af0fef277c23cf"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5e649f3dc8ab5476732094f2828cc90cac3be7c79bc0c8318b6fda0c1d248db4"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46e528ee71808c961baf8c3ce1c46a8337ec7a96cc55389d11baafe5b632f8e9"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36aa4401a1180615f74d575571a6550081d84fc6461e9aefc0bb7b2427af098e"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce59bcd2cda9bb52b0e90cc7f36413cd86c3d0ce7224143447424aafb9f4aa48"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f4cd800704a5fc57e53c39c3a6b0c9b1519ebdbcb644ede3ee67a06eb542697d"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2428b495003c189695fb91ceeb499f9fcced3a2dce853e17fa475519433c67ff"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:735c363d9aaac82eaf516a28f7c6b95084c2e176d8231c87328dc80e112a9afa"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-win32.whl", hash = "sha256:eba6ca45500ca1a042466a0684aacc9838e7f20fe2605521ee19f2853062798f"},
+    {file = "marisa_trie-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:aa7cd17e1c690ce96c538b2f4aae003d9a498e65067dd433c52dd069009951d4"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5e43891a37b0d7f618819fea14bd951289a0a8e3dd0da50c596139ca83ebb9b1"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6946100a43f933fad6bc458c502a59926d80b321d5ac1ed2ff9c56605360496f"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4177dc0bd1374e82be9b2ba4d0c2733b0a85b9d154ceeea83a5bee8c1e62fbf"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f35c2603a6be168088ed1db6ad1704b078aa8f39974c60888fbbced95dcadad4"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d659fda873d8dcb2c14c2c331de1dee21f5a902d7f2de7978b62c6431a8850ef"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:b0ef26733d3c836be79e812071e1a431ce1f807955a27a981ebb7993d95f842b"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:536ea19ce6a2ce61c57fed4123ecd10d18d77a0db45cd2741afff2b8b68f15b3"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-win32.whl", hash = "sha256:0ee6cf6a16d9c3d1c94e21c8e63c93d8b34bede170ca4e937e16e1c0700d399f"},
+    {file = "marisa_trie-1.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7e7b1786e852e014d03e5f32dbd991f9a9eb223dd3fa9a2564108b807e4b7e1c"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:952af3a5859c3b20b15a00748c36e9eb8316eb2c70bd353ae1646da216322908"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24a81aa7566e4ec96fc4d934581fe26d62eac47fc02b35fa443a0bb718b471e8"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9c9b32b14651a6dcf9e8857d2df5d29d322a1ea8c0be5c8ffb88f9841c4ec62b"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ac170d20b97beb75059ba65d1ccad6b434d777c8992ab41ffabdade3b06dd74"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da4e4facb79614cc4653cfd859f398e4db4ca9ab26270ff12610e50ed7f1f6c6"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25688f34cac3bec01b4f655ffdd6c599a01f0bd596b4a79cf56c6f01a7df3560"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1db3213b451bf058d558f6e619bceff09d1d130214448a207c55e1526e2773a1"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5648c6dcc5dc9200297fb779b1663b8a4467bda034a3c69bd9c32d8afb33b1d"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5bd39a4e1cc839a88acca2889d17ebc3f202a5039cd6059a13148ce75c8a6244"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-win32.whl", hash = "sha256:594f98491a96c7f1ffe13ce292cef1b4e63c028f0707effdea0f113364c1ae6c"},
+    {file = "marisa_trie-1.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:5fe5a286f997848a410eebe1c28657506adaeb405220ee1e16cfcfd10deb37f2"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c0fe2ace0cb1806badbd1c551a8ec2f8d4cf97bf044313c082ef1acfe631ddca"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:67f0c2ec82c20a02c16fc9ba81dee2586ef20270127c470cb1054767aa8ba310"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3c98613180cf1730e221933ff74b454008161b1a82597e41054127719964188"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:429858a0452a7bedcf67bc7bb34383d00f666c980cb75a31bcd31285fbdd4403"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2eacb84446543082ec50f2fb563f1a94c96804d4057b7da8ed815958d0cdfbe"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:852d7bcf14b0c63404de26e7c4c8d5d65ecaeca935e93794331bc4e2f213660b"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e58788004adda24c401d1751331618ed20c507ffc23bfd28d7c0661a1cf0ad16"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aefe0973cc4698e0907289dc0517ab0c7cdb13d588201932ff567d08a50b0e2e"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c50c861faad0a5c091bd763e0729f958c316e678dfa065d3984fbb9e4eacbcd"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-win32.whl", hash = "sha256:b1ce340da608530500ab4f963f12d6bfc8d8680900919a60dbdc9b78c02060a4"},
+    {file = "marisa_trie-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:ce37d8ca462bb64cc13f529b9ed92f7b21fe8d1f1679b62e29f9cb7d0e888b49"},
+    {file = "marisa_trie-1.2.1.tar.gz", hash = "sha256:3a27c408e2aefc03e0f1d25b2ff2afb85aac3568f6fa2ae2a53b57a2e87ce29d"},
 ]
 
 [package.dependencies]
@@ -2263,127 +2430,122 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
 
 [[package]]
 name = "markupsafe"
-version = "2.1.5"
+version = "3.0.2"
 description = "Safely add untrusted strings to HTML/XML markup."
 optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
-    {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
-    {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
-    {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
-    {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
-    {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
-    {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
-    {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
+python-versions = ">=3.9"
+files = [
+    {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"},
+    {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"},
+    {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"},
+    {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"},
+    {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"},
+    {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"},
+    {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
 ]
 
 [[package]]
 name = "matplotlib"
-version = "3.7.5"
+version = "3.9.4"
 description = "Python plotting package"
 optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "matplotlib-3.7.5-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:4a87b69cb1cb20943010f63feb0b2901c17a3b435f75349fd9865713bfa63925"},
-    {file = "matplotlib-3.7.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d3ce45010fefb028359accebb852ca0c21bd77ec0f281952831d235228f15810"},
-    {file = "matplotlib-3.7.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fbea1e762b28400393d71be1a02144aa16692a3c4c676ba0178ce83fc2928fdd"},
-    {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec0e1adc0ad70ba8227e957551e25a9d2995e319c29f94a97575bb90fa1d4469"},
-    {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6738c89a635ced486c8a20e20111d33f6398a9cbebce1ced59c211e12cd61455"},
-    {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1210b7919b4ed94b5573870f316bca26de3e3b07ffdb563e79327dc0e6bba515"},
-    {file = "matplotlib-3.7.5-cp310-cp310-win32.whl", hash = "sha256:068ebcc59c072781d9dcdb82f0d3f1458271c2de7ca9c78f5bd672141091e9e1"},
-    {file = "matplotlib-3.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:f098ffbaab9df1e3ef04e5a5586a1e6b1791380698e84938d8640961c79b1fc0"},
-    {file = "matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078"},
-    {file = "matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af"},
-    {file = "matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8"},
-    {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d"},
-    {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c"},
-    {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb"},
-    {file = "matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa"},
-    {file = "matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647"},
-    {file = "matplotlib-3.7.5-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:34bceb9d8ddb142055ff27cd7135f539f2f01be2ce0bafbace4117abe58f8fe4"},
-    {file = "matplotlib-3.7.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c5a2134162273eb8cdfd320ae907bf84d171de948e62180fa372a3ca7cf0f433"},
-    {file = "matplotlib-3.7.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:039ad54683a814002ff37bf7981aa1faa40b91f4ff84149beb53d1eb64617980"},
-    {file = "matplotlib-3.7.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d742ccd1b09e863b4ca58291728db645b51dab343eebb08d5d4b31b308296ce"},
-    {file = "matplotlib-3.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:743b1c488ca6a2bc7f56079d282e44d236bf375968bfd1b7ba701fd4d0fa32d6"},
-    {file = "matplotlib-3.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:fbf730fca3e1f23713bc1fae0a57db386e39dc81ea57dc305c67f628c1d7a342"},
-    {file = "matplotlib-3.7.5-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:cfff9b838531698ee40e40ea1a8a9dc2c01edb400b27d38de6ba44c1f9a8e3d2"},
-    {file = "matplotlib-3.7.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:1dbcca4508bca7847fe2d64a05b237a3dcaec1f959aedb756d5b1c67b770c5ee"},
-    {file = "matplotlib-3.7.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4cdf4ef46c2a1609a50411b66940b31778db1e4b73d4ecc2eaa40bd588979b13"},
-    {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:167200ccfefd1674b60e957186dfd9baf58b324562ad1a28e5d0a6b3bea77905"},
-    {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:53e64522934df6e1818b25fd48cf3b645b11740d78e6ef765fbb5fa5ce080d02"},
-    {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e3bc79b2d7d615067bd010caff9243ead1fc95cf735c16e4b2583173f717eb"},
-    {file = "matplotlib-3.7.5-cp38-cp38-win32.whl", hash = "sha256:6b641b48c6819726ed47c55835cdd330e53747d4efff574109fd79b2d8a13748"},
-    {file = "matplotlib-3.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:f0b60993ed3488b4532ec6b697059897891927cbfc2b8d458a891b60ec03d9d7"},
-    {file = "matplotlib-3.7.5-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:090964d0afaff9c90e4d8de7836757e72ecfb252fb02884016d809239f715651"},
-    {file = "matplotlib-3.7.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9fc6fcfbc55cd719bc0bfa60bde248eb68cf43876d4c22864603bdd23962ba25"},
-    {file = "matplotlib-3.7.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7cc3078b019bb863752b8b60e8b269423000f1603cb2299608231996bd9d54"},
-    {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e4e9a868e8163abaaa8259842d85f949a919e1ead17644fb77a60427c90473c"},
-    {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa7ebc995a7d747dacf0a717d0eb3aa0f0c6a0e9ea88b0194d3a3cd241a1500f"},
-    {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3785bfd83b05fc0e0c2ae4c4a90034fe693ef96c679634756c50fe6efcc09856"},
-    {file = "matplotlib-3.7.5-cp39-cp39-win32.whl", hash = "sha256:29b058738c104d0ca8806395f1c9089dfe4d4f0f78ea765c6c704469f3fffc81"},
-    {file = "matplotlib-3.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:fd4028d570fa4b31b7b165d4a685942ae9cdc669f33741e388c01857d9723eab"},
-    {file = "matplotlib-3.7.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2a9a3f4d6a7f88a62a6a18c7e6a84aedcaf4faf0708b4ca46d87b19f1b526f88"},
-    {file = "matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9b3fd853d4a7f008a938df909b96db0b454225f935d3917520305b90680579c"},
-    {file = "matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ad550da9f160737d7890217c5eeed4337d07e83ca1b2ca6535078f354e7675"},
-    {file = "matplotlib-3.7.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:20da7924a08306a861b3f2d1da0d1aa9a6678e480cf8eacffe18b565af2813e7"},
-    {file = "matplotlib-3.7.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b45c9798ea6bb920cb77eb7306409756a7fab9db9b463e462618e0559aecb30e"},
-    {file = "matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a99866267da1e561c7776fe12bf4442174b79aac1a47bd7e627c7e4d077ebd83"},
-    {file = "matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b6aa62adb6c268fc87d80f963aca39c64615c31830b02697743c95590ce3fbb"},
-    {file = "matplotlib-3.7.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e530ab6a0afd082d2e9c17eb1eb064a63c5b09bb607b2b74fa41adbe3e162286"},
-    {file = "matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a"},
+python-versions = ">=3.9"
+files = [
+    {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"},
+    {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"},
+    {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"},
+    {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"},
+    {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"},
+    {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"},
+    {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"},
+    {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"},
+    {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"},
+    {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"},
+    {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"},
+    {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"},
+    {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"},
+    {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"},
+    {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"},
+    {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"},
+    {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"},
+    {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"},
+    {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"},
+    {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"},
+    {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"},
+    {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"},
+    {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"},
+    {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"},
+    {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"},
+    {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"},
+    {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"},
+    {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"},
+    {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"},
+    {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"},
+    {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"},
+    {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"},
+    {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"},
+    {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"},
+    {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"},
+    {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"},
 ]
 
 [package.dependencies]
@@ -2391,13 +2553,16 @@ contourpy = ">=1.0.1"
 cycler = ">=0.10"
 fonttools = ">=4.22.0"
 importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""}
-kiwisolver = ">=1.0.1"
-numpy = ">=1.20,<2"
+kiwisolver = ">=1.3.1"
+numpy = ">=1.23"
 packaging = ">=20.0"
-pillow = ">=6.2.0"
+pillow = ">=8"
 pyparsing = ">=2.3.1"
 python-dateutil = ">=2.7"
 
+[package.extras]
+dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"]
+
 [[package]]
 name = "matplotlib-inline"
 version = "0.1.7"
@@ -2425,15 +2590,18 @@ files = [
 
 [[package]]
 name = "mistune"
-version = "3.0.2"
+version = "3.1.0"
 description = "A sane and fast Markdown parser with useful plugins and renderers"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"},
-    {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"},
+    {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"},
+    {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"},
 ]
 
+[package.dependencies]
+typing-extensions = {version = "*", markers = "python_version < \"3.11\""}
+
 [[package]]
 name = "mols2grid"
 version = "2.0.0"
@@ -2458,155 +2626,176 @@ docs = ["mistune (<3.0.0)"]
 tests = ["cairosvg (==2.5.2)", "flaky (==3.7.0)", "imagehash (>=4.3,<5.0)", "ipython (==7.12.0)", "pyautogecko (==0.1.3)", "pytest (==6.2.5)", "pytest-cov (==2.12.1)", "selenium (==4.10.0)"]
 
 [[package]]
-name = "monotonic"
-version = "1.6"
-description = "An implementation of time.monotonic() for Python 2 & < 3.3"
+name = "multidict"
+version = "6.1.0"
+description = "multidict implementation"
 optional = false
-python-versions = "*"
+python-versions = ">=3.8"
 files = [
-    {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"},
-    {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"},
+    {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"},
+    {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"},
+    {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"},
+    {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"},
+    {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"},
+    {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"},
+    {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"},
+    {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"},
+    {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"},
+    {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"},
+    {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"},
+    {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"},
+    {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"},
+    {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"},
+    {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"},
+    {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"},
+    {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"},
+    {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"},
+    {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"},
+    {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"},
+    {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"},
+    {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"},
+    {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"},
+    {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"},
+    {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"},
+    {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"},
+    {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"},
+    {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"},
+    {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"},
+    {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"},
+    {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"},
+    {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"},
+    {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"},
+    {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"},
+    {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"},
+    {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"},
+    {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"},
+    {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"},
+    {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"},
+    {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"},
+    {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"},
+    {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"},
+    {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"},
+    {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"},
+    {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"},
+    {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"},
+    {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"},
+    {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"},
+    {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"},
+    {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"},
+    {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"},
+    {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"},
+    {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"},
+    {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"},
+    {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"},
+    {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"},
+    {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"},
+    {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"},
+    {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"},
+    {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"},
+    {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"},
+    {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"},
+    {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"},
+    {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"},
+    {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"},
+    {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"},
+    {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"},
+    {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"},
+    {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"},
+    {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"},
+    {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"},
+    {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"},
+    {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"},
+    {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"},
+    {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"},
+    {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"},
+    {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"},
+    {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"},
+    {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"},
+    {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"},
+    {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"},
+    {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"},
+    {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"},
+    {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"},
+    {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"},
+    {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"},
+    {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"},
+    {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"},
+    {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"},
+    {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"},
+    {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"},
+    {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"},
 ]
 
+[package.dependencies]
+typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""}
+
 [[package]]
-name = "multidict"
-version = "6.0.5"
-description = "multidict implementation"
+name = "multiprocess"
+version = "0.70.16"
+description = "better multiprocessing and multithreading in Python"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"},
-    {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"},
-    {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"},
-    {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"},
-    {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"},
-    {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"},
-    {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"},
-    {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"},
-    {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"},
-    {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"},
-    {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"},
-    {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"},
-    {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"},
-    {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"},
-    {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"},
-    {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"},
-    {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"},
-    {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"},
+    {file = "multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee"},
+    {file = "multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec"},
+    {file = "multiprocess-0.70.16-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37b55f71c07e2d741374998c043b9520b626a8dddc8b3129222ca4f1a06ef67a"},
+    {file = "multiprocess-0.70.16-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba8c31889abf4511c7308a8c52bb4a30b9d590e7f58523302ba00237702ca054"},
+    {file = "multiprocess-0.70.16-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:0dfd078c306e08d46d7a8d06fb120313d87aa43af60d66da43ffff40b44d2f41"},
+    {file = "multiprocess-0.70.16-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e7b9d0f307cd9bd50851afaac0dba2cb6c44449efff697df7c7645f7d3f2be3a"},
+    {file = "multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02"},
+    {file = "multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a"},
+    {file = "multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e"},
+    {file = "multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435"},
+    {file = "multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3"},
+    {file = "multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1"},
 ]
 
+[package.dependencies]
+dill = ">=0.3.8"
+
 [[package]]
 name = "murmurhash"
-version = "1.0.10"
+version = "1.0.12"
 description = "Cython bindings for MurmurHash"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "murmurhash-1.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e90eef568adca5e17a91f96975e9a782ace3a617bbb3f8c8c2d917096e9bfeb"},
-    {file = "murmurhash-1.0.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8ecb00cc1ab57e4b065f9fb3ea923b55160c402d959c69a0b6dbbe8bc73efc3"},
-    {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3310101004d9e2e0530c2fed30174448d998ffd1b50dcbfb7677e95db101aa4b"},
-    {file = "murmurhash-1.0.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65401a6f1778676253cbf89c1f45a8a7feb7d73038e483925df7d5943c08ed9"},
-    {file = "murmurhash-1.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:f23f2dfc7174de2cdc5007c0771ab8376a2a3f48247f32cac4a5563e40c6adcc"},
-    {file = "murmurhash-1.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90ed37ee2cace9381b83d56068334f77e3e30bc521169a1f886a2a2800e965d6"},
-    {file = "murmurhash-1.0.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22e9926fdbec9d24ced9b0a42f0fee68c730438be3cfb00c2499fd495caec226"},
-    {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54bfbfd68baa99717239b8844600db627f336a08b1caf4df89762999f681cdd1"},
-    {file = "murmurhash-1.0.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b9d200a09d48ef67f6840b77c14f151f2b6c48fd69661eb75c7276ebdb146c"},
-    {file = "murmurhash-1.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:e5d7cfe392c0a28129226271008e61e77bf307afc24abf34f386771daa7b28b0"},
-    {file = "murmurhash-1.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:96f0a070344d4802ea76a160e0d4c88b7dc10454d2426f48814482ba60b38b9e"},
-    {file = "murmurhash-1.0.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9f61862060d677c84556610ac0300a0776cb13cb3155f5075ed97e80f86e55d9"},
-    {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3b6d2d877d8881a08be66d906856d05944be0faf22b9a0390338bcf45299989"},
-    {file = "murmurhash-1.0.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f54b0031d8696fed17ed6e9628f339cdea0ba2367ca051e18ff59193f52687"},
-    {file = "murmurhash-1.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:97e09d675de2359e586f09de1d0de1ab39f9911edffc65c9255fb5e04f7c1f85"},
-    {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b64e5332932993fef598e78d633b1ba664789ab73032ed511f3dc615a631a1a"},
-    {file = "murmurhash-1.0.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2a38437a8497e082408aa015c6d90554b9e00c2c221fdfa79728a2d99a739e"},
-    {file = "murmurhash-1.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:55f4e4f9291a53c36070330950b472d72ba7d331e4ce3ce1ab349a4f458f7bc4"},
-    {file = "murmurhash-1.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:16ef9f0855952493fe08929d23865425906a8c0c40607ac8a949a378652ba6a9"},
-    {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cc3351ae92b89c2fcdc6e41ac6f17176dbd9b3554c96109fd0713695d8663e7"},
-    {file = "murmurhash-1.0.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6559fef7c2e7349a42a63549067709b656d6d1580752bd76be1541d8b2d65718"},
-    {file = "murmurhash-1.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:8bf49e3bb33febb7057ae3a5d284ef81243a1e55eaa62bdcd79007cddbdc0461"},
-    {file = "murmurhash-1.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1605fde07030516eb63d77a598dd164fb9bf217fd937dbac588fe7e47a28c40"},
-    {file = "murmurhash-1.0.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4904f7e68674a64eb2b08823c72015a5e14653e0b4b109ea00c652a005a59bad"},
-    {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0438f0cb44cf1cd26251f72c1428213c4197d40a4e3f48b1efc3aea12ce18517"},
-    {file = "murmurhash-1.0.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db1171a3f9a10571931764cdbfaa5371f4cf5c23c680639762125cb075b833a5"},
-    {file = "murmurhash-1.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:1c9fbcd7646ad8ba67b895f71d361d232c6765754370ecea473dd97d77afe99f"},
-    {file = "murmurhash-1.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7024ab3498434f22f8e642ae31448322ad8228c65c8d9e5dc2d563d57c14c9b8"},
-    {file = "murmurhash-1.0.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a99dedfb7f0cc5a4cd76eb409ee98d3d50eba024f934e705914f6f4d765aef2c"},
-    {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b580b8503647de5dd7972746b7613ea586270f17ac92a44872a9b1b52c36d68"},
-    {file = "murmurhash-1.0.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75840212bf75eb1352c946c3cf1622dacddd6d6bdda34368237d1eb3568f23a"},
-    {file = "murmurhash-1.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:a4209962b9f85de397c3203ea4b3a554da01ae9fd220fdab38757d4e9eba8d1a"},
-    {file = "murmurhash-1.0.10.tar.gz", hash = "sha256:5282aab1317804c6ebd6dd7f69f15ba9075aee671c44a34be2bde0f1b11ef88a"},
+    {file = "murmurhash-1.0.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3f492bbf6f879b6eaf9da4be7471f4b68a3e3ae525aac0f35c2ae27ec91265c"},
+    {file = "murmurhash-1.0.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3493e0c10a64fa72026af2ea2271d8b3511a438de3c6a771b7a57771611b9c08"},
+    {file = "murmurhash-1.0.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95989ddbb187b9934e5b0e7f450793a445814b6c293a7bf92df56913c3a87c1e"},
+    {file = "murmurhash-1.0.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efef9f9aad98ec915a830f0c53d14ce6807ccc6e14fd2966565ef0b71cfa086"},
+    {file = "murmurhash-1.0.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b3147d171a5e5d2953b5eead21d15ea59b424844b4504a692c4b9629191148ed"},
+    {file = "murmurhash-1.0.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:736c869bef5023540dde52a9338085ac823eda3f09591ba1b4ed2c09c8b378db"},
+    {file = "murmurhash-1.0.12-cp310-cp310-win_amd64.whl", hash = "sha256:b81feb5bfd13bce638ccf910c685b04ad0537635918d04c83b291ce0441776da"},
+    {file = "murmurhash-1.0.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b236b76a256690e745b63b679892878ec4f01deeeda8d311482a9b183d2d452"},
+    {file = "murmurhash-1.0.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8bc3756dd657ed90c1354705e66513c11516929fe726e7bc91c79734d190f394"},
+    {file = "murmurhash-1.0.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd41e4c3d7936b69010d76e5edff363bf40fd918d86287a14e924363d7828522"},
+    {file = "murmurhash-1.0.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36be2831df750163495e471d24aeef6aca1b2a3c4dfb05f40114859db47ff3f2"},
+    {file = "murmurhash-1.0.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b078c10f9c82cbd144b1200061fbfa7f99af9d5d8d7f7d8a324370169e3da7c2"},
+    {file = "murmurhash-1.0.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:307ca8da5f038635ded9de722fe11f07f06a2b76442ae272dcccbff6086de487"},
+    {file = "murmurhash-1.0.12-cp311-cp311-win_amd64.whl", hash = "sha256:1b4ab5ba5ba909959659989f3bf57903f31f49906fe40f00aec81e32eea69a88"},
+    {file = "murmurhash-1.0.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1a4c97c8ffbedb62b760c3c2f77b5b8cb0e0ac0ec83a74d2f289e113e3e92ed5"},
+    {file = "murmurhash-1.0.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9574f0b634f059158bb89734a811e435ac9ad2335c02a7abb59f1875dcce244c"},
+    {file = "murmurhash-1.0.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:701cc0ce91809b4d7c2e0518be759635205e1e181325792044f5a8118019f716"},
+    {file = "murmurhash-1.0.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1c9de2167a9d408d121ebc918bcb20b2718ec956f3aae0ded53d9bb224bb8e"},
+    {file = "murmurhash-1.0.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94a52972835bdae8af18147c67c398ff3ea1d875f5b8dca1e1aa0fadb892f546"},
+    {file = "murmurhash-1.0.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cc88004c8615dcabe31d21142689f719fdf549ba782850bef389cf227a1df575"},
+    {file = "murmurhash-1.0.12-cp312-cp312-win_amd64.whl", hash = "sha256:8c5b8804c07a76f779e67f83aad37bc2189a0e65ebdd3f2b305242d489d31e03"},
+    {file = "murmurhash-1.0.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:63f10c6d6ef9ee85073dd896d2c4e0ab161bc6b8e7e9201c69f8061f9f1b6468"},
+    {file = "murmurhash-1.0.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:66356f6308fd2a44a8ab056f020acd5bc22302f23ef5cce3705f2493e0fe9c3c"},
+    {file = "murmurhash-1.0.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdb2104aa3471324724abf5a3a76fc94bcbeaf023bb6a6dd94da567b8633d8a6"},
+    {file = "murmurhash-1.0.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a7ef5fb37e72536458ac4a6f486fb374c60ac4c4862d9195d3d4b58239a91de"},
+    {file = "murmurhash-1.0.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bd5524de195991ce3551b14286ec0b730cc9dd2e10565dad2ae470eec082028"},
+    {file = "murmurhash-1.0.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:19de30edaaa2217cd0c41b6cf6bbfa418be5d7fdf267ca92e5e3710d4daac593"},
+    {file = "murmurhash-1.0.12-cp313-cp313-win_amd64.whl", hash = "sha256:7dc4ebdfed7ef8ed70519962ac9b704e91978ee14e049f1ff37bca2f579ce84d"},
+    {file = "murmurhash-1.0.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c9bb5652a3444d5a5bf5d164e6b5e6c8f5715d031627ff79d58caac0e510e8d8"},
+    {file = "murmurhash-1.0.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef56fdee81e2b4191c5b7416b5428cb920260a91f028a82a1680b14137eaf32c"},
+    {file = "murmurhash-1.0.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91042b85d3214ebaba505d7349f0bcd745b07e7163459909d622ea10a04c2dea"},
+    {file = "murmurhash-1.0.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de1552326f4f8c0b63d26f823fa66a4dcf9c01164e252374d84bcf86a6af2fe"},
+    {file = "murmurhash-1.0.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16de7dee9e082159b7ad4cffd62b0c03bbc385b84dcff448ce27bb14c505d12d"},
+    {file = "murmurhash-1.0.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8b5de26a7235d8794403353423cd65720d8496363ab75248120107559b12a8c6"},
+    {file = "murmurhash-1.0.12-cp39-cp39-win_amd64.whl", hash = "sha256:d1ad46f78de3ce3f3a8e8c2f87af32bcede893f047c87389c7325bb1f3f46b47"},
+    {file = "murmurhash-1.0.12.tar.gz", hash = "sha256:467b7ee31c1f79f46d00436a1957fc52a0e5801369dd2f30eb7655f380735b5f"},
 ]
 
 [[package]]
@@ -2644,18 +2833,18 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=
 
 [[package]]
 name = "nbconvert"
-version = "7.16.4"
+version = "7.16.5"
 description = "Converting Jupyter Notebooks (.ipynb files) to other formats.  Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.  nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"},
-    {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"},
+    {file = "nbconvert-7.16.5-py3-none-any.whl", hash = "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547"},
+    {file = "nbconvert-7.16.5.tar.gz", hash = "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344"},
 ]
 
 [package.dependencies]
 beautifulsoup4 = "*"
-bleach = "!=5.0.0"
+bleach = {version = "!=5.0.0", extras = ["css"]}
 defusedxml = "*"
 importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""}
 jinja2 = ">=3.0"
@@ -2668,7 +2857,6 @@ nbformat = ">=5.7"
 packaging = "*"
 pandocfilters = ">=1.4.1"
 pygments = ">=2.4.1"
-tinycss2 = "*"
 traitlets = ">=5.1"
 
 [package.extras]
@@ -2714,21 +2902,21 @@ files = [
 
 [[package]]
 name = "networkx"
-version = "3.1"
+version = "3.2.1"
 description = "Python package for creating and manipulating graphs and networks"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"},
-    {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"},
+    {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"},
+    {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"},
 ]
 
 [package.extras]
-default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"]
-developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"]
-doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"]
-extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"]
-test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"]
+default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"]
+developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"]
+doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"]
+extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"]
+test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
 
 [[package]]
 name = "netwulf"
@@ -2748,32 +2936,29 @@ simplejson = ">=3.0"
 
 [[package]]
 name = "nodeenv"
-version = "1.8.0"
+version = "1.9.1"
 description = "Node.js virtual environment builder"
 optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
-    {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
-    {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
+    {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"},
+    {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
 ]
 
-[package.dependencies]
-setuptools = "*"
-
 [[package]]
 name = "notebook"
-version = "7.2.0"
+version = "7.3.2"
 description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "notebook-7.2.0-py3-none-any.whl", hash = "sha256:b4752d7407d6c8872fc505df0f00d3cae46e8efb033b822adacbaa3f1f3ce8f5"},
-    {file = "notebook-7.2.0.tar.gz", hash = "sha256:34a2ba4b08ad5d19ec930db7484fb79746a1784be9e1a5f8218f9af8656a141f"},
+    {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"},
+    {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"},
 ]
 
 [package.dependencies]
 jupyter-server = ">=2.4.0,<3"
-jupyterlab = ">=4.2.0,<4.3"
+jupyterlab = ">=4.3.4,<4.4"
 jupyterlab-server = ">=2.27.1,<3"
 notebook-shim = ">=0.2,<0.3"
 tornado = ">=6.2.0"
@@ -2812,39 +2997,47 @@ files = [
 
 [[package]]
 name = "numpy"
-version = "1.23.5"
-description = "NumPy is the fundamental package for array computing with Python."
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"},
-    {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"},
-    {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"},
-    {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"},
-    {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"},
-    {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"},
-    {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"},
-    {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"},
-    {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"},
-    {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"},
-    {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"},
-    {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"},
-    {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"},
-    {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"},
-    {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"},
-    {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"},
-    {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"},
-    {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"},
-    {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"},
-    {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"},
-    {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"},
-    {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"},
-    {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"},
-    {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"},
-    {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"},
-    {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"},
-    {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"},
-    {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"},
+version = "1.26.4"
+description = "Fundamental package for array computing in Python"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"},
+    {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"},
+    {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"},
+    {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"},
+    {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"},
+    {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"},
+    {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"},
+    {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"},
+    {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"},
+    {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"},
+    {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"},
+    {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"},
+    {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"},
+    {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"},
+    {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"},
+    {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"},
+    {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"},
+    {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"},
+    {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"},
+    {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"},
+    {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"},
+    {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"},
+    {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"},
+    {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"},
+    {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"},
+    {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"},
+    {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"},
+    {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"},
+    {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"},
+    {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"},
+    {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"},
+    {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"},
+    {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"},
+    {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"},
+    {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"},
+    {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"},
 ]
 
 [[package]]
@@ -2910,13 +3103,13 @@ wheel = "*"
 
 [[package]]
 name = "openpyxl"
-version = "3.1.2"
+version = "3.1.5"
 description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"},
-    {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"},
+    {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"},
+    {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"},
 ]
 
 [package.dependencies]
@@ -2935,61 +3128,96 @@ files = [
 
 [[package]]
 name = "packaging"
-version = "24.0"
+version = "24.2"
 description = "Core utilities for Python packages"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
-    {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
+    {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
+    {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
 ]
 
 [[package]]
 name = "pandas"
-version = "1.5.3"
+version = "2.2.3"
 description = "Powerful data structures for data analysis, time series, and statistics"
 optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"},
-    {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"},
-    {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"},
-    {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"},
-    {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"},
-    {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"},
-    {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"},
-    {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"},
-    {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"},
-    {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"},
-    {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"},
-    {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"},
-    {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"},
-    {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"},
-    {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"},
-    {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"},
-    {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"},
-    {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"},
-    {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"},
-    {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"},
-    {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"},
-    {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"},
-    {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"},
-    {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"},
-    {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"},
-    {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"},
-    {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"},
+python-versions = ">=3.9"
+files = [
+    {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"},
+    {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"},
+    {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"},
+    {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"},
+    {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"},
+    {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"},
+    {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"},
+    {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"},
+    {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"},
+    {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"},
+    {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"},
+    {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"},
+    {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"},
+    {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"},
+    {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"},
+    {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"},
+    {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"},
+    {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"},
+    {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"},
+    {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"},
+    {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"},
+    {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"},
+    {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"},
+    {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"},
+    {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"},
+    {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"},
+    {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"},
+    {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"},
+    {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"},
+    {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"},
+    {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"},
+    {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"},
+    {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"},
+    {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"},
+    {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"},
+    {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"},
+    {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"},
+    {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"},
+    {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"},
+    {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"},
+    {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"},
+    {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"},
 ]
 
 [package.dependencies]
-numpy = [
-    {version = ">=1.20.3", markers = "python_version < \"3.10\""},
-    {version = ">=1.21.0", markers = "python_version >= \"3.10\""},
-]
-python-dateutil = ">=2.8.1"
+numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""}
+python-dateutil = ">=2.8.2"
 pytz = ">=2020.1"
+tzdata = ">=2022.7"
 
 [package.extras]
-test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
+all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"]
+aws = ["s3fs (>=2022.11.0)"]
+clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"]
+compression = ["zstandard (>=0.19.0)"]
+computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"]
+consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
+excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"]
+feather = ["pyarrow (>=10.0.1)"]
+fss = ["fsspec (>=2022.11.0)"]
+gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"]
+hdf5 = ["tables (>=3.8.0)"]
+html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"]
+mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"]
+output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"]
+parquet = ["pyarrow (>=10.0.1)"]
+performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"]
+plot = ["matplotlib (>=3.6.3)"]
+postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"]
+pyarrow = ["pyarrow (>=10.0.1)"]
+spss = ["pyreadstat (>=1.2.0)"]
+sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"]
+test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
+xml = ["lxml (>=4.9.2)"]
 
 [[package]]
 name = "pandocfilters"
@@ -3042,128 +3270,118 @@ files = [
 [package.dependencies]
 ptyprocess = ">=0.5"
 
-[[package]]
-name = "pickleshare"
-version = "0.7.5"
-description = "Tiny 'shelve'-like database with concurrency support"
-optional = false
-python-versions = "*"
-files = [
-    {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
-    {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
-]
-
 [[package]]
 name = "pillow"
-version = "10.3.0"
+version = "10.4.0"
 description = "Python Imaging Library (Fork)"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"},
-    {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"},
-    {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"},
-    {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"},
-    {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"},
-    {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"},
-    {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"},
-    {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"},
-    {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"},
-    {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"},
-    {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"},
-    {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"},
-    {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"},
-    {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"},
-    {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"},
-    {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"},
-    {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"},
-    {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"},
-    {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"},
-    {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"},
-    {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"},
-    {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"},
-    {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"},
-    {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"},
-    {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"},
-    {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"},
-    {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"},
-    {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"},
-    {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"},
-    {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"},
-    {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"},
-    {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"},
-    {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"},
-    {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"},
-    {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"},
-    {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"},
-    {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"},
-    {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"},
-    {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"},
-    {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"},
-    {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"},
-    {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"},
-    {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"},
-    {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"},
-    {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"},
-    {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"},
-    {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"},
-    {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"},
-    {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"},
-    {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"},
-    {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"},
-    {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"},
-    {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"},
-    {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"},
-    {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"},
-    {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"},
-    {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"},
+    {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"},
+    {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"},
+    {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"},
+    {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"},
+    {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"},
+    {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"},
+    {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"},
+    {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"},
+    {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"},
+    {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"},
+    {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"},
+    {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"},
+    {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"},
+    {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"},
+    {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"},
+    {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"},
+    {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"},
+    {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"},
+    {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"},
+    {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"},
+    {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"},
+    {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"},
+    {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"},
+    {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"},
+    {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"},
+    {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"},
+    {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"},
+    {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"},
+    {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"},
+    {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"},
+    {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"},
+    {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"},
+    {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"},
+    {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"},
+    {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"},
+    {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"},
+    {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"},
+    {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"},
+    {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"},
+    {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"},
+    {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"},
+    {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"},
+    {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"},
+    {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"},
+    {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"},
+    {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"},
+    {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"},
+    {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"},
+    {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"},
+    {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"},
+    {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"},
+    {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"},
+    {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"},
+    {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"},
+    {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"},
+    {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"},
+    {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"},
+    {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"},
+    {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"},
+    {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"},
+    {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"},
+    {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"},
+    {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"},
+    {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"},
+    {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"},
+    {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"},
+    {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"},
+    {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"},
 ]
 
 [package.extras]
-docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
+docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
 fpx = ["olefile"]
 mic = ["olefile"]
 tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
 typing = ["typing-extensions"]
 xmp = ["defusedxml"]
 
-[[package]]
-name = "pkgutil-resolve-name"
-version = "1.3.10"
-description = "Resolve a name to an object."
-optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"},
-    {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"},
-]
-
 [[package]]
 name = "platformdirs"
-version = "3.11.0"
-description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+version = "4.3.6"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"},
-    {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"},
+    {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
+    {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
 ]
 
 [package.extras]
-docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
+docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
+type = ["mypy (>=1.11.2)"]
 
 [[package]]
 name = "pluggy"
@@ -3246,13 +3464,13 @@ murmurhash = ">=0.28.0,<1.1.0"
 
 [[package]]
 name = "prometheus-client"
-version = "0.20.0"
+version = "0.21.1"
 description = "Python client for the Prometheus monitoring system."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"},
-    {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"},
+    {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"},
+    {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"},
 ]
 
 [package.extras]
@@ -3260,45 +3478,138 @@ twisted = ["twisted"]
 
 [[package]]
 name = "prompt-toolkit"
-version = "3.0.43"
+version = "3.0.48"
 description = "Library for building powerful interactive command lines in Python"
 optional = false
 python-versions = ">=3.7.0"
 files = [
-    {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"},
-    {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"},
+    {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"},
+    {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"},
 ]
 
 [package.dependencies]
 wcwidth = "*"
 
+[[package]]
+name = "propcache"
+version = "0.2.1"
+description = "Accelerated property cache"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"},
+    {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"},
+    {file = "propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea"},
+    {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"},
+    {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3"},
+    {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d"},
+    {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634"},
+    {file = "propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034"},
+    {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b"},
+    {file = "propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4"},
+    {file = "propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba"},
+    {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16"},
+    {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717"},
+    {file = "propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3"},
+    {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9"},
+    {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787"},
+    {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465"},
+    {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af"},
+    {file = "propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca"},
+    {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e"},
+    {file = "propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034"},
+    {file = "propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3"},
+    {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a"},
+    {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0"},
+    {file = "propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d"},
+    {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4"},
+    {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d"},
+    {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5"},
+    {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24"},
+    {file = "propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6"},
+    {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518"},
+    {file = "propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246"},
+    {file = "propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1"},
+    {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc"},
+    {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9"},
+    {file = "propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439"},
+    {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536"},
+    {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629"},
+    {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b"},
+    {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052"},
+    {file = "propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f"},
+    {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30"},
+    {file = "propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6"},
+    {file = "propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1"},
+    {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541"},
+    {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e"},
+    {file = "propcache-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4"},
+    {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097"},
+    {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd"},
+    {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681"},
+    {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16"},
+    {file = "propcache-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04"},
+    {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587"},
+    {file = "propcache-0.2.1-cp39-cp39-win32.whl", hash = "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb"},
+    {file = "propcache-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1"},
+    {file = "propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54"},
+    {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"},
+]
+
 [[package]]
 name = "psutil"
-version = "5.9.8"
+version = "6.1.1"
 description = "Cross-platform lib for process and system monitoring in Python."
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
-files = [
-    {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"},
-    {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"},
-    {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"},
-    {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"},
-    {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"},
-    {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"},
-    {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"},
-    {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"},
-    {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"},
-    {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"},
-    {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"},
-    {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"},
-    {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"},
-    {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"},
-    {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"},
-    {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"},
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
+files = [
+    {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"},
+    {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"},
+    {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"},
+    {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"},
+    {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"},
+    {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"},
+    {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"},
+    {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"},
+    {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"},
+    {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"},
+    {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"},
+    {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"},
+    {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"},
+    {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"},
+    {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"},
+    {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"},
+    {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"},
 ]
 
 [package.extras]
-test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
+dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"]
+test = ["pytest", "pytest-xdist", "setuptools"]
 
 [[package]]
 name = "ptyprocess"
@@ -3313,31 +3624,85 @@ files = [
 
 [[package]]
 name = "pure-eval"
-version = "0.2.2"
+version = "0.2.3"
 description = "Safely evaluate AST nodes without side effects"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
-    {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
+    {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"},
+    {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"},
 ]
 
 [package.extras]
 tests = ["pytest"]
 
+[[package]]
+name = "pyarrow"
+version = "19.0.0"
+description = "Python library for Apache Arrow"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"},
+    {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"},
+    {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503"},
+    {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17"},
+    {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34"},
+    {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44"},
+    {file = "pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c"},
+    {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a"},
+    {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735"},
+    {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4"},
+    {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1"},
+    {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042"},
+    {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263"},
+    {file = "pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2"},
+    {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68"},
+    {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351"},
+    {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b"},
+    {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c"},
+    {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451"},
+    {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1"},
+    {file = "pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136"},
+    {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463"},
+    {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352"},
+    {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d"},
+    {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae"},
+    {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098"},
+    {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04"},
+    {file = "pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73"},
+    {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89"},
+    {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a"},
+    {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7"},
+    {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8"},
+    {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d"},
+    {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1"},
+    {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d"},
+    {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"},
+    {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"},
+]
+
+[package.extras]
+test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"]
+
 [[package]]
 name = "pybind11"
-version = "2.12.0"
+version = "2.13.6"
 description = "Seamless operability between C++11 and Python"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "pybind11-2.12.0-py3-none-any.whl", hash = "sha256:df8d60b94f9e714d81013db233393d430ebf9f3551642b82291cf1b14d1afdbd"},
-    {file = "pybind11-2.12.0.tar.gz", hash = "sha256:5e3c557a84b06b969247630407fc4d985bed157b4253b13153b8e8e165e0c3dc"},
+    {file = "pybind11-2.13.6-py3-none-any.whl", hash = "sha256:237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5"},
+    {file = "pybind11-2.13.6.tar.gz", hash = "sha256:ba6af10348c12b24e92fa086b39cfba0eff619b61ac77c406167d813b096d39a"},
 ]
 
 [package.extras]
-global = ["pybind11-global (==2.12.0)"]
+global = ["pybind11-global (==2.13.6)"]
 
 [[package]]
 name = "pycparser"
@@ -3352,123 +3717,165 @@ files = [
 
 [[package]]
 name = "pydantic"
-version = "2.7.1"
+version = "2.10.5"
 description = "Data validation using Python type hints"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"},
-    {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"},
+    {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"},
+    {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"},
 ]
 
 [package.dependencies]
-annotated-types = ">=0.4.0"
-pydantic-core = "2.18.2"
-typing-extensions = ">=4.6.1"
+annotated-types = ">=0.6.0"
+pydantic-core = "2.27.2"
+typing-extensions = ">=4.12.2"
 
 [package.extras]
 email = ["email-validator (>=2.0.0)"]
+timezone = ["tzdata"]
 
 [[package]]
 name = "pydantic-core"
-version = "2.18.2"
+version = "2.27.2"
 description = "Core functionality for Pydantic validation and serialization"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"},
-    {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"},
-    {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"},
-    {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"},
-    {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"},
-    {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"},
-    {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"},
-    {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"},
-    {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"},
-    {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"},
-    {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"},
-    {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"},
-    {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"},
-    {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"},
-    {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"},
-    {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"},
-    {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"},
-    {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"},
-    {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"},
-    {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"},
-    {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"},
+    {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"},
+    {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"},
+    {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"},
+    {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"},
+    {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"},
+    {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"},
+    {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"},
+    {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"},
+    {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"},
 ]
 
 [package.dependencies]
 typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
 
+[[package]]
+name = "pydantic-settings"
+version = "2.7.1"
+description = "Settings management using Pydantic"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "pydantic_settings-2.7.1-py3-none-any.whl", hash = "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd"},
+    {file = "pydantic_settings-2.7.1.tar.gz", hash = "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93"},
+]
+
+[package.dependencies]
+pydantic = ">=2.7.0"
+python-dotenv = ">=0.21.0"
+
+[package.extras]
+azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"]
+toml = ["tomli (>=2.0.1)"]
+yaml = ["pyyaml (>=6.0.1)"]
+
 [[package]]
 name = "pygments"
-version = "2.18.0"
+version = "2.19.1"
 description = "Pygments is a syntax highlighting package written in Python."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
-    {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
+    {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
+    {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
 ]
 
 [package.extras]
@@ -3476,13 +3883,13 @@ windows-terminal = ["colorama (>=0.4.6)"]
 
 [[package]]
 name = "pyparsing"
-version = "3.1.2"
+version = "3.2.1"
 description = "pyparsing module - Classes and methods to define and execute parsing grammars"
 optional = false
-python-versions = ">=3.6.8"
+python-versions = ">=3.9"
 files = [
-    {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"},
-    {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"},
+    {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"},
+    {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"},
 ]
 
 [package.extras]
@@ -3518,15 +3925,21 @@ cli = ["click (>=5.0)"]
 
 [[package]]
 name = "python-json-logger"
-version = "2.0.7"
-description = "A python library adding a json log formatter"
+version = "3.2.1"
+description = "JSON Log Formatter for the Python Logging Package"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"},
-    {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"},
+    {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"},
+    {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"},
 ]
 
+[package.dependencies]
+typing_extensions = {version = "*", markers = "python_version < \"3.10\""}
+
+[package.extras]
+dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"]
+
 [[package]]
 name = "python-slugify"
 version = "8.0.4"
@@ -3546,254 +3959,240 @@ unidecode = ["Unidecode (>=1.1.1)"]
 
 [[package]]
 name = "pytz"
-version = "2024.1"
+version = "2024.2"
 description = "World timezone definitions, modern and historical"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"},
-    {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"},
+    {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"},
+    {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"},
 ]
 
 [[package]]
 name = "pywin32"
-version = "306"
+version = "308"
 description = "Python for Window Extensions"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"},
-    {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"},
-    {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"},
-    {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"},
-    {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"},
-    {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"},
-    {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"},
-    {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"},
-    {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"},
-    {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"},
-    {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"},
-    {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"},
-    {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"},
-    {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"},
+    {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"},
+    {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"},
+    {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"},
+    {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"},
+    {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"},
+    {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"},
+    {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"},
+    {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"},
+    {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"},
+    {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"},
+    {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"},
+    {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"},
+    {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"},
+    {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"},
+    {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"},
+    {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"},
+    {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"},
+    {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"},
 ]
 
 [[package]]
 name = "pywinpty"
-version = "2.0.13"
+version = "2.0.14"
 description = "Pseudo terminal support for Windows from Python."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"},
-    {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"},
-    {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"},
-    {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"},
-    {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"},
-    {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"},
+    {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"},
+    {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"},
+    {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"},
+    {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"},
+    {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"},
+    {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"},
 ]
 
 [[package]]
 name = "pyyaml"
-version = "6.0.1"
+version = "6.0.2"
 description = "YAML parser and emitter for Python"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
-    {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
-    {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
-    {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
-    {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
-    {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
-    {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
-    {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
-    {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
-    {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
-    {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
-    {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
-    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
-    {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
-    {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
-    {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
-    {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
-    {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
-    {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
-    {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
-    {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
-    {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
-    {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
-    {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
-    {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
-    {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+    {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
+    {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
+    {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
+    {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
+    {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
+    {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
+    {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
+    {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
+    {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
+    {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
+    {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
+    {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
+    {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
+    {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
+    {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
+    {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
+    {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
+    {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
+    {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
+    {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
+    {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
+    {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
+    {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
+    {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
+    {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
+    {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
+    {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
+    {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
+    {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
+    {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
+    {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
+    {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
+    {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
+    {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
+    {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
 ]
 
 [[package]]
 name = "pyzmq"
-version = "26.0.3"
+version = "26.2.0"
 description = "Python bindings for 0MQ"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"},
-    {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"},
-    {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"},
-    {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"},
-    {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"},
-    {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"},
-    {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"},
-    {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"},
-    {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"},
-    {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"},
-    {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"},
-    {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"},
-    {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"},
-    {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"},
-    {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"},
-    {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"},
-    {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"},
-    {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"},
-    {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"},
-    {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"},
-    {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"},
-    {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"},
-    {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"},
-    {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"},
-    {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"},
-    {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"},
-    {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"},
-    {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"},
-    {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"},
-    {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"},
-    {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"},
-    {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"},
-    {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"},
-    {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"},
-    {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"},
-    {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"},
-    {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"},
-    {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"},
-    {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"},
-    {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"},
-    {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"},
-    {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"},
-    {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"},
-    {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"},
-    {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"},
-    {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"},
-    {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"},
-    {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"},
-    {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"},
-    {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"},
-    {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"},
-    {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"},
-    {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"},
-    {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"},
-    {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"},
-    {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"},
-    {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"},
-    {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"},
-    {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"},
-    {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"},
-    {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"},
-    {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"},
-    {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"},
-    {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"},
-    {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"},
-    {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"},
-    {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"},
-    {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"},
-    {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"},
-    {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"},
-    {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"},
-    {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"},
-    {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"},
-    {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"},
-    {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"},
+    {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"},
+    {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"},
+    {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"},
+    {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"},
+    {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"},
+    {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"},
+    {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"},
+    {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"},
+    {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"},
+    {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"},
+    {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"},
+    {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"},
+    {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"},
+    {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"},
+    {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"},
+    {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"},
+    {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"},
+    {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"},
+    {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"},
+    {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"},
+    {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"},
+    {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"},
+    {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"},
+    {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"},
+    {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"},
+    {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"},
+    {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"},
+    {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"},
+    {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"},
+    {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"},
+    {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"},
+    {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"},
+    {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"},
+    {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"},
+    {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"},
+    {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"},
+    {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"},
+    {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"},
+    {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"},
+    {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"},
+    {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"},
+    {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"},
+    {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"},
+    {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"},
+    {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"},
+    {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"},
+    {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"},
+    {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"},
+    {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"},
+    {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"},
+    {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"},
+    {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"},
+    {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"},
+    {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"},
+    {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"},
+    {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"},
+    {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"},
+    {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"},
+    {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"},
+    {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"},
+    {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"},
+    {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"},
+    {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"},
+    {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"},
+    {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"},
+    {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"},
+    {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"},
+    {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"},
+    {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"},
+    {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"},
+    {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"},
+    {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"},
+    {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"},
+    {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"},
+    {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"},
+    {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"},
+    {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"},
+    {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"},
+    {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"},
+    {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"},
+    {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"},
+    {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"},
+    {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"},
+    {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"},
+    {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"},
+    {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"},
+    {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"},
+    {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"},
 ]
 
 [package.dependencies]
 cffi = {version = "*", markers = "implementation_name == \"pypy\""}
 
-[[package]]
-name = "qtconsole"
-version = "5.5.2"
-description = "Jupyter Qt console"
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "qtconsole-5.5.2-py3-none-any.whl", hash = "sha256:42d745f3d05d36240244a04e1e1ec2a86d5d9b6edb16dbdef582ccb629e87e0b"},
-    {file = "qtconsole-5.5.2.tar.gz", hash = "sha256:6b5fb11274b297463706af84dcbbd5c92273b1f619e6d25d08874b0a88516989"},
-]
-
-[package.dependencies]
-ipykernel = ">=4.1"
-jupyter-client = ">=4.1"
-jupyter-core = "*"
-packaging = "*"
-pygments = "*"
-pyzmq = ">=17.1"
-qtpy = ">=2.4.0"
-traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2"
-
-[package.extras]
-doc = ["Sphinx (>=1.3)"]
-test = ["flaky", "pytest", "pytest-qt"]
-
-[[package]]
-name = "qtpy"
-version = "2.4.1"
-description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)."
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"},
-    {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"},
-]
-
-[package.dependencies]
-packaging = "*"
-
-[package.extras]
-test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"]
-
 [[package]]
 name = "rdkit-pypi"
 version = "2022.9.5"
@@ -3833,28 +4232,29 @@ Pillow = "*"
 
 [[package]]
 name = "referencing"
-version = "0.35.1"
+version = "0.36.1"
 description = "JSON Referencing + Python"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
-    {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
+    {file = "referencing-0.36.1-py3-none-any.whl", hash = "sha256:363d9c65f080d0d70bc41c721dce3c7f3e77fc09f269cd5c8813da18069a6794"},
+    {file = "referencing-0.36.1.tar.gz", hash = "sha256:ca2e6492769e3602957e9b831b94211599d2aade9477f5d44110d2530cf9aade"},
 ]
 
 [package.dependencies]
 attrs = ">=22.2.0"
 rpds-py = ">=0.7.0"
+typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""}
 
 [[package]]
 name = "requests"
-version = "2.32.2"
+version = "2.32.3"
 description = "Python HTTP for Humans."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"},
-    {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"},
+    {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
+    {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
 ]
 
 [package.dependencies]
@@ -3894,216 +4294,135 @@ files = [
 
 [[package]]
 name = "rich"
-version = "13.7.1"
+version = "13.9.4"
 description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
 optional = false
-python-versions = ">=3.7.0"
+python-versions = ">=3.8.0"
 files = [
-    {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"},
-    {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"},
+    {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"},
+    {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"},
 ]
 
 [package.dependencies]
 markdown-it-py = ">=2.2.0"
 pygments = ">=2.13.0,<3.0.0"
-typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""}
+typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""}
 
 [package.extras]
 jupyter = ["ipywidgets (>=7.5.1,<9)"]
 
 [[package]]
 name = "rpds-py"
-version = "0.18.1"
+version = "0.22.3"
 description = "Python bindings to Rust's persistent data structures (rpds)"
 optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"},
-    {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"},
-    {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"},
-    {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"},
-    {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"},
-    {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"},
-    {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"},
-    {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"},
-    {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"},
-    {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"},
-    {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"},
-    {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"},
-    {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"},
-    {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"},
-    {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"},
-    {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"},
-    {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"},
-    {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"},
-    {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"},
-    {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"},
-    {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"},
-    {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"},
-    {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"},
-    {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"},
-    {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"},
-    {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"},
-    {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"},
-    {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"},
-    {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"},
-    {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"},
-    {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"},
-    {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"},
-    {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"},
-    {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"},
-    {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"},
-    {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"},
-    {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"},
-    {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"},
-    {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"},
-    {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"},
-    {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"},
-    {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"},
-    {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"},
-    {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"},
-]
-
-[[package]]
-name = "scikit-learn"
-version = "1.3.2"
-description = "A set of python modules for machine learning and data mining"
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"},
-    {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"},
-    {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"},
-    {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"},
-    {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"},
-    {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"},
-    {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"},
-    {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"},
-    {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"},
-    {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"},
-    {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"},
-    {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"},
-    {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"},
-    {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"},
-    {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"},
-    {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"},
-    {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"},
-    {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"},
-    {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"},
-    {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"},
-    {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"},
-    {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"},
-    {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"},
-    {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"},
-    {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"},
-    {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"},
-]
-
-[package.dependencies]
-joblib = ">=1.1.1"
-numpy = ">=1.17.3,<2.0"
-scipy = ">=1.5.0"
-threadpoolctl = ">=2.0.0"
-
-[package.extras]
-benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"]
-docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
-examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"]
-tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"]
-
-[[package]]
-name = "scipy"
-version = "1.10.1"
-description = "Fundamental algorithms for scientific computing in Python"
-optional = false
-python-versions = "<3.12,>=3.8"
-files = [
-    {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"},
-    {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"},
-    {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"},
-    {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"},
-    {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"},
-    {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"},
-    {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"},
-    {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"},
-    {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"},
-    {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"},
-    {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"},
-    {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"},
-    {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"},
-    {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"},
-    {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"},
-    {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"},
-    {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"},
-    {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"},
-    {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"},
-    {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"},
-    {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"},
+python-versions = ">=3.9"
+files = [
+    {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"},
+    {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"},
+    {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"},
+    {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"},
+    {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"},
+    {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"},
+    {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"},
+    {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"},
+    {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"},
+    {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"},
+    {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"},
+    {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"},
+    {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"},
+    {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"},
+    {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"},
+    {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"},
+    {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"},
+    {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"},
+    {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"},
+    {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"},
+    {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"},
+    {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"},
+    {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"},
+    {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"},
+    {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"},
+    {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"},
+    {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"},
+    {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"},
+    {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"},
+    {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"},
+    {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"},
+    {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"},
+    {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"},
+    {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"},
+    {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"},
+    {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"},
+    {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"},
+    {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"},
+    {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"},
+    {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"},
+    {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"},
+    {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"},
+    {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"},
+    {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"},
 ]
 
-[package.dependencies]
-numpy = ">=1.19.5,<1.27.0"
-
-[package.extras]
-dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"]
-doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"]
-test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
-
 [[package]]
 name = "send2trash"
 version = "1.8.3"
@@ -4122,18 +4441,23 @@ win32 = ["pywin32"]
 
 [[package]]
 name = "setuptools"
-version = "70.0.0"
+version = "75.8.0"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"},
-    {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"},
+    {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"},
+    {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"},
 ]
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"]
+core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
+type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"]
 
 [[package]]
 name = "shellingham"
@@ -4148,142 +4472,158 @@ files = [
 
 [[package]]
 name = "simplejson"
-version = "3.19.2"
+version = "3.19.3"
 description = "Simple, fast, extensible JSON encoder/decoder for Python"
 optional = false
-python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*"
-files = [
-    {file = "simplejson-3.19.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3471e95110dcaf901db16063b2e40fb394f8a9e99b3fe9ee3acc6f6ef72183a2"},
-    {file = "simplejson-3.19.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3194cd0d2c959062b94094c0a9f8780ffd38417a5322450a0db0ca1a23e7fbd2"},
-    {file = "simplejson-3.19.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:8a390e56a7963e3946ff2049ee1eb218380e87c8a0e7608f7f8790ba19390867"},
-    {file = "simplejson-3.19.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1537b3dd62d8aae644f3518c407aa8469e3fd0f179cdf86c5992792713ed717a"},
-    {file = "simplejson-3.19.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a8617625369d2d03766413bff9e64310feafc9fc4f0ad2b902136f1a5cd8c6b0"},
-    {file = "simplejson-3.19.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:2c433a412e96afb9a3ce36fa96c8e61a757af53e9c9192c97392f72871e18e69"},
-    {file = "simplejson-3.19.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f1c70249b15e4ce1a7d5340c97670a95f305ca79f376887759b43bb33288c973"},
-    {file = "simplejson-3.19.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:287e39ba24e141b046812c880f4619d0ca9e617235d74abc27267194fc0c7835"},
-    {file = "simplejson-3.19.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6f0a0b41dd05eefab547576bed0cf066595f3b20b083956b1405a6f17d1be6ad"},
-    {file = "simplejson-3.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f98d918f7f3aaf4b91f2b08c0c92b1774aea113334f7cde4fe40e777114dbe6"},
-    {file = "simplejson-3.19.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d74beca677623481810c7052926365d5f07393c72cbf62d6cce29991b676402"},
-    {file = "simplejson-3.19.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f2398361508c560d0bf1773af19e9fe644e218f2a814a02210ac2c97ad70db0"},
-    {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ad331349b0b9ca6da86064a3599c425c7a21cd41616e175ddba0866da32df48"},
-    {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:332c848f02d71a649272b3f1feccacb7e4f7e6de4a2e6dc70a32645326f3d428"},
-    {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25785d038281cd106c0d91a68b9930049b6464288cea59ba95b35ee37c2d23a5"},
-    {file = "simplejson-3.19.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18955c1da6fc39d957adfa346f75226246b6569e096ac9e40f67d102278c3bcb"},
-    {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:11cc3afd8160d44582543838b7e4f9aa5e97865322844b75d51bf4e0e413bb3e"},
-    {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b01fda3e95d07a6148702a641e5e293b6da7863f8bc9b967f62db9461330562c"},
-    {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:778331444917108fa8441f59af45886270d33ce8a23bfc4f9b192c0b2ecef1b3"},
-    {file = "simplejson-3.19.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9eb117db8d7ed733a7317c4215c35993b815bf6aeab67523f1f11e108c040672"},
-    {file = "simplejson-3.19.2-cp310-cp310-win32.whl", hash = "sha256:39b6d79f5cbfa3eb63a869639cfacf7c41d753c64f7801efc72692c1b2637ac7"},
-    {file = "simplejson-3.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:5675e9d8eeef0aa06093c1ff898413ade042d73dc920a03e8cea2fb68f62445a"},
-    {file = "simplejson-3.19.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed628c1431100b0b65387419551e822987396bee3c088a15d68446d92f554e0c"},
-    {file = "simplejson-3.19.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:adcb3332979cbc941b8fff07181f06d2b608625edc0a4d8bc3ffc0be414ad0c4"},
-    {file = "simplejson-3.19.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08889f2f597ae965284d7b52a5c3928653a9406d88c93e3161180f0abc2433ba"},
-    {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef7938a78447174e2616be223f496ddccdbf7854f7bf2ce716dbccd958cc7d13"},
-    {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a970a2e6d5281d56cacf3dc82081c95c1f4da5a559e52469287457811db6a79b"},
-    {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554313db34d63eac3b3f42986aa9efddd1a481169c12b7be1e7512edebff8eaf"},
-    {file = "simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d36081c0b1c12ea0ed62c202046dca11438bee48dd5240b7c8de8da62c620e9"},
-    {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a3cd18e03b0ee54ea4319cdcce48357719ea487b53f92a469ba8ca8e39df285e"},
-    {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66e5dc13bfb17cd6ee764fc96ccafd6e405daa846a42baab81f4c60e15650414"},
-    {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:972a7833d4a1fcf7a711c939e315721a88b988553fc770a5b6a5a64bd6ebeba3"},
-    {file = "simplejson-3.19.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3e74355cb47e0cd399ead3477e29e2f50e1540952c22fb3504dda0184fc9819f"},
-    {file = "simplejson-3.19.2-cp311-cp311-win32.whl", hash = "sha256:1dd4f692304854352c3e396e9b5f0a9c9e666868dd0bdc784e2ac4c93092d87b"},
-    {file = "simplejson-3.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:9300aee2a8b5992d0f4293d88deb59c218989833e3396c824b69ba330d04a589"},
-    {file = "simplejson-3.19.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b8d940fd28eb34a7084877747a60873956893e377f15a32ad445fe66c972c3b8"},
-    {file = "simplejson-3.19.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4969d974d9db826a2c07671273e6b27bc48e940738d768fa8f33b577f0978378"},
-    {file = "simplejson-3.19.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c594642d6b13d225e10df5c16ee15b3398e21a35ecd6aee824f107a625690374"},
-    {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f5a398b5e77bb01b23d92872255e1bcb3c0c719a3be40b8df146570fe7781a"},
-    {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176a1b524a3bd3314ed47029a86d02d5a95cc0bee15bd3063a1e1ec62b947de6"},
-    {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3c7363a8cb8c5238878ec96c5eb0fc5ca2cb11fc0c7d2379863d342c6ee367a"},
-    {file = "simplejson-3.19.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:346820ae96aa90c7d52653539a57766f10f33dd4be609206c001432b59ddf89f"},
-    {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de9a2792612ec6def556d1dc621fd6b2073aff015d64fba9f3e53349ad292734"},
-    {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1c768e7584c45094dca4b334af361e43b0aaa4844c04945ac7d43379eeda9bc2"},
-    {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:9652e59c022e62a5b58a6f9948b104e5bb96d3b06940c6482588176f40f4914b"},
-    {file = "simplejson-3.19.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9c1a4393242e321e344213a90a1e3bf35d2f624aa8b8f6174d43e3c6b0e8f6eb"},
-    {file = "simplejson-3.19.2-cp312-cp312-win32.whl", hash = "sha256:7cb98be113911cb0ad09e5523d0e2a926c09a465c9abb0784c9269efe4f95917"},
-    {file = "simplejson-3.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:6779105d2fcb7fcf794a6a2a233787f6bbd4731227333a072d8513b252ed374f"},
-    {file = "simplejson-3.19.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:061e81ea2d62671fa9dea2c2bfbc1eec2617ae7651e366c7b4a2baf0a8c72cae"},
-    {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4280e460e51f86ad76dc456acdbfa9513bdf329556ffc8c49e0200878ca57816"},
-    {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11c39fbc4280d7420684494373b7c5904fa72a2b48ef543a56c2d412999c9e5d"},
-    {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bccb3e88ec26ffa90f72229f983d3a5d1155e41a1171190fa723d4135523585b"},
-    {file = "simplejson-3.19.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb5b50dc6dd671eb46a605a3e2eb98deb4a9af787a08fcdddabe5d824bb9664"},
-    {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d94245caa3c61f760c4ce4953cfa76e7739b6f2cbfc94cc46fff6c050c2390c5"},
-    {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d0e5ffc763678d48ecc8da836f2ae2dd1b6eb2d27a48671066f91694e575173c"},
-    {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d222a9ed082cd9f38b58923775152003765016342a12f08f8c123bf893461f28"},
-    {file = "simplejson-3.19.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8434dcdd347459f9fd9c526117c01fe7ca7b016b6008dddc3c13471098f4f0dc"},
-    {file = "simplejson-3.19.2-cp36-cp36m-win32.whl", hash = "sha256:c9ac1c2678abf9270e7228133e5b77c6c3c930ad33a3c1dfbdd76ff2c33b7b50"},
-    {file = "simplejson-3.19.2-cp36-cp36m-win_amd64.whl", hash = "sha256:92c4a4a2b1f4846cd4364855cbac83efc48ff5a7d7c06ba014c792dd96483f6f"},
-    {file = "simplejson-3.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0d551dc931638e2102b8549836a1632e6e7cf620af3d093a7456aa642bff601d"},
-    {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a8a4653f2e809049999d63530180d7b5a344b23a793502413ad1ecea9a0290"},
-    {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40847f617287a38623507d08cbcb75d51cf9d4f9551dd6321df40215128325a3"},
-    {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be893258d5b68dd3a8cba8deb35dc6411db844a9d35268a8d3793b9d9a256f80"},
-    {file = "simplejson-3.19.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9eb3cff1b7d71aa50c89a0536f469cb8d6dcdd585d8f14fb8500d822f3bdee4"},
-    {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d0f402e787e6e7ee7876c8b05e2fe6464820d9f35ba3f172e95b5f8b699f6c7f"},
-    {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fbbcc6b0639aa09b9649f36f1bcb347b19403fe44109948392fbb5ea69e48c3e"},
-    {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:2fc697be37585eded0c8581c4788fcfac0e3f84ca635b73a5bf360e28c8ea1a2"},
-    {file = "simplejson-3.19.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b0a3eb6dd39cce23801a50c01a0976971498da49bc8a0590ce311492b82c44b"},
-    {file = "simplejson-3.19.2-cp37-cp37m-win32.whl", hash = "sha256:49f9da0d6cd17b600a178439d7d2d57c5ef01f816b1e0e875e8e8b3b42db2693"},
-    {file = "simplejson-3.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c87c22bd6a987aca976e3d3e23806d17f65426191db36d40da4ae16a6a494cbc"},
-    {file = "simplejson-3.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e4c166f743bb42c5fcc60760fb1c3623e8fda94f6619534217b083e08644b46"},
-    {file = "simplejson-3.19.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a48679310e1dd5c9f03481799311a65d343748fe86850b7fb41df4e2c00c087"},
-    {file = "simplejson-3.19.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0521e0f07cb56415fdb3aae0bbd8701eb31a9dfef47bb57206075a0584ab2a2"},
-    {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d2d5119b1d7a1ed286b8af37357116072fc96700bce3bec5bb81b2e7057ab41"},
-    {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c1467d939932901a97ba4f979e8f2642415fcf02ea12f53a4e3206c9c03bc17"},
-    {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49aaf4546f6023c44d7e7136be84a03a4237f0b2b5fb2b17c3e3770a758fc1a0"},
-    {file = "simplejson-3.19.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60848ab779195b72382841fc3fa4f71698a98d9589b0a081a9399904487b5832"},
-    {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0436a70d8eb42bea4fe1a1c32d371d9bb3b62c637969cb33970ad624d5a3336a"},
-    {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:49e0e3faf3070abdf71a5c80a97c1afc059b4f45a5aa62de0c2ca0444b51669b"},
-    {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ff836cd4041e16003549449cc0a5e372f6b6f871eb89007ab0ee18fb2800fded"},
-    {file = "simplejson-3.19.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3848427b65e31bea2c11f521b6fc7a3145d6e501a1038529da2391aff5970f2f"},
-    {file = "simplejson-3.19.2-cp38-cp38-win32.whl", hash = "sha256:3f39bb1f6e620f3e158c8b2eaf1b3e3e54408baca96a02fe891794705e788637"},
-    {file = "simplejson-3.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:0405984f3ec1d3f8777c4adc33eac7ab7a3e629f3b1c05fdded63acc7cf01137"},
-    {file = "simplejson-3.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:445a96543948c011a3a47c8e0f9d61e9785df2544ea5be5ab3bc2be4bd8a2565"},
-    {file = "simplejson-3.19.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a8c3cc4f9dfc33220246760358c8265dad6e1104f25f0077bbca692d616d358"},
-    {file = "simplejson-3.19.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af9c7e6669c4d0ad7362f79cb2ab6784d71147503e62b57e3d95c4a0f222c01c"},
-    {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:064300a4ea17d1cd9ea1706aa0590dcb3be81112aac30233823ee494f02cb78a"},
-    {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9453419ea2ab9b21d925d0fd7e3a132a178a191881fab4169b6f96e118cc25bb"},
-    {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e038c615b3906df4c3be8db16b3e24821d26c55177638ea47b3f8f73615111c"},
-    {file = "simplejson-3.19.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16ca9c90da4b1f50f089e14485db8c20cbfff2d55424062791a7392b5a9b3ff9"},
-    {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1018bd0d70ce85f165185d2227c71e3b1e446186f9fa9f971b69eee223e1e3cd"},
-    {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e8dd53a8706b15bc0e34f00e6150fbefb35d2fd9235d095b4f83b3c5ed4fa11d"},
-    {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:2d022b14d7758bfb98405672953fe5c202ea8a9ccf9f6713c5bd0718eba286fd"},
-    {file = "simplejson-3.19.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:febffa5b1eda6622d44b245b0685aff6fb555ce0ed734e2d7b1c3acd018a2cff"},
-    {file = "simplejson-3.19.2-cp39-cp39-win32.whl", hash = "sha256:4edcd0bf70087b244ba77038db23cd98a1ace2f91b4a3ecef22036314d77ac23"},
-    {file = "simplejson-3.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:aad7405c033d32c751d98d3a65801e2797ae77fac284a539f6c3a3e13005edc4"},
-    {file = "simplejson-3.19.2-py3-none-any.whl", hash = "sha256:bcedf4cae0d47839fee7de344f96b5694ca53c786f28b5f773d4f0b265a159eb"},
-    {file = "simplejson-3.19.2.tar.gz", hash = "sha256:9eb442a2442ce417801c912df68e1f6ccfcd41577ae7274953ab3ad24ef7d82c"},
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.5"
+files = [
+    {file = "simplejson-3.19.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f39caec26007a2d0efab6b8b1d74873ede9351962707afab622cc2285dd26ed0"},
+    {file = "simplejson-3.19.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:83c87706265ae3028e8460d08b05f30254c569772e859e5ba61fe8af2c883468"},
+    {file = "simplejson-3.19.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0b5ddd2c7d1d3f4d23224bc8a04bbf1430ae9a8149c05b90f8fc610f7f857a23"},
+    {file = "simplejson-3.19.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:ad0e0b1ce9bd3edb5cf64b5b5b76eacbfdac8c5367153aeeec8a8b1407f68342"},
+    {file = "simplejson-3.19.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:93be280fc69a952c76e261036312c20b910e7fa9e234f1d89bdfe3fa34f8a023"},
+    {file = "simplejson-3.19.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:6d43e24b88c80f997081503f693be832fc90854f278df277dd54f8a4c847ab61"},
+    {file = "simplejson-3.19.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:2876027ebdd599d730d36464debe84619b0368e9a642ca6e7c601be55aed439e"},
+    {file = "simplejson-3.19.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:0766ca6222b410e08e0053a0dda3606cafb3973d5d00538307f631bb59743396"},
+    {file = "simplejson-3.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:50d8b742d74c449c4dcac570d08ce0f21f6a149d2d9cf7652dbf2ba9a1bc729a"},
+    {file = "simplejson-3.19.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd011fc3c1d88b779645495fdb8189fb318a26981eebcce14109460e062f209b"},
+    {file = "simplejson-3.19.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:637c4d4b81825c1f4d651e56210bd35b5604034b192b02d2d8f17f7ce8c18f42"},
+    {file = "simplejson-3.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f56eb03bc9e432bb81adc8ecff2486d39feb371abb442964ffb44f6db23b332"},
+    {file = "simplejson-3.19.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef59a53be400c1fad2c914b8d74c9d42384fed5174f9321dd021b7017fd40270"},
+    {file = "simplejson-3.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72e8abbc86fcac83629a030888b45fed3a404d54161118be52cb491cd6975d3e"},
+    {file = "simplejson-3.19.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8efb03ca77bd7725dfacc9254df00d73e6f43013cf39bd37ef1a8ed0ebb5165"},
+    {file = "simplejson-3.19.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:add8850db04b98507a8b62d248a326ecc8561e6d24336d1ca5c605bbfaab4cad"},
+    {file = "simplejson-3.19.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fc3dc9fb413fc34c396f52f4c87de18d0bd5023804afa8ab5cc224deeb6a9900"},
+    {file = "simplejson-3.19.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dfa420bb9225dd33b6efdabde7c6a671b51150b9b1d9c4e5cd74d3b420b3fe1"},
+    {file = "simplejson-3.19.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7b5c472099b39b274dcde27f1113db8d818c9aa3ba8f78cbb8ad04a4c1ac2118"},
+    {file = "simplejson-3.19.3-cp310-cp310-win32.whl", hash = "sha256:817abad79241ed4a507b3caf4d3f2be5079f39d35d4c550a061988986bffd2ec"},
+    {file = "simplejson-3.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:dd5b9b1783e14803e362a558680d88939e830db2466f3fa22df5c9319f8eea94"},
+    {file = "simplejson-3.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e88abff510dcff903a18d11c2a75f9964e768d99c8d147839913886144b2065e"},
+    {file = "simplejson-3.19.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:934a50a614fb831614db5dbfba35127ee277624dda4d15895c957d2f5d48610c"},
+    {file = "simplejson-3.19.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:212fce86a22188b0c7f53533b0f693ea9605c1a0f02c84c475a30616f55a744d"},
+    {file = "simplejson-3.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d9e8f836688a8fabe6a6b41b334aa550a6823f7b4ac3d3712fc0ad8655be9a8"},
+    {file = "simplejson-3.19.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23228037dc5d41c36666384062904d74409a62f52283d9858fa12f4c22cffad1"},
+    {file = "simplejson-3.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0791f64fed7d4abad639491f8a6b1ba56d3c604eb94b50f8697359b92d983f36"},
+    {file = "simplejson-3.19.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f614581b61a26fbbba232a1391f6cee82bc26f2abbb6a0b44a9bba25c56a1c"},
+    {file = "simplejson-3.19.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1df0aaf1cb787fdf34484ed4a1f0c545efd8811f6028623290fef1a53694e597"},
+    {file = "simplejson-3.19.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:951095be8d4451a7182403354c22ec2de3e513e0cc40408b689af08d02611588"},
+    {file = "simplejson-3.19.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a954b30810988feeabde843e3263bf187697e0eb5037396276db3612434049b"},
+    {file = "simplejson-3.19.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c40df31a75de98db2cdfead6074d4449cd009e79f54c1ebe5e5f1f153c68ad20"},
+    {file = "simplejson-3.19.3-cp311-cp311-win32.whl", hash = "sha256:7e2a098c21ad8924076a12b6c178965d88a0ad75d1de67e1afa0a66878f277a5"},
+    {file = "simplejson-3.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:c9bedebdc5fdad48af8783022bae307746d54006b783007d1d3c38e10872a2c6"},
+    {file = "simplejson-3.19.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:66a0399e21c2112acacfebf3d832ebe2884f823b1c7e6d1363f2944f1db31a99"},
+    {file = "simplejson-3.19.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6ef9383c5e05f445be60f1735c1816163c874c0b1ede8bb4390aff2ced34f333"},
+    {file = "simplejson-3.19.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:42e5acf80d4d971238d4df97811286a044d720693092b20a56d5e56b7dcc5d09"},
+    {file = "simplejson-3.19.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0b0efc7279d768db7c74d3d07f0b5c81280d16ae3fb14e9081dc903e8360771"},
+    {file = "simplejson-3.19.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0552eb06e7234da892e1d02365cd2b7b2b1f8233aa5aabdb2981587b7cc92ea0"},
+    {file = "simplejson-3.19.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf6a3b9a7d7191471b464fe38f684df10eb491ec9ea454003edb45a011ab187"},
+    {file = "simplejson-3.19.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7017329ca8d4dca94ad5e59f496e5fc77630aecfc39df381ffc1d37fb6b25832"},
+    {file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:67a20641afebf4cfbcff50061f07daad1eace6e7b31d7622b6fa2c40d43900ba"},
+    {file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:dd6a7dabcc4c32daf601bc45e01b79175dde4b52548becea4f9545b0a4428169"},
+    {file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:08f9b443a94e72dd02c87098c96886d35790e79e46b24e67accafbf13b73d43b"},
+    {file = "simplejson-3.19.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa97278ae6614346b5ca41a45a911f37a3261b57dbe4a00602048652c862c28b"},
+    {file = "simplejson-3.19.3-cp312-cp312-win32.whl", hash = "sha256:ef28c3b328d29b5e2756903aed888960bc5df39b4c2eab157ae212f70ed5bf74"},
+    {file = "simplejson-3.19.3-cp312-cp312-win_amd64.whl", hash = "sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a"},
+    {file = "simplejson-3.19.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0959e6cb62e3994b5a40e31047ff97ef5c4138875fae31659bead691bed55896"},
+    {file = "simplejson-3.19.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a7bfad839c624e139a4863007233a3f194e7c51551081f9789cba52e4da5167"},
+    {file = "simplejson-3.19.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afab2f7f2486a866ff04d6d905e9386ca6a231379181a3838abce1f32fbdcc37"},
+    {file = "simplejson-3.19.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d00313681015ac498e1736b304446ee6d1c72c5b287cd196996dad84369998f7"},
+    {file = "simplejson-3.19.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d936ae682d5b878af9d9eb4d8bb1fdd5e41275c8eb59ceddb0aeed857bb264a2"},
+    {file = "simplejson-3.19.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c6657485393f2e9b8177c77a7634f13ebe70d5e6de150aae1677d91516ce6b"},
+    {file = "simplejson-3.19.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a6a750d3c7461b1c47cfc6bba8d9e57a455e7c5f80057d2a82f738040dd1129"},
+    {file = "simplejson-3.19.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea7a4a998c87c5674a27089e022110a1a08a7753f21af3baf09efe9915c23c3c"},
+    {file = "simplejson-3.19.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6300680d83a399be2b8f3b0ef7ef90b35d2a29fe6e9c21438097e0938bbc1564"},
+    {file = "simplejson-3.19.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ab69f811a660c362651ae395eba8ce84f84c944cea0df5718ea0ba9d1e4e7252"},
+    {file = "simplejson-3.19.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:256e09d0f94d9c3d177d9e95fd27a68c875a4baa2046633df387b86b652f5747"},
+    {file = "simplejson-3.19.3-cp313-cp313-win32.whl", hash = "sha256:2c78293470313aefa9cfc5e3f75ca0635721fb016fb1121c1c5b0cb8cc74712a"},
+    {file = "simplejson-3.19.3-cp313-cp313-win_amd64.whl", hash = "sha256:3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c"},
+    {file = "simplejson-3.19.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:89b35433186e977fa86ff1fd179c1fadff39cfa3afa1648dab0b6ca53153acd9"},
+    {file = "simplejson-3.19.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d43c2d7504eda566c50203cdc9dc043aff6f55f1b7dae0dcd79dfefef9159d1c"},
+    {file = "simplejson-3.19.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6890ff9cf0bd2e1d487e2a8869ebd620a44684c0a9667fa5ee751d099d5d84c8"},
+    {file = "simplejson-3.19.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1069143a8fb3905e1bc0696c62be7e3adf812e9f1976ac9ae15b05112ff57cc9"},
+    {file = "simplejson-3.19.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb324bb903330cbb35d87cce367a12631cd5720afa06e5b9c906483970946da6"},
+    {file = "simplejson-3.19.3-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:0a32859d45d7b85fb803bb68f6bee14526991a1190269116c33399fa0daf9bbf"},
+    {file = "simplejson-3.19.3-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:23833ee7e791ec968b744dfee2a2d39df7152050051096caf4296506d75608d8"},
+    {file = "simplejson-3.19.3-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:d73efb03c5b39249c82488a994f0998f9e4399e3d085209d2120503305ba77a8"},
+    {file = "simplejson-3.19.3-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7923878b7a0142d39763ec2dbecff3053c1bedd3653585a8474666e420fe83f5"},
+    {file = "simplejson-3.19.3-cp36-cp36m-win32.whl", hash = "sha256:7355c7203353c36d46c4e7b6055293b3d2be097bbc5e2874a2b8a7259f0325dd"},
+    {file = "simplejson-3.19.3-cp36-cp36m-win_amd64.whl", hash = "sha256:d1b8b4d6379fe55f471914345fe6171d81a18649dacf3248abfc9c349b4442eb"},
+    {file = "simplejson-3.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d36608557b4dcd7a62c29ad4cd7c5a1720bbf7dc942eff9dc42d2c542a5f042d"},
+    {file = "simplejson-3.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7137e69c6781ecf23afab064be94a277236c9cba31aa48ff1a0ec3995c69171e"},
+    {file = "simplejson-3.19.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76f8c28fe2d426182405b18ddf3001fce47835a557dc15c3d8bdea01c03361da"},
+    {file = "simplejson-3.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff7bc1bbdaa3e487c9469128bf39408e91f5573901cb852e03af378d3582c52d"},
+    {file = "simplejson-3.19.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0782cb9bf827f0c488b6aa0f2819f618308a3caf2973cfd792e45d631bec4db"},
+    {file = "simplejson-3.19.3-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:6fea0716c593dabb4392c4996d4e902a83b2428e6da82938cf28a523a11eb277"},
+    {file = "simplejson-3.19.3-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:8f41bb5370b34f63171e65fdb00e12be1d83675cecb23e627df26f4c88dfc021"},
+    {file = "simplejson-3.19.3-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:37105d1d708365b91165e1a6e505bdecc88637091348cf4b6adcdcb4f5a5fb8b"},
+    {file = "simplejson-3.19.3-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:b9198c1f1f8910a3b86b60f4fe2556d9d28d3fefe35bffe6be509a27402e694d"},
+    {file = "simplejson-3.19.3-cp37-cp37m-win32.whl", hash = "sha256:bc164f32dd9691e7082ce5df24b4cf8c6c394bbf9bdeeb5d843127cd07ab8ad2"},
+    {file = "simplejson-3.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1bd41f2cb1a2c57656ceff67b12d005cb255c728265e222027ad73193a04005a"},
+    {file = "simplejson-3.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0733ecd95ae03ae718ec74aad818f5af5f3155d596f7b242acbc1621e765e5fb"},
+    {file = "simplejson-3.19.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a0710d1a5e41c4f829caa1572793dd3130c8d65c2b194c24ff29c4c305c26e0"},
+    {file = "simplejson-3.19.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1a53a07320c5ff574d8b1a89c937ce33608832f166f39dff0581ac43dc979abd"},
+    {file = "simplejson-3.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1773cabfba66a6337b547e45dafbd471b09487370bcab75bd28f626520410d29"},
+    {file = "simplejson-3.19.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c0104b4b7d2c75ccedbf1d9d5a3bd2daa75e51053935a44ba012e2fd4c43752"},
+    {file = "simplejson-3.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c49eeb94b8f09dc8a5843c156a22b8bde6aa1ddc65ca8ddc62dddcc001e6a2d"},
+    {file = "simplejson-3.19.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dc5c1a85ff388e98ea877042daec3d157b6db0d85bac6ba5498034689793e7e"},
+    {file = "simplejson-3.19.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:49549e3d81ab4a58424405aa545602674d8c35c20e986b42bb8668e782a94bac"},
+    {file = "simplejson-3.19.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:e1a1452ad5723ff129b081e3c8aa4ba56b8734fee4223355ed7b815a7ece69bc"},
+    {file = "simplejson-3.19.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:d0d5a63f1768fed7e78cf55712dee81f5a345e34d34224f3507ebf71df2b754d"},
+    {file = "simplejson-3.19.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7e062767ac165df9a46963f5735aa4eee0089ec1e48b3f2ec46182754b96f55e"},
+    {file = "simplejson-3.19.3-cp38-cp38-win32.whl", hash = "sha256:56134bbafe458a7b21f6fddbf889d36bec6d903718f4430768e3af822f8e27c2"},
+    {file = "simplejson-3.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:bcde83a553a96dc7533736c547bddaa35414a2566ab0ecf7d3964fc4bdb84c11"},
+    {file = "simplejson-3.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b5587feda2b65a79da985ae6d116daf6428bf7489992badc29fc96d16cd27b05"},
+    {file = "simplejson-3.19.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e0d2b00ecbcd1a3c5ea1abc8bb99a26508f758c1759fd01c3be482a3655a176f"},
+    {file = "simplejson-3.19.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:32a3ada8f3ea41db35e6d37b86dade03760f804628ec22e4fe775b703d567426"},
+    {file = "simplejson-3.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f455672f4738b0f47183c5896e3606cd65c9ddee3805a4d18e8c96aa3f47c84"},
+    {file = "simplejson-3.19.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b737a5fefedb8333fa50b8db3dcc9b1d18fd6c598f89fa7debff8b46bf4e511"},
+    {file = "simplejson-3.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb47ee773ce67476a960e2db4a0a906680c54f662521550828c0cc57d0099426"},
+    {file = "simplejson-3.19.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eed8cd98a7b24861da9d3d937f5fbfb6657350c547528a117297fe49e3960667"},
+    {file = "simplejson-3.19.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:619756f1dd634b5bdf57d9a3914300526c3b348188a765e45b8b08eabef0c94e"},
+    {file = "simplejson-3.19.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dd7230d061e755d60a4d5445bae854afe33444cdb182f3815cff26ac9fb29a15"},
+    {file = "simplejson-3.19.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:101a3c8392028cd704a93c7cba8926594e775ca3c91e0bee82144e34190903f1"},
+    {file = "simplejson-3.19.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e557712fc79f251673aeb3fad3501d7d4da3a27eff0857af2e1d1afbbcf6685"},
+    {file = "simplejson-3.19.3-cp39-cp39-win32.whl", hash = "sha256:0bc5544e3128891bf613b9f71813ee2ec9c11574806f74dd8bb84e5e95bf64a2"},
+    {file = "simplejson-3.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:06662392e4913dc8846d6a71a6d5de86db5fba244831abe1dd741d62a4136764"},
+    {file = "simplejson-3.19.3-py3-none-any.whl", hash = "sha256:49cc4c7b940d43bd12bf87ec63f28cbc4964fc4e12c031cc8cd01650f43eb94e"},
+    {file = "simplejson-3.19.3.tar.gz", hash = "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680"},
 ]
 
 [[package]]
 name = "six"
-version = "1.16.0"
+version = "1.17.0"
 description = "Python 2 and 3 compatibility utilities"
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
-    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
-    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+    {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
+    {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
 ]
 
 [[package]]
 name = "smart-open"
-version = "6.4.0"
+version = "7.1.0"
 description = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storage, gzip, bz2...)"
 optional = false
-python-versions = ">=3.6,<4.0"
+python-versions = "<4.0,>=3.7"
 files = [
-    {file = "smart_open-6.4.0-py3-none-any.whl", hash = "sha256:8d3ef7e6997e8e42dd55c74166ed21e6ac70664caa32dd940b26d54a8f6b4142"},
-    {file = "smart_open-6.4.0.tar.gz", hash = "sha256:be3c92c246fbe80ebce8fbacb180494a481a77fcdcb7c1aadb2ea5b9c2bee8b9"},
+    {file = "smart_open-7.1.0-py3-none-any.whl", hash = "sha256:4b8489bb6058196258bafe901730c7db0dcf4f083f316e97269c66f45502055b"},
+    {file = "smart_open-7.1.0.tar.gz", hash = "sha256:a4f09f84f0f6d3637c6543aca7b5487438877a21360e7368ccf1f704789752ba"},
 ]
 
+[package.dependencies]
+wrapt = "*"
+
 [package.extras]
-all = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "paramiko", "requests"]
+all = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "paramiko", "requests", "zstandard"]
 azure = ["azure-common", "azure-core", "azure-storage-blob"]
 gcs = ["google-cloud-storage (>=2.6.0)"]
 http = ["requests"]
 s3 = ["boto3"]
 ssh = ["paramiko"]
-test = ["azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "moto[server]", "paramiko", "pytest", "pytest-rerunfailures", "requests", "responses"]
+test = ["awscli", "azure-common", "azure-core", "azure-storage-blob", "boto3", "google-cloud-storage (>=2.6.0)", "moto[server]", "numpy", "paramiko", "pyopenssl", "pytest", "pytest-benchmark", "pytest-rerunfailures", "requests", "responses", "zstandard"]
 webhdfs = ["requests"]
+zst = ["zstandard"]
 
 [[package]]
 name = "sniffio"
@@ -4298,52 +4638,37 @@ files = [
 
 [[package]]
 name = "soupsieve"
-version = "2.5"
+version = "2.6"
 description = "A modern CSS selector implementation for Beautiful Soup."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
-    {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
+    {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"},
+    {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"},
 ]
 
 [[package]]
 name = "spacy"
-version = "3.7.4"
+version = "3.8.4"
 description = "Industrial-strength Natural Language Processing (NLP) in Python"
 optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "spacy-3.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0f748625192f573c07ddea5fcd324919dbfbf4f4a2f7a1fc731e6dcba7321ea1"},
-    {file = "spacy-3.7.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6288dca7b3a5489b3d7ce68404bc432ca22f826c662a12af47ef7bdb264307fb"},
-    {file = "spacy-3.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef59db99b12a72d2646be3888d87f94c59e11cd07adc2f50a8130e83f07eb1cf"},
-    {file = "spacy-3.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f07477a4027711c22b3865e78dc9076335c03fcf318a6736159bf07e2a923125"},
-    {file = "spacy-3.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:787ce42a837f7edfbd4185356eea893a81b7dd75743d0047f2b9bf179775f970"},
-    {file = "spacy-3.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e82b9da21853d4aee46811804dc7e136895f087fda25c7585172d95eb9b70833"},
-    {file = "spacy-3.7.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07ffedf51899441070fb70432f8f873696f39e0e31c9ce7403101c459f8a1281"},
-    {file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba57bcc111eca7b086ee33a9636df775cfd4b14302f7d0ffbc11e95ac0fb3f0e"},
-    {file = "spacy-3.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7580d1565f4d1ccbee9a18531f993a5b9b37ced96f145153dd4e98ceec607a55"},
-    {file = "spacy-3.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:df99c6f0085b1ec8e88beb5fd96d4371cef6fc19c202c41fc4fadc2afd55a157"},
-    {file = "spacy-3.7.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b982ebab417189346acb4722637c573830d62e157ba336c3eb6c417249344be1"},
-    {file = "spacy-3.7.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e7c29e152d8ea060af60da9410fa8ef038f3c9068a206905ee5c704de78f6e87"},
-    {file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:023c9a008328f55c4717c56c4f8a28073b9961547f7d38a9405c967a52e66d59"},
-    {file = "spacy-3.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1969d3d0fd0c811b7485438460f0ae8cfe16d46b54bcb8d1c26e70914e67e3d"},
-    {file = "spacy-3.7.4-cp312-cp312-win_amd64.whl", hash = "sha256:040f7df5096c817450820eaaa426d54ed266254d16974e9a707a32f5b0f139ae"},
-    {file = "spacy-3.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6757e8fbfd35dc0ed830296d5756f46d5b8d4b0353925dbe2f9aa33b82c5308"},
-    {file = "spacy-3.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c500c1bad9e0488814a75077089aeef64a6b520ae8131578f266a08168106fa3"},
-    {file = "spacy-3.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c992e2c5c0cd06c7f3e74fe8d758885117090013931c7938277d1421660bf71f"},
-    {file = "spacy-3.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:2463c56ab1378f2b9a675340a2e3dfb618989d0da8cdce06429bc9b1dad4f294"},
-    {file = "spacy-3.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b43e92edfa99f34dbb9dd30175f41158d20945e3179055d0071fee19394add96"},
-    {file = "spacy-3.7.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c26a81d33c93e4a8e3360d61dcce0802fb886de79f666a487ea5abbd3ce4b30b"},
-    {file = "spacy-3.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d7910ca7a91bf423febd8a9a10ca6a4cfcb5c99abdec79df1eb7b67ea3e3c90"},
-    {file = "spacy-3.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b16768b9e5c350b8a383a6bd84cd0481ccdf10ae6231f568598890638065f69"},
-    {file = "spacy-3.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:ed99fb176979b1e3cf6830161f8e881beae54e80147b05fca31d9a67cb12fbca"},
-    {file = "spacy-3.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ca8112330982dbeef125cc5eb40e0349493055835a0ebe29028a0953a25d8522"},
-    {file = "spacy-3.7.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:977f37493d7cf0b5dca155f0450d47890378703283c29919cdcc220db994a775"},
-    {file = "spacy-3.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ad5e931c294d100ec3edb40e40f2722ef505cea16312839dd6467e81d665740"},
-    {file = "spacy-3.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11ebf6054cd3ec3638801d7ff9b709e32fb9c15512b347b489bfe2ccb1102c9f"},
-    {file = "spacy-3.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:f5b930753027ac599f70bb7e77d6a2256191fe582e6f3f0cd624d88f6c279fa4"},
-    {file = "spacy-3.7.4.tar.gz", hash = "sha256:525f2ced2e40761562c8cace93ef6a1e6e8c483f27bd564bc1b15f608efbe85b"},
+python-versions = "<3.13,>=3.9"
+files = [
+    {file = "spacy-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bbe074f58ac21156dab821b5a145f72c2a50933098bc371ab5a63f47e8ac5fc6"},
+    {file = "spacy-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d0474188edcdad2be647df04cfdc4351dea877caf41bd8c93b36e3b9124794c7"},
+    {file = "spacy-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c589ba39dbd035a7205c05f6efa2b60bdd1faae0f5fc9c0d657eb903b885ac"},
+    {file = "spacy-3.8.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:17a758d53761b54c9500aca34cd27399730848dce2b74edf76a0893b5c711ed3"},
+    {file = "spacy-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:e34003ab0c8e447ec40f74f03b95fa018e8c81ef2fc067a2e8398edd96a6ab0a"},
+    {file = "spacy-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:276ef77ce197a1eb73f86e6b6f527886cfd8211f38688eb3c246e07e51f8ae22"},
+    {file = "spacy-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1080908078a78299f8924e5df6c61e9f9db2f6930ed945e91b048e9af41d58a1"},
+    {file = "spacy-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4540e4599df47e2d7525b8da1515d29da72db339ba8553b2f8d30842179806ea"},
+    {file = "spacy-3.8.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e6b04dce1b52c9a890c651cc50a38349ffaf93f03740059653c124cbf2a3187d"},
+    {file = "spacy-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:5837d60329d2da90008ccb24e65b03fb53d6729918ed6fda9d15868d36961c00"},
+    {file = "spacy-3.8.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:381e482cde64a4346cd5a33e3f30881def405ad97c609620b01f694ef77f4f68"},
+    {file = "spacy-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5ef210fef16bf95cbb2db381a53089e53aac240d79a401ec67a3f900f3ca538"},
+    {file = "spacy-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96e70f3089f62c661895433991d1818678aa23ecd92c78eac3190892b3840787"},
+    {file = "spacy-3.8.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:10b63bd107230f214283c12b0e38c64978deb64f9fa4ed5538ec4951a019e629"},
+    {file = "spacy-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:3eba8fb4388f3e21e9a3af14462422ea432a8aa37327886de7603654267a1b2b"},
 ]
 
 [package.dependencies]
@@ -4352,27 +4677,23 @@ cymem = ">=2.0.2,<2.1.0"
 jinja2 = "*"
 langcodes = ">=3.2.0,<4.0.0"
 murmurhash = ">=0.28.0,<1.1.0"
-numpy = [
-    {version = ">=1.15.0", markers = "python_version < \"3.9\""},
-    {version = ">=1.19.0", markers = "python_version >= \"3.9\""},
-]
+numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""}
 packaging = ">=20.0"
 preshed = ">=3.0.2,<3.1.0"
 pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
 requests = ">=2.13.0,<3.0.0"
 setuptools = "*"
-smart-open = ">=5.2.1,<7.0.0"
 spacy-legacy = ">=3.0.11,<3.1.0"
 spacy-loggers = ">=1.0.0,<2.0.0"
 srsly = ">=2.4.3,<3.0.0"
-thinc = ">=8.2.2,<8.3.0"
+thinc = ">=8.3.4,<8.4.0"
 tqdm = ">=4.38.0,<5.0.0"
-typer = ">=0.3.0,<0.10.0"
+typer = ">=0.3.0,<1.0.0"
 wasabi = ">=0.9.1,<1.2.0"
-weasel = ">=0.1.0,<0.4.0"
+weasel = ">=0.1.0,<0.5.0"
 
 [package.extras]
-apple = ["thinc-apple-ops (>=0.1.0.dev0,<1.0.0)"]
+apple = ["thinc-apple-ops (>=1.0.0,<2.0.0)"]
 cuda = ["cupy (>=5.0.0b4,<13.0.0)"]
 cuda-autodetect = ["cupy-wheel (>=11.0.0,<13.0.0)"]
 cuda100 = ["cupy-cuda100 (>=5.0.0b4,<13.0.0)"]
@@ -4392,11 +4713,11 @@ cuda80 = ["cupy-cuda80 (>=5.0.0b4,<13.0.0)"]
 cuda90 = ["cupy-cuda90 (>=5.0.0b4,<13.0.0)"]
 cuda91 = ["cupy-cuda91 (>=5.0.0b4,<13.0.0)"]
 cuda92 = ["cupy-cuda92 (>=5.0.0b4,<13.0.0)"]
-ja = ["sudachidict-core (>=20211220)", "sudachipy (>=0.5.2,!=0.6.1)"]
+ja = ["sudachidict_core (>=20211220)", "sudachipy (>=0.5.2,!=0.6.1)"]
 ko = ["natto-py (>=0.9.0)"]
-lookups = ["spacy-lookups-data (>=1.0.3,<1.1.0)"]
+lookups = ["spacy_lookups_data (>=1.0.3,<1.1.0)"]
 th = ["pythainlp (>=2.0)"]
-transformers = ["spacy-transformers (>=1.1.2,<1.4.0)"]
+transformers = ["spacy_transformers (>=1.1.2,<1.4.0)"]
 
 [[package]]
 name = "spacy-legacy"
@@ -4422,45 +4743,47 @@ files = [
 
 [[package]]
 name = "srsly"
-version = "2.4.8"
+version = "2.5.1"
 description = "Modern high-performance serialization utilities for Python"
 optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "srsly-2.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:17f3bcb418bb4cf443ed3d4dcb210e491bd9c1b7b0185e6ab10b6af3271e63b2"},
-    {file = "srsly-2.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b070a58e21ab0e878fd949f932385abb4c53dd0acb6d3a7ee75d95d447bc609"},
-    {file = "srsly-2.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98286d20014ed2067ad02b0be1e17c7e522255b188346e79ff266af51a54eb33"},
-    {file = "srsly-2.4.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18685084e2e0cc47c25158cbbf3e44690e494ef77d6418c2aae0598c893f35b0"},
-    {file = "srsly-2.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:980a179cbf4eb5bc56f7507e53f76720d031bcf0cef52cd53c815720eb2fc30c"},
-    {file = "srsly-2.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5472ed9f581e10c32e79424c996cf54c46c42237759f4224806a0cd4bb770993"},
-    {file = "srsly-2.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:50f10afe9230072c5aad9f6636115ea99b32c102f4c61e8236d8642c73ec7a13"},
-    {file = "srsly-2.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c994a89ba247a4d4f63ef9fdefb93aa3e1f98740e4800d5351ebd56992ac75e3"},
-    {file = "srsly-2.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace7ed4a0c20fa54d90032be32f9c656b6d75445168da78d14fe9080a0c208ad"},
-    {file = "srsly-2.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:7a919236a090fb93081fbd1cec030f675910f3863825b34a9afbcae71f643127"},
-    {file = "srsly-2.4.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7583c03d114b4478b7a357a1915305163e9eac2dfe080da900555c975cca2a11"},
-    {file = "srsly-2.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:94ccdd2f6db824c31266aaf93e0f31c1c43b8bc531cd2b3a1d924e3c26a4f294"},
-    {file = "srsly-2.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db72d2974f91aee652d606c7def98744ca6b899bd7dd3009fd75ebe0b5a51034"},
-    {file = "srsly-2.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a60c905fd2c15e848ce1fc315fd34d8a9cc72c1dee022a0d8f4c62991131307"},
-    {file = "srsly-2.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:e0b8d5722057000694edf105b8f492e7eb2f3aa6247a5f0c9170d1e0d074151c"},
-    {file = "srsly-2.4.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:196b4261f9d6372d1d3d16d1216b90c7e370b4141471322777b7b3c39afd1210"},
-    {file = "srsly-2.4.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4750017e6d78590b02b12653e97edd25aefa4734281386cc27501d59b7481e4e"},
-    {file = "srsly-2.4.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa034cd582ba9e4a120c8f19efa263fcad0f10fc481e73fb8c0d603085f941c4"},
-    {file = "srsly-2.4.8-cp36-cp36m-win_amd64.whl", hash = "sha256:5a78ab9e9d177ee8731e950feb48c57380036d462b49e3fb61a67ce529ff5f60"},
-    {file = "srsly-2.4.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:087e36439af517e259843df93eb34bb9e2d2881c34fa0f541589bcfbc757be97"},
-    {file = "srsly-2.4.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad141d8a130cb085a0ed3a6638b643e2b591cb98a4591996780597a632acfe20"},
-    {file = "srsly-2.4.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d05367b2571c0d08d00459636b951e3ca2a1e9216318c157331f09c33489d3"},
-    {file = "srsly-2.4.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3fd661a1c4848deea2849b78f432a70c75d10968e902ca83c07c89c9b7050ab8"},
-    {file = "srsly-2.4.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec37233fe39af97b00bf20dc2ceda04d39b9ea19ce0ee605e16ece9785e11f65"},
-    {file = "srsly-2.4.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2fd4bc081f1d6a6063396b6d97b00d98e86d9d3a3ac2949dba574a84e148080"},
-    {file = "srsly-2.4.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7347cff1eb4ef3fc335d9d4acc89588051b2df43799e5d944696ef43da79c873"},
-    {file = "srsly-2.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9dc1da5cc94d77056b91ba38365c72ae08556b6345bef06257c7e9eccabafe"},
-    {file = "srsly-2.4.8-cp38-cp38-win_amd64.whl", hash = "sha256:dc0bf7b6f23c9ecb49ec0924dc645620276b41e160e9b283ed44ca004c060d79"},
-    {file = "srsly-2.4.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff8df21d00d73c371bead542cefef365ee87ca3a5660de292444021ff84e3b8c"},
-    {file = "srsly-2.4.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ac3e340e65a9fe265105705586aa56054dc3902789fcb9a8f860a218d6c0a00"},
-    {file = "srsly-2.4.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06d1733f4275eff4448e96521cc7dcd8fdabd68ba9b54ca012dcfa2690db2644"},
-    {file = "srsly-2.4.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be5b751ad88fdb58fb73871d456248c88204f213aaa3c9aab49b6a1802b3fa8d"},
-    {file = "srsly-2.4.8-cp39-cp39-win_amd64.whl", hash = "sha256:822a38b8cf112348f3accbc73274a94b7bf82515cb14a85ba586d126a5a72851"},
-    {file = "srsly-2.4.8.tar.gz", hash = "sha256:b24d95a65009c2447e0b49cda043ac53fecf4f09e358d87a57446458f91b8a91"},
+python-versions = "<3.14,>=3.9"
+files = [
+    {file = "srsly-2.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0cda6f65cc0dd1daf47e856b0d6c5d51db8a9343c5007723ca06903dcfe367d"},
+    {file = "srsly-2.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf643e6f45c266cfacea54997a1f9cfe0113fadac1ac21a1ec5b200cfe477ba0"},
+    {file = "srsly-2.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:467ed25ddab09ca9404fda92519a317c803b5ea0849f846e74ba8b7843557df5"},
+    {file = "srsly-2.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8113d202664b7d31025bdbe40b9d3536e8d7154d09520b6a1955818fa6d622"},
+    {file = "srsly-2.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:794d39fccd2b333d24f1b445acc78daf90f3f37d3c0f6f0167f25c56961804e7"},
+    {file = "srsly-2.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:df7fd77457c4d6c630f700b1019a8ad173e411e7cf7cfdea70e5ed86b608083b"},
+    {file = "srsly-2.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:1a4dddb2edb8f7974c9aa5ec46dc687a75215b3bbdc815ce3fc9ea68fe1e94b5"},
+    {file = "srsly-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58f0736794ce00a71d62a39cbba1d62ea8d5be4751df956e802d147da20ecad7"},
+    {file = "srsly-2.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a8269c40859806d71920396d185f4f38dc985cdb6a28d3a326a701e29a5f629"},
+    {file = "srsly-2.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889905900401fefc1032e22b73aecbed8b4251aa363f632b2d1f86fc16f1ad8e"},
+    {file = "srsly-2.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf454755f22589df49c25dc799d8af7b47dce3d861dded35baf0f0b6ceab4422"},
+    {file = "srsly-2.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc0607c8a59013a51dde5c1b4e465558728e9e0a35dcfa73c7cbefa91a0aad50"},
+    {file = "srsly-2.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d5421ba3ab3c790e8b41939c51a1d0f44326bfc052d7a0508860fb79a47aee7f"},
+    {file = "srsly-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:b96ea5a9a0d0379a79c46d255464a372fb14c30f59a8bc113e4316d131a530ab"},
+    {file = "srsly-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:683b54ed63d7dfee03bc2abc4b4a5f2152f81ec217bbadbac01ef1aaf2a75790"},
+    {file = "srsly-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:459d987130e57e83ce9e160899afbeb871d975f811e6958158763dd9a8a20f23"},
+    {file = "srsly-2.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:184e3c98389aab68ff04aab9095bd5f1a8e5a72cc5edcba9d733bac928f5cf9f"},
+    {file = "srsly-2.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c2a3e4856e63b7efd47591d049aaee8e5a250e098917f50d93ea68853fab78"},
+    {file = "srsly-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:366b4708933cd8d6025c13c2cea3331f079c7bb5c25ec76fca392b6fc09818a0"},
+    {file = "srsly-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c8a0b03c64eb6e150d772c5149befbadd981cc734ab13184b0561c17c8cef9b1"},
+    {file = "srsly-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:7952538f6bba91b9d8bf31a642ac9e8b9ccc0ccbb309feb88518bfb84bb0dc0d"},
+    {file = "srsly-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84b372f7ef1604b4a5b3cee1571993931f845a5b58652ac01bcb32c52586d2a8"},
+    {file = "srsly-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6ac3944c112acb3347a39bfdc2ebfc9e2d4bace20fe1c0b764374ac5b83519f2"},
+    {file = "srsly-2.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6118f9c4b221cde0a990d06a42c8a4845218d55b425d8550746fe790acf267e9"},
+    {file = "srsly-2.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7481460110d9986781d9e4ac0f5f991f1d6839284a80ad268625f9a23f686950"},
+    {file = "srsly-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e57b8138082f09e35db60f99757e16652489e9e3692471d8e0c39aa95180688"},
+    {file = "srsly-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bab90b85a63a1fe0bbc74d373c8bb9bb0499ddfa89075e0ebe8d670f12d04691"},
+    {file = "srsly-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e73712be1634b5e1de6f81c273a7d47fe091ad3c79dc779c03d3416a5c117cee"},
+    {file = "srsly-2.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d3b846ece78ec02aee637c1028cbbc6f0756faf8b01af190e9bbc8705321fc0"},
+    {file = "srsly-2.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1529f5beb25a736ba1177f55532a942c786a8b4fe544bf9e9fbbebc5c63f4224"},
+    {file = "srsly-2.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c689a9f8dfa25c56533a3f145693b20ddc56415e25035e526ff7a7251a8c11"},
+    {file = "srsly-2.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5982d01c7ddd62dbdb778a8bd176513d4d093cc56ef925fa2b0e13f71ed1809a"},
+    {file = "srsly-2.5.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:196d3a2cc74758b2284e45f192e0df55d032b70be8481e207affc03216ddb464"},
+    {file = "srsly-2.5.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:de756942e08ac3d8e8f5ae4595855932d7e4357f63adac6925b516c168f24711"},
+    {file = "srsly-2.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:08b4045506cd4b63d2bb0da523156ab3ee67719aac3ca8cb591d6ed7ee55080e"},
+    {file = "srsly-2.5.1.tar.gz", hash = "sha256:ab1b4bf6cf3e29da23dae0493dd1517fb787075206512351421b89b4fc27c77e"},
 ]
 
 [package.dependencies]
@@ -4485,6 +4808,24 @@ pure-eval = "*"
 [package.extras]
 tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
 
+[[package]]
+name = "standardwebhooks"
+version = "1.0.0"
+description = "Standard Webhooks"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "standardwebhooks-1.0.0.tar.gz", hash = "sha256:d94b99c0dcea84156e03adad94f8dba32d5454cc68e12ec2c824051b55bb67ff"},
+]
+
+[package.dependencies]
+attrs = ">=21.3.0"
+Deprecated = "*"
+httpx = ">=0.23.0"
+python-dateutil = "*"
+types-Deprecated = "*"
+types-python-dateutil = "*"
+
 [[package]]
 name = "tabulate"
 version = "0.9.0"
@@ -4544,57 +4885,41 @@ files = [
 
 [[package]]
 name = "thinc"
-version = "8.2.3"
+version = "8.3.4"
 description = "A refreshing functional take on deep learning, compatible with your favorite libraries"
 optional = false
-python-versions = ">=3.6"
-files = [
-    {file = "thinc-8.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:27950dc8a14e1ead09dec329ad98edf1b8f7cc71ec9d5ce5f301073de9d7dadf"},
-    {file = "thinc-8.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fce09571619f344983f915f5deb5b8346304b56d3a9ae1bc5ac8c5872eee0738"},
-    {file = "thinc-8.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0fb4e534c978ff4b429678ab28db2f81503549f97ed61b2b752c07c08b2083"},
-    {file = "thinc-8.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607223c178ae5fba36a3b35fa82d94a453694551bcfbe7f9ac04a01a9e87ebad"},
-    {file = "thinc-8.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:53b48a6ae43b0e4054816a378163237b1d2120a49c71994682037437d64b7f84"},
-    {file = "thinc-8.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db67f460dae2e3aada1ff166394ce13c2dabb4db93d6bd79cd256f5beab9599"},
-    {file = "thinc-8.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d57bdf43e0acd1406d681bf988179f677cf1b385c86f744bf314d827383ce31"},
-    {file = "thinc-8.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78311a593b8bf3f03af52bf71d6b364463c598f3540ea8387c00017d2a0e0a5d"},
-    {file = "thinc-8.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9489ae7fec427064a50a0c3e7c661a95251756032e31316add2c8c13f98f93c"},
-    {file = "thinc-8.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:d0bf3840d434e3dbdf294643e6d54d2042d0e652abc68dee16673f28269fc456"},
-    {file = "thinc-8.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bb7c64d0cb8066c47af9441cd611e89a0e2b28b85f2fffbdec791724c81e1915"},
-    {file = "thinc-8.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c11ab3236e56311568f1e84099bfbeea3a4ee2434758a32982b224ddf8bad9c5"},
-    {file = "thinc-8.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0a7f29ad534b6e761ee24d0c9e7402447e8ed4e772922795f77c98d88d7f99c"},
-    {file = "thinc-8.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2817bde75c92f98fee747efdbebca68d16158b808401c5a922ba54a5f2619e9b"},
-    {file = "thinc-8.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:a336f8cae7374d1768a52e63a5084a1208e30b8761eede113d2703e43e7839f1"},
-    {file = "thinc-8.2.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:45c1a2880329eae53da1d77a4898b7fd30faad445b28fdf92c5557dbf6492ff0"},
-    {file = "thinc-8.2.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c899b25442ed915bc77fa4cf07e908dea1bccab7c4b8d854cc0b261026d6a06"},
-    {file = "thinc-8.2.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83a6b46d5f0accf0c2b2e5ff05b1bffd4d99721513b6d0374574009b0aab292c"},
-    {file = "thinc-8.2.3-cp36-cp36m-win_amd64.whl", hash = "sha256:9a29a9ca7a5060c923866f16ba7823a4540cfd708eafa7202ee89ac029e0b78b"},
-    {file = "thinc-8.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bd25b781faae71c52ba053157ab1865f4163be1a6485e70a007855a037ba060f"},
-    {file = "thinc-8.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01a7107c36c4fc60b60fdbda30d76a0ac9bc8f4f9c7f6872db62250e2f836a5"},
-    {file = "thinc-8.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa65182424efda03be9359c3540928bf2985792f89826a76ee475c7c6b2ec64f"},
-    {file = "thinc-8.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4d448c8a870f594125cbfadc91024ce67683eae5698207101d2ea4793ab222a1"},
-    {file = "thinc-8.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97605421b898441733fda24c6dda74a85325fbeebc808176857b0a8e6e7a9d47"},
-    {file = "thinc-8.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b0309d14bcfdad24b1e8bb87f8b245acfd7eb5305be466c284c788adf026ffa"},
-    {file = "thinc-8.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aead20abe233adade3c37daeb9d08e5429dfcada81856b1f2b1b7e4a67a671a0"},
-    {file = "thinc-8.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:324e5d2c98f787d82d239cf33cee425e1c11e34a3c96cb3f4e1ee5661abef50c"},
-    {file = "thinc-8.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:45e6416e56d5101d0557e31cd06235d80fc89e9ac455ef1b444c440cb3c1ce64"},
-    {file = "thinc-8.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5e6ebf63a185d7691b38655a184e30554fbe589805a802d97230eed07af8ea39"},
-    {file = "thinc-8.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4d29ee871cfd0d40f4a0436e154640c0965b163b91a088a85bcd5658c1cc3ed4"},
-    {file = "thinc-8.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8709d114131680bc7c02b0c97817bd7692eda50beb7849c7908666cf15a6cfd"},
-    {file = "thinc-8.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9b81e3c1e89c8ed6dff5a8440f584cda623ec77a3bd8c0ed059936405b8a7ca"},
-    {file = "thinc-8.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:1df983af74952d4818703e6bac8af64fad338eaaef8b017fa05d372e3c68e577"},
-    {file = "thinc-8.2.3.tar.gz", hash = "sha256:f5afc5222912a80bda8bdcec958362a2ba538d7027dc8db6154845d2859dca76"},
+python-versions = "<3.13,>=3.9"
+files = [
+    {file = "thinc-8.3.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:916ea79a7c7462664be9435679b7769b4fc1ecea3886db6da6118e4eb5cc8c8b"},
+    {file = "thinc-8.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c985ce9cf82a611f4f348c721372d073537ca0e8b7bbb8bd865c1598ddd79d1"},
+    {file = "thinc-8.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fff4b30f8513832d13a31486e9074a7020de3d48f8a3d1527e369c242d6ebe9"},
+    {file = "thinc-8.3.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a9ee46d19b9f4cac13a5539f97978c857338a31e4bf8d9b3a7741dcbc792220f"},
+    {file = "thinc-8.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:d08529d53f8652e15e4f3c0f6953e73f85cc71d3b6e4750d2d9ace23616dbe8f"},
+    {file = "thinc-8.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8bb4b47358a1855803b375f4432cefdf373f46ef249b554418d2e77c7323040"},
+    {file = "thinc-8.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:00ed92f9a34b9794f51fcd48467c863f4eb7c5b41559aef6ef3c980c21378fec"},
+    {file = "thinc-8.3.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85691fca84a6a1506f7ddbd2c1706a5524d56f65582e76b2e260a06d9e83e86d"},
+    {file = "thinc-8.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eae1573fc19e514defc1bfd4f93f0b4bfc1dcefdb6d70bad1863825747f24800"},
+    {file = "thinc-8.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:81e8638f9bdc38e366674acc4b63cf7c6267266a15477963a5db21b3d9f1aa36"},
+    {file = "thinc-8.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c9da6375b106df5186bd2bfd1273bc923c01ab7d482f8942e4ee528a28965c3a"},
+    {file = "thinc-8.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:07091c6b5faace50857c4cf0982204969d77388d0a6f156dd2442297dceeb838"},
+    {file = "thinc-8.3.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd40ad71bcd8b1b9daa0462e1255b1c1e86e901c2fd773966601f44a95878032"},
+    {file = "thinc-8.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb10823b3a3f1c6440998b11bf9a3571dd859feaed0fdb510a1c1097d9dc6a86"},
+    {file = "thinc-8.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5e5e7bf5dae142fd50ed9785971292c4aab4d9ed18e4947653b6a0584d5227c"},
+    {file = "thinc-8.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:960366f41f0d5c4cecdf8610d03bdf80b14a959a7fe94008b788a5336d388781"},
+    {file = "thinc-8.3.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d85babfae9b31e2e20f4884787b1391ca126f84e9b9f7f498990c07f7019f848"},
+    {file = "thinc-8.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8791c87857c474499455bfdd3f58432e2dc1e2cdadf46eb2f3c2293851a8a837"},
+    {file = "thinc-8.3.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c95456cbc1344ab9041c2e16c9fa065ac2b56520929a5a594b3c80ddda136b1e"},
+    {file = "thinc-8.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:11e6e14c1bfdb7c456f3da19dcf94def8304a7b279329f328e55062a292bc79f"},
+    {file = "thinc-8.3.4.tar.gz", hash = "sha256:b5925482498bbb6dca0771e375b35c915818f735891e93d93a662dab15f6ffd8"},
 ]
 
 [package.dependencies]
-blis = ">=0.7.8,<0.8.0"
+blis = ">=1.2.0,<1.3.0"
 catalogue = ">=2.0.4,<2.1.0"
 confection = ">=0.0.1,<1.0.0"
 cymem = ">=2.0.2,<2.1.0"
 murmurhash = ">=1.0.2,<1.1.0"
-numpy = [
-    {version = ">=1.15.0", markers = "python_version < \"3.9\""},
-    {version = ">=1.19.0", markers = "python_version >= \"3.9\""},
-]
+numpy = {version = ">=1.19.0,<3.0.0", markers = "python_version >= \"3.9\""}
 packaging = ">=20.0"
 preshed = ">=3.0.2,<3.1.0"
 pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
@@ -4603,6 +4928,7 @@ srsly = ">=2.4.0,<3.0.0"
 wasabi = ">=0.8.1,<1.2.0"
 
 [package.extras]
+apple = ["thinc-apple-ops (>=1.0.0,<2.0.0)"]
 cuda = ["cupy (>=5.0.0b4)"]
 cuda-autodetect = ["cupy-wheel (>=11.0.0)"]
 cuda100 = ["cupy-cuda100 (>=5.0.0b4)"]
@@ -4622,31 +4948,20 @@ cuda80 = ["cupy-cuda80 (>=5.0.0b4)"]
 cuda90 = ["cupy-cuda90 (>=5.0.0b4)"]
 cuda91 = ["cupy-cuda91 (>=5.0.0b4)"]
 cuda92 = ["cupy-cuda92 (>=5.0.0b4)"]
-datasets = ["ml-datasets (>=0.2.0,<0.3.0)"]
+datasets = ["ml_datasets (>=0.2.0,<0.3.0)"]
 mxnet = ["mxnet (>=1.5.1,<1.6.0)"]
 tensorflow = ["tensorflow (>=2.0.0,<2.6.0)"]
 torch = ["torch (>=1.6.0)"]
 
-[[package]]
-name = "threadpoolctl"
-version = "3.5.0"
-description = "threadpoolctl"
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"},
-    {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"},
-]
-
 [[package]]
 name = "tinycss2"
-version = "1.3.0"
+version = "1.4.0"
 description = "A tiny CSS parser"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"},
-    {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"},
+    {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"},
+    {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"},
 ]
 
 [package.dependencies]
@@ -4658,24 +4973,54 @@ test = ["pytest", "ruff"]
 
 [[package]]
 name = "tokenize-rt"
-version = "5.2.0"
+version = "6.1.0"
 description = "A wrapper around the stdlib `tokenize` which roundtrips."
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"},
-    {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"},
+    {file = "tokenize_rt-6.1.0-py2.py3-none-any.whl", hash = "sha256:d706141cdec4aa5f358945abe36b911b8cbdc844545da99e811250c0cee9b6fc"},
+    {file = "tokenize_rt-6.1.0.tar.gz", hash = "sha256:e8ee836616c0877ab7c7b54776d2fefcc3bde714449a206762425ae114b53c86"},
 ]
 
 [[package]]
 name = "tomli"
-version = "2.0.1"
+version = "2.2.1"
 description = "A lil' TOML parser"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
-    {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+    {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
+    {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
+    {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"},
+    {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"},
+    {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"},
+    {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"},
+    {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"},
+    {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"},
+    {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"},
+    {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"},
+    {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"},
+    {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"},
+    {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"},
+    {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"},
+    {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"},
+    {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"},
+    {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"},
+    {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"},
+    {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"},
+    {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"},
+    {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"},
+    {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"},
+    {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"},
+    {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"},
+    {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"},
+    {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"},
+    {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"},
+    {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"},
+    {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"},
+    {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"},
+    {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"},
+    {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"},
 ]
 
 [[package]]
@@ -4720,13 +5065,13 @@ opt-einsum = ["opt-einsum (>=3.3)"]
 
 [[package]]
 name = "torch-geometric"
-version = "2.5.3"
+version = "2.6.1"
 description = "Graph Neural Network Library for PyTorch"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "torch_geometric-2.5.3-py3-none-any.whl", hash = "sha256:8277abfc12600b0e8047e0c3ea2d55cc43f08c1448e73e924de827c15d0b5f85"},
-    {file = "torch_geometric-2.5.3.tar.gz", hash = "sha256:ad0761650c8fa56cdc46ee61c564fd4995f07f079965fe732b3a76d109fd3edc"},
+    {file = "torch_geometric-2.6.1-py3-none-any.whl", hash = "sha256:8faeb353f9655f7dbec44c5e0b44c721773bdfb279994da96b9b8b12fd30f427"},
+    {file = "torch_geometric-2.6.1.tar.gz", hash = "sha256:1f18f9d0fc4d2239d526221e4f22606a4a3895b5d965a9856d27610a3df662c6"},
 ]
 
 [package.dependencies]
@@ -4737,54 +5082,53 @@ numpy = "*"
 psutil = ">=5.8.0"
 pyparsing = "*"
 requests = "*"
-scikit-learn = "*"
-scipy = "*"
 tqdm = "*"
 
 [package.extras]
 benchmark = ["matplotlib", "networkx", "pandas", "protobuf (<4.21)", "wandb"]
-dev = ["pre-commit", "torch_geometric[test]"]
-full = ["ase", "captum (<0.7.0)", "graphviz", "h5py", "matplotlib", "networkx", "numba", "opt_einsum", "pandas", "pgmpy", "pynndescent", "pytorch-memlab", "rdflib", "rdkit", "scikit-image", "statsmodels", "sympy", "tabulate", "torch_geometric[graphgym,modelhub]", "torchmetrics", "trimesh"]
-graphgym = ["hydra-core", "protobuf (<4.21)", "pytorch-lightning", "yacs"]
+dev = ["ipython", "matplotlib-inline", "pre-commit", "torch_geometric[test]"]
+full = ["ase", "captum (<0.7.0)", "graphviz", "h5py", "matplotlib", "networkx", "numba (<0.60.0)", "opt_einsum", "pandas", "pgmpy", "pynndescent", "pytorch-memlab", "rdflib", "rdkit", "scikit-image", "scikit-learn", "scipy", "statsmodels", "sympy", "tabulate", "torch_geometric[graphgym,modelhub]", "torchmetrics", "trimesh"]
+graphgym = ["protobuf (<4.21)", "pytorch-lightning (<2.3.0)", "yacs"]
 modelhub = ["huggingface_hub"]
 test = ["onnx", "onnxruntime", "pytest", "pytest-cov"]
 
 [[package]]
 name = "tornado"
-version = "6.4"
+version = "6.4.2"
 description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
 optional = false
-python-versions = ">= 3.8"
+python-versions = ">=3.8"
 files = [
-    {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"},
-    {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"},
-    {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"},
-    {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"},
-    {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"},
-    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"},
-    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"},
-    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"},
-    {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"},
-    {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"},
-    {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"},
+    {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"},
+    {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"},
+    {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"},
+    {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"},
+    {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"},
+    {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"},
+    {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"},
+    {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"},
+    {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"},
+    {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"},
+    {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"},
 ]
 
 [[package]]
 name = "tqdm"
-version = "4.66.4"
+version = "4.67.1"
 description = "Fast, Extensible Progress Meter"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"},
-    {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"},
+    {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"},
+    {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"},
 ]
 
 [package.dependencies]
 colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [package.extras]
-dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
+dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"]
+discord = ["requests"]
 notebook = ["ipywidgets (>=6)"]
 slack = ["slack-sdk"]
 telegram = ["requests"]
@@ -4806,48 +5150,63 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
 
 [[package]]
 name = "typer"
-version = "0.9.4"
+version = "0.12.5"
 description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "typer-0.9.4-py3-none-any.whl", hash = "sha256:aa6c4a4e2329d868b80ecbaf16f807f2b54e192209d7ac9dd42691d63f7a54eb"},
-    {file = "typer-0.9.4.tar.gz", hash = "sha256:f714c2d90afae3a7929fcd72a3abb08df305e1ff61719381384211c4070af57f"},
+    {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"},
+    {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"},
 ]
 
 [package.dependencies]
-click = ">=7.1.1,<9.0.0"
-colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""}
-rich = {version = ">=10.11.0,<14.0.0", optional = true, markers = "extra == \"all\""}
-shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""}
+click = ">=8.0.0"
+rich = ">=10.11.0"
+shellingham = ">=1.3.0"
 typing-extensions = ">=3.7.4.3"
 
-[package.extras]
-all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
-dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"]
-doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"]
-test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.971)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
+[[package]]
+name = "types-deprecated"
+version = "1.2.15.20241117"
+description = "Typing stubs for Deprecated"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"},
+    {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"},
+]
 
 [[package]]
 name = "types-python-dateutil"
-version = "2.9.0.20240316"
+version = "2.9.0.20241206"
 description = "Typing stubs for python-dateutil"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"},
-    {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"},
+    {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"},
+    {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"},
 ]
 
 [[package]]
 name = "typing-extensions"
-version = "4.12.0"
+version = "4.12.2"
 description = "Backported and Experimental Type Hints for Python 3.8+"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"},
-    {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"},
+    {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
+    {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
+]
+
+[[package]]
+name = "tzdata"
+version = "2024.2"
+description = "Provider of IANA time zone data"
+optional = false
+python-versions = ">=2"
+files = [
+    {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"},
+    {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"},
 ]
 
 [[package]]
@@ -4866,13 +5225,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake
 
 [[package]]
 name = "urllib3"
-version = "1.26.18"
+version = "1.26.20"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
 files = [
-    {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
-    {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
+    {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"},
+    {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"},
 ]
 
 [package.extras]
@@ -4882,13 +5241,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
 
 [[package]]
 name = "virtualenv"
-version = "20.26.2"
+version = "20.29.0"
 description = "Virtual Python Environment builder"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"},
-    {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"},
+    {file = "virtualenv-20.29.0-py3-none-any.whl", hash = "sha256:c12311863497992dc4b8644f8ea82d3b35bb7ef8ee82e6630d76d0197c39baf9"},
+    {file = "virtualenv-20.29.0.tar.gz", hash = "sha256:6345e1ff19d4b1296954cee076baaf58ff2a12a84a338c62b02eda39f20aa982"},
 ]
 
 [package.dependencies]
@@ -4902,13 +5261,13 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
 
 [[package]]
 name = "wasabi"
-version = "1.1.2"
+version = "1.1.3"
 description = "A lightweight console printing and formatting toolkit"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "wasabi-1.1.2-py3-none-any.whl", hash = "sha256:0a3f933c4bf0ed3f93071132c1b87549733256d6c8de6473c5f7ed2e171b5cf9"},
-    {file = "wasabi-1.1.2.tar.gz", hash = "sha256:1aaef3aceaa32edb9c91330d29d3936c0c39fdb965743549c173cb54b16c30b5"},
+    {file = "wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c"},
+    {file = "wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878"},
 ]
 
 [package.dependencies]
@@ -4927,41 +5286,37 @@ files = [
 
 [[package]]
 name = "weasel"
-version = "0.3.4"
+version = "0.4.1"
 description = "Weasel: A small and easy workflow system"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "weasel-0.3.4-py3-none-any.whl", hash = "sha256:ee48a944f051d007201c2ea1661d0c41035028c5d5a8bcb29a0b10f1100206ae"},
-    {file = "weasel-0.3.4.tar.gz", hash = "sha256:eb16f92dc9f1a3ffa89c165e3a9acd28018ebb656e0da4da02c0d7d8ae3f6178"},
+    {file = "weasel-0.4.1-py3-none-any.whl", hash = "sha256:24140a090ea1ac512a2b2f479cc64192fd1d527a7f3627671268d08ed5ac418c"},
+    {file = "weasel-0.4.1.tar.gz", hash = "sha256:aabc210f072e13f6744e5c3a28037f93702433405cd35673f7c6279147085aa9"},
 ]
 
 [package.dependencies]
-cloudpathlib = ">=0.7.0,<0.17.0"
+cloudpathlib = ">=0.7.0,<1.0.0"
 confection = ">=0.0.4,<0.2.0"
 packaging = ">=20.0"
 pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<3.0.0"
 requests = ">=2.13.0,<3.0.0"
-smart-open = ">=5.2.1,<7.0.0"
+smart-open = ">=5.2.1,<8.0.0"
 srsly = ">=2.4.3,<3.0.0"
-typer = ">=0.3.0,<0.10.0"
+typer = ">=0.3.0,<1.0.0"
 wasabi = ">=0.9.1,<1.2.0"
 
 [[package]]
 name = "webcolors"
-version = "1.13"
+version = "24.11.1"
 description = "A library for working with the color formats defined by HTML and CSS."
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.9"
 files = [
-    {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"},
-    {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"},
+    {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"},
+    {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"},
 ]
 
-[package.extras]
-docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"]
-tests = ["pytest", "pytest-cov"]
-
 [[package]]
 name = "webencodings"
 version = "0.5.1"
@@ -4991,13 +5346,13 @@ test = ["websockets"]
 
 [[package]]
 name = "wheel"
-version = "0.43.0"
+version = "0.45.1"
 description = "A built-package format for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "wheel-0.43.0-py3-none-any.whl", hash = "sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81"},
-    {file = "wheel-0.43.0.tar.gz", hash = "sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85"},
+    {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"},
+    {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"},
 ]
 
 [package.extras]
@@ -5005,13 +5360,13 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"]
 
 [[package]]
 name = "widgetsnbextension"
-version = "3.6.6"
+version = "3.6.10"
 description = "IPython HTML widgets for Jupyter"
 optional = false
 python-versions = "*"
 files = [
-    {file = "widgetsnbextension-3.6.6-py2.py3-none-any.whl", hash = "sha256:e7fb9999845affc9024ecfbe0a824dd8e633403d027b28ceadab398b633ad51c"},
-    {file = "widgetsnbextension-3.6.6.tar.gz", hash = "sha256:46f4e3cb2d451bbd6141a13696d6ba17c9b5f50645dca9cfd26fe9644d5a00e1"},
+    {file = "widgetsnbextension-3.6.10-py2.py3-none-any.whl", hash = "sha256:91a283c2bb50b43ae415dfe69fb026ece0c14e0102987fb53127c7a71e82417d"},
+    {file = "widgetsnbextension-3.6.10.tar.gz", hash = "sha256:cc370876baee1d23d4c506c798ab7d08c355133c9a5e81474159ff75877593df"},
 ]
 
 [package.dependencies]
@@ -5019,75 +5374,83 @@ notebook = ">=4.4.1"
 
 [[package]]
 name = "wordcloud"
-version = "1.9.3"
+version = "1.9.4"
 description = "A little word cloud generator"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "wordcloud-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5fce423a24e6ca1b89b2770a7c6917d6e26f04bcfefa601cf61819b2fc0770c4"},
-    {file = "wordcloud-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3b6adfc1465b9176b8bc602745dd3ed8ea782b006a81cb59eab3dde92ad9f94c"},
-    {file = "wordcloud-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad6db37a6f5abeba51a5d503228ea320d4f2fa774864103e7b24acd9dd86fd0e"},
-    {file = "wordcloud-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e74ac99e9582873d7ee28bd03e125dcf73ae46666d55fb4c13e82e90c0e074a"},
-    {file = "wordcloud-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4001317c0e3b5cb6fd106228ddcd27524d1caf9ae468b3c2c2fc571c6ce56b22"},
-    {file = "wordcloud-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f86042e5ce12e2795798033a56f0246906b4d7d9027d554b6cd951ce2fd342a"},
-    {file = "wordcloud-1.9.3-cp310-cp310-win32.whl", hash = "sha256:3b90f0390c0a05ba4b4580fb765a3d45d8d21519b50ca5006d6dbdc2a0b86507"},
-    {file = "wordcloud-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:6f7977285df9254b8704d3f895c06814a6183c6c89e140d6281848c076635e91"},
-    {file = "wordcloud-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ced0d5c946d82cfc778febafe3eedeb0bae07dd57ea4f21fe06b9ec8225ab31"},
-    {file = "wordcloud-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f5499e6360219e61808dc0d2b00cd5104f78a82d2ae8f7986df04731713835f"},
-    {file = "wordcloud-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb1e8bb7d60f7a90fa8439c7b56dd1df60766115fd57480ac0d83ca5204e0117"},
-    {file = "wordcloud-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e33328044db5c01487f2a3a023b5476947942dacd6a5dc8c217fa039f6c5bd9"},
-    {file = "wordcloud-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:998dc0dc8fcbff88f566f17cb5e0eb3bb21fcafd387b0670be6c14feacaf4cdc"},
-    {file = "wordcloud-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e1a1c3cfa86b605a19711ec58920ccb694dca9d5c9d00b373f4d5952d63793e9"},
-    {file = "wordcloud-1.9.3-cp311-cp311-win32.whl", hash = "sha256:f504e3291256c0b6fca044602f8f0e5cb56b7c33724cde9d279c4077fa5b6d27"},
-    {file = "wordcloud-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:103c9b0465e1cf5b7a38b49ab1c3a0b0301762fa56602ac79287f9d22b46ade3"},
-    {file = "wordcloud-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfea303fc1dec4811e4a5671a8021a89724b6fa70639d059ad30c492932be447"},
-    {file = "wordcloud-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:512f3c9a2e8579269a33ac9219d042fd0cc5a3a524ee68079238a3e4efe2b879"},
-    {file = "wordcloud-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d00d916509a17b432032161d492ed7f30b2ebd921303090fe1d2b57011a49cc0"},
-    {file = "wordcloud-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5e0e7bbd269a62baa63ea2175faea4d74435c0ad828f3d5999fa4c33ebe0629"},
-    {file = "wordcloud-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:483aa4f8d17b9744a3b238269593d1794b962fc757a72a9e7e8468c2665cffb7"},
-    {file = "wordcloud-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:64b342a79553970fa04083761d041067323219ad62b5550a496e42436d23cbb3"},
-    {file = "wordcloud-1.9.3-cp312-cp312-win32.whl", hash = "sha256:419acfe0b1d1227b9e3e14ec1bb6c40fd7fa652df4adf81f0ba3e00daca500b5"},
-    {file = "wordcloud-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:2061a9978a6243107ce1a8a9fa24f421b03a0f7e620769b6f5075857e75aa615"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:21f47fabe189f39532378759300a624ae166519dfafbd6a22cfe65b14a7d104d"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524065f8a5a79e00748f45efbeacd25ac1d15850e0d0588753b17a8b2de2a6a7"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b2bb53492bc8663ba90a300bbd2da7be5059f9ad192ed1150e9bbbda8016c9a"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:643243474faee460e7d08944d3e529c58d0cbf8be11626fbb918ee8ccb913a23"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d95f44739a6972abfb97c12656999952dd28ed03700ee8b6efe35d688d489b36"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:e56364c8829d399397a649501f834c12751ab106cba488ba8d86d532889b528c"},
-    {file = "wordcloud-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:78f4a3fd3526884e4f526ae070bcb47401766c48c9cb6488933f608f810fadae"},
-    {file = "wordcloud-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0058cf08573c99283fe189e93354d20ca8c9a8aac7207d96e74b93aedd02cdcc"},
-    {file = "wordcloud-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47d6918381a8a816141bdd391376bff703ec5aa3a6bd88631097a5e2963ebd1a"},
-    {file = "wordcloud-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05aa3269c5af573cfb11e269de0fe73c2c72aefdd90cdb41368744e7d8bc7507"},
-    {file = "wordcloud-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d74e206f42af172db4d3c0054853523bf46070b12f0626493a56599957dd2196"},
-    {file = "wordcloud-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1932726635c8ed12bb74201d2a6b07f18c2f732aecadb9ae915832485241991f"},
-    {file = "wordcloud-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:038de1701e7853c41850644453f1c9e69f878e480d42efae154684a47fd59f1a"},
-    {file = "wordcloud-1.9.3-cp38-cp38-win32.whl", hash = "sha256:19aa05f60d9261301e4942fd1b1c4b458d903f24c12d2bd1c6ecbb752697a2f3"},
-    {file = "wordcloud-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:ab5bae12cf27d8de986e4d4518d4778f2b56c660b250b631ff805024038311a1"},
-    {file = "wordcloud-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:888d088f54a897b8597da2fae3954d74b1f7251f7d311bbcc30ec3c6987d3605"},
-    {file = "wordcloud-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:daa6cfa11ce24e7eb4e42dc896dae4f74ae2166cf90ec997996300566e6811d1"},
-    {file = "wordcloud-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387dc2bd528ff6bb661451f2a9fd4ccf74b86072d7a2c868285d4c0cf26abeb4"},
-    {file = "wordcloud-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40c32a324319db610b40f387a2a0b42d091817958a5272e0a4c4eb6a158588b5"},
-    {file = "wordcloud-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8078c6c58db4ccb893f120354e7e08bc48a5a5aac3e764f9008bc96a769b208c"},
-    {file = "wordcloud-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81f15eb60abc1676808bb85e2edfdbdc0a9011383f2a729c1c2a0cb941516768"},
-    {file = "wordcloud-1.9.3-cp39-cp39-win32.whl", hash = "sha256:1d1680bf6c3d1b2f8e3bd02ccfa868fee2655fe13cf5b9e9905251050448fbbd"},
-    {file = "wordcloud-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:c0f458681e4d49be36064f21bfb1dc8d8c3021fe30e474ee634666b4f84fd851"},
-    {file = "wordcloud-1.9.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:baea9ac88ec1ab317461c75834b64ad5dad12a02c4f2384dd546eac3c316dbbb"},
-    {file = "wordcloud-1.9.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6956b9f0d0eb14a12f46d41aebb4e7ad2d4c2ec417cc7c586bebd2ddc9c8311"},
-    {file = "wordcloud-1.9.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d221b4d0d1d2a1d79286c41d8a4c0ce70065488f153e5d81cc0be7fb494ff10f"},
-    {file = "wordcloud-1.9.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:db39dbe91dd31ffb667edcd496f4eeb85ceea397fef4ad51d0766ab934088cc7"},
-    {file = "wordcloud-1.9.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a6ae5db43807ca10f5c77dd2d22c78f8f9399758cc5ac6afd7f3c19e58b75d66"},
-    {file = "wordcloud-1.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a1c431f20ee28a8840f2552a89bd8332c455c318f4de7b6c2ca3159b76df4f0"},
-    {file = "wordcloud-1.9.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1847ca4466e2b1588478dd8eb87fa7baa28515b37ab7926471595e8ac81e6578"},
-    {file = "wordcloud-1.9.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7b0e14e4dfcff7dee331df7880a2031e352e95a7d30e74ff152f162488b04179"},
-    {file = "wordcloud-1.9.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f1c0cff6037a3dc46437537a31925f3895d742fb6d67af71194149763de16a76"},
-    {file = "wordcloud-1.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a36788c5c79604653327675023cbd97c68813640887b51ce651bb4f5c28c88b"},
-    {file = "wordcloud-1.9.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e3907c6496e197a9c4be76770c5ff8a03eddbdfe5a151a55e4eedeaa45ab3ad"},
-    {file = "wordcloud-1.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:65e6f6b68eecb85c326ae19729dd4151fcdebffc2142c9ee882dc2de955210d0"},
-    {file = "wordcloud-1.9.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0c8e18c4afa025819332efffe8008267a83a9c54fe72ae1bc889ddce0eec470d"},
-    {file = "wordcloud-1.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4df25cb5dd347e43d53e02a009418f5776e7651063aff991865da8f6336bf193"},
-    {file = "wordcloud-1.9.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53489ad22d58be3896ec16ed47604832e393224c89f7d7eed040096b07141ac4"},
-    {file = "wordcloud-1.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61de4a5f3bfd33e0cb013cce6143bcf71959f3cd8536650b90134d745a553c2c"},
-    {file = "wordcloud-1.9.3.tar.gz", hash = "sha256:a9aa738d63ed674a40f0cc31adb83f4ca5fc195f03a6aff6e010d1f5807d1c58"},
+    {file = "wordcloud-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:61a84e7311fce8415943edcb7b2ba65b4bfec1dc6dff8fe5a8ea76e278447fb2"},
+    {file = "wordcloud-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e8752750726f31385f364823d3ef1d9c8ec829e5c07706c36beb40679945c71"},
+    {file = "wordcloud-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:990dfd6dd43a1c7fa156be865eb98aba167a986b65f56cbf50e24772107fcd70"},
+    {file = "wordcloud-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a70fe8999cd63aec64daa0377b720be6e5ff344963b828caeb4c2a081599a3a0"},
+    {file = "wordcloud-1.9.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:37dcd5500cc2ea02950739390e89e2efa6624c2f54b5e2df1ee961fce685b2d7"},
+    {file = "wordcloud-1.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5cc5c902dc2492b9fc0e29a1f5c688422d7e6eb9e5c0e43f0331d1c8e1341ba"},
+    {file = "wordcloud-1.9.4-cp310-cp310-win32.whl", hash = "sha256:c20fbb51af2046c940b4fead4bafffc30b4191f5fb477c3af844446d8956bfd4"},
+    {file = "wordcloud-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:61a153e76d73c72f5cc6c89ee80ddad70758a207c3c6b1d86be8635ec70164f1"},
+    {file = "wordcloud-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af168eeaed67a675f35b5668a7804c4d64f8e4f62a273b909eb5cc39efc4c294"},
+    {file = "wordcloud-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3092bf85cb20158c8b90d78650dc0226985109ac6fe13a0086ac47b9581b62ce"},
+    {file = "wordcloud-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddfb852f551681f5e33feb934505e060952b6aa98aaa48c781cdbf101f84e7cc"},
+    {file = "wordcloud-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57ad8064a634a4870fcd00a9694c0a7839c6dfbac3d32522c69d5e1e9cbfd911"},
+    {file = "wordcloud-1.9.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ea14858973ad8561a20a5475eb8d7ad33622bc5f27c60206fbb3e10a036cee26"},
+    {file = "wordcloud-1.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b27759f12dd235468ff8c1df875b106b23dbf2c74aae05cdcdc3ccd8e23ea89c"},
+    {file = "wordcloud-1.9.4-cp311-cp311-win32.whl", hash = "sha256:0ac3d87627022fb8cce17297298be96c91185edd55ecf8906f89f981b55974f0"},
+    {file = "wordcloud-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:85368249df056527f1b64e80e68636abb61f0f6bd2d1c430894d2af1feea7f73"},
+    {file = "wordcloud-1.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3910494ce5acb27731fd5678d146e8aa8f588d5fdb455810c817ff4b84ee0f67"},
+    {file = "wordcloud-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b1c29a0089ee90778700cc96305fa830a6a5bbb342eaaa59d6ac8d37a9b232f"},
+    {file = "wordcloud-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f369ae7bef16341c2bb208e658d5e4c56517046eb6176f89ac95525eaf8ace09"},
+    {file = "wordcloud-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ec6ffba61ca20123e7c09103a5692bbc3163f75ee0bdc7893e80e0e2786ccd2"},
+    {file = "wordcloud-1.9.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cdc4aac2bcce77fd91dbfe91db5a8c0cdc239e10d8954356d2ebf79a3b43646c"},
+    {file = "wordcloud-1.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e4942fbed48a88a0c42c5b0a057651fc09d26b31be8b6c069adaaa5051836040"},
+    {file = "wordcloud-1.9.4-cp312-cp312-win32.whl", hash = "sha256:96b801fe4b2aa39bb6c5e68b4a74c81fd8996dd5fb5cea31fda518dc5f77ad82"},
+    {file = "wordcloud-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:360977705d0808a1795fcbe98afb5dc4833cb4bb8e421cbb10e93ef0bce816ff"},
+    {file = "wordcloud-1.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:88c4c99f43b13df0e812fac0e4680cca2afd3ce16ade506812127ed7c7b9d132"},
+    {file = "wordcloud-1.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2367ec70b2f195c278f91caf4674871ee9218eb57250e01a02b986d34e55f88e"},
+    {file = "wordcloud-1.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6104a52936886dbc785844ab6986b5321a312238abb242ee4062c7b3fdcca7c"},
+    {file = "wordcloud-1.9.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81bbe75b2725730bf5cbabfe86a5c38960e7ce1166f76ba7001964d8de50b3a7"},
+    {file = "wordcloud-1.9.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a936b8e03c32cc84c99ad8f1bdaf261dfef6c44d31ca5b0c7d0df147220dbb3c"},
+    {file = "wordcloud-1.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:046300566df97b48640bd3efd94957a56941ada98cc23f811bc3f9b6a0ac1350"},
+    {file = "wordcloud-1.9.4-cp313-cp313-win32.whl", hash = "sha256:22357990a01d87579dbd38a06c2a5c7b601179c4e17517b1b8f73d25faa6a5ed"},
+    {file = "wordcloud-1.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:8c9a5af2fbcf029a19e827adbee58e86efe7536dca7a42380a8601113a86069b"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:42affa75c1b033cb0a0afb674f653c4af16d51d97a0852c5770b659b903d9af5"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0876722c35cf4d5d7717ab81ba98b946e07b0e869252248fdd9ea1fd6c977cc"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:489079ef173fe83ccff8baffd7a3c2d5fedfd31221c25ad21b4de770ea37b49f"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3f3dc2dacca48eac9b130a8938b473db81cfbeeb1a738530a7098913941a8211"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:2e509c4588ae2ce47ee5cc5cf353422e7f7ecc38f450998654ed50565c8a550d"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:8009f53ba0c3b2d6f2b1dad83e0fb165ebcdfbd000ce62ebe0917106f51d975d"},
+    {file = "wordcloud-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:30b1a59b9073eaaa4f2b0f27d5b6b6c3eb6aaa3a6e0b3dbb2220036b25b37dac"},
+    {file = "wordcloud-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a685babefe032716c1a00b7d8cec3f6bfdc1c89fd839578432fc53824a02fea"},
+    {file = "wordcloud-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b78b9fb292a243cf8fcdf63b9cc1fd157ec6abbf1a6e675303668b85e948f616"},
+    {file = "wordcloud-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51ab42c00bc4782ab45701de45226a269ca0850df14e1bd63a60da73271724e"},
+    {file = "wordcloud-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38ee69d9404504cf2419d60c3017af7ab9e88f4ba6cf47bc1c96b2d5e58ef513"},
+    {file = "wordcloud-1.9.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9955223708f196c1e431ae3b86074409bc256c5868e4f50eb9c36c6f06f8b1a3"},
+    {file = "wordcloud-1.9.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3585ab8f4f09f1508f2d351ed48f9b56472ae26eaf6e2d2e76e975abd715d7a2"},
+    {file = "wordcloud-1.9.4-cp38-cp38-win32.whl", hash = "sha256:d7d0b89c2ada0e65d84a6ebbdd8d36876b5da1a143cce2f7dcdaff6714232d24"},
+    {file = "wordcloud-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:bd7caefe91d4084c1608d816052eeb605d9a7aee0c908f3a9d7421ee6363bde0"},
+    {file = "wordcloud-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e5b2f7195adef0a071dc24a568d8a7715bc5cf5d752b4560f51da3aa4467dcf8"},
+    {file = "wordcloud-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:34843fa49135c4ed3739dea050696e707fd00e7335ee4ed62c33639589f90adf"},
+    {file = "wordcloud-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6570cc4e48e8e951d24ef6599cd8bf7ff405fbe995ff6d596bcdfa290a6206a8"},
+    {file = "wordcloud-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17f944805a17b8343eb877c9aa1dc9e5339eb14c02dd00ec80feccea899bbf81"},
+    {file = "wordcloud-1.9.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7c1cd2a6ef876f5f9fe0255e44f131a6113f883447ed1cf8bdb86f569603bac9"},
+    {file = "wordcloud-1.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2b129584327ba21d05869fcf9495f10f7b31a34a580c431c4942a71ce2317e79"},
+    {file = "wordcloud-1.9.4-cp39-cp39-win32.whl", hash = "sha256:526dfd822600f158210a191a59cc4bdcaaa1ff05ab2aa199040d857a518b1db6"},
+    {file = "wordcloud-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac32b851a19b7d2a9ee5e0aebc8210bf16eadc42c5c0da82e36d447552c8ec48"},
+    {file = "wordcloud-1.9.4-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f733cca468eae79af83cdda1de2434f1799cefef461ed892e7679d5a4c929fa1"},
+    {file = "wordcloud-1.9.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a99f96efe5983c6eed17abb8766ced713ddf18b26450da74addc91570922e62"},
+    {file = "wordcloud-1.9.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80773ec6a9caa2048602bc347151e3b6e68e1d8fab148dfd0d2e7d4302ce5c01"},
+    {file = "wordcloud-1.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ca95392bba150190cca8df4a97854b554bdeb28007f28bf4698bd7e1af91b310"},
+    {file = "wordcloud-1.9.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eed94b42676f4cfa9b9bdac777e3a1f046b16250216dd8ddcb583c4b6e4b1286"},
+    {file = "wordcloud-1.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b38aae2ff7aa10ad00d57a5b87ed4a573ef04dbc9119d4a304349c9cb3e03b6e"},
+    {file = "wordcloud-1.9.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3057be0d071afd57afb9be84fec767abdd78eac6396ead0f0f55c6775170945"},
+    {file = "wordcloud-1.9.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9c39351d2cffc15e3794f7afab78e9135d700f61c5b51904c55d9f3729d1a0df"},
+    {file = "wordcloud-1.9.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:914745f0312d248c1a0e1f16ae7b3ce82f78924a2b050ca912d2453c62586da4"},
+    {file = "wordcloud-1.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:885d51d20cc7b0dad2306fb76b867de20e759e005a1a6e183f3865b5e5f53985"},
+    {file = "wordcloud-1.9.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61fc126ed9ce8d55bf20acbdc00284f5a6da66900197a2dd7b62c5ac37585ac5"},
+    {file = "wordcloud-1.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c7b8536955f5026b0587ff829265392185b6b4bc923f2ed933c805fcac412b28"},
+    {file = "wordcloud-1.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6a30ed8aa50b98edb113f72ef619581c221ba3678adeeed88345263c90092561"},
+    {file = "wordcloud-1.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a62627e5b081b23a4586104d4b01d064db7b53342ae123b511326585eaf7433c"},
+    {file = "wordcloud-1.9.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e137493365770f59655c7308ff76addc95ada2c6bd50ac119e4c33091e2e4e08"},
+    {file = "wordcloud-1.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:665f8e7de3dcc1e43aa5bdd9560d56ed51026ba638a33472eede2b9051108adb"},
+    {file = "wordcloud-1.9.4.tar.gz", hash = "sha256:b273d8a5ded97d3ead904046b49464dcb71119ee79df875072a4c105cadd347a"},
 ]
 
 [package.dependencies]
@@ -5097,206 +5460,340 @@ pillow = "*"
 
 [[package]]
 name = "wrapt"
-version = "1.14.1"
+version = "1.17.2"
 description = "Module for decorators, wrappers and monkey patching."
 optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
-files = [
-    {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"},
-    {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"},
-    {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"},
-    {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"},
-    {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"},
-    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"},
-    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"},
-    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"},
-    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"},
-    {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"},
-    {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"},
-    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"},
-    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"},
-    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"},
-    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"},
-    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"},
-    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"},
-    {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"},
-    {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"},
-    {file = "wrapt-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecee4132c6cd2ce5308e21672015ddfed1ff975ad0ac8d27168ea82e71413f55"},
-    {file = "wrapt-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2020f391008ef874c6d9e208b24f28e31bcb85ccff4f335f15a3251d222b92d9"},
-    {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2feecf86e1f7a86517cab34ae6c2f081fd2d0dac860cb0c0ded96d799d20b335"},
-    {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:240b1686f38ae665d1b15475966fe0472f78e71b1b4903c143a842659c8e4cb9"},
-    {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9008dad07d71f68487c91e96579c8567c98ca4c3881b9b113bc7b33e9fd78b8"},
-    {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6447e9f3ba72f8e2b985a1da758767698efa72723d5b59accefd716e9e8272bf"},
-    {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:acae32e13a4153809db37405f5eba5bac5fbe2e2ba61ab227926a22901051c0a"},
-    {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49ef582b7a1152ae2766557f0550a9fcbf7bbd76f43fbdc94dd3bf07cc7168be"},
-    {file = "wrapt-1.14.1-cp311-cp311-win32.whl", hash = "sha256:358fe87cc899c6bb0ddc185bf3dbfa4ba646f05b1b0b9b5a27c2cb92c2cea204"},
-    {file = "wrapt-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:26046cd03936ae745a502abf44dac702a5e6880b2b01c29aea8ddf3353b68224"},
-    {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"},
-    {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"},
-    {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"},
-    {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"},
-    {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"},
-    {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"},
-    {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"},
-    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"},
-    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"},
-    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"},
-    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"},
-    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"},
-    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"},
-    {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"},
-    {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"},
-    {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"},
-    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"},
-    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"},
-    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"},
-    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"},
-    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"},
-    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"},
-    {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"},
-    {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"},
-    {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"},
-    {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"},
-    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"},
-    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"},
-    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"},
-    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"},
-    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"},
-    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"},
-    {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"},
-    {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"},
-    {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"},
-    {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"},
-    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"},
-    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"},
-    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"},
-    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"},
-    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"},
-    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"},
-    {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"},
-    {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"},
-    {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"},
+python-versions = ">=3.8"
+files = [
+    {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"},
+    {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"},
+    {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"},
+    {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"},
+    {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"},
+    {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"},
+    {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"},
+    {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"},
+    {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"},
+    {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"},
+    {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"},
+    {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"},
+    {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"},
+    {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"},
+    {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"},
+    {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"},
+    {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"},
+    {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"},
+    {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"},
+    {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"},
+    {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"},
+    {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"},
+    {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"},
+    {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"},
+    {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"},
+    {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"},
+    {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"},
+    {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"},
+    {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"},
+    {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"},
+    {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"},
+    {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"},
+    {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"},
+    {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"},
+    {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"},
+    {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"},
+    {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"},
+    {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"},
+    {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"},
+    {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"},
+    {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"},
+    {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"},
+    {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"},
+    {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"},
+    {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"},
+    {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"},
+    {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"},
+    {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"},
+    {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"},
+    {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"},
+    {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"},
+    {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"},
+    {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"},
+    {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"},
+    {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"},
+    {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"},
+    {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"},
+    {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"},
+    {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"},
+    {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"},
+    {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"},
+    {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"},
+    {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"},
+    {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"},
+    {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"},
+    {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"},
+    {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"},
+    {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"},
+    {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"},
+    {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"},
+    {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"},
+    {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"},
+    {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"},
+    {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"},
+    {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"},
+    {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"},
+    {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"},
+    {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"},
+    {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"},
+]
+
+[[package]]
+name = "xxhash"
+version = "3.5.0"
+description = "Python binding for xxHash"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"},
+    {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"},
+    {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"},
+    {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"},
+    {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"},
+    {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"},
+    {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"},
+    {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"},
+    {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"},
+    {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"},
+    {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"},
+    {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"},
+    {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"},
+    {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"},
+    {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"},
+    {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"},
+    {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"},
+    {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"},
+    {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"},
+    {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"},
+    {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"},
+    {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"},
+    {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"},
+    {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"},
+    {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"},
+    {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"},
+    {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"},
+    {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"},
+    {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"},
+    {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"},
+    {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"},
+    {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"},
+    {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"},
+    {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"},
+    {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"},
+    {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"},
+    {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"},
+    {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"},
+    {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"},
+    {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"},
+    {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"},
+    {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"},
+    {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"},
+    {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"},
+    {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"},
+    {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"},
+    {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"},
+    {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"},
+    {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"},
+    {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"},
+    {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"},
+    {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"},
+    {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"},
+    {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"},
+    {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"},
+    {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"},
+    {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"},
+    {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"},
+    {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"},
+    {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"},
+    {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"},
+    {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"},
+    {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"},
+    {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"},
+    {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"},
+    {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"},
+    {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"},
+    {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"},
+    {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"},
+    {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"},
+    {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"},
+    {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"},
+    {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"},
+    {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"},
+    {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"},
+    {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"},
+    {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"},
+    {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"},
+    {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"},
+    {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"},
+    {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"},
+    {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"},
+    {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"},
+    {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"},
+    {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"},
+    {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"},
+    {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"},
+    {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"},
+    {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"},
+    {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"},
+    {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"},
+    {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"},
+    {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"},
+    {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"},
+    {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"},
+    {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"},
+    {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"},
+    {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"},
+    {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"},
+    {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"},
+    {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"},
+    {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"},
+    {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"},
+    {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"},
+    {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"},
+    {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"},
+    {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"},
+    {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"},
+    {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"},
+    {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"},
+    {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"},
+    {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"},
+    {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"},
+    {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"},
+    {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"},
+    {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"},
+    {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"},
+    {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"},
+    {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"},
+    {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"},
+    {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"},
+    {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"},
+    {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"},
 ]
 
 [[package]]
 name = "yarl"
-version = "1.9.4"
+version = "1.18.3"
 description = "Yet another URL library"
 optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"},
-    {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"},
-    {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"},
-    {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"},
-    {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"},
-    {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"},
-    {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"},
-    {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"},
-    {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"},
-    {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"},
-    {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"},
-    {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"},
-    {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"},
-    {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"},
-    {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"},
-    {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"},
-    {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"},
-    {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"},
+python-versions = ">=3.9"
+files = [
+    {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"},
+    {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"},
+    {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"},
+    {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"},
+    {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"},
+    {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"},
+    {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"},
+    {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"},
+    {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"},
+    {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"},
+    {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"},
+    {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"},
+    {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"},
+    {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"},
+    {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"},
+    {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"},
+    {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"},
+    {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"},
+    {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"},
+    {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"},
+    {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"},
+    {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"},
+    {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"},
+    {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"},
+    {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"},
+    {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"},
+    {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"},
+    {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"},
+    {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"},
+    {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"},
+    {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"},
+    {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"},
+    {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"},
+    {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"},
+    {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"},
+    {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"},
+    {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"},
+    {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"},
+    {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"},
+    {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"},
+    {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"},
+    {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"},
+    {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"},
+    {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"},
+    {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"},
+    {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"},
+    {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"},
+    {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"},
+    {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"},
+    {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"},
+    {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"},
+    {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"},
+    {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"},
+    {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"},
+    {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"},
+    {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"},
+    {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"},
 ]
 
 [package.dependencies]
 idna = ">=2.0"
 multidict = ">=4.0"
+propcache = ">=0.2.0"
 
 [[package]]
 name = "zipp"
-version = "3.19.0"
+version = "3.21.0"
 description = "Backport of pathlib-compatible object wrapper for zip files"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "zipp-3.19.0-py3-none-any.whl", hash = "sha256:96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec"},
-    {file = "zipp-3.19.0.tar.gz", hash = "sha256:952df858fb3164426c976d9338d3961e8e8b3758e2e059e0f754b8c4262625ee"},
+    {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
+    {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
 ]
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
+type = ["pytest-mypy"]
 
 [metadata]
 lock-version = "2.0"
-python-versions = ">= 3.8, <3.11"
-content-hash = "17c6665a4cf1daae54cc4f35544f0053991e39a82ead6ada944cb5f7889b82a5"
+python-versions = ">= 3.9, <3.11"
+content-hash = "1be4bc4804bb706a9147e1ea8b51dd3249552966db0e935d015316aa773fff87"
diff --git a/pyproject.toml b/pyproject.toml
index 422447c..f4d2118 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,8 +10,8 @@ packages = [
 ]
 
 [tool.poetry.dependencies]
-python = ">= 3.8, <3.11"
-deepsearch-toolkit = "0.48.0"
+python = ">= 3.9, <3.11"
+deepsearch-toolkit = "2.0.0"
 jupyter = "^1.0.0"
 ipywidgets = "^7"  # previous major release is needed bcause of mols2grid
 numpy = "^1.23.4"
@@ -29,8 +29,8 @@ spacy = "^3.5.2"
 pydantic = "^2.0.3"
 python-dotenv = "^1.0.0"
 nbclient = "^0.9.0"
-pandas = "^1.5.1"
-argilla = "^1.24.0"
+pandas = "^2.0.0"
+argilla = "^2.6.0"
 deepsearch-glm = {version = "v0.16.2", markers = "sys_platform != 'win32'"}
 
 [tool.poetry.group.dev.dependencies]