diff --git a/docs/examples/text_semantic_split.ipynb b/docs/examples/text_semantic_split.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1d2af3ddca7868f088c9903554df0f46b060d2b7 --- /dev/null +++ b/docs/examples/text_semantic_split.ipynb @@ -0,0 +1,179 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "text = '''\n", + "In a recent surge of social media discussions on Weibo, Chinese netizens have been engaging in conversations about the struggles and challenges of earning money. The online debate sparked a wave of opinions and perspectives on the relationship between hard work, high pay, and finding contentment. Among the tweets, several users pontificated that one should avoid earning \"too much hard-earned money.\"\n", + "The tweets and discussions revolve around the idea that working too hard for one's income can have a detrimental effect on one's life, both physically and mentally. Some users advocate for finding opportunities that align with one's strengths and passions, rather than simply focusing on high-paying jobs that may require excessive hours and intense labor.\n", + "One Weibo user pontificates, \"Don't earn that much hard-earned money,\" a sentiment echoed by others with tweets such as, \"Why is it that when earning money, that process always has to be so tough?\" This question is followed by a comparison between two types of people - those who are used to earning money the hard way and those who seem to effortlessly obtain wealth. While the former group is depicted as having been taught to suffer from a young age, the latter is shown as being able to focus solely on their natural talents and thriving in their niche advantageously.\n", + "Discussions on the platform draw attention to a variety of issues that those who earn money the hard way might face. For example, they are described as likely having to work overtime, forgo time off for illness or rest, and maintain an unyielding dedication to their occupation, which often results in a never-ending cycle of work without any perceived progression in their lives.\n", + "Another tweet that captures this sentiment reads, \"Drowning in more work and poverty despite trying harder and harder,\" pointing to a sense of despair and dissatisfaction that comes with work that is both disproportionately demanding and inadequately rewarding. Critics also note how the pursuit of hard-earned money could potentially create physical and mental health risks due to the unrelenting pressure and stress that these jobs might impose.\n", + "Conversely, those in favor of earning money with less difficulty contend that it's crucial to harness one's strengths and passions to create opportunities that yield financial success without the need for excessive labor. The debate revolves around the concept that people should seek out ways to work smarter, not harder, especially if it means a healthier and more fulfilling lifestyle.\n", + "In fact, the notion of a \"vicious cycle,\" often attributed to those chasing hard-earned money, is juxtaposed with an idealized image of someone operating in their zone of excellence. Confidently focused on their strengths, such individuals are depicted as enjoying a more relaxed and less stressful work environment, one in which they can thrive without the need for never-ending overtime or self-sacrifice.\n", + "Some tweets even extend this sentiment to the broader socio-economic context, observing how wealth is not merely derived from manual labor or high-paying positions requiring extraordinary work hours. The tweets emphasize the importance of cultivating an entrepreneurial spirit and a penchant for innovative thinking, especially in the modern digital age.\n", + "One user writes, \"Too hard-earned money isn't worth it. Learn how to make money using your brain, not your body,\" while another suggests, \"Love will flow towards those who are not lacking in love, and money will flow towards those who are not lacking in money!\"\n", + "While some of the discussions take a somewhat passive-aggressive view, others acknowledge that financial security and comfort might not always be possible for everyone. In a more realistic tone, a user remarks, \"If life were so easy that diligence led to wealth, then the world's richest person would be the best worker bee. But that's not the case.\" This acknowledgment underscores the complexities of the economy and the role that factors like luck, connections, and a rapidly evolving job market can play in financial success.\n", + "Some users are quick to criticize the notion that earning money the hard way should be avoided, with one tweet expressing, \"The person who advises you to avoid hard-earned money is likely a scammer who profits off providing emotional value in exchange for exploitation.\" Others argue that while it's essential to find enjoyment and fulfillment in one's work, it's crucial not to shun or belittle those who choose to work in physically demanding or high-paying industries.\n", + "Overall, the Weibo discussions offer a fascinating insight into the complexities of the modern Chinese labor market and the work-life balance that people strive to achieve. As in many countries, striking the right balance between work and play is an ongoing challenge for many Chinese citizens. However, the conversations on Weibo signal an increasing awareness of the importance of finding meaningful, fulfilling, and financially rewarding work that doesn't necessitate excessive sacrifice or sufferance.\n", + "In the end, as one user succinctly puts it, \"Make sure you're earning your money in a way that brings you joy and satisfaction. That's the only way to ensure that your life doesn't become a never-ending cycle of hard work without any tangible progress.\"\n", + "In this context, social media discussions focusing on the trials and tribulations of earning money serve not only as an outlet for venting frustrations but also as a means of promoting dialogue and shared understanding about the challenges faced by workers across all industries. These virtual conversations sparked by tweets and in-depth discussions likely resonate with a wide swath of Chinese citizens struggling to navigate the complexities of balancing a career that pays well with one that brings them joy, fulfillment, and a sense of purpose.\n", + "As the discussions on Weibo continue to evolve and unfold, it is evident that the discourse around work, money, and life satisfaction holds the potential to inspire meaningful change and shift societal attitudes towards a more holistic, balanced, and humane understanding of success and prosperity.\n", + "---\n", + "Note: The translated tweets and user quotes from Chinese to English were used as the foundation for the long-form news article. The author tried to maintain the integrity of the original content in the translation while adapting it to fit a journalistic format. No inaccuracies were introduced during translation, and the opinion-based nature of the original content was preserved while maintaining objectivity.\n", + "Heart count: 0/2\n", + "Note: The author did not include any Chinese characters in the final response.\n", + "Collapse\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from semantic_router.splitters import RollingWindowSplitter\n", + "from semantic_router.encoders import OpenAIEncoder\n", + "\n", + "splitter = RollingWindowSplitter(\n", + " encoder=OpenAIEncoder(),\n", + " min_split_tokens=50,\n", + " max_split_tokens=300,\n", + " window_size=5, # sentences\n", + " plot_splits=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[33m2024-02-23 09:50:04 WARNING semantic_router.utils.logger Single document exceeds the maximum token limit of 300. Splitting to sentences before semantically splitting.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 0: Trying threshold: 0.8881277932028191\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 0: Median tokens per split: 24.0\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 0: Adjusting high to 0.8781277932028191\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 1: Trying threshold: 0.8687934834140205\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 1: Median tokens per split: 34.5\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Iteration 1: Adjusting high to 0.8587934834140205\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Final optimal threshold: 0.8687934834140205\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 218 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 262 tokens due to exceeding token limit of 300.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 137 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 249 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 117 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 171 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Split finalized with 72 tokens due to threshold 0.8687934834140205.\u001b[0m\n", + "\u001b[32m2024-02-23 09:50:05 INFO semantic_router.utils.logger Final split added with 23 tokens due to remaining documents.\u001b[0m\n" + ] + }, + { + "data": { + "image/png": "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q43lVq/YdYtBbvEC8uwXdUyXf9bkxnK8/ZwRf/zxB1q0aCF1GERERERERPSYuX79Opo3b15lGSbyRmi1Wvz111+ws7Mz6ftR5+fno0WLFrh+/Xq19xkk08PzJ188d/LFcydfPHfyxvMnXzx38sVzJz+CIODWrVto2rQplMqqV8Fzar0RSqWy2l9ATIm9vT0vThnj+ZMvnjv54rmTL547eeP5ky+eO/niuZMXBweHGpXjZndEREREREREMsJEnoiIiIiIiEhGmMjLmKWlJWJiYmBpaSl1KPQQeP7ki+dOvnju5IvnTt54/uSL506+eO4aNm52R0RERERERCQjHJEnIiIiIiIikhEm8kREREREREQywkSeiIiIiIiISEaYyBMRERERERHJCBN5GVu5ciU8PT1hZWWFoKAgHDt2TOqQqBrz58+HQqEweLRt21bqsKgSP//8M8LCwtC0aVMoFAps377d4HVBEDBv3jy4u7tDrVYjJCQEFy9elCZYMlDduQsPD69wLQ4aNEiaYMlAbGwsunXrBjs7OzRp0gRDhw5FamqqQZni4mJMmTIFzs7OsLW1xfDhw3Hjxg2JIiadmpy74ODgCtfe5MmTJYqYdFatWoWOHTvC3t4e9vb26N69O/bu3at/ndec6aru3PGaa7iYyMvUli1bMH36dMTExODkyZPw9/dHaGgosrKypA6NqvHEE08gIyND//jll1+kDokqUVhYCH9/f6xcudLo60uWLMGKFSuwevVq/Prrr7CxsUFoaCiKi4vrOVJ6UHXnDgAGDRpkcC1u2rSpHiOkyhw4cABTpkzB0aNH8eOPP6KsrAwDBw5EYWGhvsy0adPw3Xff4euvv8aBAwfw119/YdiwYRJGTUDNzh0AREZGGlx7S5YskShi0mnevDnef/99JCUl4cSJE+jXrx+GDBmC33//HQCvOVNW3bkDeM01WALJUmBgoDBlyhT93xqNRmjatKkQGxsrYVRUnZiYGMHf31/qMOghABC2bdum/1ur1Qpubm7CBx98oD+Wm5srWFpaCps2bZIgQqrMg+dOEARh/PjxwpAhQySJh2onKytLACAcOHBAEITy68zc3Fz4+uuv9WVSUlIEAMKRI0ekCpOMePDcCYIg9OnTR3j99delC4pqrFGjRsKaNWt4zcmQ7twJAq+5howj8jJUWlqKpKQkhISE6I8plUqE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997DkCFD8O9//xvjxo0DAISEhKBDhw76pOnYsWMYN24c+vTpg4CAAABATEwMNm3ahJiYGKSkpODMmTNYvHix/nP69euHTz/9FL/99htOnDiByZMnVxjBfRgLFixAbGwsVqxYgQsXLuDMmTOIi4vDsmXLalyHp6cnCgoKkJCQgOzs7Ep/YBgxYgQ++ugj/Prrr7h69SoSExMxZcoU+Pj4oG3btrCzs8OMGTMwbdo0rFu3DmlpaTh58iQ++eQTrFu3DgDw8ssv4/z585g5cyYuXLiAr776Sr9z/6NMEffx8cHYsWMxbtw4bN26Fenp6Th27BhiY2Oxe/fuWrXF6dOnkZqaiuzsbKOzJh5GSEgIfHx8MH78eJw6dQoHDx7E3LlzDcqMHTsWLi4uGDJkCA4ePIj09HQkJibitddewx9//AEAmDx5Mlq0aIG3334by5Ytg0ajMbhrABERPX6YyBMR0WNn3759cHd3h6enJwYNGoT9+/djxYoV2LFjh36KtkKhwI4dO9CoUSP07t0bISEhaNWqFbZs2aKvJzg4GF9//TV27tyJTp06oV+/fjh27Jj+9Q8//BAtWrRAr169MGbMGMyYMQPW1taPHH9ERATWrFmDuLg4dOjQAX369EF8fHytlgX06NEDkydPxqhRo9C4cWMsWbLEaLnQ0FB89913CAsL0yelbdu2xQ8//AAzs/KJfQsXLkR0dDRiY2PRrl07DBo0CLt379bH4+XlhW+++QZbt25Fx44dsWrVKn1CW9vp9w+Ki4vDuHHj8MYbb8DX1xdDhw7F8ePH4eHhUeM6IiMj4evri4CAADRu3BiHDh16pJh0lEoltm3bhtu3byMwMBARERFYtGiRQRlra2v8/PPP8PDwwLBhw9CuXTtMnDgRxcXFsLe3x//+9z/s2bMH69evh5mZGWxsbLBhwwb897//xd69e+skTiIikh+FUFeLxIiIiIhqaNGiRVi9ejWuX78udShERESywzXyREREJLrPPvsM3bp1g7OzMw4dOoQPPvgAUVFRUodFREQkS0zkiYiISHQXL17Eu+++i7///hseHh544403MHv2bKnDIiIikiVOrSciIiIiIiKSEW52R0RERERERCQjTOSJiIiIiIiIZISJPBEREREREZGMMJEnIiIiIiIikhEm8kREREREREQywkSeiIiIiIiISEaYyBMRERERERHJCBN5IiIiIiIiIhlhIk9EREREREQkI/8fCayzeDK/FSwAAAAASUVORK5CYII=", + "text/plain": [ + "<Figure size 1200x600 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "splits = splitter([text])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Split 1, tokens 218:\n", + "\u001b[31mIn a recent surge of social media discussions on Weibo, Chinese netizens have been engaging in conversations about the struggles and challenges of earning money. The online debate sparked a wave of opinions and perspectives on the relationship between hard work, high pay, and finding contentment. Among the tweets, several users pontificated that one should avoid earning \"too much hard-earned money.\" The tweets and discussions revolve around the idea that working too hard for one's income can have a detrimental effect on one's life, both physically and mentally. Some users advocate for finding opportunities that align with one's strengths and passions, rather than simply focusing on high-paying jobs that may require excessive hours and intense labor. One Weibo user pontificates, \"Don't earn that much hard-earned money,\" a sentiment echoed by others with tweets such as, \"Why is it that when earning money, that process always has to be so tough?\" This question is followed by a comparison between two types of people - those who are used to earning money the hard way and those who seem to effortlessly obtain wealth.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 2, tokens 262:\n", + "\u001b[32mWhile the former group is depicted as having been taught to suffer from a young age, the latter is shown as being able to focus solely on their natural talents and thriving in their niche advantageously. Discussions on the platform draw attention to a variety of issues that those who earn money the hard way might face. For example, they are described as likely having to work overtime, forgo time off for illness or rest, and maintain an unyielding dedication to their occupation, which often results in a never-ending cycle of work without any perceived progression in their lives. Another tweet that captures this sentiment reads, \"Drowning in more work and poverty despite trying harder and harder,\" pointing to a sense of despair and dissatisfaction that comes with work that is both disproportionately demanding and inadequately rewarding. Critics also note how the pursuit of hard-earned money could potentially create physical and mental health risks due to the unrelenting pressure and stress that these jobs might impose. Conversely, those in favor of earning money with less difficulty contend that it's crucial to harness one's strengths and passions to create opportunities that yield financial success without the need for excessive labor. The debate revolves around the concept that people should seek out ways to work smarter, not harder, especially if it means a healthier and more fulfilling lifestyle.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 3, tokens 137:\n", + "\u001b[34mIn fact, the notion of a \"vicious cycle,\" often attributed to those chasing hard-earned money, is juxtaposed with an idealized image of someone operating in their zone of excellence. Confidently focused on their strengths, such individuals are depicted as enjoying a more relaxed and less stressful work environment, one in which they can thrive without the need for never-ending overtime or self-sacrifice. Some tweets even extend this sentiment to the broader socio-economic context, observing how wealth is not merely derived from manual labor or high-paying positions requiring extraordinary work hours. The tweets emphasize the importance of cultivating an entrepreneurial spirit and a penchant for innovative thinking, especially in the modern digital age.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 4, tokens 249:\n", + "\u001b[35mOne user writes, \"Too hard-earned money isn't worth it. Learn how to make money using your brain, not your body,\" while another suggests, \"Love will flow towards those who are not lacking in love, and money will flow towards those who are not lacking in money!\" While some of the discussions take a somewhat passive-aggressive view, others acknowledge that financial security and comfort might not always be possible for everyone. In a more realistic tone, a user remarks, \"If life were so easy that diligence led to wealth, then the world's richest person would be the best worker bee. But that's not the case.\" This acknowledgment underscores the complexities of the economy and the role that factors like luck, connections, and a rapidly evolving job market can play in financial success. Some users are quick to criticize the notion that earning money the hard way should be avoided, with one tweet expressing, \"The person who advises you to avoid hard-earned money is likely a scammer who profits off providing emotional value in exchange for exploitation.\" Others argue that while it's essential to find enjoyment and fulfillment in one's work, it's crucial not to shun or belittle those who choose to work in physically demanding or high-paying industries.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 5, tokens 117:\n", + "\u001b[31mOverall, the Weibo discussions offer a fascinating insight into the complexities of the modern Chinese labor market and the work-life balance that people strive to achieve. As in many countries, striking the right balance between work and play is an ongoing challenge for many Chinese citizens. However, the conversations on Weibo signal an increasing awareness of the importance of finding meaningful, fulfilling, and financially rewarding work that doesn't necessitate excessive sacrifice or sufferance. In the end, as one user succinctly puts it, \"Make sure you're earning your money in a way that brings you joy and satisfaction.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 6, tokens 171:\n", + "\u001b[32mThat's the only way to ensure that your life doesn't become a never-ending cycle of hard work without any tangible progress.\" In this context, social media discussions focusing on the trials and tribulations of earning money serve not only as an outlet for venting frustrations but also as a means of promoting dialogue and shared understanding about the challenges faced by workers across all industries. These virtual conversations sparked by tweets and in-depth discussions likely resonate with a wide swath of Chinese citizens struggling to navigate the complexities of balancing a career that pays well with one that brings them joy, fulfillment, and a sense of purpose. As the discussions on Weibo continue to evolve and unfold, it is evident that the discourse around work, money, and life satisfaction holds the potential to inspire meaningful change and shift societal attitudes towards a more holistic, balanced, and humane understanding of success and prosperity.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 7, tokens 72:\n", + "\u001b[34m--- Note: The translated tweets and user quotes from Chinese to English were used as the foundation for the long-form news article. The author tried to maintain the integrity of the original content in the translation while adapting it to fit a journalistic format. No inaccuracies were introduced during translation, and the opinion-based nature of the original content was preserved while maintaining objectivity.\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n", + "Split 8, tokens 23:\n", + "\u001b[35mHeart count: 0/2 Note: The author did not include any Chinese characters in the final response. Collapse\u001b[0m\n", + "----------------------------------------------------------------------------------------\n", + "\n", + "\n" + ] + } + ], + "source": [ + "from semantic_router.splitters.utils import plot_splits\n", + "\n", + "plot_splits(splits)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/poetry.lock b/poetry.lock index ef8400e58e93c9e031b60f0a9ab86eb5311a2664..c728f42ffb889390a808651838bebe730c875c37 100644 --- a/poetry.lock +++ b/poetry.lock @@ -213,6 +213,27 @@ files = [ {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = true +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "black" version = "23.12.1" @@ -334,6 +355,17 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +optional = true +python-versions = ">=3.7" +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + [[package]] name = "charset-normalizer" version = "3.3.2" @@ -449,13 +481,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cohere" -version = "4.45" +version = "4.47" description = "Python SDK for the Cohere API" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "cohere-4.45-py3-none-any.whl", hash = "sha256:bdaa2e5e1c64cf3b1d55caf9d483a33fa8eafed731a999fb0934ae12c0638b75"}, - {file = "cohere-4.45.tar.gz", hash = "sha256:63b21b2dc3abd718b18cae726a69d1b096a34eb59f3331c20469fd0df1672816"}, + {file = "cohere-4.47-py3-none-any.whl", hash = "sha256:8b96a1ab57713eceffb4ffd58bf647055676fb741a4e5153c14296f9814c77fa"}, + {file = "cohere-4.47.tar.gz", hash = "sha256:d689212079c1a545bd497b143cff7aa5632831fa6cf41bf7acc93b4a6effb839"}, ] [package.dependencies] @@ -528,6 +560,69 @@ traitlets = ">=4" [package.extras] test = ["pytest"] +[[package]] +name = "contourpy" +version = "1.2.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, +] + +[package.dependencies] +numpy = ">=1.20,<2.0" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + [[package]] name = "coverage" version = "7.4.1" @@ -595,31 +690,134 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cryptography" +version = "42.0.4" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"}, + {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"}, + {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"}, + {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"}, + {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"}, + {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"}, + {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"}, + {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"}, + {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"}, + {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"}, + {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"}, + {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"}, + {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"}, + {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dataclasses-json" +version = "0.6.4" +description = "Easily serialize dataclasses to and from JSON." +optional = true +python-versions = ">=3.7,<4.0" +files = [ + {file = "dataclasses_json-0.6.4-py3-none-any.whl", hash = "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2"}, + {file = "dataclasses_json-0.6.4.tar.gz", hash = "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377"}, +] + +[package.dependencies] +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + +[[package]] +name = "dataclasses-json-speakeasy" +version = "0.5.11" +description = "Easily serialize dataclasses to and from JSON." +optional = true +python-versions = ">=3.7,<4.0" +files = [ + {file = "dataclasses_json_speakeasy-0.5.11-py3-none-any.whl", hash = "sha256:ac52a069a01e8521015d682f37849bfdf056c36fa3f81497055e201fec684104"}, + {file = "dataclasses_json_speakeasy-0.5.11.tar.gz", hash = "sha256:418a987cea2ccf4e4be662f39faa5cc79b47b147c9d1a69d6928d6a27e0c17e8"}, +] + +[package.dependencies] +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + [[package]] name = "debugpy" -version = "1.8.0" +version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, - {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, - {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, - {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, - {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, - {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, - {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, - {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, - {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, - {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, - {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, - {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, - {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, - {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, - {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, - {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, - {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, - {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, + {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"}, ] [[package]] @@ -655,6 +853,31 @@ files = [ {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, ] +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + +[[package]] +name = "emoji" +version = "2.10.1" +description = "Emoji for Python" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "emoji-2.10.1-py2.py3-none-any.whl", hash = "sha256:11fb369ea79d20c14efa4362c732d67126df294a7959a2c98bfd7447c12a218e"}, + {file = "emoji-2.10.1.tar.gz", hash = "sha256:16287283518fb7141bde00198f9ffff4e1c1cb570efb68b2f1ec50975c3a581d"}, +] + +[package.extras] +dev = ["coverage", "coveralls", "pytest"] + [[package]] name = "exceptiongroup" version = "1.2.0" @@ -699,42 +922,42 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastavro" -version = "1.9.3" +version = "1.9.4" description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.8" files = [ - {file = "fastavro-1.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5e9b2e1427fb84c0754bc34923d10cabcf2ed23230201208a1371ab7b6027674"}, - {file = "fastavro-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ef82f86ae276309abc0072598474b6be68105a0b28f8d7cc0398d1d353d7de"}, - {file = "fastavro-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280ef7ab7232ecb2097038d6842416ec717d0e1c314b80ff245f85201f3396a4"}, - {file = "fastavro-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a36cfc0421ed7576ecb1c22de7bd1dedcce62aebbffcc597379d59171e5d76e"}, - {file = "fastavro-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d80f2e20199140eb8c036b4393e9bc9eff325543311b958c72318999499d4279"}, - {file = "fastavro-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:a435f7edd7c5b52cee3f23ca950cd9373ab35cf2aa3d269b3d6aca7e2fc1372c"}, - {file = "fastavro-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a7053ed10194ec53754f5337b57b3273a74b48505edcd6edb79fe3c4cd259c0"}, - {file = "fastavro-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853e01f13534d1baa0a3d493a8573e665e93ffa35b4bf1d125e21764d343af8e"}, - {file = "fastavro-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a279cda25d876e6f120950cadf184a307fd8998f9a22a90bb62e6749f88d1e"}, - {file = "fastavro-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:63d6f928840f3fb1f2e1fe20bc8b7d0e1a51ba4bb0e554ecb837a669fba31288"}, - {file = "fastavro-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8807046edc78f50b3ea5f55f6a534c87b2a13538e7c56fec3532ef802bcae333"}, - {file = "fastavro-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:e502579da4a51c5630eadbd811a1b3d262d6e783bf19998cfb33d2ea0cf6f516"}, - {file = "fastavro-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6b665efe442061df8d9608c2fb692847df85d52ad825b776c441802f0dfa6571"}, - {file = "fastavro-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b8c96d81f0115633489d7f1133a03832922629a61ca81c1d47b482ddcda3b94"}, - {file = "fastavro-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338c7ec94dd2474c4679e44d2560a1922cb6fa99acbb7b18957264baf8eadfc7"}, - {file = "fastavro-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a509b34c9af71a109c633631ac2f6d2209830e13200d0048f7e9c057fd563f8f"}, - {file = "fastavro-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:967edefab470987c024cd5a1fcd04744a50a91e740c7bdf325181043a47f1083"}, - {file = "fastavro-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:033c15e8ed02f80f01d58be1cd880b09fd444faf277263d563a727711d47a98a"}, - {file = "fastavro-1.9.3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:6b38723327603d77080aec56628e13a739415f8596ca0cc41a905615977c6d6b"}, - {file = "fastavro-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046d75c4400941fd08f0a6855a34ae63bf02ea01f366b5b749942abe10640056"}, - {file = "fastavro-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87ab312b8baf0e61ee717878d390022ee1b713d70b244d69efbf3325680f9749"}, - {file = "fastavro-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c562fcf8f5091a2446aafd0c2a0da590c24e0b53527a0100d33908e32f20eea8"}, - {file = "fastavro-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2aa0111e7ebd076d2a094862bbdf8ea175cebba148fcce6c89ff46b625e334b4"}, - {file = "fastavro-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:652072e0f455ca19a1ee502b527e603389783657c130d81f89df66775979d6f5"}, - {file = "fastavro-1.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0a57cdd4edaee36d4216faf801ebc7f53f45e4e1518bdd9832d6f6f1d6e2d88f"}, - {file = "fastavro-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b46a18ebed61573b0823c28eda2716485d283258a83659c7fe6ad3aaeacfed4"}, - {file = "fastavro-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f756f0723f3bd97db20437d0a8e45712839e6ccd7c82f4d82469533be48b4c7"}, - {file = "fastavro-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d98d5a08063f5b6d7ac5016a0dfe0698b50d9987cb74686f7dfa8288b7b09e0b"}, - {file = "fastavro-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:00698e60db58a2d52cb709df882d451fb7664ebb2f8cb37d9171697e060dc767"}, - {file = "fastavro-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d021bbc135023194688e88a7431fb0b5e3ce20e27153bf258f2ce08ee1a0106b"}, - {file = "fastavro-1.9.3.tar.gz", hash = "sha256:a30d3d2353f6d3b4f6dcd6a97ae937b3775faddd63f5856fe11ba3b0dbb1756a"}, + {file = "fastavro-1.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:60cb38f07462a7fb4e4440ed0de67d3d400ae6b3d780f81327bebde9aa55faef"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063d01d197fc929c20adc09ca9f0ca86d33ac25ee0963ce0b438244eee8315ae"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a9053fcfbc895f2a16a4303af22077e3a8fdcf1cd5d6ed47ff2ef22cbba2f0"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:02bf1276b7326397314adf41b34a4890f6ffa59cf7e0eb20b9e4ab0a143a1598"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56bed9eca435389a8861e6e2d631ec7f8f5dda5b23f93517ac710665bd34ca29"}, + {file = "fastavro-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:0cd2099c8c672b853e0b20c13e9b62a69d3fbf67ee7c59c7271ba5df1680310d"}, + {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"}, + {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"}, + {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"}, + {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"}, + {file = "fastavro-1.9.4-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4451ee9a305a73313a1558d471299f3130e4ecc10a88bf5742aa03fb37e042e6"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8524fccfb379565568c045d29b2ebf71e1f2c0dd484aeda9fe784ef5febe1a8"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d0a00a6e09baa20f6f038d7a2ddcb7eef0e7a9980e947a018300cb047091b8"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:23d7e5b29c9bf6f26e8be754b2c8b919838e506f78ef724de7d22881696712fc"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e6ab3ee53944326460edf1125b2ad5be2fadd80f7211b13c45fa0c503b4cf8d"}, + {file = "fastavro-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:64d335ec2004204c501f8697c385d0a8f6b521ac82d5b30696f789ff5bc85f3c"}, + {file = "fastavro-1.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:7e05f44c493e89e73833bd3ff3790538726906d2856f59adc8103539f4a1b232"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:253c63993250bff4ee7b11fb46cf3a4622180a783bedc82a24c6fdcd1b10ca2a"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d6942eb1db14640c2581e0ecd1bbe0afc8a83731fcd3064ae7f429d7880cb7"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d47bb66be6091cd48cfe026adcad11c8b11d7d815a2949a1e4ccf03df981ca65"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c293897f12f910e58a1024f9c77f565aa8e23b36aafda6ad8e7041accc57a57f"}, + {file = "fastavro-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:f05d2afcb10a92e2a9e580a3891f090589b3e567fdc5641f8a46a0b084f120c3"}, + {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"}, ] [package.extras] @@ -778,6 +1001,17 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "filetype" +version = "1.2.0" +description = "Infer file type and MIME type of any file/buffer. No external dependencies." +optional = true +python-versions = "*" +files = [ + {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, + {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, +] + [[package]] name = "flatbuffers" version = "23.5.26" @@ -789,6 +1023,71 @@ files = [ {file = "flatbuffers-23.5.26.tar.gz", hash = "sha256:9ea1144cac05ce5d86e2859f431c6cd5e66cd9c78c558317c7955fb8d4c78d89"}, ] +[[package]] +name = "fonttools" +version = "4.49.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, + {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, + {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, + {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, + {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, + {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, + {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, + {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, + {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, + {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, + {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, + {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, + {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + [[package]] name = "frozenlist" version = "1.4.1" @@ -923,13 +1222,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.2" +version = "1.0.3" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, - {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, + {file = "httpcore-1.0.3-py3-none-any.whl", hash = "sha256:9a6a501c3099307d9fd76ac244e08503427679b1e81ceb1d922485e2f2462ad2"}, + {file = "httpcore-1.0.3.tar.gz", hash = "sha256:5c0f9546ad17dac4d0772b0808856eb616eb8b48ce94f49ed819fd6982a8a544"}, ] [package.dependencies] @@ -940,7 +1239,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.23.0)"] +trio = ["trio (>=0.22.0,<0.24.0)"] [[package]] name = "httpx" @@ -1043,6 +1342,24 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] + +[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 = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -1124,6 +1441,24 @@ qtconsole = ["qtconsole"] 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 = "jaraco-classes" +version = "3.3.1" +description = "Utility functions for Python class constructs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jaraco.classes-3.3.1-py3-none-any.whl", hash = "sha256:86b534de565381f6b3c1c830d13f931d7be1a75f0081c57dff615578676e2206"}, + {file = "jaraco.classes-3.3.1.tar.gz", hash = "sha256:cb28a5ebda8bc47d8c8015307d93163464f9f2b91ab4006e09ff0ce07e8bfb30"}, +] + +[package.dependencies] +more-itertools = "*" + +[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 = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + [[package]] name = "jedi" version = "0.19.1" @@ -1143,6 +1478,21 @@ docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alab qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +[[package]] +name = "jeepney" +version = "0.8.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] + +[package.extras] +test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["async_generator", "trio"] + [[package]] name = "jinja2" version = "3.1.3" @@ -1171,6 +1521,17 @@ files = [ {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, ] +[[package]] +name = "jsonpath-python" +version = "1.0.6" +description = "A more powerful JSONPath implementation in modern python" +optional = true +python-versions = ">=3.6" +files = [ + {file = "jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666"}, + {file = "jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575"}, +] + [[package]] name = "jupyter-client" version = "8.6.0" @@ -1214,14 +1575,164 @@ traitlets = ">=5.3" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +[[package]] +name = "keyring" +version = "24.3.0" +description = "Store and access your passwords safely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "keyring-24.3.0-py3-none-any.whl", hash = "sha256:4446d35d636e6a10b8bce7caa66913dd9eca5fd222ca03a3d42c38608ac30836"}, + {file = "keyring-24.3.0.tar.gz", hash = "sha256:e730ecffd309658a08ee82535a3b5ec4b4c8669a9be11efb66249d8e0aeb9a25"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} +"jaraco.classes" = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +completion = ["shtab (>=1.1.0)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +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"}, +] + +[[package]] +name = "langdetect" +version = "1.0.9" +description = "Language detection library ported from Google's language-detection." +optional = true +python-versions = "*" +files = [ + {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, + {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, +] + +[package.dependencies] +six = "*" + [[package]] name = "llama-cpp-python" -version = "0.2.39" +version = "0.2.44" description = "Python bindings for the llama.cpp library" optional = true python-versions = ">=3.8" files = [ - {file = "llama_cpp_python-0.2.39.tar.gz", hash = "sha256:e4fed6d0e9b925810a6463d75ef339d73288db5fa004938e5b6ce4fb40977d4f"}, + {file = "llama_cpp_python-0.2.44.tar.gz", hash = "sha256:afe0e93548d4ba75f20bc754039907594738a6381c9f4602922bcc8a418b2039"}, ] [package.dependencies] @@ -1236,6 +1747,123 @@ dev = ["black (>=23.3.0)", "httpx (>=0.24.1)", "mkdocs (>=1.4.3)", "mkdocs-mater server = ["fastapi (>=0.100.0)", "pydantic-settings (>=2.0.1)", "sse-starlette (>=1.6.1)", "starlette-context (>=0.3.6,<0.4)", "uvicorn (>=0.22.0)"] test = ["httpx (>=0.24.1)", "pytest (>=7.4.0)", "scipy (>=1.10)"] +[[package]] +name = "lxml" +version = "5.1.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = true +python-versions = ">=3.6" +files = [ + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.7)"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -1305,6 +1933,90 @@ files = [ {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] +[[package]] +name = "marshmallow" +version = "3.20.2" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = true +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, + {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["pre-commit (>=2.4,<4.0)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "matplot" +version = "0.1.9" +description = "" +optional = false +python-versions = "*" +files = [ + {file = "matplot-0.1.9-py2.py3-none-any.whl", hash = "sha256:794ec24272a7672d5c89c4bbb581ceb0881c0d08c95d4f79c454a54ad4a1cdfa"}, + {file = "matplot-0.1.9.tar.gz", hash = "sha256:89369d0974a5c5b6e5815532a9202ce09db0d70a909251bf0af0c608818c8fa4"}, +] + +[package.dependencies] +matplotlib = ">=3.1.1" +pyloco = ">=0.0.134" + +[[package]] +name = "matplotlib" +version = "3.8.3" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, + {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, + {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, + {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, + {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, + {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, + {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, + {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, + {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, + {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + [[package]] name = "matplotlib-inline" version = "0.1.6" @@ -1319,6 +2031,17 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mistralai" version = "0.0.12" @@ -1379,6 +2102,17 @@ files = [ {file = "mmh3-3.1.0.tar.gz", hash = "sha256:9b0f2b2ab4a915333c9d1089572e290a021ebb5b900bb7f7114dccc03995d732"}, ] +[[package]] +name = "more-itertools" +version = "10.2.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.8" +files = [ + {file = "more-itertools-10.2.0.tar.gz", hash = "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"}, + {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, +] + [[package]] name = "mpmath" version = "1.3.0" @@ -1582,6 +2316,31 @@ doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9. extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] +[[package]] +name = "nh3" +version = "0.2.15" +description = "Python bindings to the ammonia HTML sanitization library." +optional = false +python-versions = "*" +files = [ + {file = "nh3-0.2.15-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:9c0d415f6b7f2338f93035bba5c0d8c1b464e538bfbb1d598acd47d7969284f0"}, + {file = "nh3-0.2.15-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6f42f99f0cf6312e470b6c09e04da31f9abaadcd3eb591d7d1a88ea931dca7f3"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac19c0d68cd42ecd7ead91a3a032fdfff23d29302dbb1311e641a130dfefba97"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0d77272ce6d34db6c87b4f894f037d55183d9518f948bba236fe81e2bb4e28"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8d595df02413aa38586c24811237e95937ef18304e108b7e92c890a06793e3bf"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86e447a63ca0b16318deb62498db4f76fc60699ce0a1231262880b38b6cff911"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3277481293b868b2715907310c7be0f1b9d10491d5adf9fce11756a97e97eddf"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60684857cfa8fdbb74daa867e5cad3f0c9789415aba660614fe16cd66cbb9ec7"}, + {file = "nh3-0.2.15-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b803a5875e7234907f7d64777dfde2b93db992376f3d6d7af7f3bc347deb305"}, + {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0d02d0ff79dfd8208ed25a39c12cbda092388fff7f1662466e27d97ad011b770"}, + {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f3b53ba93bb7725acab1e030bc2ecd012a817040fd7851b332f86e2f9bb98dc6"}, + {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:b1e97221cedaf15a54f5243f2c5894bb12ca951ae4ddfd02a9d4ea9df9e1a29d"}, + {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5167a6403d19c515217b6bcaaa9be420974a6ac30e0da9e84d4fc67a5d474c5"}, + {file = "nh3-0.2.15-cp37-abi3-win32.whl", hash = "sha256:427fecbb1031db085eaac9931362adf4a796428ef0163070c484b5a768e71601"}, + {file = "nh3-0.2.15-cp37-abi3-win_amd64.whl", hash = "sha256:bc2d086fb540d0fa52ce35afaded4ea526b8fc4d3339f783db55c95de40ef02e"}, + {file = "nh3-0.2.15.tar.gz", hash = "sha256:d1e30ff2d8d58fb2a14961f7aac1bbb1c51f9bdd7da727be35c63826060b0bf3"}, +] + [[package]] name = "nltk" version = "3.8.1" @@ -1878,13 +2637,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.11.1" +version = "1.12.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.11.1-py3-none-any.whl", hash = "sha256:e0f388ce499f53f58079d0c1f571f356f2b168b84d0d24a412506b6abc714980"}, - {file = "openai-1.11.1.tar.gz", hash = "sha256:f66b8fe431af43e09594147ef3cdcb79758285de72ebafd52be9700a2af41e99"}, + {file = "openai-1.12.0-py3-none-any.whl", hash = "sha256:a54002c814e05222e413664f651b5916714e4700d041d5cf5724d3ae1a3e3481"}, + {file = "openai-1.12.0.tar.gz", hash = "sha256:99c5d257d09ea6533d689d1cc77caa0ac679fa21efef8893d8b0832a86877f1b"}, ] [package.dependencies] @@ -1901,61 +2660,61 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "orjson" -version = "3.9.13" +version = "3.9.14" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fa6b67f8bef277c2a4aadd548d58796854e7d760964126c3209b19bccc6a74f1"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b812417199eeb169c25f67815cfb66fd8de7ff098bf57d065e8c1943a7ba5c8f"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ccd5bd222e5041069ad9d9868ab59e6dbc53ecde8d8c82b919954fbba43b46b"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaaf80957c38e9d3f796f355a80fad945e72cd745e6b64c210e635b7043b673e"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60da7316131185d0110a1848e9ad15311e6c8938ee0b5be8cbd7261e1d80ee8f"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b98cd948372f0eb219bc309dee4633db1278687161e3280d9e693b6076951d2"}, - {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3869d65561f10071d3e7f35ae58fd377056f67d7aaed5222f318390c3ad30339"}, - {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43fd6036b16bb6742d03dae62f7bdf8214d06dea47e4353cde7e2bd1358d186f"}, - {file = "orjson-3.9.13-cp310-none-win32.whl", hash = "sha256:0d3ba9d88e20765335260d7b25547d7c571eee2b698200f97afa7d8c7cd668fc"}, - {file = "orjson-3.9.13-cp310-none-win_amd64.whl", hash = "sha256:6e47153db080f5e87e8ba638f1a8b18995eede6b0abb93964d58cf11bcea362f"}, - {file = "orjson-3.9.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4584e8eb727bc431baaf1bf97e35a1d8a0109c924ec847395673dfd5f4ef6d6f"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f37f0cdd026ef777a4336e599d8194c8357fc14760c2a5ddcfdf1965d45504b"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d714595d81efab11b42bccd119977d94b25d12d3a806851ff6bfd286a4bce960"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9171e8e1a1f221953e38e84ae0abffe8759002fd8968106ee379febbb5358b33"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ab9dbdec3f13f3ea6f937564ce21651844cfbf2725099f2f490426acf683c23"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:811ac076855e33e931549340288e0761873baf29276ad00f221709933c644330"}, - {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:860d0f5b42d0c0afd73fa4177709f6e1b966ba691fcd72175affa902052a81d6"}, - {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:838b898e8c1f26eb6b8d81b180981273f6f5110c76c22c384979aca854194f1b"}, - {file = "orjson-3.9.13-cp311-none-win32.whl", hash = "sha256:d3222db9df629ef3c3673124f2e05fb72bc4a320c117e953fec0d69dde82e36d"}, - {file = "orjson-3.9.13-cp311-none-win_amd64.whl", hash = "sha256:978117122ca4cc59b28af5322253017f6c5fc03dbdda78c7f4b94ae984c8dd43"}, - {file = "orjson-3.9.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:031df1026c7ea8303332d78711f180231e3ae8b564271fb748a03926587c5546"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fd9a2101d04e85086ea6198786a3f016e45475f800712e6833e14bf9ce2832f"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446d9ad04204e79229ae19502daeea56479e55cbc32634655d886f5a39e91b44"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b57c0954a9fdd2b05b9cec0f5a12a0bdce5bf021a5b3b09323041613972481ab"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:266e55c83f81248f63cc93d11c5e3a53df49a5d2598fa9e9db5f99837a802d5d"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31372ba3a9fe8ad118e7d22fba46bbc18e89039e3bfa89db7bc8c18ee722dca8"}, - {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3b0c4da61f39899561e08e571f54472a09fa71717d9797928af558175ae5243"}, - {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cc03a35bfc71c8ebf96ce49b82c2a7be6af4b3cd3ac34166fdb42ac510bbfff"}, - {file = "orjson-3.9.13-cp312-none-win_amd64.whl", hash = "sha256:49b7e3fe861cb246361825d1a238f2584ed8ea21e714bf6bb17cebb86772e61c"}, - {file = "orjson-3.9.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:62e9a99879c4d5a04926ac2518a992134bfa00d546ea5a4cae4b9be454d35a22"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d92a3e835a5100f1d5b566fff79217eab92223ca31900dba733902a182a35ab0"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23f21faf072ed3b60b5954686f98157e073f6a8068eaa58dbde83e87212eda84"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:828c502bb261588f7de897e06cb23c4b122997cb039d2014cb78e7dabe92ef0c"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16946d095212a3dec552572c5d9bca7afa40f3116ad49695a397be07d529f1fa"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3deadd8dc0e9ff844b5b656fa30a48dbee1c3b332d8278302dd9637f6b09f627"}, - {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9b1b5adc5adf596c59dca57156b71ad301d73956f5bab4039b0e34dbf50b9fa0"}, - {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ddc089315d030c54f0f03fb38286e2667c05009a78d659f108a8efcfbdf2e585"}, - {file = "orjson-3.9.13-cp38-none-win32.whl", hash = "sha256:ae77275a28667d9c82d4522b681504642055efa0368d73108511647c6499b31c"}, - {file = "orjson-3.9.13-cp38-none-win_amd64.whl", hash = "sha256:730385fdb99a21fce9bb84bb7fcbda72c88626facd74956bda712834b480729d"}, - {file = "orjson-3.9.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7e8e4a571d958910272af8d53a9cbe6599f9f5fd496a1bc51211183bb2072cbd"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfad553a36548262e7da0f3a7464270e13900b898800fb571a5d4b298c3f8356"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d691c44604941945b00e0a13b19a7d9c1a19511abadf0080f373e98fdeb6b31"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8c83718346de08d68b3cb1105c5d91e5fc39885d8610fdda16613d4e3941459"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ef57a53bfc2091a7cd50a640d9ae866bd7d92a5225a1bab6baa60ef62583f2"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9156b96afa38db71344522f5517077eaedf62fcd2c9148392ff93d801128809c"}, - {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31fb66b41fb2c4c817d9610f0bc7d31345728d7b5295ac78b63603407432a2b2"}, - {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8a730bf07feacb0863974e67b206b7c503a62199de1cece2eb0d4c233ec29c11"}, - {file = "orjson-3.9.13-cp39-none-win32.whl", hash = "sha256:5ef58869f3399acbbe013518d8b374ee9558659eef14bca0984f67cb1fbd3c37"}, - {file = "orjson-3.9.13-cp39-none-win_amd64.whl", hash = "sha256:9bcf56efdb83244cde070e82a69c0f03c47c235f0a5cb6c81d9da23af7fbaae4"}, - {file = "orjson-3.9.13.tar.gz", hash = "sha256:fc6bc65b0cf524ee042e0bc2912b9206ef242edfba7426cf95763e4af01f527a"}, + {file = "orjson-3.9.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:793f6c9448ab6eb7d4974b4dde3f230345c08ca6c7995330fbceeb43a5c8aa5e"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bc7928d161840096adc956703494b5c0193ede887346f028216cac0af87500"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58b36f54da759602d8e2f7dad958752d453dfe2c7122767bc7f765e17dc59959"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abcda41ecdc950399c05eff761c3de91485d9a70d8227cb599ad3a66afe93bcc"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df76ecd17b1b3627bddfd689faaf206380a1a38cc9f6c4075bd884eaedcf46c2"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d450a8e0656efb5d0fcb062157b918ab02dcca73278975b4ee9ea49e2fcf5bd5"}, + {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:95c03137b0cf66517c8baa65770507a756d3a89489d8ecf864ea92348e1beabe"}, + {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20837e10835c98973673406d6798e10f821e7744520633811a5a3d809762d8cc"}, + {file = "orjson-3.9.14-cp310-none-win32.whl", hash = "sha256:1f7b6f3ef10ae8e3558abb729873d033dbb5843507c66b1c0767e32502ba96bb"}, + {file = "orjson-3.9.14-cp310-none-win_amd64.whl", hash = "sha256:ea890e6dc1711aeec0a33b8520e395c2f3d59ead5b4351a788e06bf95fc7ba81"}, + {file = "orjson-3.9.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c19009ff37f033c70acd04b636380379499dac2cba27ae7dfc24f304deabbc81"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19cdea0664aec0b7f385be84986d4defd3334e9c3c799407686ee1c26f7b8251"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135d518f73787ce323b1a5e21fb854fe22258d7a8ae562b81a49d6c7f826f2a3"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2cf1d0557c61c75e18cf7d69fb689b77896e95553e212c0cc64cf2087944b84"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7c11667421df2d8b18b021223505dcc3ee51be518d54e4dc49161ac88ac2b87"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eefc41ba42e75ed88bc396d8fe997beb20477f3e7efa000cd7a47eda452fbb2"}, + {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:917311d6a64d1c327c0dfda1e41f3966a7fb72b11ca7aa2e7a68fcccc7db35d9"}, + {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4dc1c132259b38d12c6587d190cd09cd76e3b5273ce71fe1372437b4cbc65f6f"}, + {file = "orjson-3.9.14-cp311-none-win32.whl", hash = "sha256:6f39a10408478f4c05736a74da63727a1ae0e83e3533d07b19443400fe8591ca"}, + {file = "orjson-3.9.14-cp311-none-win_amd64.whl", hash = "sha256:26280a7fcb62d8257f634c16acebc3bec626454f9ab13558bbf7883b9140760e"}, + {file = "orjson-3.9.14-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:08e722a8d06b13b67a51f247a24938d1a94b4b3862e40e0eef3b2e98c99cd04c"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2591faa0c031cf3f57e5bce1461cfbd6160f3f66b5a72609a130924917cb07d"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2450d87dd7b4f277f4c5598faa8b49a0c197b91186c47a2c0b88e15531e4e3e"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90903d2908158a2c9077a06f11e27545de610af690fb178fd3ba6b32492d4d1c"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce6f095eef0026eae76fc212f20f786011ecf482fc7df2f4c272a8ae6dd7b1ef"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:751250a31fef2bac05a2da2449aae7142075ea26139271f169af60456d8ad27a"}, + {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a1af21160a38ee8be3f4fcf24ee4b99e6184cadc7f915d599f073f478a94d2c"}, + {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:449bf090b2aa4e019371d7511a6ea8a5a248139205c27d1834bb4b1e3c44d936"}, + {file = "orjson-3.9.14-cp312-none-win_amd64.whl", hash = "sha256:a603161318ff699784943e71f53899983b7dee571b4dd07c336437c9c5a272b0"}, + {file = "orjson-3.9.14-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:814f288c011efdf8f115c5ebcc1ab94b11da64b207722917e0ceb42f52ef30a3"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88cafb100af68af3b9b29b5ccd09fdf7a48c63327916c8c923a94c336d38dd3"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba3518b999f88882ade6686f1b71e207b52e23546e180499be5bbb63a2f9c6e6"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978f416bbff9da8d2091e3cf011c92da68b13f2c453dcc2e8109099b2a19d234"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75fc593cf836f631153d0e21beaeb8d26e144445c73645889335c2247fcd71a0"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d1528db3c7554f9d6eeb09df23cb80dd5177ec56eeb55cc5318826928de506"}, + {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7183cc68ee2113b19b0b8714221e5e3b07b3ba10ca2bb108d78fd49cefaae101"}, + {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df3266d54246cb56b8bb17fa908660d2a0f2e3f63fbc32451ffc1b1505051d07"}, + {file = "orjson-3.9.14-cp38-none-win32.whl", hash = "sha256:7913079b029e1b3501854c9a78ad938ed40d61fe09bebab3c93e60ff1301b189"}, + {file = "orjson-3.9.14-cp38-none-win_amd64.whl", hash = "sha256:29512eb925b620e5da2fd7585814485c67cc6ba4fe739a0a700c50467a8a8065"}, + {file = "orjson-3.9.14-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bf597530544db27a8d76aced49cfc817ee9503e0a4ebf0109cd70331e7bbe0c"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac650d49366fa41fe702e054cb560171a8634e2865537e91f09a8d05ea5b1d37"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:236230433a9a4968ab895140514c308fdf9f607cb8bee178a04372b771123860"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3014ccbda9be0b1b5f8ea895121df7e6524496b3908f4397ff02e923bcd8f6dd"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac0c7eae7ad3a223bde690565442f8a3d620056bd01196f191af8be58a5248e1"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca33fdd0b38839b01912c57546d4f412ba7bfa0faf9bf7453432219aec2df07"}, + {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f75823cc1674a840a151e999a7dfa0d86c911150dd6f951d0736ee9d383bf415"}, + {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f52ac2eb49e99e7373f62e2a68428c6946cda52ce89aa8fe9f890c7278e2d3a"}, + {file = "orjson-3.9.14-cp39-none-win32.whl", hash = "sha256:0572f174f50b673b7df78680fb52cd0087a8585a6d06d295a5f790568e1064c6"}, + {file = "orjson-3.9.14-cp39-none-win_amd64.whl", hash = "sha256:ab90c02cb264250b8a58cedcc72ed78a4a257d956c8d3c8bebe9751b818dfad8"}, + {file = "orjson-3.9.14.tar.gz", hash = "sha256:06fb40f8e49088ecaa02f1162581d39e2cf3fd9dbbfe411eb2284147c99bad79"}, ] [[package]] @@ -2009,15 +2768,100 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" +[[package]] +name = "pillow" +version = "10.2.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "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 = "pinecone-client" -version = "3.0.2" +version = "3.0.3" description = "Pinecone client and SDK" optional = true python-versions = ">=3.8,<3.13" files = [ - {file = "pinecone_client-3.0.2-py3-none-any.whl", hash = "sha256:72696c883b47c0f65808bf623aebe940c07bc396f2126b627aad63d6e3cb6c43"}, - {file = "pinecone_client-3.0.2.tar.gz", hash = "sha256:f9a0830333eece107b4ef1119de23dad6a61bffab7f238e618416d51c46d29c8"}, + {file = "pinecone_client-3.0.3-py3-none-any.whl", hash = "sha256:940c942aeb259145e1cd6d3f214ad977dbb4dc2e626b3528fb5015c64c3e6190"}, + {file = "pinecone_client-3.0.3.tar.gz", hash = "sha256:2ad3ef7627edc4d9ee248d9781861c4341d6d27a15bc05f6bef53d958837d374"}, ] [package.dependencies] @@ -2057,6 +2901,20 @@ dense = ["openai (>=1.2.3,<2.0.0)", "sentence-transformers (>=2.0.0)", "torch (> openai = ["openai (>=1.2.3,<2.0.0)"] splade = ["sentence-transformers (>=2.0.0)", "torch (>=1.13.1)", "transformers (>=4.26.1)"] +[[package]] +name = "pkginfo" +version = "1.9.6" +description = "Query metadata from sdists / bdists / installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkginfo-1.9.6-py3-none-any.whl", hash = "sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546"}, + {file = "pkginfo-1.9.6.tar.gz", hash = "sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046"}, +] + +[package.extras] +testing = ["pytest", "pytest-cov"] + [[package]] name = "platformdirs" version = "4.2.0" @@ -2103,22 +2961,22 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.2" +version = "4.25.3" description = "" optional = true python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, - {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, - {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, - {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, - {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, - {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, - {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, - {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, - {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, + {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, + {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, + {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, + {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, + {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, + {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, + {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, + {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, + {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, ] [[package]] @@ -2310,6 +3168,38 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyloco" +version = "0.0.139" +description = "Python Microapplication Launcher" +optional = false +python-versions = "*" +files = [ + {file = "pyloco-0.0.139-py2.py3-none-any.whl", hash = "sha256:6aeb14954b196c7faef4efd15f92887802e90be138e35a0e64ff1312f847425b"}, + {file = "pyloco-0.0.139.tar.gz", hash = "sha256:d39537a4006f7522bd8b8d67e5f0abe6a6d9fdc7609a967d8ac6e1cf1df2a3a8"}, +] + +[package.dependencies] +SimpleWebSocketServer = "*" +twine = "*" +typing = "*" +ushlex = "*" +websocket-client = "*" + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pyreadline3" version = "3.4.1" @@ -2412,6 +3302,31 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-iso639" +version = "2024.2.7" +description = "Look-up utilities for ISO 639 language codes and names" +optional = true +python-versions = ">=3.8" +files = [ + {file = "python-iso639-2024.2.7.tar.gz", hash = "sha256:c323233348c34d57c601e3e6d824088e492896bcb97a61a87f7d93401a305377"}, + {file = "python_iso639-2024.2.7-py3-none-any.whl", hash = "sha256:7b149623ff74230f4ee3061fb01d18e57a8d07c5fee2aa72907f39b7f6d16cbc"}, +] + +[package.extras] +dev = ["black (==24.1.1)", "build (==1.0.3)", "flake8 (==7.0.0)", "pytest (==8.0.0)", "twine (==4.0.2)"] + +[[package]] +name = "python-magic" +version = "0.4.27" +description = "File type identification using libmagic" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, + {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, +] + [[package]] name = "pywin32" version = "306" @@ -2435,6 +3350,17 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pywin32-ctypes" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -2600,11 +3526,132 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} +[[package]] +name = "rapidfuzz" +version = "3.6.1" +description = "rapid fuzzy string matching" +optional = true +python-versions = ">=3.8" +files = [ + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac434fc71edda30d45db4a92ba5e7a42c7405e1a54cb4ec01d03cc668c6dcd40"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a791168e119cfddf4b5a40470620c872812042f0621e6a293983a2d52372db0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a2f3e9df346145c2be94e4d9eeffb82fab0cbfee85bd4a06810e834fe7c03fa"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23de71e7f05518b0bbeef55d67b5dbce3bcd3e2c81e7e533051a2e9401354eb0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d056e342989248d2bdd67f1955bb7c3b0ecfa239d8f67a8dfe6477b30872c607"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01835d02acd5d95c1071e1da1bb27fe213c84a013b899aba96380ca9962364bc"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f712e0bb5fea327e92aec8a937afd07ba8de4c529735d82e4c4124c10d5a0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96cd19934f76a1264e8ecfed9d9f5291fde04ecb667faef5f33bdbfd95fe2d1f"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e06c4242a1354cf9d48ee01f6f4e6e19c511d50bb1e8d7d20bcadbb83a2aea90"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d73dcfe789d37c6c8b108bf1e203e027714a239e50ad55572ced3c004424ed3b"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:06e98ff000e2619e7cfe552d086815671ed09b6899408c2c1b5103658261f6f3"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:08b6fb47dd889c69fbc0b915d782aaed43e025df6979b6b7f92084ba55edd526"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1788ebb5f5b655a15777e654ea433d198f593230277e74d51a2a1e29a986283"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c65f92881753aa1098c77818e2b04a95048f30edbe9c3094dc3707d67df4598b"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:4243a9c35667a349788461aae6471efde8d8800175b7db5148a6ab929628047f"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win_arm64.whl", hash = "sha256:f59d19078cc332dbdf3b7b210852ba1f5db8c0a2cd8cc4c0ed84cc00c76e6802"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fbc07e2e4ac696497c5f66ec35c21ddab3fc7a406640bffed64c26ab2f7ce6d6"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cced1a8852652813f30fb5d4b8f9b237112a0bbaeebb0f4cc3611502556764"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82300e5f8945d601c2daaaac139d5524d7c1fdf719aa799a9439927739917460"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf97c321fd641fea2793abce0e48fa4f91f3c202092672f8b5b4e781960b891"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7420e801b00dee4a344ae2ee10e837d603461eb180e41d063699fb7efe08faf0"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060bd7277dc794279fa95522af355034a29c90b42adcb7aa1da358fc839cdb11"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7e3375e4f2bfec77f907680328e4cd16cc64e137c84b1886d547ab340ba6928"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a490cd645ef9d8524090551016f05f052e416c8adb2d8b85d35c9baa9d0428ab"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2e03038bfa66d2d7cffa05d81c2f18fd6acbb25e7e3c068d52bb7469e07ff382"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b19795b26b979c845dba407fe79d66975d520947b74a8ab6cee1d22686f7967"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:064c1d66c40b3a0f488db1f319a6e75616b2e5fe5430a59f93a9a5e40a656d15"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3c772d04fb0ebeece3109d91f6122b1503023086a9591a0b63d6ee7326bd73d9"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:841eafba6913c4dfd53045835545ba01a41e9644e60920c65b89c8f7e60c00a9"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win32.whl", hash = "sha256:266dd630f12696ea7119f31d8b8e4959ef45ee2cbedae54417d71ae6f47b9848"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:d79aec8aeee02ab55d0ddb33cea3ecd7b69813a48e423c966a26d7aab025cdfe"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win_arm64.whl", hash = "sha256:484759b5dbc5559e76fefaa9170147d1254468f555fd9649aea3bad46162a88b"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b2ef4c0fd3256e357b70591ffb9e8ed1d439fb1f481ba03016e751a55261d7c1"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:588c4b20fa2fae79d60a4e438cf7133d6773915df3cc0a7f1351da19eb90f720"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7142ee354e9c06e29a2636b9bbcb592bb00600a88f02aa5e70e4f230347b373e"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dfc557c0454ad22382373ec1b7df530b4bbd974335efe97a04caec936f2956a"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03f73b381bdeccb331a12c3c60f1e41943931461cdb52987f2ecf46bfc22f50d"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b0ccc2ec1781c7e5370d96aef0573dd1f97335343e4982bdb3a44c133e27786"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da3e8c9f7e64bb17faefda085ff6862ecb3ad8b79b0f618a6cf4452028aa2222"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fde9b14302a31af7bdafbf5cfbb100201ba21519be2b9dedcf4f1048e4fbe65d"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1a23eee225dfb21c07f25c9fcf23eb055d0056b48e740fe241cbb4b22284379"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e49b9575d16c56c696bc7b06a06bf0c3d4ef01e89137b3ddd4e2ce709af9fe06"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:0a9fc714b8c290261669f22808913aad49553b686115ad0ee999d1cb3df0cd66"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a3ee4f8f076aa92184e80308fc1a079ac356b99c39408fa422bbd00145be9854"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f056ba42fd2f32e06b2c2ba2443594873cfccc0c90c8b6327904fc2ddf6d5799"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win32.whl", hash = "sha256:5d82b9651e3d34b23e4e8e201ecd3477c2baa17b638979deeabbb585bcb8ba74"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:dad55a514868dae4543ca48c4e1fc0fac704ead038dafedf8f1fc0cc263746c1"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win_arm64.whl", hash = "sha256:3c84294f4470fcabd7830795d754d808133329e0a81d62fcc2e65886164be83b"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e19d519386e9db4a5335a4b29f25b8183a1c3f78cecb4c9c3112e7f86470e37f"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01eb03cd880a294d1bf1a583fdd00b87169b9cc9c9f52587411506658c864d73"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:be368573255f8fbb0125a78330a1a40c65e9ba3c5ad129a426ff4289099bfb41"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e5af946f419c30f5cb98b69d40997fe8580efe78fc83c2f0f25b60d0e56efb"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f382f7ffe384ce34345e1c0b2065451267d3453cadde78946fbd99a59f0cc23c"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be156f51f3a4f369e758505ed4ae64ea88900dcb2f89d5aabb5752676d3f3d7e"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1936d134b6c513fbe934aeb668b0fee1ffd4729a3c9d8d373f3e404fbb0ce8a0"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ff8eaf4a9399eb2bebd838f16e2d1ded0955230283b07376d68947bbc2d33d"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae598a172e3a95df3383634589660d6b170cc1336fe7578115c584a99e0ba64d"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cd4ba4c18b149da11e7f1b3584813159f189dc20833709de5f3df8b1342a9759"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:0402f1629e91a4b2e4aee68043a30191e5e1b7cd2aa8dacf50b1a1bcf6b7d3ab"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1e12319c6b304cd4c32d5db00b7a1e36bdc66179c44c5707f6faa5a889a317c0"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0bbfae35ce4de4c574b386c43c78a0be176eeddfdae148cb2136f4605bebab89"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-win32.whl", hash = "sha256:7fec74c234d3097612ea80f2a80c60720eec34947066d33d34dc07a3092e8105"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:a553cc1a80d97459d587529cc43a4c7c5ecf835f572b671107692fe9eddf3e24"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:757dfd7392ec6346bd004f8826afb3bf01d18a723c97cbe9958c733ab1a51791"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2963f4a3f763870a16ee076796be31a4a0958fbae133dbc43fc55c3968564cf5"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2f0274595cc5b2b929c80d4e71b35041104b577e118cf789b3fe0a77b37a4c5"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f211e366e026de110a4246801d43a907cd1a10948082f47e8a4e6da76fef52"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a59472b43879012b90989603aa5a6937a869a72723b1bf2ff1a0d1edee2cc8e6"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a03863714fa6936f90caa7b4b50ea59ea32bb498cc91f74dc25485b3f8fccfe9"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd95b6b7bfb1584f806db89e1e0c8dbb9d25a30a4683880c195cc7f197eaf0c"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7183157edf0c982c0b8592686535c8b3e107f13904b36d85219c77be5cefd0d8"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ad9d74ef7c619b5b0577e909582a1928d93e07d271af18ba43e428dc3512c2a1"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b53137d81e770c82189e07a8f32722d9e4260f13a0aec9914029206ead38cac3"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:49b9ed2472394d306d5dc967a7de48b0aab599016aa4477127b20c2ed982dbf9"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:dec307b57ec2d5054d77d03ee4f654afcd2c18aee00c48014cb70bfed79597d6"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4381023fa1ff32fd5076f5d8321249a9aa62128eb3f21d7ee6a55373e672b261"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win32.whl", hash = "sha256:8d7a072f10ee57c8413c8ab9593086d42aaff6ee65df4aa6663eecdb7c398dca"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ebcfb5bfd0a733514352cfc94224faad8791e576a80ffe2fd40b2177bf0e7198"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win_arm64.whl", hash = "sha256:1c47d592e447738744905c18dda47ed155620204714e6df20eb1941bb1ba315e"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eef8b346ab331bec12bbc83ac75641249e6167fab3d84d8f5ca37fd8e6c7a08c"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53251e256017e2b87f7000aee0353ba42392c442ae0bafd0f6b948593d3f68c6"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dede83a6b903e3ebcd7e8137e7ff46907ce9316e9d7e7f917d7e7cdc570ee05"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4da90e4c2b444d0a171d7444ea10152e07e95972bb40b834a13bdd6de1110c"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ca3dfcf74f2b6962f411c33dd95b0adf3901266e770da6281bc96bb5a8b20de9"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bcc957c0a8bde8007f1a8a413a632a1a409890f31f73fe764ef4eac55f59ca87"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:692c9a50bea7a8537442834f9bc6b7d29d8729a5b6379df17c31b6ab4df948c2"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c23ceaea27e790ddd35ef88b84cf9d721806ca366199a76fd47cfc0457a81b"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b155e67fff215c09f130555002e42f7517d0ea72cbd58050abb83cb7c880cec"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3028ee8ecc48250607fa8a0adce37b56275ec3b1acaccd84aee1f68487c8557b"}, + {file = "rapidfuzz-3.6.1.tar.gz", hash = "sha256:35660bee3ce1204872574fa041c7ad7ec5175b3053a4cb6e181463fc07013de7"}, +] + +[package.extras] +full = ["numpy"] + +[[package]] +name = "readme-renderer" +version = "42.0" +description = "readme_renderer is a library for rendering readme descriptions for Warehouse" +optional = false +python-versions = ">=3.8" +files = [ + {file = "readme_renderer-42.0-py3-none-any.whl", hash = "sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d"}, + {file = "readme_renderer-42.0.tar.gz", hash = "sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1"}, +] + +[package.dependencies] +docutils = ">=0.13.1" +nh3 = ">=0.2.14" +Pygments = ">=2.5.1" + +[package.extras] +md = ["cmarkgfm (>=0.8.0)"] + [[package]] name = "regex" version = "2023.12.25" description = "Alternative regular expression module, to replace re." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, @@ -2723,6 +3770,52 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "rfc3986" +version = "2.0.0" +description = "Validating URI References per RFC 3986" +optional = false +python-versions = ">=3.7" +files = [ + {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, + {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, +] + +[package.extras] +idna2008 = ["idna"] + +[[package]] +name = "rich" +version = "13.7.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "ruff" version = "0.1.15" @@ -2881,6 +3974,31 @@ tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] testing = ["h5py (>=3.7.0)", "huggingface_hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools_rust (>=1.5.2)"] torch = ["safetensors[numpy]", "torch (>=1.10)"] +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + +[[package]] +name = "simplewebsocketserver" +version = "0.1.2" +description = "A Simple Websocket Server written in Python" +optional = false +python-versions = "*" +files = [ + {file = "SimpleWebSocketServer-0.1.2.tar.gz", hash = "sha256:48615b8769d6a01e58375a3399117c9c240ba649a15f8c7720d68b23949eff66"}, +] + [[package]] name = "six" version = "1.16.0" @@ -2903,6 +4021,17 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = true +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"}, +] + [[package]] name = "stack-data" version = "0.6.3" @@ -2922,6 +4051,17 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "style" +version = "1.1.0" +description = "🌈 Terminal string styling" +optional = false +python-versions = "*" +files = [ + {file = "style-1.1.0-py2.py3-none-any.whl", hash = "sha256:6485a4bcb84629341a5fd1587fe3ac4887daa4741f0c8a1d01b9c3c8a263afe7"}, + {file = "style-1.1.0.tar.gz", hash = "sha256:8eb365fc15039b19b728bd4e6e85fb7daf24e7aeeec6a15a666f97484c564005"}, +] + [[package]] name = "sympy" version = "1.12" @@ -2936,6 +4076,20 @@ files = [ [package.dependencies] mpmath = ">=0.19" +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = true +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "termcolor" version = "2.4.0" @@ -2950,123 +4104,175 @@ files = [ [package.extras] tests = ["pytest", "pytest-cov"] +[[package]] +name = "tiktoken" +version = "0.6.0" +description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tiktoken-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:277de84ccd8fa12730a6b4067456e5cf72fef6300bea61d506c09e45658d41ac"}, + {file = "tiktoken-0.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c44433f658064463650d61387623735641dcc4b6c999ca30bc0f8ba3fccaf5c"}, + {file = "tiktoken-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb9a2a866ae6eef1995ab656744287a5ac95acc7e0491c33fad54d053288ad3"}, + {file = "tiktoken-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c62c05b3109fefca26fedb2820452a050074ad8e5ad9803f4652977778177d9f"}, + {file = "tiktoken-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ef917fad0bccda07bfbad835525bbed5f3ab97a8a3e66526e48cdc3e7beacf7"}, + {file = "tiktoken-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e095131ab6092d0769a2fda85aa260c7c383072daec599ba9d8b149d2a3f4d8b"}, + {file = "tiktoken-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:05b344c61779f815038292a19a0c6eb7098b63c8f865ff205abb9ea1b656030e"}, + {file = "tiktoken-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cefb9870fb55dca9e450e54dbf61f904aab9180ff6fe568b61f4db9564e78871"}, + {file = "tiktoken-0.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:702950d33d8cabc039845674107d2e6dcabbbb0990ef350f640661368df481bb"}, + {file = "tiktoken-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d49d076058f23254f2aff9af603863c5c5f9ab095bc896bceed04f8f0b013a"}, + {file = "tiktoken-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:430bc4e650a2d23a789dc2cdca3b9e5e7eb3cd3935168d97d43518cbb1f9a911"}, + {file = "tiktoken-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:293cb8669757301a3019a12d6770bd55bec38a4d3ee9978ddbe599d68976aca7"}, + {file = "tiktoken-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bd1a288b7903aadc054b0e16ea78e3171f70b670e7372432298c686ebf9dd47"}, + {file = "tiktoken-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac76e000183e3b749634968a45c7169b351e99936ef46f0d2353cd0d46c3118d"}, + {file = "tiktoken-0.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17cc8a4a3245ab7d935c83a2db6bb71619099d7284b884f4b2aea4c74f2f83e3"}, + {file = "tiktoken-0.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:284aebcccffe1bba0d6571651317df6a5b376ff6cfed5aeb800c55df44c78177"}, + {file = "tiktoken-0.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c1a3a5d33846f8cd9dd3b7897c1d45722f48625a587f8e6f3d3e85080559be8"}, + {file = "tiktoken-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6318b2bb2337f38ee954fd5efa82632c6e5ced1d52a671370fa4b2eff1355e91"}, + {file = "tiktoken-0.6.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f5f0f2ed67ba16373f9a6013b68da298096b27cd4e1cf276d2d3868b5c7efd1"}, + {file = "tiktoken-0.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:75af4c0b16609c2ad02581f3cdcd1fb698c7565091370bf6c0cf8624ffaba6dc"}, + {file = "tiktoken-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:45577faf9a9d383b8fd683e313cf6df88b6076c034f0a16da243bb1c139340c3"}, + {file = "tiktoken-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7c1492ab90c21ca4d11cef3a236ee31a3e279bb21b3fc5b0e2210588c4209e68"}, + {file = "tiktoken-0.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e2b380c5b7751272015400b26144a2bab4066ebb8daae9c3cd2a92c3b508fe5a"}, + {file = "tiktoken-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f497598b9f58c99cbc0eb764b4a92272c14d5203fc713dd650b896a03a50ad"}, + {file = "tiktoken-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e65e8bd6f3f279d80f1e1fbd5f588f036b9a5fa27690b7f0cc07021f1dfa0839"}, + {file = "tiktoken-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5f1495450a54e564d236769d25bfefbf77727e232d7a8a378f97acddee08c1ae"}, + {file = "tiktoken-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6c4e4857d99f6fb4670e928250835b21b68c59250520a1941618b5b4194e20c3"}, + {file = "tiktoken-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:168d718f07a39b013032741867e789971346df8e89983fe3c0ef3fbd5a0b1cb9"}, + {file = "tiktoken-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:47fdcfe11bd55376785a6aea8ad1db967db7f66ea81aed5c43fad497521819a4"}, + {file = "tiktoken-0.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fb7d2ccbf1a7784810aff6b80b4012fb42c6fc37eaa68cb3b553801a5cc2d1fc"}, + {file = "tiktoken-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ccb7a111ee76af5d876a729a347f8747d5ad548e1487eeea90eaf58894b3138"}, + {file = "tiktoken-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2048e1086b48e3c8c6e2ceeac866561374cd57a84622fa49a6b245ffecb7744"}, + {file = "tiktoken-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07f229a5eb250b6403a61200199cecf0aac4aa23c3ecc1c11c1ca002cbb8f159"}, + {file = "tiktoken-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:432aa3be8436177b0db5a2b3e7cc28fd6c693f783b2f8722539ba16a867d0c6a"}, + {file = "tiktoken-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:8bfe8a19c8b5c40d121ee7938cd9c6a278e5b97dc035fd61714b4f0399d2f7a1"}, + {file = "tiktoken-0.6.0.tar.gz", hash = "sha256:ace62a4ede83c75b0374a2ddfa4b76903cf483e9cb06247f566be3bf14e6beed"}, +] + +[package.dependencies] +regex = ">=2022.1.18" +requests = ">=2.26.0" + +[package.extras] +blobfile = ["blobfile (>=2)"] + [[package]] name = "tokenizers" -version = "0.15.1" +version = "0.15.2" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "tokenizers-0.15.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:32c9491dd1bcb33172c26b454dbd607276af959b9e78fa766e2694cafab3103c"}, - {file = "tokenizers-0.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29a1b784b870a097e7768f8c20c2dd851e2c75dad3efdae69a79d3e7f1d614d5"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0049fbe648af04148b08cb211994ce8365ee628ce49724b56aaefd09a3007a78"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84b3c235219e75e24de6b71e6073cd2c8d740b14d88e4c6d131b90134e3a338"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8cc575769ea11d074308c6d71cb10b036cdaec941562c07fc7431d956c502f0e"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bf28f299c4158e6d0b5eaebddfd500c4973d947ffeaca8bcbe2e8c137dff0b"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:506555f98361db9c74e1323a862d77dcd7d64c2058829a368bf4159d986e339f"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7061b0a28ade15906f5b2ec8c48d3bdd6e24eca6b427979af34954fbe31d5cef"}, - {file = "tokenizers-0.15.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ed5e35507b7a0e2aac3285c4f5e37d4ec5cfc0e5825b862b68a0aaf2757af52"}, - {file = "tokenizers-0.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c9df9247df0de6509dd751b1c086e5f124b220133b5c883bb691cb6fb3d786f"}, - {file = "tokenizers-0.15.1-cp310-none-win32.whl", hash = "sha256:dd999af1b4848bef1b11d289f04edaf189c269d5e6afa7a95fa1058644c3f021"}, - {file = "tokenizers-0.15.1-cp310-none-win_amd64.whl", hash = "sha256:39d06a57f7c06940d602fad98702cf7024c4eee7f6b9fe76b9f2197d5a4cc7e2"}, - {file = "tokenizers-0.15.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8ad034eb48bf728af06915e9294871f72fcc5254911eddec81d6df8dba1ce055"}, - {file = "tokenizers-0.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea9ede7c42f8fa90f31bfc40376fd91a7d83a4aa6ad38e6076de961d48585b26"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b85d6fe1a20d903877aa0ef32ef6b96e81e0e48b71c206d6046ce16094de6970"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a7d44f656320137c7d643b9c7dcc1814763385de737fb98fd2643880910f597"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd244bd0793cdacf27ee65ec3db88c21f5815460e8872bbeb32b040469d6774e"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3f4a36e371b3cb1123adac8aeeeeab207ad32f15ed686d9d71686a093bb140"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2921a53966afb29444da98d56a6ccbef23feb3b0c0f294b4e502370a0a64f25"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f49068cf51f49c231067f1a8c9fc075ff960573f6b2a956e8e1b0154fb638ea5"}, - {file = "tokenizers-0.15.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0ab1a22f20eaaab832ab3b00a0709ca44a0eb04721e580277579411b622c741c"}, - {file = "tokenizers-0.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:671268f24b607c4adc6fa2b5b580fd4211b9f84b16bd7f46d62f8e5be0aa7ba4"}, - {file = "tokenizers-0.15.1-cp311-none-win32.whl", hash = "sha256:a4f03e33d2bf7df39c8894032aba599bf90f6f6378e683a19d28871f09bb07fc"}, - {file = "tokenizers-0.15.1-cp311-none-win_amd64.whl", hash = "sha256:30f689537bcc7576d8bd4daeeaa2cb8f36446ba2f13f421b173e88f2d8289c4e"}, - {file = "tokenizers-0.15.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f3a379dd0898a82ea3125e8f9c481373f73bffce6430d4315f0b6cd5547e409"}, - {file = "tokenizers-0.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d870ae58bba347d38ac3fc8b1f662f51e9c95272d776dd89f30035c83ee0a4f"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d6d28e0143ec2e253a8a39e94bf1d24776dbe73804fa748675dbffff4a5cd6d8"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ae9ac9f44e2da128ee35db69489883b522f7abe033733fa54eb2de30dac23d"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d8e322a47e29128300b3f7749a03c0ec2bce0a3dc8539ebff738d3f59e233542"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:760334f475443bc13907b1a8e1cb0aeaf88aae489062546f9704dce6c498bfe2"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b173753d4aca1e7d0d4cb52b5e3ffecfb0ca014e070e40391b6bb4c1d6af3f2"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c1f13d457c8f0ab17e32e787d03470067fe8a3b4d012e7cc57cb3264529f4a"}, - {file = "tokenizers-0.15.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:425b46ceff4505f20191df54b50ac818055d9d55023d58ae32a5d895b6f15bb0"}, - {file = "tokenizers-0.15.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:681ac6ba3b4fdaf868ead8971221a061f580961c386e9732ea54d46c7b72f286"}, - {file = "tokenizers-0.15.1-cp312-none-win32.whl", hash = "sha256:f2272656063ccfba2044df2115095223960d80525d208e7a32f6c01c351a6f4a"}, - {file = "tokenizers-0.15.1-cp312-none-win_amd64.whl", hash = "sha256:9abe103203b1c6a2435d248d5ff4cceebcf46771bfbc4957a98a74da6ed37674"}, - {file = "tokenizers-0.15.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2ce9ed5c8ef26b026a66110e3c7b73d93ec2d26a0b1d0ea55ddce61c0e5f446f"}, - {file = "tokenizers-0.15.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89b24d366137986c3647baac29ef902d2d5445003d11c30df52f1bd304689aeb"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0faebedd01b413ab777ca0ee85914ed8b031ea5762ab0ea60b707ce8b9be6842"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdbd9dfcdad4f3b95d801f768e143165165055c18e44ca79a8a26de889cd8e85"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97194324c12565b07e9993ca9aa813b939541185682e859fb45bb8d7d99b3193"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:485e43e2cc159580e0d83fc919ec3a45ae279097f634b1ffe371869ffda5802c"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:191d084d60e3589d6420caeb3f9966168269315f8ec7fbc3883122dc9d99759d"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01c28cc8d7220634a75b14c53f4fc9d1b485f99a5a29306a999c115921de2897"}, - {file = "tokenizers-0.15.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:325212027745d3f8d5d5006bb9e5409d674eb80a184f19873f4f83494e1fdd26"}, - {file = "tokenizers-0.15.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3c5573603c36ce12dbe318bcfb490a94cad2d250f34deb2f06cb6937957bbb71"}, - {file = "tokenizers-0.15.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:1441161adb6d71a15a630d5c1d8659d5ebe41b6b209586fbeea64738e58fcbb2"}, - {file = "tokenizers-0.15.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:382a8d0c31afcfb86571afbfefa37186df90865ce3f5b731842dab4460e53a38"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e76959783e3f4ec73b3f3d24d4eec5aa9225f0bee565c48e77f806ed1e048f12"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:401df223e5eb927c5961a0fc6b171818a2bba01fb36ef18c3e1b69b8cd80e591"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52606c233c759561a16e81b2290a7738c3affac7a0b1f0a16fe58dc22e04c7d"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b72c658bbe5a05ed8bc2ac5ad782385bfd743ffa4bc87d9b5026341e709c6f44"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25f5643a2f005c42f0737a326c6c6bdfedfdc9a994b10a1923d9c3e792e4d6a6"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c5b6f633999d6b42466bbfe21be2e26ad1760b6f106967a591a41d8cbca980e"}, - {file = "tokenizers-0.15.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ceb5c9ad11a015150b545c1a11210966a45b8c3d68a942e57cf8938c578a77ca"}, - {file = "tokenizers-0.15.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bedd4ce0c4872db193444c395b11c7697260ce86a635ab6d48102d76be07d324"}, - {file = "tokenizers-0.15.1-cp37-none-win32.whl", hash = "sha256:cd6caef6c14f5ed6d35f0ddb78eab8ca6306d0cd9870330bccff72ad014a6f42"}, - {file = "tokenizers-0.15.1-cp37-none-win_amd64.whl", hash = "sha256:d2bd7af78f58d75a55e5df61efae164ab9200c04b76025f9cc6eeb7aff3219c2"}, - {file = "tokenizers-0.15.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:59b3ca6c02e0bd5704caee274978bd055de2dff2e2f39dadf536c21032dfd432"}, - {file = "tokenizers-0.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:48fe21b67c22583bed71933a025fd66b1f5cfae1baefa423c3d40379b5a6e74e"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3d190254c66a20fb1efbdf035e6333c5e1f1c73b1f7bfad88f9c31908ac2c2c4"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fef90c8f5abf17d48d6635f5fd92ad258acd1d0c2d920935c8bf261782cfe7c8"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fac011ef7da3357aa7eb19efeecf3d201ede9618f37ddedddc5eb809ea0963ca"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:574ec5b3e71d1feda6b0ecac0e0445875729b4899806efbe2b329909ec75cb50"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aca16c3c0637c051a59ea99c4253f16fbb43034fac849076a7e7913b2b9afd2d"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6f238fc2bbfd3e12e8529980ec1624c7e5b69d4e959edb3d902f36974f725a"}, - {file = "tokenizers-0.15.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:587e11a26835b73c31867a728f32ca8a93c9ded4a6cd746516e68b9d51418431"}, - {file = "tokenizers-0.15.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6456e7ad397352775e2efdf68a9ec5d6524bbc4543e926eef428d36de627aed4"}, - {file = "tokenizers-0.15.1-cp38-none-win32.whl", hash = "sha256:614f0da7dd73293214bd143e6221cafd3f7790d06b799f33a987e29d057ca658"}, - {file = "tokenizers-0.15.1-cp38-none-win_amd64.whl", hash = "sha256:a4fa0a20d9f69cc2bf1cfce41aa40588598e77ec1d6f56bf0eb99769969d1ede"}, - {file = "tokenizers-0.15.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8d3f18a45e0cf03ce193d5900460dc2430eec4e14c786e5d79bddba7ea19034f"}, - {file = "tokenizers-0.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:38dbd6c38f88ad7d5dc5d70c764415d38fe3bcd99dc81638b572d093abc54170"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:777286b1f7e52de92aa4af49fe31046cfd32885d1bbaae918fab3bba52794c33"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58d4d550a3862a47dd249892d03a025e32286eb73cbd6bc887fb8fb64bc97165"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eda68ce0344f35042ae89220b40a0007f721776b727806b5c95497b35714bb7"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cd33d15f7a3a784c3b665cfe807b8de3c6779e060349bd5005bb4ae5bdcb437"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a1aa370f978ac0bfb50374c3a40daa93fd56d47c0c70f0c79607fdac2ccbb42"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:241482b940340fff26a2708cb9ba383a5bb8a2996d67a0ff2c4367bf4b86cc3a"}, - {file = "tokenizers-0.15.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:68f30b05f46a4d9aba88489eadd021904afe90e10a7950e28370d6e71b9db021"}, - {file = "tokenizers-0.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5a3c5d8025529670462b881b7b2527aacb6257398c9ec8e170070432c3ae3a82"}, - {file = "tokenizers-0.15.1-cp39-none-win32.whl", hash = "sha256:74d1827830f60a9d78da8f6d49a1fbea5422ce0eea42e2617877d23380a7efbc"}, - {file = "tokenizers-0.15.1-cp39-none-win_amd64.whl", hash = "sha256:9ff499923e4d6876d6b6a63ea84a56805eb35e91dd89b933a7aee0c56a3838c6"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b3aa007a0f4408f62a8471bdaa3faccad644cbf2622639f2906b4f9b5339e8b8"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f3d4176fa93d8b2070db8f3c70dc21106ae6624fcaaa334be6bdd3a0251e729e"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d0e463655ef8b2064df07bd4a445ed7f76f6da3b286b4590812587d42f80e89"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:089138fd0351b62215c462a501bd68b8df0e213edcf99ab9efd5dba7b4cb733e"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e563ac628f5175ed08e950430e2580e544b3e4b606a0995bb6b52b3a3165728"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:244dcc28c5fde221cb4373961b20da30097669005b122384d7f9f22752487a46"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d82951d46052dddae1369e68ff799a0e6e29befa9a0b46e387ae710fd4daefb0"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7b14296bc9059849246ceb256ffbe97f8806a9b5d707e0095c22db312f4fc014"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0309357bb9b6c8d86cdf456053479d7112074b470651a997a058cd7ad1c4ea57"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083f06e9d8d01b70b67bcbcb7751b38b6005512cce95808be6bf34803534a7e7"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85288aea86ada579789447f0dcec108ebef8da4b450037eb4813d83e4da9371e"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:385e6fcb01e8de90c1d157ae2a5338b23368d0b1c4cc25088cdca90147e35d17"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:60067edfcbf7d6cd448ac47af41ec6e84377efbef7be0c06f15a7c1dd069e044"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f7e37f89acfe237d4eaf93c3b69b0f01f407a7a5d0b5a8f06ba91943ea3cf10"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:6a63a15b523d42ebc1f4028e5a568013388c2aefa4053a263e511cb10aaa02f1"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2417d9e4958a6c2fbecc34c27269e74561c55d8823bf914b422e261a11fdd5fd"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8550974bace6210e41ab04231e06408cf99ea4279e0862c02b8d47e7c2b2828"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:194ba82129b171bcd29235a969e5859a93e491e9b0f8b2581f500f200c85cfdd"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1bfd95eef8b01e6c0805dbccc8eaf41d8c5a84f0cce72c0ab149fe76aae0bce6"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b87a15dd72f8216b03c151e3dace00c75c3fe7b0ee9643c25943f31e582f1a34"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6ac22f358a0c2a6c685be49136ce7ea7054108986ad444f567712cf274b34cd8"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e9d1f046a9b9d9a95faa103f07db5921d2c1c50f0329ebba4359350ee02b18b"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a0fd30a4b74485f6a7af89fffb5fb84d6d5f649b3e74f8d37f624cc9e9e97cf"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e45dc206b9447fa48795a1247c69a1732d890b53e2cc51ba42bc2fefa22407"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eaff56ef3e218017fa1d72007184401f04cb3a289990d2b6a0a76ce71c95f96"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b41dc107e4a4e9c95934e79b025228bbdda37d9b153d8b084160e88d5e48ad6f"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1922b8582d0c33488764bcf32e80ef6054f515369e70092729c928aae2284bc2"}, - {file = "tokenizers-0.15.1.tar.gz", hash = "sha256:c0a331d6d5a3d6e97b7f99f562cee8d56797180797bc55f12070e495e717c980"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, ] [package.dependencies] @@ -3168,13 +4374,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.2" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, ] [package.dependencies] @@ -3292,6 +4498,28 @@ build = ["cmake (>=3.20)", "lit"] tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] tutorials = ["matplotlib", "pandas", "tabulate", "torch"] +[[package]] +name = "twine" +version = "5.0.0" +description = "Collection of utilities for publishing packages on PyPI" +optional = false +python-versions = ">=3.8" +files = [ + {file = "twine-5.0.0-py3-none-any.whl", hash = "sha256:a262933de0b484c53408f9edae2e7821c1c45a3314ff2df9bdd343aa7ab8edc0"}, + {file = "twine-5.0.0.tar.gz", hash = "sha256:89b0cc7d370a4b66421cc6102f269aa910fe0f1861c124f573cf2ddedbc10cf4"}, +] + +[package.dependencies] +importlib-metadata = ">=3.6" +keyring = ">=15.1" +pkginfo = ">=1.8.1" +readme-renderer = ">=35.0" +requests = ">=2.20" +requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" +rfc3986 = ">=1.4.0" +rich = ">=12.0.0" +urllib3 = ">=1.26.0" + [[package]] name = "types-pyyaml" version = "6.0.12.12" @@ -3317,6 +4545,17 @@ files = [ [package.dependencies] urllib3 = ">=2" +[[package]] +name = "typing" +version = "3.7.4.3" +description = "Type Hints for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "typing-3.7.4.3-py2-none-any.whl", hash = "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5"}, + {file = "typing-3.7.4.3.tar.gz", hash = "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9"}, +] + [[package]] name = "typing-extensions" version = "4.9.0" @@ -3328,6 +4567,154 @@ files = [ {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = true +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "unstructured" +version = "0.12.4" +description = "A library that prepares raw documents for downstream ML tasks." +optional = true +python-versions = ">=3.9.0,<3.12" +files = [ + {file = "unstructured-0.12.4-py3-none-any.whl", hash = "sha256:f1aa046297a3afba3aa16895e513aca6a93802ef73b7a18080656435c4deb217"}, + {file = "unstructured-0.12.4.tar.gz", hash = "sha256:019cf52e9e2bfa286e61ffa0d7d336e1645280f9a0f165e697583143fcfe708a"}, +] + +[package.dependencies] +backoff = "*" +beautifulsoup4 = "*" +chardet = "*" +dataclasses-json = "*" +emoji = "*" +filetype = "*" +langdetect = "*" +lxml = "*" +nltk = "*" +numpy = "*" +python-iso639 = "*" +python-magic = "*" +rapidfuzz = "*" +requests = "*" +tabulate = "*" +typing-extensions = "*" +unstructured-client = ">=0.15.1" +wrapt = "*" + +[package.extras] +airtable = ["pyairtable"] +all-docs = ["markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "python-docx", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.23)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +azure = ["adlfs", "fsspec"] +azure-cognitive-search = ["azure-search-documents"] +bedrock = ["boto3", "langchain-community"] +biomed = ["bs4"] +box = ["boxfs", "fsspec"] +chroma = ["chromadb"] +confluence = ["atlassian-python-api"] +csv = ["pandas"] +databricks-volumes = ["databricks-sdk"] +delta-table = ["deltalake", "fsspec"] +discord = ["discord-py"] +doc = ["python-docx"] +docx = ["python-docx"] +dropbox = ["dropboxdrivefs", "fsspec"] +elasticsearch = ["elasticsearch"] +embed-huggingface = ["huggingface", "langchain-community", "sentence-transformers"] +epub = ["pypandoc"] +gcs = ["bs4", "fsspec", "gcsfs"] +github = ["pygithub (>1.58.0)"] +gitlab = ["python-gitlab"] +google-drive = ["google-api-python-client"] +hubspot = ["hubspot-api-client", "urllib3"] +huggingface = ["langdetect", "sacremoses", "sentencepiece", "torch", "transformers"] +image = ["onnx", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypdf", "unstructured-inference (==0.7.23)", "unstructured.pytesseract (>=0.3.12)"] +jira = ["atlassian-python-api"] +local-inference = ["markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "python-docx", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.23)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +md = ["markdown"] +mongodb = ["pymongo"] +msg = ["msg-parser"] +notion = ["htmlBuilder", "notion-client"] +odt = ["pypandoc", "python-docx"] +onedrive = ["Office365-REST-Python-Client", "bs4", "msal"] +openai = ["langchain-community", "openai", "tiktoken"] +opensearch = ["opensearch-py"] +org = ["pypandoc"] +outlook = ["Office365-REST-Python-Client", "msal"] +paddleocr = ["unstructured.paddleocr (==2.6.1.3)"] +pdf = ["onnx", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypdf", "unstructured-inference (==0.7.23)", "unstructured.pytesseract (>=0.3.12)"] +pinecone = ["pinecone-client (==2.2.4)"] +postgres = ["psycopg2-binary"] +ppt = ["python-pptx (<=0.6.23)"] +pptx = ["python-pptx (<=0.6.23)"] +qdrant = ["qdrant-client"] +reddit = ["praw"] +rst = ["pypandoc"] +rtf = ["pypandoc"] +s3 = ["fsspec", "s3fs"] +salesforce = ["simple-salesforce"] +sftp = ["fsspec", "paramiko"] +sharepoint = ["Office365-REST-Python-Client", "msal"] +slack = ["slack-sdk"] +tsv = ["pandas"] +weaviate = ["weaviate-client"] +wikipedia = ["wikipedia"] +xlsx = ["networkx", "openpyxl", "pandas", "xlrd"] + +[[package]] +name = "unstructured-client" +version = "0.18.0" +description = "Python Client SDK for Unstructured API" +optional = true +python-versions = ">=3.8" +files = [ + {file = "unstructured-client-0.18.0.tar.gz", hash = "sha256:b5f1866b6a48d2e28645e37e86c9d58b1ee7df2d88e79adf873572338c027aa8"}, + {file = "unstructured_client-0.18.0-py3-none-any.whl", hash = "sha256:36d8c5cb01b97a87e271e11d4d5a063d1c5b85fc5fd7f07819c35a9bef74821f"}, +] + +[package.dependencies] +certifi = ">=2023.7.22" +charset-normalizer = ">=3.2.0" +dataclasses-json-speakeasy = ">=0.5.11" +idna = ">=3.4" +jsonpath-python = ">=1.0.6" +marshmallow = ">=3.19.0" +mypy-extensions = ">=1.0.0" +packaging = ">=23.1" +python-dateutil = ">=2.8.2" +requests = ">=2.31.0" +six = ">=1.16.0" +typing-extensions = ">=4.7.1" +typing-inspect = ">=0.9.0" +urllib3 = ">=1.26.18" + +[package.extras] +dev = ["pylint (==2.16.2)"] + +[[package]] +name = "update" +version = "0.0.1" +description = "" +optional = false +python-versions = "*" +files = [ + {file = "update-0.0.1-py2.py3-none-any.whl", hash = "sha256:a25522b4bf60e3e3c1a3ff3ca3a4f5a328ac4b8ff400fdc9614483147e313323"}, +] + +[package.dependencies] +style = "1.1.0" + [[package]] name = "urllib3" version = "2.2.0" @@ -3345,6 +4732,16 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "ushlex" +version = "0.99.1" +description = "Replacement for shlex (that works with unicode) for Python 2.X." +optional = false +python-versions = "*" +files = [ + {file = "ushlex-0.99.1.tar.gz", hash = "sha256:6d681561545a9781430d5254eab9a648bade78c82ffd127d56c9228ae8887d46"}, +] + [[package]] name = "wcwidth" version = "0.2.13" @@ -3356,6 +4753,22 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "wget" version = "3.2" @@ -3366,6 +4779,85 @@ files = [ {file = "wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061"}, ] +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = true +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + [[package]] name = "yarl" version = "1.9.4" @@ -3489,8 +4981,9 @@ fastembed = ["fastembed"] hybrid = ["pinecone-text"] local = ["llama-cpp-python", "torch", "transformers"] pinecone = ["pinecone-client"] +unstructured = ["unstructured"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "894b9692ad914e11c364d588bca8d7a99ef862cdd5b2137c00e4d5cac77a35c9" +content-hash = "0dd678c1d3f1136dd0244295ba1bc9b1accbcd6c3da959b70027e1187996d08c" diff --git a/pyproject.toml b/pyproject.toml index 67851a3c34a39cff5b9fae0aee856696193e8c34..b490ad3cc3721f16aea4a5fd57ef5ed2a36c309c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,10 @@ llama-cpp-python = {version = "^0.2.28", optional = true} black = "^23.12.1" colorama = "^0.4.6" pinecone-client = {version="^3.0.0", optional = true} +update = "^0.0.1" +tiktoken = "^0.6.0" +regex = "^2023.12.25" + [tool.poetry.extras] hybrid = ["pinecone-text"] fastembed = ["fastembed"] @@ -48,6 +52,7 @@ mypy = "^1.7.1" types-pyyaml = "^6.0.12.12" types-requests = "^2.31.0" termcolor = "^2.4.0" +matplot = "^0.1.9" [build-system] requires = ["poetry-core"] diff --git a/semantic_router/schema.py b/semantic_router/schema.py index 6a5a0637a1190652b39f8d779eb23138e53ebfe3..066aa6911774de4f141ef8caff6d0802aeeb152e 100644 --- a/semantic_router/schema.py +++ b/semantic_router/schema.py @@ -77,6 +77,12 @@ class Message(BaseModel): class DocumentSplit(BaseModel): - docs: List[str] + docs: list[str] is_triggered: bool = False - triggered_score: Optional[float] = None + triggered_score: float | None = None + token_count: int | None = None + metadata: dict | None = None + + @property + def content(self) -> str: + return " ".join(self.docs) diff --git a/semantic_router/splitters/__init__.py b/semantic_router/splitters/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..44acb9e39ef60f0db98b2b07ddafee69cffeb756 100644 --- a/semantic_router/splitters/__init__.py +++ b/semantic_router/splitters/__init__.py @@ -0,0 +1,11 @@ +from semantic_router.splitters.base import BaseSplitter +from semantic_router.splitters.consecutive_sim import ConsecutiveSimSplitter +from semantic_router.splitters.cumulative_sim import CumulativeSimSplitter +from semantic_router.splitters.rolling_window import RollingWindowSplitter + +__all__ = [ + "BaseSplitter", + "ConsecutiveSimSplitter", + "CumulativeSimSplitter", + "RollingWindowSplitter", +] diff --git a/semantic_router/splitters/base.py b/semantic_router/splitters/base.py index c64d384c0726e7595333c61007f4d9d5d7bc82d5..87daedd127bbe39afe6f9fa44694a3ec22c9a54d 100644 --- a/semantic_router/splitters/base.py +++ b/semantic_router/splitters/base.py @@ -1,5 +1,5 @@ from itertools import cycle -from typing import List +from typing import List, Optional from pydantic.v1 import BaseModel from termcolor import colored @@ -12,6 +12,8 @@ class BaseSplitter(BaseModel): name: str encoder: BaseEncoder score_threshold: float + min_split_tokens: Optional[int] = None + max_split_tokens: Optional[int] = None def __call__(self, docs: List[str]) -> List[DocumentSplit]: raise NotImplementedError("Subclasses must implement this method") diff --git a/semantic_router/splitters/rolling_window.py b/semantic_router/splitters/rolling_window.py index ad5c568e4ebf38572caeb2f36a2a37488744ef6f..030719de6f49ce719da14849acf213c8bfd36723 100644 --- a/semantic_router/splitters/rolling_window.py +++ b/semantic_router/splitters/rolling_window.py @@ -1,88 +1,38 @@ -from typing import List - import numpy as np -from matplotlib import pyplot as plt -from nltk.tokenize import word_tokenize -from semantic_router.encoders.base import BaseEncoder +from semantic_router.encoders.base import BaseEncoder from semantic_router.schema import DocumentSplit -from semantic_router.splitters.base import BaseSplitter +from semantic_router.splitters.utils import split_to_sentences, tiktoken_length from semantic_router.utils.logger import logger -class RollingWindowSplitter(BaseSplitter): - """ - A splitter that divides documents into segments based on semantic similarity - using a rolling window approach. - It adjusts the similarity threshold dynamically. - Splitting is based: - - On the similarity threshold - - On the maximum token limit for a split - - Attributes: - encoder (Callable): A function to encode documents into semantic vectors. - score_threshold (float): Initial threshold for similarity scores to decide - splits. - window_size (int): Size of the rolling window to calculate document context. - plot_splits (bool): Whether to plot the similarity scores and splits for - visualization. - min_split_tokens (int): Minimum number of tokens for a valid document split. - max_split_tokens (int): Maximum number of tokens a split can contain. - split_tokens_tolerance (int): Tolerance in token count to still consider a split - valid. - threshold_step_size (float): Step size to adjust the similarity threshold during - optimization. - """ - +class RollingWindowSplitter: def __init__( self, encoder: BaseEncoder, - score_threshold=0.3, + threshold_adjustment: float = 0.01, window_size=5, - plot_splits=False, min_split_tokens=100, max_split_tokens=300, split_tokens_tolerance=10, - threshold_step_size=0.01, + plot_splits=False, ): + self.calculated_threshold: float self.encoder = encoder - self.score_threshold = score_threshold + self.threshold_adjustment = threshold_adjustment self.window_size = window_size self.plot_splits = plot_splits self.min_split_tokens = min_split_tokens self.max_split_tokens = max_split_tokens self.split_tokens_tolerance = split_tokens_tolerance - self.threshold_step_size = threshold_step_size def encode_documents(self, docs: list[str]) -> np.ndarray: - return np.array(self.encoder(docs)) - - def find_optimal_threshold(self, docs: list[str], encoded_docs: np.ndarray): - logger.info(f"Number of documents for finding optimal threshold: {len(docs)}") - token_counts = [len(word_tokenize(doc)) for doc in docs] - low, high = 0, 1 - while low <= high: - self.score_threshold = (low + high) / 2 - similarity_scores = self.calculate_similarity_scores(encoded_docs) - split_indices = self.find_split_indices(similarity_scores) - average_tokens = np.mean( - [ - sum(token_counts[start:end]) - for start, end in zip( - [0] + split_indices, split_indices + [len(token_counts)] - ) - ] - ) - if ( - self.min_split_tokens - self.split_tokens_tolerance - <= average_tokens - <= self.max_split_tokens + self.split_tokens_tolerance - ): - break - elif average_tokens < self.min_split_tokens: - high = self.score_threshold - self.threshold_step_size - else: - low = self.score_threshold + self.threshold_step_size + try: + embeddings = self.encoder(docs) + return np.array(embeddings) + except Exception as e: + logger.error(f"Error encoding documents {docs}: {e}") + raise def calculate_similarity_scores(self, encoded_docs: np.ndarray) -> list[float]: raw_similarities = [] @@ -97,11 +47,68 @@ class RollingWindowSplitter(BaseSplitter): return raw_similarities def find_split_indices(self, similarities: list[float]) -> list[int]: - return [ - idx + 1 - for idx, sim in enumerate(similarities) - if sim < self.score_threshold - ] + split_indices = [] + for idx in range(1, len(similarities)): + if similarities[idx] < self.calculated_threshold: + split_indices.append(idx + 1) + return split_indices + + def find_optimal_threshold(self, docs: list[str], encoded_docs: np.ndarray): + token_counts = [tiktoken_length(doc) for doc in docs] + cumulative_token_counts = np.cumsum([0] + token_counts) + similarity_scores = self.calculate_similarity_scores(encoded_docs) + + # Analyze the distribution of similarity scores to set initial bounds + median_score = np.median(similarity_scores) + std_dev = np.std(similarity_scores) + + # Set initial bounds based on median and standard deviation + low = max(0.0, float(median_score - std_dev)) + high = min(1.0, float(median_score + std_dev)) + + iteration = 0 + while low <= high: + self.calculated_threshold = (low + high) / 2 + logger.info( + f"Iteration {iteration}: Trying threshold: {self.calculated_threshold}" + ) + split_indices = self.find_split_indices(similarity_scores) + + # Calculate the token counts for each split using the cumulative sums + split_token_counts = [ + cumulative_token_counts[end] - cumulative_token_counts[start] + for start, end in zip( + [0] + split_indices, split_indices + [len(token_counts)] + ) + ] + + # Calculate the median token count for the splits + median_tokens = np.median(split_token_counts) + logger.info( + f"Iteration {iteration}: Median tokens per split: {median_tokens}" + ) + if ( + self.min_split_tokens - self.split_tokens_tolerance + <= median_tokens + <= self.max_split_tokens + self.split_tokens_tolerance + ): + logger.info( + f"Iteration {iteration}: " + f"Optimal threshold {self.calculated_threshold} found " + f"with median tokens ({median_tokens}) in target range " + f" {self.min_split_tokens}-{self.max_split_tokens}." + ) + break + elif median_tokens < self.min_split_tokens: + high = self.calculated_threshold - self.threshold_adjustment + logger.info(f"Iteration {iteration}: Adjusting high to {high}") + else: + low = self.calculated_threshold + self.threshold_adjustment + logger.info(f"Iteration {iteration}: Adjusting low to {low}") + iteration += 1 + + logger.info(f"Final optimal threshold: {self.calculated_threshold}") + return self.calculated_threshold def split_documents( self, docs: list[str], split_indices: list[int], similarities: list[float] @@ -114,93 +121,98 @@ class RollingWindowSplitter(BaseSplitter): or when a split point is reached and the minimum token requirement is met, the current split is finalized and added to the list of splits. """ - token_counts = [len(word_tokenize(doc)) for doc in docs] - splits: List[DocumentSplit] = [] - current_split: List[str] = [] + token_counts = [tiktoken_length(doc) for doc in docs] + splits, current_split = [], [] current_tokens_count = 0 for doc_idx, doc in enumerate(docs): doc_token_count = token_counts[doc_idx] - # Check if current document causes token count to exceed max limit - if ( - current_tokens_count + doc_token_count > self.max_split_tokens - and current_tokens_count >= self.min_split_tokens - ): - splits.append( - DocumentSplit(docs=current_split.copy(), is_triggered=True) - ) - logger.info( - f"Split finalized with {current_tokens_count} tokens due to " - f"exceeding token limit of {self.max_split_tokens}." - ) - current_split, current_tokens_count = [], 0 - - current_split.append(doc) - current_tokens_count += doc_token_count # Check if current index is a split point based on similarity - if doc_idx + 1 in split_indices or doc_idx == len(docs) - 1: - if current_tokens_count >= self.min_split_tokens: - if doc_idx < len(similarities): - triggered_score = similarities[doc_idx] - splits.append( - DocumentSplit( - docs=current_split.copy(), - is_triggered=True, - triggered_score=triggered_score, - ) - ) - logger.info( - f"Split finalized with {current_tokens_count} tokens due to" - f" similarity score {triggered_score:.2f}." - ) - else: - # This case handles the end of the document list - # where there's no similarity score - splits.append( - DocumentSplit(docs=current_split.copy(), is_triggered=False) + if doc_idx + 1 in split_indices: + if current_tokens_count + doc_token_count >= self.min_split_tokens: + # Include the current document before splitting + # if it doesn't exceed the max limit + current_split.append(doc) + current_tokens_count += doc_token_count + + triggered_score = ( + similarities[doc_idx] if doc_idx < len(similarities) else None + ) + splits.append( + DocumentSplit( + docs=current_split.copy(), + is_triggered=True, + triggered_score=triggered_score, + token_count=current_tokens_count, ) - logger.info( - f"Split finalized with {current_tokens_count} tokens " - "at the end of the document list." + ) + logger.info( + f"Split finalized with {current_tokens_count} tokens due to " + f"threshold {self.calculated_threshold}." + ) + current_split, current_tokens_count = [], 0 + continue # Move to the next document after splitting + + # Check if adding the current document exceeds the max token limit + if current_tokens_count + doc_token_count > self.max_split_tokens: + if current_tokens_count >= self.min_split_tokens: + splits.append( + DocumentSplit( + docs=current_split.copy(), + is_triggered=False, + triggered_score=None, + token_count=current_tokens_count, ) + ) + logger.info( + f"Split finalized with {current_tokens_count} tokens due to " + f"exceeding token limit of {self.max_split_tokens}." + ) current_split, current_tokens_count = [], 0 - # Ensure any remaining documents are included in the final token count + current_split.append(doc) + current_tokens_count += doc_token_count + + # Handle the last split if current_split: - splits.append(DocumentSplit(docs=current_split.copy(), is_triggered=False)) + splits.append( + DocumentSplit( + docs=current_split.copy(), + is_triggered=False, + triggered_score=None, + token_count=current_tokens_count, + ) + ) logger.info( - f"Final split added with {current_tokens_count} tokens " - "due to remaining documents." + f"Final split added with {current_tokens_count} " + "tokens due to remaining documents." ) - # Validation + # Validation to ensure no tokens are lost during the split original_token_count = sum(token_counts) split_token_count = sum( - [len(word_tokenize(doc)) for split in splits for doc in split.docs] + [tiktoken_length(doc) for split in splits for doc in split.docs] ) - logger.debug( - f"Original Token Count: {original_token_count}, " - f"Split Token Count: {split_token_count}" - ) - if original_token_count != split_token_count: logger.error( f"Token count mismatch: {original_token_count} != {split_token_count}" ) - for i, split in enumerate(splits): - split_token_count = sum([len(word_tokenize(doc)) for doc in split.docs]) - logger.error(f"Split {i} Token Count: {split_token_count}") raise ValueError( f"Token count mismatch: {original_token_count} != {split_token_count}" ) return splits - # TODO: fix to plot split based on token count and final split def plot_similarity_scores( self, similarities: list[float], split_indices: list[int] ): + try: + from matplotlib import pyplot as plt + except ImportError: + logger.warning("Plotting is disabled. Please `pip install matplotlib`.") + return + if not self.plot_splits: return plt.figure(figsize=(12, 6)) @@ -213,24 +225,97 @@ class RollingWindowSplitter(BaseSplitter): label="Split" if split_index == split_indices[0] else "", ) plt.axhline( - y=self.score_threshold, + y=self.calculated_threshold, color="g", linestyle="-.", label="Threshold Similarity Score", ) + + # Annotating each similarity score + for i, score in enumerate(similarities): + plt.annotate( + f"{score:.2f}", # Formatting to two decimal places + (i, score), + textcoords="offset points", + xytext=(0, 10), # Positioning the text above the point + ha="center", + ) # Center-align the text + plt.xlabel("Document Segment Index") plt.ylabel("Similarity Score") - plt.title(f"Threshold: {self.score_threshold}", loc="right", fontsize=10) + plt.title( + f"Threshold: {self.calculated_threshold} |" + " Window Size: {self.window_size}", + loc="right", + fontsize=10, + ) plt.suptitle("Document Similarity Scores", fontsize=14) plt.legend() plt.show() + def plot_sentence_similarity_scores( + self, docs: list[str], threshold: float, window_size: int + ): + try: + from matplotlib import pyplot as plt + except ImportError: + logger.warning("Plotting is disabled. Please `pip install matplotlib`.") + return + """ + Computes similarity scores between the average of the last + 'window_size' sentences and the next one, + plots a graph of these similarity scores, and prints the first + sentence after a similarity score below + a specified threshold. + """ + sentences = [sentence for doc in docs for sentence in split_to_sentences(doc)] + encoded_sentences = self.encode_documents(sentences) + similarity_scores = [] + + for i in range(window_size, len(encoded_sentences)): + window_avg_encoding = np.mean( + encoded_sentences[i - window_size : i], axis=0 + ) + sim_score = np.dot(window_avg_encoding, encoded_sentences[i]) / ( + np.linalg.norm(window_avg_encoding) + * np.linalg.norm(encoded_sentences[i]) + + 1e-10 + ) + similarity_scores.append(sim_score) + + plt.figure(figsize=(10, 8)) + plt.plot(similarity_scores, marker="o", linestyle="-", color="b") + plt.title("Sliding Window Sentence Similarity Scores") + plt.xlabel("Sentence Index") + plt.ylabel("Similarity Score") + plt.grid(True) + plt.axhline(y=threshold, color="r", linestyle="--", label="Threshold") + plt.show() + + for i, score in enumerate(similarity_scores): + if score < threshold: + print( + f"First sentence after similarity score " + f"below {threshold}: {sentences[i + window_size]}" + ) + def __call__(self, docs: list[str]) -> list[DocumentSplit]: + if not docs: + raise ValueError("At least one document is required for splitting.") + + if len(docs) == 1: + token_count = tiktoken_length(docs[0]) + if token_count > self.max_split_tokens: + logger.warning( + f"Single document exceeds the maximum token limit " + f"of {self.max_split_tokens}. " + "Splitting to sentences before semantically splitting." + ) + docs = split_to_sentences(docs[0]) encoded_docs = self.encode_documents(docs) self.find_optimal_threshold(docs, encoded_docs) similarities = self.calculate_similarity_scores(encoded_docs) split_indices = self.find_split_indices(similarities=similarities) splits = self.split_documents(docs, split_indices, similarities) - self.plot_similarity_scores(similarities, split_indices) return splits diff --git a/semantic_router/splitters/utils.py b/semantic_router/splitters/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..04e3c8b528d5670a0ae4ffb3e03136491c140d8f --- /dev/null +++ b/semantic_router/splitters/utils.py @@ -0,0 +1,79 @@ +from typing import List + +import regex +import tiktoken +from colorama import Fore, Style + +from semantic_router.schema import DocumentSplit + + +def split_to_sentences(text: str) -> list[str]: + """ + Enhanced regex pattern to split a given text into sentences more accurately. + + The enhanced regex pattern includes handling for: + - Direct speech and quotations. + - Abbreviations, initials, and acronyms. + - Decimal numbers and dates. + - Ellipses and other punctuation marks used in informal text. + - Removing control characters and format characters. + + Args: + text (str): The text to split into sentences. + + Returns: + list: A list of sentences extracted from the text. + """ + regex_pattern = r""" + # Negative lookbehind for word boundary, word char, dot, word char + (?<!\b\w\.\w.) + # Negative lookbehind for single uppercase initials like "A." + (?<!\b[A-Z][a-z]\.) + # Negative lookbehind for abbreviations like "U.S." + (?<!\b[A-Z]\.) + # Negative lookbehind for abbreviations with uppercase letters and dots + (?<!\b\p{Lu}\.\p{Lu}.) + # Negative lookbehind for numbers, to avoid splitting decimals + (?<!\b\p{N}\.) + # Positive lookbehind for punctuation followed by whitespace + (?<=\.|\?|!|:|\.\.\.)\s+ + # Positive lookahead for uppercase letter or opening quote at word boundary + (?="?(?=[A-Z])|"\b) + # OR + | + # Splits after punctuation that follows closing punctuation, followed by + # whitespace + (?<=[\"\'\]\)\}][\.!?])\s+(?=[\"\'\(A-Z]) + # OR + | + # Splits after punctuation if not preceded by a period + (?<=[^\.][\.!?])\s+(?=[A-Z]) + # OR + | + # Handles splitting after ellipses + (?<=\.\.\.)\s+(?=[A-Z]) + # OR + | + # Matches and removes control characters and format characters + [\p{Cc}\p{Cf}]+ + """ + sentences = regex.split(regex_pattern, text, flags=regex.VERBOSE) + sentences = [sentence.strip() for sentence in sentences if sentence.strip()] + return sentences + + +def tiktoken_length(text: str) -> int: + tokenizer = tiktoken.get_encoding("cl100k_base") + tokens = tokenizer.encode(text, disallowed_special=()) + return len(tokens) + + +def plot_splits(document_splits: List[DocumentSplit]) -> None: + colors = [Fore.RED, Fore.GREEN, Fore.BLUE, Fore.MAGENTA] + for i, split in enumerate(document_splits): + color = colors[i % len(colors)] + colored_content = f"{color}{split.content}{Style.RESET_ALL}" + print(f"Split {i + 1}, tokens {split.token_count}:") + print(colored_content) + print("-" * 88) + print("\n")