diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c27dd13..f34980f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,53 +25,68 @@ env: DOCS_BUILD_DIR: docs/_build/html jobs: - docs: - name: Build and deploy documentation + build: + name: Build documentation runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 # fetches tags, required for version info - name: Set up uv # Install a specific uv version using the installer - run: curl -LsSf https://astral.sh/uv/0.3.5/install.sh | sh + run: curl -LsSf https://astral.sh/uv/0.4.0/install.sh | sh - name: Set up Python run: uv python install 3.12 - name: Install documentation dependencies run: | sudo apt-get install graphviz pandoc uv sync --dev + - name: Test example notebooks + env: + TEST_NOTEBOOKS: 1 + run: > + uv run pytest --nbmake ${{ env.DOCS_DIR }}/examples/ + --nbmake-timeout=60 + - name: Test tutorial notebooks + env: + TEST_NOTEBOOKS: 1 + run: > + uv run pytest --nbmake ${{ env.DOCS_DIR }}/tutorials/ + --nbmake-timeout=60 + --ignore ${{ env.DOCS_DIR }}/tutorials/code + - name: Clean notebooks + run: | + uv run scripts/clean_notebooks.py -p ${{ env.DOCS_DIR }} -s - name: Draw diagrams from PlantUML files uses: Timmy/plantuml-action@v1 with: args: '-v -DPLANTUML_LIMIT_SIZE=8192 -tpng ${{ env.DOCS_DIR }}/puml/*.puml -o img' - name: Build documentation run: uv run ./build-docs.sh - - name: Setup Pages + - name: Setup pages id: pages uses: actions/configure-pages@v3 - - name: Upload Artifact + - name: Upload artifact uses: actions/upload-pages-artifact@v2 with: # upload build output path: ${{ env.DOCS_BUILD_DIR }} + + deploy: + name: Deploy documentation + if: ${{ github.event_name == 'push' && github.ref_name == 'release' }} + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + steps: - name: Deploy artifact id: deployment - uses: actions/deploy-pages@v1 - - # - name: Deploy documentation - # if: ${{ github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'release') }} - # uses: s0/git-publish-subdir-action@develop - # env: - # REPO: self - # BRANCH: docs - # FOLDER: ${{ env.DOCS_BUILD_DIR }} - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # CLEAR_GLOBS_FILE: ${{ env.WORKFLOWS_DIR }}/clear-target-files + uses: actions/deploy-pages@v2 + # - name: Zip up documentation to store as release asset # if: ${{ github.event_name == 'release' }} # run: | diff --git a/docs/examples/dependency-reader.ipynb b/docs/examples/dependency-reader.ipynb deleted file mode 100644 index c445824..0000000 --- a/docs/examples/dependency-reader.ipynb +++ /dev/null @@ -1,105 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Dependency Reader\n", - "\n", - "The dependency reader displays the dependency relations between the words in a sentence.\n", - "\n", - "A dependency represents a relation from a word that has a complex CCG type to a word that fulfils an argument of that type.\n", - "\n", - "For example, in the sentence \"John resigned\", the verb \"resigned\" has type `S\\NP` with one argument. This argument is fulfilled by the noun \"John\" which has type `NP`. Therefore, this sentence contains one dependency relation from \"resigned\" to \"John\":" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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1KefflpvbEBAgN5//31t3LjxvPMuWbJEZWVlys3Nldvt1rBhwxoczsGDB3XkyBHv9ZMnT+ruu+/W/ffff9ZjSkpKGjS39P3fChsyZIgWLVrU4GNOI+Rm7N1339VPfvIT3XTTTZKkf/3rX+rfv7+mTZum+Ph4denSRSNGjNBLL7103rm+/PJL3XzzzQoODlbXrl21YcOGemNKS0s1ZswYtW3bVqGhoerdu7fy8vIatNYWLVpo2LBhWrNmTb19oaGhysjI0IwZM847T2RkpGJiYtS9e3ctWrRIx44dO+NaTzt16pTeeecd3X333WrXrp12797t3Td37lw9+uijSkhIOOvxnTp1UkpKipYvX66qqqrzrm/48OFauXLlecf9GCE3Yzk5OerVq5f3ekxMjIqKivT55583ap7a2lqNHDlSQUFBysvL01//+lc9/vjjdcYcOXJEgwYN0jfffKM1a9Zo27Ztmj59umpraxt8O6mpqWcMWfr+PfX27dv15ptvNni+Vq1aSfr+lfXHtm/frqlTp6pDhw665557FBUVpY0bN6pnz54Nnl+SvvjiCyUnJ2v27Nm6+uqrlZGRoY8++khn++O1ycnJKi0tbfBnFqcRcjP2n//8R+3bt/denzRpkn72s58pISFBcXFxGj16tBYvXqwTJ06cc573339fO3bs0LJly9SzZ0/dfPPNyszMrDPm9ddf1/79+7V69WoNGDBAnTt31qhRo9S3b98GrzclJUWlpaXasWNHvX3t27fXI488olmzZunUqVPnnauqqkqzZ89Wy5YtNWjQIEnff/D3wgsvKCkpSb1799aePXu0cOFClZWVaeHChY1a62nx8fHKzMzU3r17tWbNGjmOo+HDh+u6667TnDlz9PXXX9e7H9L3/20ag5CbsWPHjik4ONh7PTQ0VO+8846++uorzZ49W2FhYZo6daqSk5PPeVpYXFysn/70p3X+Ufjxk76wsFCJiYlq27btBa+3VatWuv3228/6qvz4449r//79Wrx48VnnGDNmjMLCwhQeHq633npLWVlZ6tGjhyTpxRdf1OTJkxUWFqavvvpKq1at8p5pXCyXy6Vbb71VS5YsUWlpqfr27es9Nf/xfZTUoNPwHyLkZsztduvgwYP1tl933XW699579corr6igoEBffPGF/vGPf1zUbZ1+gl6sc51eR0ZGaubMmZo7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GEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAYQMGEDIgAGEDBhAyIABhAwYQMiAAS7HcRx/LwLAxeEVGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTCAkAEDCBkwgJABAwgZMICQAQMIGTDg/wDu1iGX2QbvxgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import DependencyReader\n", - "\n", - "reader = DependencyReader()\n", - "reader.sentence2diagram('John resigned').draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the more interesting case of the sentence \"Money that I give them\", the derivation can capture long-range word dependencies, like the one between \"money\" and \"give\":" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CCG parse:\n" - ] - }, - { - "data": { - "image/png": "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ysqsqKgoa+HChe77jxw50hoxYoRlWZZ16tQpKyQkxPr666+r/J177rnHGjlypGcH46PsnDfOXkeZN2+eJcl644033NfVZL32vffes6Kjo92XJVlPPvmk+/I333xjSbKmT5/uHutHH31kBQcHe2hkdcu/3ttTDTVr1ky33nqrFixYIMuydOuttyoqKqrKfcrLy9WvXz/35YCAAPXu3Vs7duyocr/u3bu7z0dHR0uSDh8+rJiYGP3000/avHlzlcZauSmu8js7EydO1Pz58/W3v/1Nubm5WrlypdLT0+t2wGhQLjTNFBYW6umnn9aKFSuUnZ2t8vJylZSUuLfMAPXBsiwdOHBA27dv144dO5Sbm6u8vDz36dixY8rLy1NhYaHKyspUXl6unj17uj/J8/f3V3BwsCIiIhQREaHIyMgq5+Pi4pSQkKDOnTsrMDDQ7uECRtq9e7fKysrUu3dv93VNmzZV586dq72/v7+//vSnP+mDDz7QmDFjVFRUpKVLl2rRokWSpF9//VXFxcW66aabqjyutLS0ym748G6dOnVyn6/Jem1FRYVOnTql4uJi9/ezzlzPadGihSQpLi6uynWnTp1Sfn6+wsLCPDqey9Vgy4z0265mlZu4XnvttUt+noCAAPf5yu8vuFwuSb/tMjRjxgzdfvvt7vts375dQ4cOVVBQkCRp7Nixeuyxx/TNN9/o66+/Vvv27XXdddddch40fBeaZh599FGtWbNGL774ouLi4tSoUSPdcccdKi0ttSUrfMORI0e0YsUKbdy4Udu3b1dWVpb78JyNGjVSdHS0u5C0atVKXbt2VUREhJo0aaKAgAD5+/srJCREY8aMUXl5ucrKylRSUlKlAO3atUtbtmzRkSNHdPToUUmS0+lUp06dlJCQoF69eunWW29V165d+S4Y4CGjR4/WgAEDdPjwYa1Zs0aNGjXS4MGDJcm9+9mKFSvUunXrKo+rXGeB9/P3/3+r7zVZr60UHBzsPl/des6Fnrcha9BlZvDgwSotLZXD4VBSUtI5twcEBGjz5s2KjY2V9NuX5LZs2VKrw9glJiZq586dVdpofn6+JMnP77evFEVGRmro0KF655139M0335zz3R2YKzAwUBUVFbV6zObNm3X33Xe7918uLCx0Hzjgcp4XONuOHTv073//W2lpafr2228lST169FD37t01bNgwJSQkKCEhQbGxse73q7py7NgxZWVlafv27e7Tc889p6lTpyo2NlbJyclKSUnRoEGDqiwAAfw/HTp0UEBAgLZs2eI+GuvJkyf1yy+/6A9/+EO1j+nbt6/atm2rjz/+WCtXrtQf//hH94pnfHy8goKCtH//fg0YMKDexgF7XMq6RHXrtd6uQS+BnE6ne5cxp9N5zu133HGHpkyZooiICMXExGj27NkqLi7WPffcU+O/MX36dCUnJysmJkZ33HGH/Pz8tHr16nPuN3HiRCUnJ6uiokLjxo279EGhQWnXrp2+++477d27V40bN67RJxCdOnXS4sWLlZKSIofDoWnTpp3zuHbt2mnDhg268847FRQUdM4uksCFZGZmasaMGUpLS1NoaKhuuukmvfXWW7r11lvduwN4WmRkpK677roqW6FPnz6tdevWKS0tTWlpaXrttdcUFxenadOmadSoUZQa4CxNmjTRuHHj3OsqzZs311NPPSU/P78Lbt0cNWqU/vWvf+mXX37R2rVrqzzfo48+qsmTJ8vlcql///46efKkNm/erLCwMNZPvMylrKNUt177008/adu2bXr22WfrIXX9a7BHM6sUFhZ23n31HnroIQ0fPlxjxoxRYmKifv31V61evVrh4eE1fv6kpCQtX75cX3zxha699lr9/ve/1wcffHDO/W688UZFR0crKSlJrVq1uuTxoGF59NFH5XQ6FR8fr2bNmtXoey//+Mc/FB4err59+yolJUVJSUlKTEyscp9nnnlGe/fuVceOHdWsWTNPxYeX2bZtm1JTU9WrVy/9/PPPWrhwoY4ePaolS5ZowoQJ9VZkzicoKEhJSUl69dVXtXfvXn3//fdKSEjQuHHjFB8frw8++ECWZdmaEWho/vGPf6hPnz5KTk7WjTfeqH79+qlLly5Vdvk52+jRo5WVlaXWrVtX+W6w9NtRqKZNm6ZZs2apS5cuGjx4sFasWKH27dt7eiioZ2evo+Tk5Fz0MdWt17788svuvZi8ks0HILgknj6yRHXPX1BQYIWFhVmfffaZR/5mbbIA8L554+OPP7aCg4OtuLg4a+HChVZZWZndkWosMzPTuu222yxJ1vjx463Tp0/bHalOeHIaa2jTb0PL480KCwutpk2bWm+99ZbdUVADDWnesGP91wQNfsuM3Vwulw4fPqyZM2fqiiuu0G233WZ3JABexLIs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6tZbb9Wjjz6qvLw8u+PUuZycHD3xxBO688471aJFC7vjAJfs3nvvVVFRkR5//HG7o3jEvHnzlJGRoUmTJtkdpV74TJkZNGiQ/vznP2vKlCled2Sz9evX69VXX9Xf//53dezY0e44wGWZO3eunE6nHnjgAa87aMfDDz+sU6dOad68eXZHgYfMmzdPJSUleuSRR+yOUqcsy9IDDzwgp9OpuXPn2h0HuCwdO3bUrFmzNHfuXK1fv97uOHVqz549mjJliu6//37dcMMNdsepFz5TZiRp9uzZioiIUHJystcUmu+//14jRozQddddp7/85S92xwEuW7NmzfT6669ryZIlmjJliioqKuyOdNlcLpemT5+u999/X3PmzOF7bV6sdevWmjNnjt577z1Nnz7dK3Ztrqio0KOPPqp///vfeuONNxQVFWV3JOCyPfTQQ+rfv79GjBih77//3u44dWLv3r1KSUlRZGSkZs+ebXeceuNTZSYsLEwrV65USUmJevfurc2bN9sd6bIsWrRIAwYMUIcOHfTJJ59wmFd4jTvuuENz5szRyy+/rKFDhxr9heri4mKNGDFCM2fO1KxZszR27Fi7I8HDxo0bp+eff14zZ87UnXfeqeLiYrsjXbL8/HylpqZqzpw5mjNnjoYPH253JKBO+Pn56dNPP1WHDh00YMAAffzxx3ZHuiybNm3Stddeq5KSEq1atUpNmjSxO1K98bm13/j4eH333Xfq0qWLbrjhBk2fPl3Hjx+3O1atHDhwQPfff79GjhypO+64Q+np6ey/DK/z8MMPa/ny5Vq/fr169+6tZcuWGbXbmWVZWrVqlfr06aPPP/9cixcv1mOPPSaHw2F3NHiYw+HQ1KlT9dlnn2nFihXq06ePVq1aZdz0u2zZMv3ud7/Txo0btWLFCj388MN2xwLqVIsWLZSenq7hw4frzjvv1P33368DBw7YHatWjh8/runTp2vQoEFKSEjQ999/ry5dutgdq175XJmRpKioKK1Zs0aPPPKIXnzxRbVv315PP/20Tpw4YXe0Czpw4IAefPBBxcXF6dNPP9Urr7yihQsXKjg42O5ogEcMGTJE3377rVq0aKHU1FT17NmzwZeaM0vMkCFDFBoaqs2bN2vYsGF2R0M9u/3227V582aFhoZqyJAhRpSayhLTs2dPpaamqmXLlvrmm284ehm8VnBwsN57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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dependency graph:\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5wAAAFACAYAAADQ0XOsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABGIElEQVR4nO3deXxM9+L/8feQpFltjUgiInahlqQaGruGUFtRFKmtaOtWrUWLKm4q7rUUraWttbhaVWIvammoqy1CRUpR0mjSNteeICXz+8M38zPZg2OE1/Px8HiYcz7ncz7nZD7zmfeczWQ2m80CAAAAAOA+K2TrBgAAAAAAHk0ETgAAAACAIQicAAAAAABDEDgBAAAAAIYgcAIAAAAADEHgBAAAAAAYgsAJAAAAADAEgRMAAAAAYAgCJwAAAADAEAROAAAAAIAhCJwAAAAAAEMQOAEAAAAAhiBwAgAAAAAMQeAEAAAAABiCwAkAAAAAMASBEwAAAABgCAInAAAAAMAQBE4AAAAAgCEInAAAAAAAQxA4AQAAAACGIHACAAAAAAxB4AQAAAAAGILACQAAAAAwBIETAAAAAGAIAicAAAAAwBAETgAAAACAIQicAAAAAABDEDgBAAAAAIYgcAIAAAAADEHgBAAAAAAYgsAJAAAAADAEgRMAAAAAYAgCJwAAAADAEHa2bsDdiouLU1JSkq2bAQC5cnd3l6+vr62bARthvDIG/erxRr8yBv0KRiiQgTMuLk7+/v5KSUmxdVMAIFfOzs6KjY1lEH8MMV4Zh371+KJfGYd+BSMUyMCZlJSklJQULVu2TP7+/rZuDgBkKzY2VmFhYUpKSmIAfwwxXhmDfvV4o18Zg34FoxTIwJnO399fgYGBtm4GAAA5YrwC7j/6FVAwcNMgAAAAAIAhCJwAAAAAAEMQOAEAAAAAhiBwAgAAAAAMQeAEAAAAABiCwAkAAAAAMASBEwAAAABgCAInAAAAAMAQBE4AAAAAgCEInAAAAEAe7Nq1SyaTSRcvXrR1U4ACg8CJAql3794ymUx67bXXMs37xz/+IZPJpN69ez/4hgFAAdW7d2+98MILtm4G8FBp0qSJhgwZYutmAAUagRMFVpkyZbRy5Updu3bNMu369etasWKFfH19bdgyAAAAABKBEwVYYGCgypQpo6+++soy7auvvpKvr68CAgIs027cuKE333xTHh4ecnR0VIMGDfTDDz9Y5qefHvPNN9+oTp06cnZ2VnBwsI4fP261vsjISAUGBsrR0VHly5fXhAkTdPPmTUlS37591aZNG6vyf//9tzw8PLRgwQIjNh8AABiod+/e2r17t2bOnCmTySSTyaQzZ85Ikg4cOHDX3xkkyWQyaf78+WrTpo2cnZ3l7++vffv26eTJk2rSpIlcXFwUHBysU6dOPchNBgxB4ESB1rdvXy1atMjyeuHCherTp49VmZEjR2r16tVasmSJDh48qIoVKyo0NFTnz5+3KjdmzBhNmzZNP/74o+zs7NS3b1/LvKioKPXs2VODBw/WsWPHNH/+fC1evFjh4eGSpH79+mnLli1KSEiwLLNhwwalpKSoa9euRmw6AAAw0MyZM/Xss8+qf//+SkhIUEJCgsqUKSPp3r4zpJs0aZJ69uyp6OhoVa1aVd27d9err76qt99+Wz/++KPMZrPeeOONB7rNgBEInCjQwsLCtGfPHp09e1Znz57V3r17FRYWZpmfnJysuXPn6t///rdatWqlatWq6ZNPPpGTk1OmI4/h4eFq3LixqlWrptGjR+u7777T9evXJUkTJkzQ6NGj1atXL5UvX17NmzfXpEmTNH/+fElScHCwqlSpos8++8xS36JFi9S5c2e5uro+gD0BAADup6JFi8rBwUHOzs7y9PSUp6enChcuLOnevjOk69Onj7p06aLKlStr1KhROnPmjHr06KHQ0FD5+/tr8ODB2rVr14PebOC+s7N1A4B7UbJkSbVu3VqLFy+W2WxW69at5e7ubpl/6tQp/f3336pfv75lmr29vYKCghQbG2tVV82aNS3/9/LykiT9+eef8vX11eHDh7V3716rXydv3bql69evKyUlRc7OzurXr58+/vhjjRw5Un/88Yc2b96sHTt2GLXpAADARu71O0PGOkqVKiVJqlGjhtW069ev6/LlyypSpIih2wMYicCJAq9v376WU04++uiju67H3t7e8n+TySRJSktLkyRdvXpVEyZMUMeOHTMt5+joKEnq2bOnRo8erX379um7775TuXLl1LBhw7tuDwAAeDjd63eG7OrIqV6goCJwosBr2bKlUlNTZTKZFBoaajWvQoUKcnBw0N69e1W2bFlJt2/m88MPP+TrNueBgYE6fvy4KlasmG2ZJ598Ui+88IIWLVqkffv2ZbqWFAAAFCwODg66detWvpbJy3cG4HFC4ESBV7hwYcvpsenXVqRzcXHR66+/rrfeekslSpSQr6+v/vWvfyklJUWvvPJKntfx7rvvqk2bNvL19dWLL76oQoUK6fDhwzp69Kj++c9/Wsr169dPbdq00a1bt9SrV6/7s4EAAMAm/Pz8tH//fp05c0aurq55OtqY1+8MwOOCmwbhkVCkSJFsr2+IiIhQp06d9PLLLyswMFAnT57U119/reLFi+e5/tDQUG3YsEFbt27VM888o3r16mnGjBmWo6bpQkJC5OXlpdDQUHl7e9/TNgEAANsaMWKEChcurGrVqqlkyZKKi4vLdZm8fmcAHhcc4USBtHjx4hznr1271vJ/R0dHzZo1S7NmzcqybJMmTWQ2m62m1a5dO9O00NDQTKfsZpScnKwLFy7k6+gpADwMcvtcBR5HlStX1r59+6ym9e7d2+r13XxnyFjez88v07Ssvp8ABRGBE7gP0tLSlJSUpGnTpqlYsWJq166drZsEAAAA2ByBE7gP4uLiVK5cOfn4+Gjx4sWys6NrAQAAAHwrBu6DrE6FAQAAAB533DQIAAAAAGAIAicAAAAAwBAETgAAAACAIQicAAAAAABDEDgBAAAAAIYgcAIAAAAADEHgBAAAAAAYgsAJAAAAADAEgRMAAAAAYAgCJwAAAADAEHa2bsC9iI2NtXUTACBHfE5B4n1wv7E/IfE+uN/YnzBKgQyc7u7ucnZ2VlhYmK2bAgC5cnZ2lru7u62bARtgvDIO/erxRb8yDv0KRjCZzWazrRtxN+Li4pSUlGTrZuRq+vTp2rt3r1avXm3rpgCPjDFjxigpKUnz58+3dVPyxN3dXb6+vrZuBmykoIxXr776qtzd3RUeHm7rpuQJ/erxVlD6VadOnVS/fn0NGzbM1k3JE/oVjFAgj3BKkq+vb4HoEKVKlZKjo6MCAwNt3RTgkVGiRAnduHGDfoUCoaCMV25ubipRogT9CgVCQelXjo6OKlWqFP0KjzVuGgQAAAAAMASBEwAAAABgCAInAAAAAMAQBE4AAAAAgCEInAAAAAAAQxA4HzL/+9//5OHhoTNnzlimjRs3TgMGDLBdowqoefPmqW3btnku36hRI61YsSLP5Xft2iWTySSTyaQXXnghx7JNmjTRkCFD8lXvxYsX872e+yWrfZeUlCQPDw/Fx8c/kDbcT3ntV1mVy817771n+ft88MEHOZY1mUxau3ZtnuutXbv2Xa3nfnnppZc0bdq0B7Kuh0Fqaqr8/Pz0448/PrB1Hjt2TD4+PkpOTn5g67xf6FcF0+jRozVo0KAHus569eo90MfDMV5l7VHuVw96vLLFeGFr9zJeETgfMuHh4Wrfvr38/PwkSYmJiZo5c6bGjBljKdO7d2+ZTCZFRERYLbt27VqZTCbL6zuDislkUqlSpdSpUyedPn1av//+u+zt7XX+/HmrOtKXqV69um7dumU1r1ixYlq8eLHltZ+fn6VuFxcXBQYGatWqVXe97R9//LGaNGmiIkWKWAWuu9W3b18dPHhQUVFRmeZdu3ZNLi4uOnnypCRp3bp1+uOPP/TSSy9Zyhw+fFjt2rWTh4eHHB0d5efnp65du+rPP/+0quv48eNW++V+Cw4OVkJCgrp06ZLl/KZNm+rTTz/VmTNnZDKZ5OHhoStXrliVqV27tt577z3L6yZNmlj+do6OjqpWrZrmzJljmZ/VvnN3d1fPnj01fvz4+7uBD0Be+lVW5SRpzZo1qlevnooWLSo3NzdVr149048H1atXV0JCgqE/DI0YMUIJCQny8fGRJO3bt08lS5bM1E8XL14sk8mkli1bWk2/ePGiTCaTdu3aZZl25+dD0aJFVb9+fe3YscMyf+zYsQoPD9elS5cytWf37t0qU6aMpPvzmXQ3du3apfbt28vLy0suLi6qXbu2li9ffld1SZKDg4NGjBihUaNGZTl/woQJlgfNp3/+/fe//7UqM2TIEDVp0sTy+s4vXnZ2dvLz89PQoUN19epVSVK1atVUr149TZ8+/a7bbSv0q7vrV/kVHh6u4OBgOTs7q1ixYnddT7oRI0ZoyZIlWfa7s2fPysnJSVevXrW8d1977TWrMtHR0TKZTJagkz72pP978skn1aJFCx06dMiyzNixYzV69GilpaVlWueSJUvUoEEDSf9/bFq5cqVVmQ8++MDq/ZP+9zCZTCpUqJB8fHzUp08fy/jMePX49asHPV7ZYrzIr6+++kp16tRRsWLFLGPkZ599dld1Sfc2XhE4HyIpKSlasGCBXnnlFcu0Tz/9VMHBwSpbtqxVWUdHR02ZMkUXLlzItd7jx4/r999/16pVqxQTE6O2bduqVKlSCggI0MaNG7Nc5vTp01q6dGmudU+cOFEJCQk6dOiQnnnmGXXt2lXfffddrstJUnJysv73v/9ZXqekpKhly5Z65513sl0mLi4uT3VLtz8MunfvrlmzZmWat23bNpUtW1YVK1aUJM2aNUt9+vRRoUK3u8Rff/2l5557TiVKlNDXX3+t2NhYLVq0SN7e3pl+2fHw8LgvXwJy2g5PT085OTllmnf+/Hnt3bvX6mjklStXNHXq1Fzr7d+/vxISEnTs2DF16dJF//jHP/Sf//zHss6s9l2fPn20fPnyTD9UPMzy2q+yKvfNN9+oa9eu6tSpk77//nsdOHBA4eHh+vvvv63WYWdnJ09PTzk7Oxu2Ha6urvL09FThwoUlSXXr1lXhwoWz7G92dnbavn27du7cmWu9ixYtUkJCgvbu3St3d3e1adPGMqA+9dRTqlChgpYtW5ZpucjISKv33b1+JmX8IpKdOz8DvvvuO9WsWVOrV6/WkSNH1KdPH/Xs2VMbNmywlPnrr790/fr1PNUtST169NCePXsUExOTaV5kZKTatWtnee3o6Jjtl407pX/BO3PmjKZMmaKPP/5Yw4cPt8zv06eP5s6dq5s3b+a5nbZGv8pZTv0qNxcuXLD6gpmamqrOnTvr9ddfz3aZ/IyN7u7uCg0N1dy5czPNi4yMVNOmTeXq6irp9nt8wYIF+uWXX3Ktd/v27UpISNDXX3+tq1evqlWrVpYfjlu1aqUrV65o8+bNWa4zY78aO3ZspvdDRkWKFFFCQoLi4+P1ySefaPPmzXr55Zct8xmvHq9+ZYvxyhbjRW5+++03y/9LlCihMWPGaN++fZYxsk+fPvr6668tZeLj42U2m/Nc/92OVwTOh8imTZv0xBNPqF69epZpK1euzPK00JCQEHl6emry5Mm51uvh4SEvLy81atRI7777ro4dO6aTJ0+qXbt2WrduXZbLDBo0SOPHj9eNGzdyrNvNzU2enp6qXLmyPvroIzk5OWn9+vXZljebzdq9e7f69OkjT09P7dmzxzJvyJAhGj16tNX2Z9S4cWPVq1dPc+fOzdMHRdu2bbVu3Tpdu3bNavqdHwR//fWXduzYYbWf9+7dq0uXLunTTz9VQECAypUrp6ZNm2rGjBkqV65cjutMTk5Wz5495erqKi8vryxP8bhx44ZGjRqlMmXK6IknnlDFihW1YMGCXLcno40bNyowMFClSpWyTBs0aJCmT5+e6UhsRs7OzvL09FT58uX13nvvqVKlSlbvh6z2XfXq1eXt7a01a9bku622ktd+lVW59evXq379+nrrrbdUpUoVVa5cWS+88II++uijXNf7yy+/qFGjRpYjyNu2bctUJj4+Xt26dVOJEiXk4uKiOnXqaP/+/XnarkKFCqlNmzZZ9mEXFxf17dtXo0ePzrWeYsWKydPTU0899ZTmzp2ra9euWbW1bdu2mY42SLfPCrhzML0fn0nZuXz5shYsWKBGjRpZnbb1zjvvaNKkSQoODlaFChU0ePBgtWzZUl999ZWlzKZNm+Tl5aXXXntN+/bty7VtxYsXV/369TNt82+//aaYmBirX+IHDBig//73v9q0aVOOdaZ/wfPx8VHXrl3Vo0cPq79b8+bNdf78ee3evTvX9j0s6Fc5y61fZXTz5k1t3LhRnTt3lpeXl06dOmWZN2HCBA0dOlQ1atTIdvly5copJCREn332mVJSUnJtX3b9OuOX5CpVqqhp06aZjq5l5cknn5Snp6fq1KmjqVOn6o8//rDs98KFC+v555/PtM7r169r69atVuvs1q2bLl68qE8++STH9ZlMJnl6esrb21utWrXSm2++qe3bt1vGLMarx69fPejxyhbjRVbi4uIUHh6uypUr680337RMb9KkiTp06CB/f3/LGFmzZk2r797jxo1T+fLlNX78+Dz9KHa34xWB8yESFRWlp59+2vL6/PnzOnbsmOrUqZOpbOHChfX+++9r9uzZ+bpGIf0oWWpqqtq3b6+vv/5aqampmcoNGTJEN2/e1OzZs/Nct52dnezt7bOs7/Tp0xo/frzKly+v1q1b69atW1qzZk2+rrGUpG+//Vbt2rXTrFmz5OXlpS5dumjjxo3ZHh2pU6eObt68afWhmJaWpg0bNqh9+/aSpD179sjZ2Vn+/v6WMp6enrp586bWrFmTr19+JOmtt97S7t27FRkZqa1bt2rXrl06ePCgVZmePXvqP//5j2bNmqXY2FjNnz/f8otyfqxbt86yHem6deumihUrauLEifmqy8nJyepvl9W+k6SgoKAsT1N+WOW1X2UsJ91+H8TExOjo0aP5WmdaWpo6duwoBwcH7d+/X/Pmzcv0y+bVq1fVuHFjnTt3TuvWrdPhw4c1cuTILE85y0779u2zHYjee+89/fTTT/ryyy/zXN+dnw/pgoKC9P3331v9+BQTE6M///xT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ISGqXLmyevXqpcOHDysqKirTXR67desmT09PvfDCC9q7d69Onz6t1atX5+lOqncqWbKkgoKCrB4FcidHR0dNmDDhrj4fpNvvgzv/3rkdWZfu7TMpXfqX8MjISJ07d049e/bU0qVLrU6X3blzp1q3bq0333xTnTp1svzqfednxrJlyxQaGqqUlBR98cUXOnv2rCZPnmx1k5KctvnmzZvavHlzrts8YMAAFS1aVCtWrMj3tp45c0bnzp1TSEhIvpe1FfrVvfWrdMHBwZo/f74SExP173//W9HR0apVq5bVpRtxcXGKjo5WXFycbt26pejoaEVHR1s9OqVs2bJas2aN/vGPfyghIUGrVq1SmzZtZGdnl+V6o6Ki1LBhQ0tQy0u/LlWqlIYNG/ZAP0tat26tunXrav78+fleH+PV49evbDFePejxIl3x4sU1cOBA7d+/X0ePHlWtWrU0cuRIq0cDTZ48Wdu2bdPp06cVGxuradOm6bPPPrO6/GzgwIEaNGiQKlWqpB9//FGHDh3S4MGDsw31dzteETgfIjVq1FBgYKBV8Ej/9SK3U20mTpx416fj5HSKgyQ1a9ZMzZo1uy/PiLOzs1ObNm305ZdfKiEhwerUhHnz5ikgIED9+/eXdPtUh4CAAKu2bdy4UTExMRo5cqS8vLxyXd9//vMfS31S1ufyFy5c2PK8rnTVqlWTs7Ozhg8frtq1a6tevXr64osv9Omnn1p15qz8+9//VsOGDdW2bVuFhISoQYMGme4mN3fuXL344osaOHCgqlatqv79++cr0EdGRur555/P9stEusqVK6tv3775eg5huoz7Ln29vr6+atiwYb7rs5W89qusyjVu3FinT59Wz549VbVqVbVq1UqJiYnaunWr1XW5GRUqVEhr1qzRtWvXFBQUpH79+ik8PNyqjIODg7Zu3SoPDw89//zzqlGjhiIiIrL9tT8nufXhXr165Xiznexcv35da9eutbwPkpOT9c033+Q6mEr39pmUUcmSJS1nS9z5w9CSJUuUkpKiyZMny8vLy/KvY8eOljLPPfecEhMTtXz5crVo0SLXG5Xt27dPly5d0osvvijp9um6rq6uCgwMzHE5e3t7TZo06a77WosWLTI9b/lhRr+6+36VFUdHR7300kvasmWL4uLirN4L7777rgICAjR+/HhdvXpVAQEBCggIsLprbExMjPbv36+BAwdmumlIVlauXGn1+Z6XL+aSNGLEiLu6o/q5c+f03XffWW7oderUKZ08eVKhoaG5LjtlypS76leMV49Xv7LFeGWL8SIrVatWVUREhOLi4qxOl01OTtbAgQNVvXp11a9fX6tXr9ayZcvUr18/S5m3337bcibEndfDZueuxyszDDVs2DBz1apV81x+w4YNZn9/f/OtW7fMZrPZnJaWZn7mmWfMK1asMKqJ5suXL5ufeOIJc1xcnGHrsIWjR4+aPTw8zBcvXjSbzWbzX3/9ZbazszMnJiZmKpuQkGAuUaKE+cyZM3muf+fOnWZJ5gsXLtyvJueoV69e5vbt25vNZrO5Ro0a5s8//9ywdWXcd+nq1q1rXr58uWHrzavu3bubmzZtmufyee1XGcvlxfjx4821atXKc/l7VbZsWfOMGTOspv38889mFxcX87Vr1+7ruubMmWNu3ry55fXq1avN/v7+93UdD5suXbqYw8PDLa8HDRpkfv311w1b340bN8y+vr7mPXv2GLaOvGratKm5e/fueS5PvyqYNm3aZPb39zf//fffZrPZbD5w4IC5aNGi5tTUVMPWOXLkSHP//v0tr6dNm2Zu1aqVYeszmx+e8apq1armYcOG5bk8/eru2GK8etDjha3dy3jFEc6HTOvWrTVgwACdO3dO0u07zn388cf35ehidtzc3DRr1qw8Pf6kIElISNDSpUstFzufP39e06dPz3SzDun2dQELFixQXFxcvtfj4+Ojbt263XN7sxMVFSVXV1fLEdjU1FR16tRJrVq1MmydGfeddPv62Y4dOxq6rUbJa7/KWC6v0u8ql91NAO6H999/X66urlm+R6tUqaJ3330327s53i17e3urZ/G6urrmeNfqgi41NVU1atSwuqPnU089lenuzfdTXFyc3nnnHdWvX9+wdRiFflUwJScna9GiRZYzZNKfuW1vb2/YOj08PDRp0iTLax8fnxxv1HKvGK+y96j2qwc9XtlivLC1exmvTGZzPp9qj3wZPny4Nm3alOMtl1EwXbt2zfJB7+rqKk9PzwK9noKkR48eSkhIyPIZsg/a+fPnre6Ml/FubgVtPXh8NWvWTF5eXnl+RpyR6Fd4VPj7++v555/XtGnTbN0U+hVsJucLwABky8nJSRUrVnxk1oO7U6JEiXt6NtnDth7gYUC/Au4/+hVshVNq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LOeXK1dO27dvf2D7Lq8++eQTNWzYUMWLF1fx4sUVEhKi77///q7rq1atmurVq6fp06ffdR0A7h8CJwAAyJeUlBQtWLBAr7zyimXap59+quDgYJUtW9aqrKOjo6ZMmaILFy7kWu/x48f1+++/a9WqVYqJiVHbtm1VqlQpBQQEaOPGjVkuc/r0aS1dujTXuidOnKiEhAQdOnRIzzzzjLp27Wo5Sunu7q7Q0FDNnTs303KRkZFq2rSpXF1dZTab9eGHH1pt97Fjx9SyZUvVqVNH3377rX766SfNnj1bDg4OVmHOZDLJ09NTbm5uubb1bjk5OcnT01MODg6Z5h05ckQXLlxQ48aNLdOM3nc5+e233yz/37Vrl7p166adO3dq3759KlOmjFq0aKFz585ZysTHx8tsNue5/j59+mju3Lm6efNmvtoF4P4jcAIAgHzZtGmTnnjiCdWrV88ybeXKlWrbtm2msiEhIfL09NTkyZNzrdfDw0NeXl5q1KiR3n33XR07dkwnT55Uu3bttG7duiyXGTRokMaPH68bN27kWLebm5s8PT1VuXJlffTRR3JyctL69est89u2bauVK1dmWi4yMlLt2rWTJB04cECnTp1S69atLfO3bt0qT09P/etf/9JTTz2lChUqqGXLlvrkk0/k5OSUY5v+/PNPtW3bVk5OTipXrpyWL1+eqczFixf16quvqlSpUnJ0dNRTTz2lDRs25FhvViIjI9WyZUvZ29tbphm97zKKi4tTeHi4KleurDfffNMyffny5Ro4cKBq166tqlWr6tNPP1VaWpq++eYbS5lx48apfPnyGj9+fJ6OpjZv3lznz5/X7t27cy0LwFgETgAAkC9RUVF6+umnLa/Pnz+vY8eOqU6dOpnKFi5cWO+//75mz56t+Pj4PK8jPaylpqaqffv2+vrrr61OUU03ZMgQ3bx5U7Nnz85z3XZ2drK3t7eqLygoSPHx8VbXpF68eFF79uyxBM6oqChVrlzZ6iilp6enEhIS9O233+Z5/el69+6t3377TTt37tSXX36pOXPm6M8//7TMT0tLU6tWrbR3714tW7ZMx44dU0REhAoXLpzvda1bt07t27e3mmbkvkuXnJyszz77TCEhISpXrpw2bdqk4cOHa+HChdmuIyUlRX///bdKlChhmTZr1iyNGzdOu3fvVqVKldSoUSMtXLhQV65cybIOBwcH1a5dW1FRUXneNgDGIHACAIB8OXv2rLy9vS2v4+LiZDabrabdqUOHDqpdu7bGjx+fp/oTEhI0depUlS5dWlWqVFGNGjXk7u6uHTt2ZCrr7Oys8ePHa/Lkybp06VKudaemplrKNmvWzDI9ve1nz561TNu0aZNq1qxpNS/jNnbu3FndunVT48aN5eXlpQ4dOujDDz/U5cuXc2zHiRMntHnzZn3yySeqV6+enn76aS1YsEDXrl2zlNm+fbu+//57ffXVV2revLnKly+vNm3aqFWrVrlu553OnTunI0eOZFrOyH23e/du9e3bV56ennrvvfdUv359nThxQnv37tWrr76q4sWLZ7ueUaNGydvbWyEhIZZpbm5u6tu3r3bt2qXTp0+rRYsWmjJlijw9PRUWFqZt27ZlOuXW29vbqk0AbIPACQAA8uXatWtydHS0ei3JalpGU6ZM0ZIlSxQbG5ttGR8fH7m4uMjb21vJyclavXq15XrEnE6rfeWVV/Tkk09qypQp2dY9atQoubq6ytnZWVOmTFFERITVqbHpR1RTUlIs0+48nTar7ZZuH8FdtGiR4uPj9a9//UulS5fW+++/r+rVqyshISHb9sTGxsrOzs7qSHHVqlWt7jobHR0tHx8fVa5cOdt68mLdunVq0KCBVd3pjNp3TZo00cqVKzV16lSdOnVKEyZMUIUKFXJta0REhFauXKk1a9Zk+34qW7asxo4dq+PHj2vOnDmKjIxUixYtMoVmJycnqzYBsA0CJwAAyBd3d3ermwC5u7tLUo43BmrUqJFCQ0P19ttvZ1smKipKR44c0eXLlxUdHa26deta5rVv397qusE72dnZKTw8XDNnztTvv/+eZZm33npL0dHRio+P14ULFzRq1Cir+el3wS1ZsqSk20fztmzZYhU4M273nUqXLq2XX35ZH374oWJiYnT9+nXNmzcv223Ni9yuAc2rdevWWW3HnYzYd5K0fv16tW7dWoMHD1ZgYKBmzJihxMTEHNs5depURUREaOvWrapZs2a25ZKSkjR79mwFBQWpf//+atasmVavXq2iRYtmatedbQJgGwROAACQLwEBATp27JjldYUKFVSkSBGraVmJiIjQ+vXrtW/fviznlytXThUqVMjyTq4NGzZUcnKyDh48mOWynTt3VvXq1TVhwoQs57u7u6tixYry9PS0eiRL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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sentence = 'Money that I give them'\n", - "\n", - "print('CCG parse:')\n", - "reader.ccg_parser.sentence2diagram(sentence).draw(figsize=(8, 3))\n", - "\n", - "print('\\nDependency graph:')\n", - "reader.sentence2diagram(sentence).draw(figsize=(8, 3))" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/torchquantum.ipynb b/docs/examples/torchquantum.ipynb deleted file mode 100644 index 8873dab..0000000 --- a/docs/examples/torchquantum.ipynb +++ /dev/null @@ -1,354 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Quantum pipeline using TorchQuantum" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "BATCH_SIZE = 10\n", - "EPOCHS = 5\n", - "LEARNING_RATE = 0.01\n", - "SEED = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = float(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/lmbq_tq/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "reader = BobcatParser(verbose='text')\n", - "\n", - "train_diagrams = reader.sentences2diagrams(train_data)\n", - "dev_diagrams = reader.sentences2diagrams(dev_data)\n", - "test_diagrams = reader.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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zMSIESOwfv167N+/HydPnsTZs2fx888/c/MXFRVhzpw5uHHjBiIjI6GmpobPPvsMlZWVQuuV12dSWFiINWvWYO/evbh48SIyMjLqfUg2JycnvHjxQmifZI25NG0Kj8fDhQsXUFhYiFWrVuGXX37BnTt3YGJigunTp+Pq1as4ePAgbt++jS+++AIDBw7E/fv3ueULCwsRFBSEX3/9FZcvX0Zubi6++uor7v38/HwMHjwYkZGRuHnzJgYOHAhPT09kZGQIlWPNmjWwt7fHzZs38d133yE1NRUDBw7E8OHDcfv2bRw6dAiXLl3C9OnTAQA3btzgjumjR48CABwcHGSIvKg9e/ZAR0cH169fx08//STSbogTGRmJlJQU7ioFACxYsAB+fn7w9/fH48ePMXToUJiYmMDDwwMrVqzAlClTsHz5cujo6CA8PBzA2/ay6izY/fv3cezYMXTp0oXbjizrrPL9999jxIgRuH37NgYPHozRo0fj1atXdY5XXFwcysrK4O7uzk3r1KkTLC0tcfXqVW4an89Ht27dFNZmNQb10a6+73tdT08PYWFhSEpKwoYNG7Bz506EhIRIVc6FCxdi5cqV3Lb2798PU1NTAG/74PTw8ICenh5iYmJw+fJl6OrqYuDAgfVy9SIqKgqpqamIiorCnj17EBYWJjKue105OTlJXS8bdXdKR44ckar/qf/++w/9+/cXmvb69WvcvHkTtra2mDVrFgDg9u3b0NTUFJq3atr8+fOFll+/fj2KiooAABMnTsSjR49QWVkJe3t7oS8RAFiyZAl+/vlnbv6AgADo6elxCbGXlxc0NTW5DmF/+OEHGBoaAgAePnyI7Oxsife1rrp27YqAgABs374dQ4cORUREBCIjI/Hpp5/i/v37SEtLw//+9z9UVFTgs88+g6urKzZs2ICYmBjMmTMHixcvBp/Px8iRI3HmzBm4ublx6w4MDMSQIUMAvG3QP/zwQzx48ACdOnWqU5mfPXsGExMToWkaGhowMjLCs2fPhKa3atUK6enpddreu0REREBXVxfl5eUoKSmBmpoaNm3aBOBtFytVw5Jdu3YN3377Lfbs2YPOnTsDANLT09GqVSux6/3hhx/Qu3dvAG/r28KFC5Gamop27doBAHx8fBAVFYVPP/0UANC/f3+hm9B37dqFli1bIikpidseIL/PpKysDNu2bUP7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wevp6aFFixbo3r27nEpFGiJZ6gohhBBCFIuuGxFCCCGEEIWgxFMCaWlp4PF4SEhIqHWe6Oho8Hg85ObmKqxchBDy/9q7nxCrygaO479rzk0HcyTUmWgjVMpoYpA6zGwyi2ojBEbtlCsKCS6kFHOjLhW0NBAFsXDZKpXaDAzoyj8w6WbCShFX45RiyRg4qdMiHJp39E1ffJ+5d/p8Vveeee4zz9l9ec7hHIBGIjyfkK6urvT396elpSXJX494mjFjxvguCgCgjtT1PZ6NpFqtpq2tbbyXAQBQt/4VO563bt3KqlWrMm3atDz33HPZs2dPli1blo0bNyZJKpVKjh49Ouo3M2bMGPNg+gsXLqSrqytTpkzJyy+/nJMnT4787e+X2k+cOJFarZbffvstlUollUolO3bs+P+eJABAnftXhOfmzZtz8uTJHDt2LN3d3Tlx4kS+++67/2mejz/+OOfOnUtnZ2dWrFiR69evjxnX1dWVvXv3Zvr06env709/f382bdr0JE4FAKBhTfjwHBwczOHDh7N79+688cYbWbhwYY4cOZI7d+489lwbNmzIypUr097engMHDqSlpSWHDx8eM65araalpSWVSiVtbW1pa2vLtGnTnsTpAAA0rAkfnpcuXcrQ0FA6OjpGjj377LOZN2/eY8/V2dk58nny5MlZvHixVygCADyiCR+ej6JSqWR4eHjUsT/++GOcVgMAMDFN+PB84YUX0tTUlDNnzowcu3HjRn788ceR77NmzUp/f//I959++im///77mLlOnz498vnOnTvp7e1Ne3v7A/9vtVrN3bt3n8QpAABMCHX7OKWbN2/m/fffz7179x7rd319fbl48WLeeuutkWOtra1ZtWpVdu3alWq1mosXL+b27dv5+uuv8/3336dSqeSTTz7J0qVLkyRbtmxJU1PTmLn379+fl156Ke3t7fnss89y48aNrFmz5oHrmDNnTgYHB9PT05NFixalubk5zc3Nj3UuAAATSd2GZ19fX7q7u9PU1JQVK1Zk0qRH25x9/fXXxxxbsmRJent7c/78+UyePHnk/s6nn346zc3NGRgYSKVSyWuvvZbnn38++/btS29v75h5du7cmZ07d+b8+fN58cUXc/z48cycOfOB6+jq6sqHH36YDz74INevX8/27ds9UgkA+FerDP/nzY115MiRI6nValm3bl0OHDjwyPH5KJYtW5aFCxfmypUr6e7uztGjR/POO+88sfkBJqrPP/88W7duza1bt8Z7KUCDqet7PFevXp0vv/wyhw4dyvr16//xsvv+/fszZ86cTJkyJR0dHTl79uxDxw4PD+fbb78VnQAAhdTtpfb7Vq9enSSp1WpJ8tCdz6+++iofffRRDh48mI6Ojuzduzdvv/12fvjhh8yePXvU2KGhofT19eXXX3/NN998IzoBAAqo6x3P+x5l5/PTTz/NunXrUqvVMn/+/Bw8eDDNzc354osvRo0bGhrKe++9l8HBQdEJAFBQ3e943vffdj6HhobS29ubrVu3joyfNGlS3nzzzZw6dWrk2P3odHkdAKC8hgnP5OHxee3atdy9ezetra2jxre2tubChQtJRCcAwHhrqPBMHhyf/0R0AgCMv4YLz2RsfO7bty9PPfVUBgYGRo0bGBjI7NmzRScAQB1oyPBMxsbnq6++mp6enrz77rtJknv37qWnpyfPPPNMLl++LDoBAMZZw4ZnMjo+ly9fnkOHDmXx4sVZunRp9uzZk59//jm//PJLjh07JjoBAMZZQ4dnMjo+Ozs7s23btly9enXkveiiEwCgPjR8eCaj43Pt2rW5evVquru7c/z4cdEJAFAnJkR4JqPjs1qtuqcTAKDOTJjwTP6Kz7lz52bq1Kl55ZVXxns5AAD8zYQKzyTp7Owc7yUAAPAADfGudgAAGp/wBACgCOEJAEARwhMAgCKEJwAARQhPAACKEJ4AABQhPAEAKEJ4AgBQhPAEAKAI4QkAQBHCEwCAIoQnAABFCE8AAIoQngAAFCE8AQAoQngCAFCE8AQAoAjhCcBjWbBgQWq12ngvA2hAleHh4eHxXgQAABOfHU8AAIoQngAAFCE8AQAoQngCAFCE8AQAoAjhCQBAEcITAIAihCcAAEUITwAAihCeAAAUITwBAChCeAIAUITwBACgCOEJAEARwhMAgCKEJwAARQhPAACKEJ4AABQhPAEAKEJ4AgBQhPAEAKAI4QkAQBHCEwCAIoQnAABFCE8AAIoQngAAFCE8AQAoQngCAFCE8AQAoAjhCQBAEcITAIAihCcAAEUITwAAihCeAAAUITwBAChCeAIAUITwBACgiD8BvB91dq5yc98AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.tensor import Dim\n", - "\n", - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1,\n", - " AtomicType.SENTENCE: 1}, n_layers=1)\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits = train_circuits[:1]\n", - "dev_circuits = train_circuits[:1]\n", - "test_circuits = train_circuits[:1]\n", - "\n", - "train_labels = train_labels[:1]\n", - "dev_labels = train_labels[:1]\n", - "test_labels = train_labels[:1]\n", - "\n", - "train_circuits[-1].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameterise" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import TorchQuantumModel\n", - "all_circuits = train_circuits + dev_circuits + test_circuits\n", - "model = TorchQuantumModel.from_diagrams(all_circuits)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Evaluation Metric" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "sig = torch.sigmoid\n", - "\n", - "def accuracy(y_hat, y):\n", - " return torch.sum(torch.eq(torch.round(sig(y_hat)), y))/len(y)/2 # half due to double-counting\n", - "\n", - "def accuracy(y_hat, y):\n", - " return (torch.argmax(y_hat, dim=1) == \n", - " torch.argmax(y, dim=1)).sum().item()/len(y)\n", - "\n", - "def loss(y_hat, y):\n", - " return torch.nn.functional.mse_loss(y_hat, y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize Trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchTrainer\n", - "\n", - "trainer = PytorchTrainer(\n", - " model=model,\n", - " loss_function=loss,\n", - " optimizer=torch.optim.Adam, # type: ignore\n", - " learning_rate=LEARNING_RATE,\n", - " device=-1,\n", - " epochs=EPOCHS,\n", - " evaluate_functions={\"acc\": accuracy},\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=SEED)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "dev_dataset = Dataset(dev_circuits, dev_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 1: train/loss: 0.1629 valid/loss: 0.0821 train/time: 0.10s valid/time: 0.01s train/time_per_epoch: 0.10s valid/time_per_eval: 0.01s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 2: train/loss: 0.0821 valid/loss: 0.0400 train/time: 0.01s valid/time: 0.01s train/time_per_epoch: 0.01s valid/time_per_eval: 0.01s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 3: train/loss: 0.0400 valid/loss: 0.0193 train/time: 0.01s valid/time: 0.01s train/time_per_epoch: 0.01s valid/time_per_eval: 0.01s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 4: train/loss: 0.0193 valid/loss: 0.0102 train/time: 0.01s valid/time: 0.01s train/time_per_epoch: 0.01s valid/time_per_eval: 0.01s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 5: train/loss: 0.0102 valid/loss: 0.0072 train/time: 0.01s valid/time: 0.01s train/time_per_epoch: 0.01s valid/time_per_eval: 0.01s train/acc: 1.0000 valid/acc: 1.0000\n", - "\n", - "Training completed!\n", - "train/time: 0.17s train/time_per_epoch: 0.03s train/time_per_step: 0.03s valid/time: 0.03s valid/time_per_eval: 0.01s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, dev_dataset, log_interval=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show results" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 1.0\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAIjCAYAAAD80aFnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACC9UlEQVR4nOzdd3gU5drH8d+mF5JAKAmBQEJReughooAQDYgIigqIgsgBC6CY46vGAshRwc5RkKJHwYJgAxUVhNBEqQlBQEBQIAGS0NOAtN33D2R1TUJJsjvZ5Pu5rr1gn3lm5p5Hndt7Z+YZk8VisQgAAAAAYFcuRgcAAAAAAFUBxRcAAAAAOADFFwAAAAA4AMUXAAAAADgAxRcAAAAAOADFFwAAAAA4AMUXAAAAADgAxRcAAAAAOADFFwAAAAA4AMUXUMHde++9CgsLK9W6kyZNkslkKt+AAABVxoEDB2QymTR37lyjQwEqBYovoJRMJtNlfVavXm10qE5v/vz5mjZtmtFhAEC5mDt3rk2e8PLyUkhIiGJiYvTmm28qKyvL6BAh6cUXX9TixYsdvt8jR45o0qRJSkpKcvi+YX8mi8ViMToIwBl99NFHNt8/+OADLV++XB9++KFN+w033KCgoKBS7yc/P19ms1menp5XvG5BQYEKCgrk5eVV6v1XBDfffLN27NihAwcOGB0KAJTZ3LlzNWLECE2ePFnh4eHKz89XWlqaVq9ereXLl6tBgwb6+uuv1aZNG6ND1YEDBxQeHq73339f9957r9HhOFS1atV0++23O/yq35YtW9SpU6cqOeZVgZvRAQDO6u6777b5vmHDBi1fvrxI+z+dOXNGPj4+l70fd3f3UsUnSW5ubnJz4z9zAKiI+vTpo44dO1q/x8XFaeXKlbr55pt1yy23aNeuXfL29jYwQgDljdsOATvq0aOHWrVqpYSEBHXr1k0+Pj566qmnJElfffWV+vbtq5CQEHl6eqpx48b6z3/+o8LCQptt/POZrwv337/66quaM2eOGjduLE9PT3Xq1EmbN2+2Wbe4Z75MJpPGjh2rxYsXq1WrVvL09FTLli21dOnSIvGvXr1aHTt2lJeXlxo3bqzZs2df9nNke/fu1cCBAxUcHCwvLy/Vr19fgwcPVkZGhk2/jz76SB06dJC3t7cCAwM1ePBgpaSk2Izht99+q4MHD1pv0SntM3AAUNH17NlTzz77rA4ePFjkDovdu3fr9ttvV2BgoLy8vNSxY0d9/fXX1uVbtmyRyWTSvHnzimx32bJlMplMWrJkibXt8OHDuu+++xQUFGTNBe+9995lxbly5Updd9118vX1VfXq1dW/f3/t2rXLps+FfLF7927deeed8vf3V82aNfXII4/o3LlzNn0v5KbPPvtMLVq0kLe3t6KiorR9+3ZJ0uzZs9WkSRN5eXmpR48exd4JsXHjRvXu3VsBAQHy8fFR9+7d9dNPPxUb0759+3TvvfeqevXqCggI0IgRI3TmzBmbeHJycjRv3jxr7rnUVai33npLLVu2lI+Pj2rUqKGOHTtq/vz5Nn0uNearV69Wp06dJEkjRoyw7ptn7ioPfhIH7OzEiRPq06ePBg8erLvvvtt6C+LcuXNVrVo1xcbGqlq1alq5cqUmTJigzMxMvfLKK5fc7vz585WVlaX7779fJpNJL7/8sm677Tb98ccfl7xatm7dOn355Zd66KGH5OfnpzfffFMDBw5UcnKyatasKUnaunWrevfurbp16+q5555TYWGhJk+erNq1a18ytry8PMXExCg3N1fjxo1TcHCwDh8+rCVLluj06dMKCAiQJL3wwgt69tlndeedd+pf//qXjh07prfeekvdunXT1q1bVb16dT399NPKyMjQoUOH9MYbb0g6fysIAFRW99xzj5566in98MMPGjVqlCRp586d6tq1q+rVq6cnn3xSvr6++vTTTzVgwAB98cUXuvXWW9WxY0c1atRIn376qYYPH26zzYULF6pGjRqKiYmRJKWnp6tLly7Woqd27dr6/vvvNXLkSGVmZmr8+PElxrdixQr16dNHjRo10qRJk3T27Fm99dZb6tq1qxITE4v8QHbnnXcqLCxMU6ZM0YYNG/Tmm2/q1KlT+uCDD2z6/fjjj/r66681ZswYSdKUKVN088036/HHH9fbb7+thx56SKdOndLLL7+s++67TytXrrSuu3LlSvXp00cdOnTQxIkT5eLiovfff189e/bUjz/+qM6dOxeJKTw8XFOmTFFiYqLeffdd1alTRy+99JIk6cMPP9S//vUvde7cWaNHj5YkNW7cuMQxeeedd/Twww/r9ttvtxaXv/zyizZu3Ki77rrrsse8efPmmjx5siZMmKDRo0fruuuukyRdc801Je4bTsYCoFyMGTPG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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", - "\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Epochs')\n", - "ax_br.set_xlabel('Epochs')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs + 1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# print test accuracy\n", - "test_acc = accuracy(model.forward(test_circuits), torch.tensor(test_labels))\n", - "print('Test accuracy:', test_acc)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/pyproject.toml b/pyproject.toml index 81fde7a..012f75e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.uv] dev-dependencies = [ - "lambeq[extras]>=0.4.2", + "lambeq[extras,test]>=0.4.2", "nbformat~=5.7.3", "nbsphinx~=0.8.12", "numpydoc~=1.5.0", @@ -9,6 +9,11 @@ dev-dependencies = [ "sphinx_mdinclude~=0.5.3", "furo~=2024.7.18", "sphinxcontrib-jquery~=4.1", + "nbmake>=1.5.4", + "pip>=24.2", + "qiskit<1", + "pytket-qiskit>=0.48.0", + "qiskit-ibm-runtime>=0.17.0", ] [tool.uv.workspace] diff --git a/requirements.txt b/requirements.txt index a609bb4..17e71e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,369 +1,14 @@ -# This file was autogenerated by uv via the following command: -# uv pip compile pyproject.toml -o requirements.txt --python 3.10 -alabaster==0.7.16 - # via sphinx -annotated-types==0.7.0 - # via pydantic -attrs==24.2.0 - # via - # jsonschema - # referencing -babel==2.16.0 - # via sphinx -beautifulsoup4==4.12.3 - # via - # furo - # nbconvert -bleach==6.1.0 - # via nbconvert -blis==0.7.11 - # via thinc -catalogue==2.0.10 - # via - # spacy - # srsly - # thinc -certifi==2024.7.4 - # via requests -charset-normalizer==3.3.2 - # via requests -click==8.1.7 - # via typer -cloudpathlib==0.18.1 - # via weasel -confection==0.1.5 - # via - # thinc - # weasel -contourpy==1.3.0 - # via matplotlib -cycler==0.12.1 - # via matplotlib -cymem==2.0.8 - # via - # preshed - # spacy - # thinc -defusedxml==0.7.1 - # via nbconvert -docutils==0.19 - # via - # nbsphinx - # sphinx - # sphinx-mdinclude -fastjsonschema==2.20.0 - # via nbformat -filelock==3.15.4 - # via - # huggingface-hub - # torch - # transformers -fonttools==4.53.1 - # via matplotlib -fsspec==2024.6.1 - # via - # huggingface-hub - # torch -furo==2024.7.18 - # via lambeq-docs (pyproject.toml) -graphviz==0.20.3 - # via - # pytket - # tensornetwork -h5py==3.11.0 - # via tensornetwork -huggingface-hub==0.24.6 - # via - # tokenizers - # transformers -idna==3.8 - # via requests -imagesize==1.4.1 - # via sphinx -jinja2==3.1.4 - # via - # nbconvert - # nbsphinx - # numpydoc - # pytket - # spacy - # sphinx - # torch -jsonschema==4.23.0 - # via nbformat -jsonschema-specifications==2023.12.1 - # via jsonschema -jupyter-client==8.6.2 - # via nbclient -jupyter-core==5.7.2 - # via - # jupyter-client - # nbclient - # nbconvert - # nbformat -jupyterlab-pygments==0.3.0 - # via nbconvert -kiwisolver==1.4.5 - # via matplotlib -lambeq[extras]==0.4.2 - # via lambeq-docs (pyproject.toml) -langcodes==3.4.0 - # via spacy -language-data==1.2.0 - # via langcodes -lark==1.2.2 - # via pytket -marisa-trie==1.2.0 - # via language-data -markdown-it-py==3.0.0 - # via rich -markupsafe==2.1.5 - # via - # jinja2 - # nbconvert -matplotlib==3.9.2 - # via lambeq -mdurl==0.1.2 - # via markdown-it-py -mistune==2.0.5 - # via - # nbconvert - # sphinx-mdinclude -mpmath==1.3.0 - # via sympy -murmurhash==1.0.10 - # via - # preshed - # spacy - # thinc -nbclient==0.10.0 - # via nbconvert -nbconvert==7.16.4 - # via nbsphinx -nbformat==5.7.3 - # via - # lambeq-docs (pyproject.toml) - # nbclient - # nbconvert - # nbsphinx -nbsphinx==0.8.12 - # via lambeq-docs (pyproject.toml) -networkx==3.3 - # via - # pytket - # torch -numpy==2.1.0 - # via - # blis - # contourpy - # h5py - # matplotlib - # opt-einsum - # pytket - # scipy - # spacy - # tensornetwork - # thinc - # transformers -numpydoc==1.5.0 - # via lambeq-docs (pyproject.toml) -opt-einsum==3.3.0 - # via tensornetwork -packaging==24.1 - # via - # huggingface-hub - # lambeq - # matplotlib - # nbconvert - # spacy - # sphinx - # thinc - # transformers - # weasel -pandocfilters==1.5.1 - # via nbconvert -pillow==10.4.0 - # via - # lambeq - # matplotlib -platformdirs==4.2.2 - # via jupyter-core -preshed==3.0.9 - # via - # spacy - # thinc -pydantic==2.8.2 - # via - # confection - # spacy - # thinc - # weasel -pydantic-core==2.20.1 - # via pydantic -pygments==2.18.0 - # via - # furo - # nbconvert - # rich - # sphinx - # sphinx-mdinclude -pyparsing==3.1.4 - # via matplotlib -python-dateutil==2.9.0.post0 - # via - # jupyter-client - # matplotlib -pytket==1.31.1 - # via lambeq -pyyaml==6.0.2 - # via - # huggingface-hub - # lambeq - # transformers -pyzmq==26.2.0 - # via jupyter-client -qwasm==1.0.1 - # via pytket -referencing==0.35.1 - # via - # jsonschema - # jsonschema-specifications -regex==2024.7.24 - # via transformers -requests==2.32.3 - # via - # huggingface-hub - # spacy - # sphinx - # transformers - # weasel -rich==13.8.0 - # via typer -rpds-py==0.20.0 - # via - # jsonschema - # referencing -safetensors==0.4.4 - # via transformers -scipy==1.14.1 - # via - # pytket - # tensornetwork -setuptools==74.0.0 - # via - # marisa-trie - # qwasm - # spacy - # thinc -shellingham==1.5.4 - # via typer -six==1.16.0 - # via - # bleach - # python-dateutil -smart-open==7.0.4 - # via weasel -snowballstemmer==2.2.0 - # via sphinx -soupsieve==2.6 - # via beautifulsoup4 -spacy==3.7.6 - # via lambeq -spacy-legacy==3.0.12 - # via spacy -spacy-loggers==1.0.5 - # via spacy -sphinx==6.1.3 - # via - # lambeq-docs (pyproject.toml) - # furo - # nbsphinx - # numpydoc - # sphinx-argparse - # sphinx-basic-ng - # sphinxcontrib-jquery -sphinx-argparse==0.4.0 - # via lambeq-docs (pyproject.toml) -sphinx-basic-ng==1.0.0b2 - # via furo -sphinx-mdinclude==0.5.4 - # via lambeq-docs (pyproject.toml) -sphinxcontrib-applehelp==2.0.0 - # via sphinx -sphinxcontrib-devhelp==2.0.0 - # via sphinx -sphinxcontrib-htmlhelp==2.1.0 - # via sphinx -sphinxcontrib-jquery==4.1 - # via lambeq-docs (pyproject.toml) -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==2.0.0 - # via sphinx -sphinxcontrib-serializinghtml==2.0.0 - # via sphinx -srsly==2.4.8 - # via - # confection - # spacy - # thinc - # weasel -sympy==1.13.2 - # via - # pytket - # torch -tensornetwork==0.4.6 - # via lambeq -thinc==8.2.4 - # via spacy -tinycss2==1.3.0 - # via nbconvert -tokenizers==0.19.1 - # via transformers -torch==2.4.0 - # via lambeq -tornado==6.4.1 - # via jupyter-client -tqdm==4.66.5 - # via - # huggingface-hub - # spacy - # transformers -traitlets==5.14.3 - # via - # jupyter-client - # jupyter-core - # nbclient - # nbconvert - # nbformat - # nbsphinx -transformers==4.44.2 - # via lambeq -typer==0.12.5 - # via - # spacy - # weasel -typing-extensions==4.12.2 - # via - # cloudpathlib - # huggingface-hub - # pydantic - # pydantic-core - # pytket - # torch - # typer -urllib3==2.2.2 - # via requests -wasabi==1.1.3 - # via - # spacy - # thinc - # weasel -weasel==0.4.1 - # via spacy -webencodings==0.5.1 - # via - # bleach - # tinycss2 -wrapt==1.16.0 - # via smart-open +lambeq[extras,test]>=0.4.2 +nbformat~=5.7.3 +nbsphinx~=0.8.12 +numpydoc~=1.5.0 +Sphinx~=6.1.3 +sphinx-argparse~=0.4.0 +sphinx_mdinclude~=0.5.3 +furo~=2024.7.18 +sphinxcontrib-jquery~=4.1 +nbmake>=1.5.4 +pip>=24.2 +qiskit<1 +pytket-qiskit>=0.48.0 +qiskit-ibm-runtime>=0.17.0 diff --git a/docs/scripts/check_errors.py b/scripts/check_errors.py similarity index 100% rename from docs/scripts/check_errors.py rename to scripts/check_errors.py diff --git a/docs/scripts/clean_notebooks.py b/scripts/clean_notebooks.py similarity index 100% rename from docs/scripts/clean_notebooks.py rename to scripts/clean_notebooks.py diff --git a/docs/scripts/compare_execution_times.py b/scripts/compare_execution_times.py similarity index 100% rename from docs/scripts/compare_execution_times.py rename to scripts/compare_execution_times.py diff --git a/docs/scripts/track_execution_time.sh b/scripts/track_execution_time.sh similarity index 100% rename from docs/scripts/track_execution_time.sh rename to scripts/track_execution_time.sh diff --git a/uv.lock b/uv.lock index 1cb9984..2975c90 100644 --- a/uv.lock +++ b/uv.lock @@ -10,10 +10,15 @@ resolution-markers = [ [manifest] requirements = [ { name = "furo", specifier = "~=2024.7.18" }, - { name = "lambeq", extras = ["extras"], specifier = ">=0.4.2" }, + { name = "lambeq", extras = ["extras", "test"], specifier = ">=0.4.2" }, { name = "nbformat", specifier = "~=5.7.3" }, + { name = "nbmake", specifier = ">=1.5.4" }, { name = "nbsphinx", specifier = "~=0.8.12" }, { name = "numpydoc", specifier = "~=1.5.0" }, + { name = "pip", specifier = ">=24.2" }, + { name = "pytket-qiskit", specifier = ">=0.48.0" }, + { name = "qiskit", specifier = "<1" }, + { name = "qiskit-ibm-runtime", specifier = ">=0.17.0" }, { name = "sphinx", specifier = "~=6.1.3" }, { name = "sphinx-argparse", specifier = "~=0.4.0" }, { name = "sphinx-mdinclude", specifier = "~=0.5.3" }, @@ -56,6 +61,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566 }, ] +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "asttokens" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/1d/f03bcb60c4a3212e15f99a56085d93093a497718adf828d050b9d675da81/asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0", size = 62284 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", size = 27764 }, +] + [[package]] name = "attrs" version = "24.2.0" @@ -298,14 +324,14 @@ wheels = [ [[package]] name = "cloudpathlib" -version = "0.18.1" +version = "0.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ea/2d/4031e0e18739281d8ed5448c549590a8382b1b801ced83222dc1793d84b2/cloudpathlib-0.18.1.tar.gz", hash = "sha256:ffd22f324bfbf9c3f2bc1bec6e8372cb372a0feef17c7f2b48030cd6810ea859", size = 39871 } +sdist = { url = "https://files.pythonhosted.org/packages/10/c9/90cb80cf70669ed9a978ef46d8a8b39bad8ca768c4ce4ae086f0d05aeeb7/cloudpathlib-0.19.0.tar.gz", hash = "sha256:919edbfd9a4e935d2423da210b143df89cb0ec6d378366a0dffa2e9fd0664fe8", size = 41875 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/ba/d8f2c0151585519759135550574385dd7a223abbc6b6c06dab7ada565773/cloudpathlib-0.18.1-py3-none-any.whl", hash = "sha256:20efd5d772c75df91bb2ac52e053be53fd9000f5e9755fd92375a2a9fe6005e0", size = 47335 }, + { url = "https://files.pythonhosted.org/packages/4d/4e/f83794cb311019c385d061d9b7a9dc444c7023c5523c3f4161191221429c/cloudpathlib-0.19.0-py3-none-any.whl", hash = "sha256:eb7758648812d5906af44f14cf9a6a64f687342a6f547a1c20deb7241d769dcb", size = 49433 }, ] [[package]] @@ -317,6 +343,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + [[package]] name = "confection" version = "0.1.5" @@ -392,6 +430,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690 }, ] +[[package]] +name = "coverage" +version = "7.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/08/7e37f82e4d1aead42a7443ff06a1e406aabf7302c4f00a546e4b320b994c/coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d", size = 798791 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/61/eb7ce5ed62bacf21beca4937a90fe32545c91a3c8a42a30c6616d48fc70d/coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16", size = 206690 }, + { url = "https://files.pythonhosted.org/packages/7d/73/041928e434442bd3afde5584bdc3f932fb4562b1597629f537387cec6f3d/coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36", size = 207127 }, + { url = "https://files.pythonhosted.org/packages/c7/c8/6ca52b5147828e45ad0242388477fdb90df2c6cbb9a441701a12b3c71bc8/coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02", size = 235654 }, + { url = "https://files.pythonhosted.org/packages/d5/da/9ac2b62557f4340270942011d6efeab9833648380109e897d48ab7c1035d/coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc", size = 233598 }, + { url = "https://files.pythonhosted.org/packages/53/23/9e2c114d0178abc42b6d8d5281f651a8e6519abfa0ef460a00a91f80879d/coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23", size = 234732 }, + { url = "https://files.pythonhosted.org/packages/0f/7e/a0230756fb133343a52716e8b855045f13342b70e48e8ad41d8a0d60ab98/coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34", size = 233816 }, + { url = "https://files.pythonhosted.org/packages/28/7c/3753c8b40d232b1e5eeaed798c875537cf3cb183fb5041017c1fdb7ec14e/coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c", size = 232325 }, + { url = "https://files.pythonhosted.org/packages/57/e3/818a2b2af5b7573b4b82cf3e9f137ab158c90ea750a8f053716a32f20f06/coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959", size = 233418 }, + { url = "https://files.pythonhosted.org/packages/c8/fb/4532b0b0cefb3f06d201648715e03b0feb822907edab3935112b61b885e2/coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232", size = 209343 }, + { url = "https://files.pythonhosted.org/packages/5a/25/af337cc7421eca1c187cc9c315f0a755d48e755d2853715bfe8c418a45fa/coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0", size = 210136 }, + { url = "https://files.pythonhosted.org/packages/ad/5f/67af7d60d7e8ce61a4e2ddcd1bd5fb787180c8d0ae0fbd073f903b3dd95d/coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93", size = 206796 }, + { url = "https://files.pythonhosted.org/packages/e1/0e/e52332389e057daa2e03be1fbfef25bb4d626b37d12ed42ae6281d0a274c/coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3", size = 207244 }, + { url = "https://files.pythonhosted.org/packages/aa/cd/766b45fb6e090f20f8927d9c7cb34237d41c73a939358bc881883fd3a40d/coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff", size = 239279 }, + { url = "https://files.pythonhosted.org/packages/70/6c/a9ccd6fe50ddaf13442a1e2dd519ca805cbe0f1fcd377fba6d8339b98ccb/coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d", size = 236859 }, + { url = "https://files.pythonhosted.org/packages/14/6f/8351b465febb4dbc1ca9929505202db909c5a635c6fdf33e089bbc3d7d85/coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6", size = 238549 }, + { url = "https://files.pythonhosted.org/packages/68/3c/289b81fa18ad72138e6d78c4c11a82b5378a312c0e467e2f6b495c260907/coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56", size = 237477 }, + { url = "https://files.pythonhosted.org/packages/ed/1c/aa1efa6459d822bd72c4abc0b9418cf268de3f60eeccd65dc4988553bd8d/coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234", size = 236134 }, + { url = "https://files.pythonhosted.org/packages/fb/c8/521c698f2d2796565fe9c789c2ee1ccdae610b3aa20b9b2ef980cc253640/coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133", size = 236910 }, + { url = "https://files.pythonhosted.org/packages/7d/30/033e663399ff17dca90d793ee8a2ea2890e7fdf085da58d82468b4220bf7/coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c", size = 209348 }, + { url = "https://files.pythonhosted.org/packages/20/05/0d1ccbb52727ccdadaa3ff37e4d2dc1cd4d47f0c3df9eb58d9ec8508ca88/coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6", size = 210230 }, + { url = "https://files.pythonhosted.org/packages/7e/d4/300fc921dff243cd518c7db3a4c614b7e4b2431b0d1145c1e274fd99bd70/coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778", size = 206983 }, + { url = "https://files.pythonhosted.org/packages/e1/ab/6bf00de5327ecb8db205f9ae596885417a31535eeda6e7b99463108782e1/coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391", size = 207221 }, + { url = "https://files.pythonhosted.org/packages/92/8f/2ead05e735022d1a7f3a0a683ac7f737de14850395a826192f0288703472/coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8", size = 240342 }, + { url = "https://files.pythonhosted.org/packages/0f/ef/94043e478201ffa85b8ae2d2c79b4081e5a1b73438aafafccf3e9bafb6b5/coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d", size = 237371 }, + { url = "https://files.pythonhosted.org/packages/1f/0f/c890339dd605f3ebc269543247bdd43b703cce6825b5ed42ff5f2d6122c7/coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca", size = 239455 }, + { url = "https://files.pythonhosted.org/packages/d1/04/7fd7b39ec7372a04efb0f70c70e35857a99b6a9188b5205efb4c77d6a57a/coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163", size = 238924 }, + { url = "https://files.pythonhosted.org/packages/ed/bf/73ce346a9d32a09cf369f14d2a06651329c984e106f5992c89579d25b27e/coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a", size = 237252 }, + { url = "https://files.pythonhosted.org/packages/86/74/1dc7a20969725e917b1e07fe71a955eb34bc606b938316bcc799f228374b/coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d", size = 238897 }, + { url = "https://files.pythonhosted.org/packages/b6/e9/d9cc3deceb361c491b81005c668578b0dfa51eed02cd081620e9a62f24ec/coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5", size = 209606 }, + { url = "https://files.pythonhosted.org/packages/47/c8/5a2e41922ea6740f77d555c4d47544acd7dc3f251fe14199c09c0f5958d3/coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb", size = 210373 }, + { url = "https://files.pythonhosted.org/packages/8c/f9/9aa4dfb751cb01c949c990d136a0f92027fbcc5781c6e921df1cb1563f20/coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106", size = 207007 }, + { url = "https://files.pythonhosted.org/packages/b9/67/e1413d5a8591622a46dd04ff80873b04c849268831ed5c304c16433e7e30/coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9", size = 207269 }, + { url = "https://files.pythonhosted.org/packages/14/5b/9dec847b305e44a5634d0fb8498d135ab1d88330482b74065fcec0622224/coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c", size = 239886 }, + { url = "https://files.pythonhosted.org/packages/7b/b7/35760a67c168e29f454928f51f970342d23cf75a2bb0323e0f07334c85f3/coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a", size = 237037 }, + { url = "https://files.pythonhosted.org/packages/f7/95/d2fd31f1d638df806cae59d7daea5abf2b15b5234016a5ebb502c2f3f7ee/coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060", size = 239038 }, + { url = "https://files.pythonhosted.org/packages/6e/bd/110689ff5752b67924efd5e2aedf5190cbbe245fc81b8dec1abaffba619d/coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862", size = 238690 }, + { url = "https://files.pythonhosted.org/packages/d3/a8/08d7b38e6ff8df52331c83130d0ab92d9c9a8b5462f9e99c9f051a4ae206/coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388", size = 236765 }, + { url = "https://files.pythonhosted.org/packages/d6/6a/9cf96839d3147d55ae713eb2d877f4d777e7dc5ba2bce227167d0118dfe8/coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155", size = 238611 }, + { url = "https://files.pythonhosted.org/packages/74/e4/7ff20d6a0b59eeaab40b3140a71e38cf52547ba21dbcf1d79c5a32bba61b/coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a", size = 209671 }, + { url = "https://files.pythonhosted.org/packages/35/59/1812f08a85b57c9fdb6d0b383d779e47b6f643bc278ed682859512517e83/coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129", size = 210368 }, + { url = "https://files.pythonhosted.org/packages/9c/15/08913be1c59d7562a3e39fce20661a98c0a3f59d5754312899acc6cb8a2d/coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e", size = 207758 }, + { url = "https://files.pythonhosted.org/packages/c4/ae/b5d58dff26cade02ada6ca612a76447acd69dccdbb3a478e9e088eb3d4b9/coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962", size = 208035 }, + { url = "https://files.pythonhosted.org/packages/b8/d7/62095e355ec0613b08dfb19206ce3033a0eedb6f4a67af5ed267a8800642/coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb", size = 250839 }, + { url = "https://files.pythonhosted.org/packages/7c/1e/c2967cb7991b112ba3766df0d9c21de46b476d103e32bb401b1b2adf3380/coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704", size = 246569 }, + { url = "https://files.pythonhosted.org/packages/8b/61/a7a6a55dd266007ed3b1df7a3386a0d760d014542d72f7c2c6938483b7bd/coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b", size = 248927 }, + { url = "https://files.pythonhosted.org/packages/c8/fa/13a6f56d72b429f56ef612eb3bc5ce1b75b7ee12864b3bd12526ab794847/coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f", size = 248401 }, + { url = "https://files.pythonhosted.org/packages/75/06/0429c652aa0fb761fc60e8c6b291338c9173c6aa0f4e40e1902345b42830/coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223", size = 246301 }, + { url = "https://files.pythonhosted.org/packages/52/76/1766bb8b803a88f93c3a2d07e30ffa359467810e5cbc68e375ebe6906efb/coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3", size = 247598 }, + { url = "https://files.pythonhosted.org/packages/66/8b/f54f8db2ae17188be9566e8166ac6df105c1c611e25da755738025708d54/coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f", size = 210307 }, + { url = "https://files.pythonhosted.org/packages/9f/b0/e0dca6da9170aefc07515cce067b97178cefafb512d00a87a1c717d2efd5/coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657", size = 211453 }, + { url = "https://files.pythonhosted.org/packages/a5/2b/0354ed096bca64dc8e32a7cbcae28b34cb5ad0b1fe2125d6d99583313ac0/coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df", size = 198926 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version == '3.11'" }, +] + [[package]] name = "cryptography" version = "43.0.0" @@ -457,6 +559,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/e0/34b11adc80502f0760ce2892dfdfcd8a7f450acd3147156c98620cb4071d/cymem-2.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:ecd12e3bacf3eed5486e4cd8ede3c12da66ee0e0a9d0ae046962bc2bb503acef", size = 39052 }, ] +[[package]] +name = "debugpy" +version = "1.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/f9/61c325a10ded8dc3ddc3e7cd2ed58c0b15b2ef4bf8b4bf2930ee98ed59ee/debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0", size = 4612118 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/36/0b423f94097cc86555f9a2c8717511863b2a680c9b44b5419d8ac1ff7bf2/debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7", size = 1711184 }, + { url = "https://files.pythonhosted.org/packages/57/0c/c2ec581541923a4d36cee4fd2419c1211c986849fc61097f87aa81fc6ad3/debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a", size = 2997629 }, + { url = "https://files.pythonhosted.org/packages/a8/46/3072c2cd3b20f435968275d316f6aea7ddbb760386324e6578278bc2eb99/debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed", size = 4764678 }, + { url = "https://files.pythonhosted.org/packages/38/25/e738d6f782beba924c0e10dfde2061152f1ea3608dff0e5a5bfb30c311e9/debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e", size = 4788002 }, + { url = "https://files.pythonhosted.org/packages/ad/72/fd138a10dda16775607316d60dd440fcd23e7560e9276da53c597b5917e9/debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a", size = 1786504 }, + { url = "https://files.pythonhosted.org/packages/e2/0e/d0e6af2d7bbf5ace847e4d3bd41f8f9d4a0764fcd8058f07a1c51618cbf2/debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b", size = 2642077 }, + { url = "https://files.pythonhosted.org/packages/f6/55/2a1dc192894ba9b368cdcce15315761a00f2d4cd7de4402179648840e480/debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408", size = 4702081 }, + { url = "https://files.pythonhosted.org/packages/7f/7f/942b23d64f4896e9f8776cf306dfd00feadc950a38d56398610a079b28b1/debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3", size = 4715571 }, + { url = "https://files.pythonhosted.org/packages/9a/82/7d9e1f75fb23c876ab379008c7cf484a1cfa5ed47ccaac8ba37c75e6814e/debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156", size = 1436398 }, + { url = "https://files.pythonhosted.org/packages/fd/b6/ee71d5e73712daf8307a9e85f5e39301abc8b66d13acd04dfff1702e672e/debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb", size = 1437465 }, + { url = "https://files.pythonhosted.org/packages/6c/d8/8e32bf1f2e0142f7e8a2c354338b493e87f2c44e77e233b3a140fb5efa03/debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7", size = 4581313 }, + { url = "https://files.pythonhosted.org/packages/f7/be/2fbaffecb063de228b2b3b6a1750b0b745e5dc645eddd52be8b329933c0b/debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c", size = 4581209 }, + { url = "https://files.pythonhosted.org/packages/02/49/b595c34d7bc690e8d225a6641618a5c111c7e13db5d9e2b756c15ce8f8c6/debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44", size = 4824118 }, +] + +[[package]] +name = "decorator" +version = "5.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 }, +] + [[package]] name = "defusedxml" version = "0.7.1" @@ -499,6 +631,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/93/69/e391bd51bc08ed9141ecd899a0ddb61ab6465309f1eb470905c0c8868081/docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc", size = 570472 }, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, +] + +[[package]] +name = "executing" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/08/41/85d2d28466fca93737592b7f3cc456d1cfd6bcd401beceeba17e8e792b50/executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147", size = 836501 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/03/6ea8b1b2a5ab40a7a60dc464d3daa7aa546e0a74d74a9f8ff551ea7905db/executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc", size = 24922 }, +] + [[package]] name = "fastjsonschema" version = "2.20.0" @@ -585,37 +735,37 @@ wheels = [ [[package]] name = "grpcio" -version = "1.66.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/0a/b79043717cc40861145f12d2045a0064f43eeb4efa359d84e75e0ff2d3ba/grpcio-1.66.0.tar.gz", hash = "sha256:c1ea4c528e7db6660718e4165fd1b5ac24b79a70c870a7bc0b7bdb9babab7c1e", size = 12347554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/74/b4537d5e4b939e22317044284d0815025bffd09e41be7cd831184fa60917/grpcio-1.66.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:ad7256f224437b2c29c2bef98ddd3130454c5b1ab1f0471fc11794cefd4dbd3d", size = 4969800 }, - { url = "https://files.pythonhosted.org/packages/dd/3e/7351da41456165477c8b3bb0240a2aabf734c0ae0b9cc325c7fe615d00de/grpcio-1.66.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5f4b3357e59dfba9140a51597287297bc638710d6a163f99ee14efc19967a821", size = 10586480 }, - { url = "https://files.pythonhosted.org/packages/73/74/2664a907e5cd9bb056634fa6058f2435491e36701a539b9272941b85d6dd/grpcio-1.66.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e8d20308eeae15b3e182f47876f05acbdec1eebd9473a9814a44e46ec4a84c04", size = 5483551 }, - { url = "https://files.pythonhosted.org/packages/1e/65/876ab31aeaa1f49587f5b358a64603046c318ccf230e6662236d499700e1/grpcio-1.66.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eb03524d0f55b965d6c86aa44e5db9e5eaa15f9ed3b164621e652e5b927f4b8", size = 6088957 }, - { url = "https://files.pythonhosted.org/packages/a7/32/a2d8000d84f30abc4ce0b20be904cc267514d8476a4bafa5f48cba9beff1/grpcio-1.66.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37514b68a42e9cf24536345d3cf9e580ffd29117c158b4eeea34625200256067", size = 5733748 }, - { url = "https://files.pythonhosted.org/packages/82/ae/79783b7e3528b0079e72baf1623667199b5059fa768a9704ee666d874cd8/grpcio-1.66.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:516fdbc8e156db71a004bc431a6303bca24cfde186babe96dde7bd01e8f0cc70", size = 6403982 }, - { url = "https://files.pythonhosted.org/packages/b3/30/d07d32b467850563aa60b731323d3b8c9fc4c191f385cd5f3171add4f798/grpcio-1.66.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d0439a970d65327de21c299ea0e0c2ad0987cdaf18ba5066621dea5f427f922b", size = 5990067 }, - { url = "https://files.pythonhosted.org/packages/7f/a2/5c1d57c7ebd41ce09d06b72362c956113b35e40ba5087ae9c1f633f76d55/grpcio-1.66.0-cp310-cp310-win32.whl", hash = "sha256:5f93fc84b72bbc7b84a42f3ca9dc055fa00d2303d9803be011ebf7a10a4eb833", size = 3554336 }, - { url = "https://files.pythonhosted.org/packages/34/fd/fa0f4e68323b751e8d7b042c9c7fb8d095c95ccf93d538a32ff4ac328340/grpcio-1.66.0-cp310-cp310-win_amd64.whl", hash = "sha256:8fc5c710ddd51b5a0dc36ef1b6663430aa620e0ce029b87b150dafd313b978c3", size = 4288727 }, - { url = "https://files.pythonhosted.org/packages/dd/12/a04bba94a2929bcd2d08ec2a68aeee272ec8b3b531648ee8e42926ae4147/grpcio-1.66.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:dd614370e939f9fceeeb2915111a0795271b4c11dfb5fc0f58449bee40c726a5", size = 4978186 }, - { url = "https://files.pythonhosted.org/packages/7a/24/9f19977f8ecc729636398b25657f128c1f0cfa673f7f8198006df4595565/grpcio-1.66.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:245b08f9b3c645a6a623f3ed4fa43dcfcd6ad701eb9c32511c1bb7380e8c3d23", size = 10620244 }, - { url = "https://files.pythonhosted.org/packages/ac/d6/bbad39c6c591718046556b42db50c0ed36c6da25f373799388c1f02394a7/grpcio-1.66.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:aaf30c75cbaf30e561ca45f21eb1f729f0fab3f15c592c1074795ed43e3ff96f", size = 5487697 }, - { url = "https://files.pythonhosted.org/packages/b0/ff/f49f0d25a97f75f62fecb0a4e3ecb8a0ce5af3947b667c9d738ce0f3fabc/grpcio-1.66.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49234580a073ce7ac490112f6c67c874cbcb27804c4525978cdb21ba7f3f193c", size = 6089459 }, - { url = "https://files.pythonhosted.org/packages/47/1b/878a82c983a7f7cc8847075357ac41bbbf0617327f1e0aad26f71e65550c/grpcio-1.66.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9e20a0acb709dcfa15a622c91f584f12c9739a79c47999f73435d2b3cc8a3b", size = 5732303 }, - { url = "https://files.pythonhosted.org/packages/be/c5/36e5342a9bc94697ab193729abefc80bc5772e60fb8331cf89146e4e9a3a/grpcio-1.66.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc008c6afa1e7c8df99bd9154abc4f0470d26b7730ca2521122e99e771baa8c7", size = 6407889 }, - { url = "https://files.pythonhosted.org/packages/54/aa/3d0190612aeea68533740cc9811f016b082eb6de48b8a0a132f21c932c23/grpcio-1.66.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:50cea8ce2552865b87e3dffbb85eb21e6b98d928621600c0feda2f02449cd837", size = 5990113 }, - { url = "https://files.pythonhosted.org/packages/f0/49/458e2aa4f1b1074434d1083f69219925164bc03c8deaddd5c0b8cd4563c7/grpcio-1.66.0-cp311-cp311-win32.whl", hash = "sha256:508411df1f2b7cfa05d4d7dbf3d576fe4f949cd61c03f3a6f0378c84e3d7b963", size = 3555790 }, - { url = "https://files.pythonhosted.org/packages/ae/2f/9c0b5a07c53814eaca43b533884b9eecfeed557bfc41284b791fad9f9155/grpcio-1.66.0-cp311-cp311-win_amd64.whl", hash = "sha256:6d586a95c05c82a5354be48bb4537e1accaf2472d8eb7e9086d844cbff934482", size = 4290851 }, - { url = "https://files.pythonhosted.org/packages/f9/ae/639e319d8ff4c17e3b42b7e4e0298903512260f0acd47df4ddbcfcc19f81/grpcio-1.66.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:5ea27f4ce8c0daccfdd2c7961e6ba404b6599f47c948415c4cca5728739107a3", size = 4912107 }, - { url = "https://files.pythonhosted.org/packages/4a/43/bc8accadbabf4101f4693184e4fd47192999857f32dffd0c3a3ea9e78426/grpcio-1.66.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:296a45ea835e12a1cc35ab0c57e455346c272af7b0d178e29c67742167262b4c", size = 10579542 }, - { url = "https://files.pythonhosted.org/packages/29/29/1744f906399e0e81430ad62d57b343f99eea22db7065d30dcc6a886e9520/grpcio-1.66.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:e36fa838ac1d6c87198ca149cbfcc92e1af06bb8c8cd852622f8e58f33ea3324", size = 5421086 }, - { url = "https://files.pythonhosted.org/packages/27/30/2c4a959a2f683a366ebbb6863f9df6e201a441acb8b9f6c10b8cd69c30b8/grpcio-1.66.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:684a4c07883cbd4ac864f0d08d927267404f5f0c76f31c85f9bbe05f2daae2f2", size = 6028417 }, - { url = "https://files.pythonhosted.org/packages/92/18/1f1372767b789ec06d0430f2529edc0f090a81b975d92222cc76f316a071/grpcio-1.66.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3084e590e857ba7585ae91078e4c9b6ef55aaf1dc343ce26400ba59a146eada", size = 5672535 }, - { url = "https://files.pythonhosted.org/packages/a3/2e/2812255c202494da83c95408acad16046eaf57a3d84a4ffaf2407ec851ae/grpcio-1.66.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:526d4f6ca19f31b25606d5c470ecba55c0b22707b524e4de8987919e8920437d", size = 6354752 }, - { url = "https://files.pythonhosted.org/packages/6c/6f/1fec15bd98aec20d33c13974469f14a544d5e9e94b5e9dcfa186398dda8f/grpcio-1.66.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:423ae18637cd99ddcf2e5a6851c61828c49e9b9d022d0442d979b4f230109787", size = 5933301 }, - { url = "https://files.pythonhosted.org/packages/90/6f/c66aef1dfaee69e3fc247ff4a7cdedec37953c40fca610c6f47341dae793/grpcio-1.66.0-cp312-cp312-win32.whl", hash = "sha256:7bc9d823e05d63a87511fb456dcc48dc0fced86c282bf60229675e7ee7aac1a1", size = 3537996 }, - { url = "https://files.pythonhosted.org/packages/e0/cd/c5f1bad6459e2886f7c2d33898eb483a0655cb89b4ba0f54bd686d80eea4/grpcio-1.66.0-cp312-cp312-win_amd64.whl", hash = "sha256:230cdd696751e7eb1395718cd308234749daa217bb8d128f00357dc4df102558", size = 4275471 }, +version = "1.66.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/42/94293200e40480d79fc876b2330e7dffb20f959b390afa77c0dbaa0c8372/grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2", size = 12326405 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/9a/95640ac9a29fdfb40bc6ad2f2a33710e55c1adbda831712254d96530e990/grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492", size = 4969896 }, + { url = "https://files.pythonhosted.org/packages/7a/63/c16a70596438de9bc62c2e7c61ad7a82d9290b7545e61278dae7a0db753f/grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac", size = 10586680 }, + { url = "https://files.pythonhosted.org/packages/2a/d5/2a3567aace955a561e0eef9b79bd187acad8949a0fca5d1470f36c1e60c7/grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60", size = 5483551 }, + { url = "https://files.pythonhosted.org/packages/c1/c1/3ee60d4e425f36b47c6e0f559aa40d6d0012586cffda165346157542a504/grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f", size = 6088989 }, + { url = "https://files.pythonhosted.org/packages/e4/6d/ee10b1bbe8b1744b6e8570e313ec873a13874494c1663a0b8260a6115913/grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083", size = 5733760 }, + { url = "https://files.pythonhosted.org/packages/79/31/9058f0f819828807e8503d17fb3ded21702b38b3e32a1552f76e0d59ff27/grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a", size = 6404001 }, + { url = "https://files.pythonhosted.org/packages/a6/0b/9b74b1ee3e18c9ba4751f02e30165c6f16dcc5665634bc0d689cbb5ed05f/grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d", size = 5990244 }, + { url = "https://files.pythonhosted.org/packages/52/0e/775f74401a5b6924e4976549a6f7d2ef4c0fa09340e2738ec46d0e4dff61/grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c", size = 3554349 }, + { url = "https://files.pythonhosted.org/packages/f3/72/6046088fa273d2c4fe72009d2411d5ccd053017014b1197c4881ead3ee70/grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858", size = 4288627 }, + { url = "https://files.pythonhosted.org/packages/22/8a/15d758ce27c82ba4760b9e221e153db02e4a7acd71dcdd7d5f8d3ad83630/grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a", size = 4978160 }, + { url = "https://files.pythonhosted.org/packages/0f/45/9d666f5b447cad3762cca22c8a805677a11976d8a2c82484659d96a31937/grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26", size = 10620579 }, + { url = "https://files.pythonhosted.org/packages/12/3f/c5e30952a37e9ad266ff7f11c806be1c33253e9daa97e8265f53f10a0b15/grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df", size = 5487691 }, + { url = "https://files.pythonhosted.org/packages/09/9c/d4f0c4c7a9fcdc140701c1b2b4c45d0de293380461ecaa7df76d8b5d8b03/grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22", size = 6089513 }, + { url = "https://files.pythonhosted.org/packages/ab/2d/02890f309feabe9255a406700096e08a0a2b9ed20ab43e86b6e633517b0d/grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1", size = 5732315 }, + { url = "https://files.pythonhosted.org/packages/ea/3a/2040ce42a03b163768e43966e02d9c88b2dcb0f28cb611d976b8d68d3835/grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e", size = 6407861 }, + { url = "https://files.pythonhosted.org/packages/e9/9a/fba2ed0ade08b4c8b5e2456269ddf73a5abbfe9407f9e6bd85d92efb4c9d/grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd", size = 5990083 }, + { url = "https://files.pythonhosted.org/packages/02/7b/7aabc0cf5b8bbe74226cbf4f948d4aa66df0b29095eea44ea465a1b01f13/grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791", size = 3555811 }, + { url = "https://files.pythonhosted.org/packages/45/86/cc31ad1578abd322c403b7425e6b50eb8a48a8f96c2e558dacd0ef472dc1/grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb", size = 4290747 }, + { url = "https://files.pythonhosted.org/packages/25/31/fa15c10757a8703332d9f9eff2ab676e8f8807e8636c01b965a37f806ded/grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a", size = 4912090 }, + { url = "https://files.pythonhosted.org/packages/31/3f/09f796724b44b625e4d294f6df8ab0bb63b4709664bd574ea97a8c0d6159/grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9", size = 10579733 }, + { url = "https://files.pythonhosted.org/packages/bc/d5/15c5934ac3550f682b04753e5481eca18a3710b220e16d3345a7e6f7c9f6/grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d", size = 5421092 }, + { url = "https://files.pythonhosted.org/packages/fa/77/f8ab8d436373ad09e1f8f50bf759b4afc8ad1bc121e5cf7dedd8507a4b63/grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0", size = 6028550 }, + { url = "https://files.pythonhosted.org/packages/1d/6c/a813a5b6d716cbc5cc3e496b186b6878816bf5f32aa7f7ae5f9d8dc5e669/grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761", size = 5672550 }, + { url = "https://files.pythonhosted.org/packages/a0/72/06962e2891fe3846a9dc61547d8ef35151b8976a083187e6647e65306c45/grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815", size = 6354719 }, + { url = "https://files.pythonhosted.org/packages/43/10/4db87a953a3f3c73a8284e176556b6eca33496b8ffaa93107f37f772148e/grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524", size = 5933351 }, + { url = "https://files.pythonhosted.org/packages/47/c7/f1fdd77bbe1c6459777a2d604228cc80124373e75d775c2a019755c29182/grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759", size = 3538005 }, + { url = "https://files.pythonhosted.org/packages/66/2b/a6e68d7ea6f4fbc31cce20e354d6cef484da0a9891ee6a3eaf3aa9659d01/grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734", size = 4275565 }, ] [[package]] @@ -704,6 +854,61 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, ] +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "platform_system == 'Darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipython" +version = "8.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/24/d4fabaca03c8804bf0b8d994c8ae3a20e57e9330d277fb43d83e558dec5e/ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e", size = 5494984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a2/6c725958e6f135d8e5de081e69841bb2c1d84b3fc259d02eb092b8fc203a/ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c", size = 818986 }, +] + [[package]] name = "jax" version = "0.4.31" @@ -747,6 +952,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c8/13/1bb2bcb4d9f4719dd5f3d98f5c2fc2235f961ced576366b040372eebdb17/jaxlib-0.4.31-cp312-cp312-win_amd64.whl", hash = "sha256:c4bfd15315e30525514b7262d555bea00745b09ac9818bb14c20ef8afbbab072", size = 56299104 }, ] +[[package]] +name = "jedi" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/99/99b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a/jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", size = 1227821 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/9f/bc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb/jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0", size = 1569361 }, +] + [[package]] name = "jinja2" version = "3.1.4" @@ -910,6 +1127,10 @@ extras = [ { name = "tensorboard" }, { name = "tqdm" }, ] +test = [ + { name = "coverage", extra = ["toml"] }, + { name = "pytest" }, +] [[package]] name = "langcodes" @@ -1101,6 +1322,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/8a/760f7fce66b39f447ad160800619d0bd5d0936d2b4633587116534a4afe0/matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e", size = 9093770 }, ] +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + [[package]] name = "mdurl" version = "0.1.2" @@ -1176,17 +1409,17 @@ wheels = [ [[package]] name = "nbclient" -version = "0.10.0" +version = "0.6.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, - { name = "jupyter-core" }, { name = "nbformat" }, + { name = "nest-asyncio" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/d2/39bc36604f24bccd44d374ac34769bc58c53a1da5acd1e83f0165aa4940e/nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09", size = 62246 } +sdist = { url = "https://files.pythonhosted.org/packages/01/21/917a25fbc2b37ed37135be97efb4c98526008505451ffa841adcd7d11ed5/nbclient-0.6.8.tar.gz", hash = "sha256:268fde3457cafe1539e32eb1c6d796bbedb90b9e92bacd3e43d83413734bb0e8", size = 78917 } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/e8/00517a23d3eeaed0513e718fbc94aab26eaa1758f5690fc8578839791c79/nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f", size = 25318 }, + { url = "https://files.pythonhosted.org/packages/e6/1d/de31c4139603b3f43147dca571de7d1928bd23d5c674865342bd457ec419/nbclient-0.6.8-py3-none-any.whl", hash = "sha256:7cce8b415888539180535953f80ea2385cdbb444944cdeb73ffac1556fdbc228", size = 71848 }, ] [[package]] @@ -1230,6 +1463,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/21/ad/020fed74bfde983a3b70cc95843d6adbe59171aa9a3da5aab403aa722a17/nbformat-5.7.3-py3-none-any.whl", hash = "sha256:22a98a6516ca216002b0a34591af5bcb8072ca6c63910baffc901cfa07fefbf0", size = 78108 }, ] +[[package]] +name = "nbmake" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pygments" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/25/46a5818e699dc72e708754a8b6cfe4383d714d6d2578a795e9393bd5a0a8/nbmake-1.5.4.tar.gz", hash = "sha256:56417fe80d50069671122955532df6e26369a23f68b9c6e2191ae9cfef19abb2", size = 11306 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/b6/4c8649228a418b0a4ea0577fcc921d9facef9f2b1d8669f2808f2cdf1429/nbmake-1.5.4-py3-none-any.whl", hash = "sha256:8e440a61a7d4ab303064aa86b8d2c088177c89960e2b4a0f91a768dc9f68382b", size = 12860 }, +] + [[package]] name = "nbsphinx" version = "0.8.12" @@ -1247,6 +1496,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/38/aff624a3002565c8da13657f11550dbbb65be7401a36656702f2eed4e1b6/nbsphinx-0.8.12-py3-none-any.whl", hash = "sha256:c15b681c7fce287000856f91fe1edac50d29f7b0c15bbc746fbe55c8eb84750b", size = 26564 }, ] +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + [[package]] name = "networkx" version = "3.3" @@ -1404,12 +1662,12 @@ wheels = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.20" +version = "12.6.68" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/b3/e456a1b2d499bb84bdc6670bfbcf41ff3bac58bd2fae6880d62834641558/nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_aarch64.whl", hash = "sha256:84fb38465a5bc7c70cbc320cfd0963eb302ee25a5e939e9f512bbba55b6072fb", size = 19252608 }, - { url = "https://files.pythonhosted.org/packages/59/65/7ff0569494fbaea45ad2814972cc88da843d53cc96eb8554fcd0908941d9/nvidia_nvjitlink_cu12-12.6.20-py3-none-manylinux2014_x86_64.whl", hash = "sha256:562ab97ea2c23164823b2a89cb328d01d45cb99634b8c65fe7cd60d14562bd79", size = 19724950 }, - { url = "https://files.pythonhosted.org/packages/cb/ef/8f96c82e1cfcf6d5b770f7b043c3cc24841fc247b37629a7cc643dbf72a1/nvidia_nvjitlink_cu12-12.6.20-py3-none-win_amd64.whl", hash = "sha256:ed3c43a17f37b0c922a919203d2d36cbef24d41cc3e6b625182f8b58203644f6", size = 162012830 }, + { url = "https://files.pythonhosted.org/packages/58/8c/69c9e39cd6bfa813852a94e9bd3c075045e2707d163e9dc2326c82d2c330/nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_aarch64.whl", hash = "sha256:b3fd0779845f68b92063ab1393abab1ed0a23412fc520df79a8190d098b5cd6b", size = 19253287 }, + { url = "https://files.pythonhosted.org/packages/a8/48/a9775d377cb95585fb188b469387f58ba6738e268de22eae2ad4cedb2c41/nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_x86_64.whl", hash = "sha256:125a6c2a44e96386dda634e13d944e60b07a0402d391a070e8fb4104b34ea1ab", size = 19725597 }, + { url = "https://files.pythonhosted.org/packages/00/d5/02af3b39427ed71e8c40b6912271499ec186a72405bcb7e4ca26ff70678c/nvidia_nvjitlink_cu12-12.6.68-py3-none-win_amd64.whl", hash = "sha256:a55744c98d70317c5e23db14866a8cc2b733f7324509e941fc96276f9f37801d", size = 161730369 }, ] [[package]] @@ -1451,6 +1709,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, ] +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + [[package]] name = "pbr" version = "6.1.0" @@ -1546,6 +1813,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1b/fe/00f8426996170c2dc708bcf693a1646c5dab1b2fe451a21bd80d8c64d2b8/PennyLane_qiskit-0.37.0-py3-none-any.whl", hash = "sha256:e951f0e27da616c0335a2675d0b2a8d0b2678acfc12bf75adf53c9ae30b64567", size = 38062 }, ] +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + [[package]] name = "pillow" version = "10.4.0" @@ -1605,6 +1884,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/52/3b/ce7a01026a7cf46e5452afa86f97a5e88ca97f562cafa76570178ab56d8d/pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5", size = 2554661 }, ] +[[package]] +name = "pip" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/87/fb90046e096a03aeab235e139436b3fe804cdd447ed2093b0d70eba3f7f8/pip-24.2.tar.gz", hash = "sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8", size = 1922041 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/55/90db48d85f7689ec6f81c0db0622d704306c5284850383c090e6c7195a5c/pip-24.2-py3-none-any.whl", hash = "sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2", size = 1815170 }, +] + [[package]] name = "platformdirs" version = "4.2.2" @@ -1614,6 +1902,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/13/2aa1f0e1364feb2c9ef45302f387ac0bd81484e9c9a4c5688a322fbdfd08/platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", size = 18146 }, ] +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567 }, +] + [[package]] name = "preshed" version = "3.0.9" @@ -1641,18 +1947,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/e4/d074efb7e8a8873d346d2fb8dd43e19b1eae0697351c0d79cff947cba46e/preshed-3.0.9-cp312-cp312-win_amd64.whl", hash = "sha256:24229c77364628743bc29c5620c5d6607ed104f0e02ae31f8a030f99a78a5ceb", size = 122428 }, ] +[[package]] +name = "prompt-toolkit" +version = "3.0.47" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/6d/0279b119dafc74c1220420028d490c4399b790fc1256998666e3a341879f/prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360", size = 425859 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/23/22750c4b768f09386d1c3cc4337953e8936f48a888fa6dddfb669b2c9088/prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10", size = 386411 }, +] + [[package]] name = "protobuf" -version = "5.27.4" +version = "5.28.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/7b/11d9fb99c0de4075b6064fa38997ccd6e7392619c1dcba85138cd528d84c/protobuf-5.27.4.tar.gz", hash = "sha256:eaa1016e353d8fc5bf08c8087e96eed15f5297aa52bb7ee1f533278bb3f3aad7", size = 401622 } +sdist = { url = "https://files.pythonhosted.org/packages/5f/d7/331ee1f3b798c34d2257c79d5426ecbe95d46d2b40ba808a29da6947f6d8/protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add", size = 422388 } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/3d/b8353f3d3e3f37af675cfed1fa3df4e8e9671a584e563f4967670184e955/protobuf-5.27.4-cp310-abi3-win32.whl", hash = "sha256:10319748764b917a9a7cddef1582a0a9cd0f8f6d04e545c6236f7ccaf9b624d9", size = 405836 }, - { url = "https://files.pythonhosted.org/packages/6a/32/bb9fc66f17971c67bd3f01255ea429ad6438e5e604c10376b3c9898ce3e0/protobuf-5.27.4-cp310-abi3-win_amd64.whl", hash = "sha256:f0c24374aaaf103f33662e4de7666a4a4280abebdb8a9f3f0f9b1d71b61174ec", size = 426931 }, - { url = "https://files.pythonhosted.org/packages/00/02/ae6b2d7e9eb38584395c488ffbe3fb96bbeaacaf8187542bc3a537f75db4/protobuf-5.27.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e85fed07013e5a0121efbaf1b14355fdc66f6e545f12fc5985b2882370410006", size = 412255 }, - { url = "https://files.pythonhosted.org/packages/5a/87/7e86753db5b4f1fbf9292a319bdac19252190419083bcadfc30d0be23636/protobuf-5.27.4-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:d5a0e229061600842e57af4ff6a8522ede5280bcfa4fe7f3a1c20589377859a6", size = 307151 }, - { url = "https://files.pythonhosted.org/packages/06/cc/5380628b10abca723f311e03a713687dd0b9f6ee760d947725cbda85c85e/protobuf-5.27.4-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:25ba1f0633f73c3939f3b84e1636f3eb3bab7196952ebb83906d56945edd6aa8", size = 309267 }, - { url = "https://files.pythonhosted.org/packages/23/0b/fc0f81c4033d94e52ea07f8fa8b06ecfec857bbc2c62c6d222f6024a20dc/protobuf-5.27.4-py3-none-any.whl", hash = "sha256:b97259641e8d38738eef34a173e51d2d53a453baab01a32477a64752d9ce59a3", size = 164781 }, + { url = "https://files.pythonhosted.org/packages/66/34/fc43138c93316839080324cb066f35224b75dae56b9f0fdd9d47c988ee9a/protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0", size = 419672 }, + { url = "https://files.pythonhosted.org/packages/de/f7/e7e03be7e7307123f6467080f283e484de7e892db54dd9a46f057d08c9ee/protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6", size = 431486 }, + { url = "https://files.pythonhosted.org/packages/ce/ec/34f67d6a3398aa360524d90f75a8c648c99c807b2f1001f5ab16355c1d12/protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681", size = 414744 }, + { url = "https://files.pythonhosted.org/packages/fe/79/636415c84eed9835fed83183db73fd6ea7ba76a85cae321ff2eaad722e85/protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd", size = 316527 }, + { url = "https://files.pythonhosted.org/packages/19/15/da43113361db20f2d521bc38d92549edbe06856aeec085c420b2b8af5751/protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd", size = 316615 }, + { url = "https://files.pythonhosted.org/packages/e3/b2/4df9958122a0377e571972c71692420bafd623d1df3ce506d88c2aba7e12/protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0", size = 169574 }, ] [[package]] @@ -1672,6 +1990,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/06/63872a64c312a24fb9b4af123ee7007a306617da63ff13bcc1432386ead7/psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0", size = 251988 }, ] +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + [[package]] name = "pycparser" version = "2.22" @@ -1802,6 +2138,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/c3/4dc3d1d029e14bf065f1df9e98e3e503e622de34706a06ab6c3731377e85/pyspnego-0.11.1-py3-none-any.whl", hash = "sha256:129a4294f2c4d681d5875240ef87accc6f1d921e8983737fb0b59642b397951e", size = 130456 }, ] +[[package]] +name = "pytest" +version = "8.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/8c/9862305bdcd6020bc7b45b1b5e7397a6caf1a33d3025b9a003b39075ffb2/pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce", size = 1439314 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/f9/cf155cf32ca7d6fa3601bc4c5dd19086af4b320b706919d48a4c79081cf9/pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5", size = 341802 }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -1849,7 +2202,7 @@ wheels = [ [[package]] name = "pytket-qiskit" -version = "0.55.0" +version = "0.48.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -1857,10 +2210,11 @@ dependencies = [ { name = "qiskit" }, { name = "qiskit-aer" }, { name = "qiskit-algorithms" }, + { name = "qiskit-ibm-provider" }, { name = "qiskit-ibm-runtime" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/22/8c/7f821c316f77fda64222dde76b8d554a97978ce0347e1dcc890d846f71bd/pytket_qiskit-0.55.0-py3-none-any.whl", hash = "sha256:47edbc07af6d64904206189ebaba209a869fbffbad260955e98939669fb6b106", size = 50511 }, + { url = "https://files.pythonhosted.org/packages/a3/4c/95ef95dcd2f567723d5b0c56958f0dfea935453bc21f5ddac50df8dff0a3/pytket_qiskit-0.48.0-py3-none-any.whl", hash = "sha256:247be305fb7f3838a7c0d3b3f8b68775f6d1921994f1d281630f080a2b230262", size = 50617 }, ] [[package]] @@ -1997,36 +2351,19 @@ wheels = [ [[package]] name = "qiskit" -version = "1.2.0" +version = "0.45.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dill" }, - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "stevedore" }, - { name = "symengine" }, - { name = "sympy" }, - { name = "typing-extensions" }, + { name = "qiskit-terra" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6b/04/c596b742d39f2840775b2e0f0a45e692565a7665344120013b79f7943b8c/qiskit-1.2.0.tar.gz", hash = "sha256:7d95413c833033425a392377f562a7f3b5b6cd8284e978dddd9b23db1093ded0", size = 3632867 } +sdist = { url = "https://files.pythonhosted.org/packages/73/3c/65f6c970037fa75c3ee137ad095c61cccc22e8bfe57d5b37b79beade86ee/qiskit-0.45.3.tar.gz", hash = "sha256:5ce758114f1025fd7e289eecdef58704faefc57c3b220793b1b49b75db7980ad", size = 10362 } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/3f/e18f509cfcb8723e4d54da13d468ca729ce06ca30eab6283b417bc462495/qiskit-1.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:b215440035a984abbd58edbb47d52b1f1dc54ea170d214173fd93ad41ce5e78d", size = 6837528 }, - { url = "https://files.pythonhosted.org/packages/d8/1a/6acac1e6d8d4e868c86cf9eeb8fe48a0f0e7e2721be5e3f8ec340852a09e/qiskit-1.2.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61e22e1cc8f62b3a2194efd86ea488d85576c0886e237f907311c8dcdaaacc3c", size = 4616452 }, - { url = "https://files.pythonhosted.org/packages/f2/30/7f157d16d9c3f807ad574e6ca59656bdf1f2ffbc605ec04265e64f6ee7e4/qiskit-1.2.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:41f6efc94efe27d1e8357a1be5c281cd96df0e098c2ec7fd74956f6d79cf49be", size = 4455969 }, - { url = "https://files.pythonhosted.org/packages/58/45/b6d25f5ba681c22af98f2bbc5492d0eb6775d08408849482e131701064c4/qiskit-1.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ee32ce8507aa9ac13ecbe879a75627df29421f1376e1232a1ffea96c3156c3d", size = 4596061 }, - { url = "https://files.pythonhosted.org/packages/19/34/c1ad8059af88446f4c44613498796fcb8a23233bd7de4e10e2049c5c3b6b/qiskit-1.2.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1506535ff910dee94a9008a11ff4807806cfea1271f29a793d4bb203a750e1d", size = 4756612 }, - { url = "https://files.pythonhosted.org/packages/87/8d/f85130c95f8eb241c2987afe2e6d4e9b42b7fb246c6851a81161b163c075/qiskit-1.2.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e07272e924e8bfa5d944f5ca0aefb7736ebe555caa9eb3c4adc13862fd87b57", size = 4645588 }, - { url = "https://files.pythonhosted.org/packages/f7/bf/699bd99c75b46a8afa63dfee298aa9340ccafcec977d5cc05dc232f5882d/qiskit-1.2.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de46724088851ae1f414a5a6d68a58ba1eac8374d45ee2669de1c3e90d04e912", size = 5492706 }, - { url = "https://files.pythonhosted.org/packages/c6/88/af27fd162beaa244c09416e7ea38c0a849d24a73afce47ade64a91cbd292/qiskit-1.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1658bbaf147a44e555ba87f7e139ae3b2ded1284e5073ec2a32dc08b32d41", size = 4753078 }, - { url = "https://files.pythonhosted.org/packages/b8/57/9a9ca248cb62974a44152f4845d36b35acbcda416e03f91fcd1e9247e4c2/qiskit-1.2.0-cp38-abi3-win32.whl", hash = "sha256:15446250d26e7576fac56b424c4388eff3695f7c5e258c9b3437f71f65b2835f", size = 4403339 }, - { url = "https://files.pythonhosted.org/packages/f0/e1/4fd33f69c6647eccae24cf5b4eb9865594fab0873d232a46f9c353dfa981/qiskit-1.2.0-cp38-abi3-win_amd64.whl", hash = "sha256:d4e13da68adb8fccc884896c5dfbab20e3f98e4cdb8740f4ac632f4b3674de6f", size = 4575284 }, + { url = "https://files.pythonhosted.org/packages/2d/3b/d0b915b49417d7690e2e5242c79502b5a6b5b1b4a56a18a31262662e5472/qiskit-0.45.3-py3-none-any.whl", hash = "sha256:37ad2b627ca27cc1f8db600e0ca36b4a610a67f68b7fd2a4156477cc643b597d", size = 9619 }, ] [[package]] name = "qiskit-aer" -version = "0.15.0" +version = "0.13.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2034,48 +2371,54 @@ dependencies = [ { name = "qiskit" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/e4/fbab238aa2704a45bd7a7db019a04ee491c5e6178d2f9af9a9377ad72a98/qiskit-aer-0.15.0.tar.gz", hash = "sha256:8a9b77fb73953d75671401c44bc07bfd2cd4d0a225293d51218d3209e0447987", size = 6548946 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/77/e28c0aeac05349bed109f1a223d7371982d5d5c4f188b8f38438250e5e7b/qiskit_aer-0.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aeb8f7b94151698cc52b2d4974c15fd73e5b4c486f220cc71b7af4adfd9c2ce6", size = 2463639 }, - { url = "https://files.pythonhosted.org/packages/66/fc/5a88e38df848cc1400fd6570cf0812ea8e503f168873cdf3bb08e89792d0/qiskit_aer-0.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64be0b57b95cca92fe553388c943fafb2e60c65dc71edddb8e7302ad72892587", size = 2154032 }, - { url = "https://files.pythonhosted.org/packages/db/ab/d6892376e275147fc27b929fb50f9ccc5b4548ef066ef8dd63e6e1967723/qiskit_aer-0.15.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9c513954b036d38f3af9f1fc7e7046924cbd5eb722695940a134c60af48885", size = 7931376 }, - { url = "https://files.pythonhosted.org/packages/3e/70/b9ace61816fbf082ad3ce6122291922d465c9b26be4375de9757cb706bbc/qiskit_aer-0.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a566b91c8b9934c41b362f9ca34e87683529bb2c7910fdd54577f8e838668af2", size = 7882663 }, - { url = "https://files.pythonhosted.org/packages/ce/b8/cd94f0d6704724464c8ef87f842739f6a63a3cb8d75d4174fee808722c61/qiskit_aer-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bf7ac0a251fc5760bd164ab64613f16525ebb2752565eb5e0e552aa16b979ab", size = 12336983 }, - { url = "https://files.pythonhosted.org/packages/c6/5d/4ea780d66832595030621f7d68a74444d9e45fd0fe764979a2632222fb52/qiskit_aer-0.15.0-cp310-cp310-win32.whl", hash = "sha256:f0671ef473f9cecc7312cfee5e8a23c3429a0d7cb748d2bcd836dbaf1432d341", size = 6893105 }, - { url = "https://files.pythonhosted.org/packages/e7/de/d18ff6a0d9584798f29a22b3b82cdfdd9de33756a9d9ffae5754ebec3130/qiskit_aer-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:ccaca7ee248dade9739ccc9eb1a07336e2636e8fcfbbf00a6a7870620fe87900", size = 9515147 }, - { url = "https://files.pythonhosted.org/packages/75/25/49269697361fd1a230ca4c6477c10d3ee50cc4eaa31418da2f110c2b14b8/qiskit_aer-0.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1460e72bccaf9f135c7d8fc410baf4f25965f1bae99a2308088aa923b262fa7f", size = 2465226 }, - { url = "https://files.pythonhosted.org/packages/72/ba/edfcb219e719b5e2b7f391b804c2b792c961e356e2fbba6bd32278a9bbfb/qiskit_aer-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d30a736494c1c3c769d1fd5404029b576d8064de0f39ee0313c5f41e6802c3c", size = 2155746 }, - { url = "https://files.pythonhosted.org/packages/9f/19/6db62e1920434282bfb07b625380ad03b6beaafdf6918c205ea12a21ce8f/qiskit_aer-0.15.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a02c39f1e9ca46b035477955d61386a4689edff2ecd73a490ede23298d25033f", size = 7931536 }, - { url = "https://files.pythonhosted.org/packages/d6/16/9834b2eaad3d83adc4e4cedb28ebc89859c625b23866098097aeba6727a6/qiskit_aer-0.15.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9ebffbacaed6875179732e55aa2d3d0c1959537944cf589c0eb2a3aa0a0a7c7", size = 7881729 }, - { url = "https://files.pythonhosted.org/packages/0c/bf/5aab8605ca77d1efb1f5daf6d2808b819da430df9eb5dc65dde442d569fe/qiskit_aer-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b40047a54979ce6dc39259c1041a494b151cdc09a69dd3cfe3d10765e0b4039", size = 12343062 }, - { url = "https://files.pythonhosted.org/packages/fa/40/7beb818d48792f90a62f644d96e03cd660822cbc7c6a00576a76ef457596/qiskit_aer-0.15.0-cp311-cp311-win32.whl", hash = "sha256:f9a2d044bdeefb27a0997319bcd908697c28300ad003f8c4ff17ceb53dda2a71", size = 6894009 }, - { url = "https://files.pythonhosted.org/packages/b5/e1/a25fad5883caf6d0d9738e9da17a2768d28b6787ae52ea2e8bc5c88b0d21/qiskit_aer-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:2f2fb382d916d36271c81ea949710c6f2b1ea49fc36459d1f7c35338c4cbdc91", size = 9515956 }, - { url = "https://files.pythonhosted.org/packages/82/0e/440ece5aaf02367f79ddbb80cdf69d25e5d791fd3b04b37ac45111ec1feb/qiskit_aer-0.15.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62aab0930e88afb410bc4484cceb5341deef6625459a9027834a0914e5484c4d", size = 2471231 }, - { url = "https://files.pythonhosted.org/packages/2c/80/04eab14f8fed6bfee037922db70ffbe6d545d61521d347fbfc37fc26c8a2/qiskit_aer-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca2afb05d68643a7adf35d33db90e4fcc6907a69fb178e1d53bee6a358b886a4", size = 2156899 }, - { url = "https://files.pythonhosted.org/packages/ad/fd/f11b12c0f66f772a985c9319117c7ad106cb579eee3789f421884a6b9797/qiskit_aer-0.15.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7ef7111263b22d363c77339949c2ee965094a42d12d8caaee6545852f5db9c5", size = 7938926 }, - { url = "https://files.pythonhosted.org/packages/2d/33/67ada8832619e704f1faebb8967e3379b787bdd65b6bfbf28974419478b2/qiskit_aer-0.15.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2d36065a3f193e853587c36c4d7a0a7b4109746bc528fe6f87c818f87f8efd1", size = 7883320 }, - { url = "https://files.pythonhosted.org/packages/83/11/1821c4e8d817b3934fdb264d3fcd3d38328ee80ab76e8cb5894eaf41a7a1/qiskit_aer-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:205c610513149b5ea419e242c6eb0fcf333feec35be2a7f36a401bcdb19de5c1", size = 12344222 }, - { url = "https://files.pythonhosted.org/packages/f1/d0/355f7807d4ff1b26ab9bab9c0ace7016c01c84e72df95da661a738b409ed/qiskit_aer-0.15.0-cp312-cp312-win32.whl", hash = "sha256:ae7269c34bb9345606fa879f421a30f3cac79f50a3dd5659b6973838bf397c38", size = 6895184 }, - { url = "https://files.pythonhosted.org/packages/14/f1/c18fec1c714793e5a28abc2e9073a168b8198f7141f8c2eb0540be794afb/qiskit_aer-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:d8c817589a6d5a784a829170207f815477c26d6691006c961ae37cd7f0043ef4", size = 9517736 }, +sdist = { url = "https://files.pythonhosted.org/packages/96/60/dc5f51d377c8b0e6d7a33b7f38fcb16401c639ce14c267affa6e90122e63/qiskit-aer-0.13.3.tar.gz", hash = "sha256:c1f7e5e3c1c219544e9cb73d426e5ffb8ee118eef87e9dcdccca7521e3ef53ec", size = 6535290 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/ae/70d52feb6c3fe0162bdbbb4a14e99f27df44b0c272b196632c4ea708f16d/qiskit_aer-0.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2ed41d01314142a7d3ab52a7f70375df4fc2d5322d7d00673b76dae32accd3e", size = 2307941 }, + { url = "https://files.pythonhosted.org/packages/c6/6f/7ff14cf6c9695848e079a8cff8055c906f1c63aa07e350ec169fb3ebcd80/qiskit_aer-0.13.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9dbd3b29b4b18a1ea061af06113b0aab92917d41d48f60488c1ad565e993339d", size = 2037961 }, + { url = "https://files.pythonhosted.org/packages/d7/34/3ce3d91a91449902a40fdf7dbb9d3ea67486db0539ce91927347ce355999/qiskit_aer-0.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65fcd089c89f40cac84e6e08adedef1672dfbb35bdba7efad86588c2165af926", size = 6398424 }, + { url = "https://files.pythonhosted.org/packages/49/1c/75716ebf22c2d45163f919c967fbfb0ec5760ef8c59a30d88486d96674c9/qiskit_aer-0.13.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09b08904943b5d00050e3bd4e2e34082a0e28179314fc40bb03d1e96e096bfd", size = 7901012 }, + { url = "https://files.pythonhosted.org/packages/84/98/9b152eefba9dd83f875d38abbecfd368e1a1495a800c8cafb8eb6db2edb6/qiskit_aer-0.13.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d76f770509ab1e2319dda2dee6b0562d567b2b6e524bce38963fc9446501d0fc", size = 7832249 }, + { url = "https://files.pythonhosted.org/packages/18/3a/c3457dc7ed8a53a262e43dca4128a71250fc39a7a575739623d88fc33535/qiskit_aer-0.13.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db56e61e373d87030a3ec0fbd70dabc52d5f9fff6977ae518d54914407e5eea6", size = 6821349 }, + { url = "https://files.pythonhosted.org/packages/25/25/fea90ac0971d226816310a318ec5f691da32f76fe731ffe5f5e12627f59f/qiskit_aer-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86865782c7338929ae85a318e2f8935cb2ddb3704763ef963e17ee518d7c5999", size = 12326292 }, + { url = "https://files.pythonhosted.org/packages/7f/1d/ef1c92e7328a19c3000104a3fb3fe0f554bacecc6fdfc342c77ac6962e19/qiskit_aer-0.13.3-cp310-cp310-win32.whl", hash = "sha256:a3076939c28532666b2b5d2065291c21c7199c0351108ca09bbb75e40b192ea4", size = 6877527 }, + { url = "https://files.pythonhosted.org/packages/7f/5c/0bd56cfc494c1796fd227f8d6df362cd8bea1e32e86b92e968dc90ebe154/qiskit_aer-0.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:e1c40ae852c2f12928b2a01d6868050697f576f91e8a3d2a68cb53bd94e20b9a", size = 9497200 }, + { url = "https://files.pythonhosted.org/packages/2c/cf/7af41e167cc73ca6c901968a2811a937ce230671e56eb29f3843e90cd067/qiskit_aer-0.13.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:317cd7ad10da13c22ebc1a5b40218037e830a4b04a26bf0dc3932d11a5460ca3", size = 2308879 }, + { url = "https://files.pythonhosted.org/packages/d2/ca/4e9762641f714166356fe7659b01e327f0e777456e31f3d32f635c93cde8/qiskit_aer-0.13.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff46a8ef196d404120d54c7991308800bba6c76d04ab5b9566848f141b24a8b2", size = 2039231 }, + { url = "https://files.pythonhosted.org/packages/7e/00/0f0155c40a6b697fae98e7485c2e70d6acb95336ffe6c5bcfb4ddac47992/qiskit_aer-0.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78335452520c1c0b2c32bc0f65979e396a5eb94ceaba8ebf993ef7b7b594fe92", size = 6400586 }, + { url = "https://files.pythonhosted.org/packages/f5/93/53e089788fab45892a63ee970652f959f5bb1e26f103c3d4e45eb4f36fe0/qiskit_aer-0.13.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b54cda7cddd11abd67d5e653e85061c3711b0a7c0b862fa1a8fc6dd173f8dcc", size = 7903352 }, + { url = "https://files.pythonhosted.org/packages/47/78/e9f6394b90eb1a605abf366fe1423c7c7b06687512963147600b508e725f/qiskit_aer-0.13.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eab0a47362b88e58b984d8b39421582c875e6e119f10f66cd2d2ffe19ea88758", size = 7833148 }, + { url = "https://files.pythonhosted.org/packages/3f/bf/7c8c8f643298000b50ec35fd9d8e78d585ab7ef30f27dd612d211d808938/qiskit_aer-0.13.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1da94235aad199d9a7c4e550070975fe4a9fd13c4e132754a996293867773811", size = 6821925 }, + { url = "https://files.pythonhosted.org/packages/1c/4c/1011b475bd2b6b3c0817e1edb049cbe6d6d8c2b973e726bba1f48d348f8c/qiskit_aer-0.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a926842c521a885f646a9dc9ca0a6ff18e5032d3770a6bcdcde0629e2296036", size = 12321559 }, + { url = "https://files.pythonhosted.org/packages/f7/51/9f34cba972b9decdf6bdc4e896f79f6b192781dc7d8f74549422fff908f4/qiskit_aer-0.13.3-cp311-cp311-win32.whl", hash = "sha256:aac93c5e308b9ea0a034c3fe133bd3f1b66135f3b0bf738b95de04f456f0df13", size = 6877995 }, + { url = "https://files.pythonhosted.org/packages/96/69/4b121cc96e3e426bdd8de0fe1e7c99a442415c6065dd83e29d272bf90ddb/qiskit_aer-0.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:8a8a8e569b6fdf568c84706e20798edeeaf59c275abbd982863faf34880a97f8", size = 9497798 }, + { url = "https://files.pythonhosted.org/packages/3c/15/278b4fc7fddf6874a73420a53b213d3829f76107d177a70982a61392c692/qiskit_aer-0.13.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1f3b8a9090300cd90d79cfb50b30a5eb03568ff65148a718c5ee88435dfa8bf9", size = 2312695 }, + { url = "https://files.pythonhosted.org/packages/47/0c/4feff805dae65a71e150afa807bbb764ea137c8d5def3b3562c2d7a24ed0/qiskit_aer-0.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b074682dc4dc41da41b7ea480befc4bcfa77a468642d792e38196b1589c41960", size = 2040293 }, + { url = "https://files.pythonhosted.org/packages/e7/2d/6ae8bee6cf5105ba1987d5660a4f73025ef935a7499fc29119f23fbd02f0/qiskit_aer-0.13.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06b337cb503e92fb5c01cf2ca2f4cc9a77cbd0e3b35b277c656379b11640e356", size = 6396748 }, + { url = "https://files.pythonhosted.org/packages/90/fb/f8ef8fec5efe68d2153583458f362e4091717faabb3c7da194323444e3ec/qiskit_aer-0.13.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3cc89f24434965fb030898ec60fd7f7c742d2e931adcd0f067a064b450548bd", size = 7907969 }, + { url = "https://files.pythonhosted.org/packages/8f/c8/19270648f53587aa16b9dc4414b9ba75834c986d84b907faafeb0ebee179/qiskit_aer-0.13.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9efac0c3e98d6678415e4752947899ddff1c5bf95d46535cb19ce2a980ae09f", size = 7834016 }, + { url = "https://files.pythonhosted.org/packages/2e/16/924fede82e9de90c2a294670c4abcf92231413425160b64f5d5b6363a0e7/qiskit_aer-0.13.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e461c06010bfda9f0fe98ef6f79f3957a10aefcde917a0db6c656ce52064b0e", size = 6829702 }, + { url = "https://files.pythonhosted.org/packages/1c/c5/7bdea770d2e48804c47cb8091d1b4809bcdaeafa95a058c010202629280e/qiskit_aer-0.13.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fff34eb028e0f44c75196078c6ee2ab17076302b911a7511bd9ade931cb1cf7a", size = 12327809 }, + { url = "https://files.pythonhosted.org/packages/b0/01/a8b5fbefff72297b2c05f2ed7824bfbbe51ade0f98ff69030a81d8ff57ed/qiskit_aer-0.13.3-cp312-cp312-win32.whl", hash = "sha256:f16dc55d28d3842a6870fb6da27b863173cd7f6569be3eca4e951c5edcd4d5fe", size = 6878703 }, + { url = "https://files.pythonhosted.org/packages/3f/a9/d85bc6a3ea9ff673551d58595a7a39988d5e6870e1e400c2e586c04fddc7/qiskit_aer-0.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:b07068679bf5193e6d2e25ecb3641fa23f2f639e8ff71aa08e75dd6aecf5b279", size = 9499625 }, ] [[package]] name = "qiskit-algorithms" -version = "0.3.0" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "qiskit" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/f9/f5e95c3f9c3b886afa4f56adc58074af34e0e5bd0bde55e747b6cb45f0b2/qiskit-algorithms-0.3.0.tar.gz", hash = "sha256:02eedcbb079c6da371421a50cb296ff1dc6ce4a1c478ec521ff6e62c9bc53e10", size = 240473 } +sdist = { url = "https://files.pythonhosted.org/packages/4f/34/2f34b6af08c7a2bfc437c0d22364a42aaa9fabd17f9a8f46e89bd899cbd1/qiskit-algorithms-0.2.2.tar.gz", hash = "sha256:53829402d53a2c8ef84db5a348c071e497a3bf5b45a017b8bf748cf9d9997db0", size = 238591 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/2f/9a71fc36ff8de0188d4325399e1ad29c8fce2c2b427dae6c900003510943/qiskit_algorithms-0.3.0-py3-none-any.whl", hash = "sha256:8ae1aa8aafc32864890a31c06d19f100a79df6412350f1f4b8c124cd17b3f731", size = 308560 }, + { url = "https://files.pythonhosted.org/packages/2a/30/466b83cbc4e5e3989c884a4e73506334793deff5c29a428707366dafc24a/qiskit_algorithms-0.2.2-py3-none-any.whl", hash = "sha256:695b2ddb8cf78a10e65131ffd37b9654dcc7d42a2b4ea85d9bfddf34e7f1229f", size = 306860 }, ] [[package]] name = "qiskit-ibm-provider" -version = "0.11.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2088,29 +2431,60 @@ dependencies = [ { name = "websocket-client" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/75/a3a940de9adbd2c9b85b12e8401a6cbf9b4b6b41d3b65fde64980eaa865e/qiskit_ibm_provider-0.11.0.tar.gz", hash = "sha256:31a29701120dd0b27e1d8e691b4e7262580cda6f85b85610697577920d8c2f0c", size = 244845 } +sdist = { url = "https://files.pythonhosted.org/packages/96/61/66fefe4ccc3030fb1ddd0bc722e2ed740d95bbaa6781935ea66035f6ec41/qiskit-ibm-provider-0.8.0.tar.gz", hash = "sha256:8ab0884288be7fd0bdddd2d294a9670fcda2ee6c1680bee1b9695d17aa98adc8", size = 246594 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/86/2f775a9ce2514da2ad2b0a5e52640536cbd6dcc1b5e0f6a48297ede96dcb/qiskit_ibm_provider-0.11.0-py3-none-any.whl", hash = "sha256:3d84aff2df00d0642a9fcb53cf7f7442e62d65d3bbe13e191bc078b2ee474dc6", size = 249949 }, + { url = "https://files.pythonhosted.org/packages/fa/e7/7910f29c8e39a32d30f9722038e1d186b8abb8944cfe3daa86430b973d5c/qiskit_ibm_provider-0.8.0-py3-none-any.whl", hash = "sha256:3d2c0d5897d15dbecd22b163a9ca4caa5f36e62af5b4186af1f5314d1e032d20", size = 245870 }, ] [[package]] name = "qiskit-ibm-runtime" -version = "0.28.0" +version = "0.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ibm-platform-services" }, { name = "numpy" }, - { name = "pydantic" }, { name = "python-dateutil" }, { name = "qiskit" }, + { name = "qiskit-ibm-provider" }, { name = "requests" }, { name = "requests-ntlm" }, { name = "urllib3" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/be/005044cd8e69873980b62f8e680ee16d9e17f9a886b8d362fa2ee238a074/qiskit_ibm_runtime-0.28.0.tar.gz", hash = "sha256:2e8bae757e4d6db4128d3b92194cf5ce5d1477338f88aa57f6f49adc08f2e484", size = 2829448 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/36/cdfacc81539574d96daabffd8a3a1e065442f9742d8d2cca5e73f3d1b12b/qiskit-ibm-runtime-0.17.0.tar.gz", hash = "sha256:e7b82f6a2fbbbe8d3ee6cab84a05cb62cccab73b528a0b22d9d52688c9bac9a4", size = 208869 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/49/05841cde4641c8c3fc46e3f9c1a1bc814525355941ef959204ee7c10d876/qiskit_ibm_runtime-0.28.0-py3-none-any.whl", hash = "sha256:1a3015655dd37773d3ed1548672acb52ee3ad51bb33466b9ad34b408e54a1c87", size = 2929639 }, + { url = "https://files.pythonhosted.org/packages/32/44/57675b17cb415028f1e8839013932dc94e5db9bfc9d3ad81f9aa5a721e26/qiskit_ibm_runtime-0.17.0-py3-none-any.whl", hash = "sha256:2e429e178c900fb8a2f745e4d50b23ed06236087382c15cf40edc38218eddf80", size = 229707 }, +] + +[[package]] +name = "qiskit-terra" +version = "0.45.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "numpy" }, + { name = "ply" }, + { name = "psutil" }, + { name = "python-dateutil" }, + { name = "rustworkx" }, + { name = "scipy" }, + { name = "stevedore" }, + { name = "symengine", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'ppc64le' or platform_machine == 'x86_64'" }, + { name = "sympy" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/63/70fedee4c584f6262b23f09286af239317d8b0e8b0032db6db288872ec89/qiskit-terra-0.45.3.tar.gz", hash = "sha256:fa3c5d9f54abd5f38fa79c1b1490ff984358377a2d6ed3c17ad2f06fd94243f8", size = 5192914 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/d9/f38bde27e49d1f6d3746460b7b103b680d452d969dd1be86edfa58a9ca3f/qiskit_terra-0.45.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ed12a6a5876cf180576575422d4e21908d647af8ed29d8a188da00e1ee5fe7e", size = 6388234 }, + { url = "https://files.pythonhosted.org/packages/b3/e6/9fecb5a0216cd0de4591049ab2ce7918a84dc9ccfa446817dd2d66a9aa6d/qiskit_terra-0.45.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8b3c8a4c09549fb26f91b513170df5f5ba931b2e34cf5f9b0a9ba3a419c503ff", size = 5447105 }, + { url = "https://files.pythonhosted.org/packages/40/02/c75c6ff5fa281e386709e19952a650a28de21142e913cc70d43acd9ea3b1/qiskit_terra-0.45.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:18bd72613aa61f1e1a5879f0b4eb4f13cf7e06471a4e1004e156ada65b5004aa", size = 5367107 }, + { url = "https://files.pythonhosted.org/packages/d6/09/7d0278764127a388f283a61dc6dc4d3ff0a783a1dd97c56ebb0cb1e9fdae/qiskit_terra-0.45.3-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff897082aaf9fbd0ad323ae3bc0e06f479e87e485954ee65952b095c378591f7", size = 6320308 }, + { url = "https://files.pythonhosted.org/packages/6c/3b/89fb4606fbbadf1644c452a8de0ffb7202b8ebb3908bfc35b66a94b59c3a/qiskit_terra-0.45.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ba1245f103eebcbb9e37955ee67798f7a081c9417132727e34495f671583be", size = 6262338 }, + { url = "https://files.pythonhosted.org/packages/18/8f/d8470b34fc0502863eaddfdc6bb5e1530f78a068fc4ba4b784445fd016be/qiskit_terra-0.45.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a323fd342afe0d14ba4ec23db2279fa23c93b4570a4bf9f042d5ca792a722b5", size = 6323747 }, + { url = "https://files.pythonhosted.org/packages/f6/cb/ea5a7077fb5771315e60fcfc311acc595a04036875f912d8acf7166c7a4e/qiskit_terra-0.45.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa817ec00756fa45cfac82945db43e0882db18bb678f5282481aca13713e3bbd", size = 6803818 }, + { url = "https://files.pythonhosted.org/packages/65/d6/d22f43c3982e3e3c5c781dccc7183d1a13b787e32028fd1624cb49ccb502/qiskit_terra-0.45.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fea3f2deda4a4561f5c20ff914824b09825235e5972508e47bb974f2adf7e14", size = 6282533 }, + { url = "https://files.pythonhosted.org/packages/b3/fe/f0b852de159bc7f0375ae520a57e3cfbcaadd2e37f28afbbaab75e4c6fe4/qiskit_terra-0.45.3-cp38-abi3-win32.whl", hash = "sha256:4a98f7f614978020512eae946e229769fc038707a98920700ff2dde233b3575f", size = 5094847 }, + { url = "https://files.pythonhosted.org/packages/c5/40/d21598f1059b3ac417cea15b6ed2723c8814fc8594647c60481f30726149/qiskit_terra-0.45.3-cp38-abi3-win_amd64.whl", hash = "sha256:2a127bb6773ced4c0a7d491d5a1dcbe57cc3328b5923f0ef41fa65b904b138b7", size = 5150670 }, ] [[package]] @@ -2740,6 +3114,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/8c/1f62e52795c29948b9c1170dd52ee1bba8664f030f3329558241a3bc6c0b/sspilib-0.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:9aa6ab4c3fc1057251cf1f3f199daf90b99599cdfafc9eade8fdf0c01526dec8", size = 472271 }, ] +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + [[package]] name = "stevedore" version = "5.3.0" @@ -2838,7 +3226,7 @@ wheels = [ [[package]] name = "thinc" -version = "8.2.4" +version = "8.2.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "blis" }, @@ -2854,23 +3242,23 @@ dependencies = [ { name = "srsly" }, { name = "wasabi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/e6/12f9d4ade7af128db91f725675bc9f417e6f6ea777478f5c1c3140a105a9/thinc-8.2.4.tar.gz", hash = "sha256:9383b39f286291519ebbb6454bab76404992599b0cbdfaec56b2f985023186a7", size = 192961 } +sdist = { url = "https://files.pythonhosted.org/packages/3b/2a/0e2e961e6152bedecca70e6833f6e827ee621efcee7496643242b506d54f/thinc-8.2.5.tar.gz", hash = "sha256:c2963791c934cc7fbd8f9b942d571cac79892ad11630bfca690a868c32752b75", size = 193031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/11/96917531e239e678f904736c03b9d2a7587a252c1a94b161f12b694b1dd8/thinc-8.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aaae34c28ebc7a0ba980e6c774f148e272375ff7d4ef6ae2977698edae052e52", size = 872634 }, - { url = "https://files.pythonhosted.org/packages/6a/59/6ddb2d2454a8b9ab37aadfc5face2cdcae4a7da3a36e1be15de7f2132b76/thinc-8.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a6c807cb75a22a17e5333377aff203dabf10daa457ce9e78b19f499a44dd816", size = 789639 }, - { url = "https://files.pythonhosted.org/packages/e1/cb/ca7776c84d6badf80f30f4eb2cf7312091752db37a1f9eed201a2961a1a6/thinc-8.2.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b53c092ab30abb9a3b46ef72a8a6af76db42822b550eff778b0decf95af572c4", size = 868704 }, - { url = "https://files.pythonhosted.org/packages/3b/92/d91652d4707e0bffa6fe03c1c4b4f59fec6d5cd6882a00a7663595d15cc5/thinc-8.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5724ea71dbdbb0d0168471884b9b6909bedaccfda01524c5e775a6fbc39d1bc7", size = 922365 }, - { url = "https://files.pythonhosted.org/packages/79/ea/23b5ad2d5090f026f1415398d6fa3569b1ca924f7f62c4678d4bedde2607/thinc-8.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:bb14e49ddb15770201682eda8381db6393f76580c1eb72d45e77e1202598116e", size = 1482115 }, - { url = "https://files.pythonhosted.org/packages/4c/5c/7229e7c8878a480f352ab3536372287919f84c6396391c1709a73eb05182/thinc-8.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccc58e47bc285e9afbf92ed6104f555abfa285a4b92198d955d344c4c1942607", size = 863703 }, - { url = "https://files.pythonhosted.org/packages/b3/3f/7daca81216723222b3353dd9cefbda1ea2f3bfbac7ff9a725bfacbfa1c96/thinc-8.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:baa4af044bfcaf9df6a02d6c6d6e96c960da540478a522daabfbde8923df3554", size = 781179 }, - { url = "https://files.pythonhosted.org/packages/20/a0/dfc97237ae66d3ce9bb892c8b91ed729d1dfe01548f85953716169f98aec/thinc-8.2.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b0e34bf322516a039e45c1da72eb82bcc97eb1f7c232b66b88f0c86f15a1202", size = 868315 }, - { url = "https://files.pythonhosted.org/packages/06/06/cb247012a34e7043f911e9bcb0bdf0b5daa37cd1130e51afaa48a61ff5a6/thinc-8.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc8ab48d19cd69ad9a0de2bbe49b7c20a91150faeb119638bea4c502c52b77f", size = 920139 }, - { url = "https://files.pythonhosted.org/packages/46/a9/34b82ee16f4b5da2ced75a068ea0ab616e178269af17d6555266a44dfcc4/thinc-8.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9f8c6c006b7cbe3ebb543c224159b004b52a8ff8922615577656e1458ee4bbf0", size = 1480113 }, - { url = "https://files.pythonhosted.org/packages/74/09/b9de561b34642a6f2f522bf17d29c7bd735fffa2964a677be62ec0b94311/thinc-8.2.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:997a1a399af074b34e25695f37ad48f8437e7c150705891f4db89aeb430df35a", size = 829635 }, - { url = "https://files.pythonhosted.org/packages/f0/b2/8391b1e5400d7a8260b321c957fa4d2cca0754e16c1e2aad7c74dfd2e0f2/thinc-8.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8e28ba753cdf925ac25b52ea6c4baf5104c6ed6874d9e3dfe768ff98d5118db1", size = 760510 }, - { url = "https://files.pythonhosted.org/packages/f0/be/d7b87674bc08805ebef56199595eb3aa7bd17f1230c4eb7416ec0369e9cb/thinc-8.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c3874361a1d3c469dd7c9054d4d16b7afcf791e9c47705766d690685fe702d", size = 818804 }, - { url = "https://files.pythonhosted.org/packages/65/1c/83d806f09a7d8a0b4ff76c93330c07dfec5bd5105160f45e890f7af0b7c2/thinc-8.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4a22e76e4651fb6b209cfba2e1c167e8537286ae35fb87769a17af491f995b5", size = 865027 }, - { url = "https://files.pythonhosted.org/packages/68/4a/e8e172cc172e514d39f3f9dc33a60d44bab420ce0bb1b696e4e97cce63db/thinc-8.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:ebfd9d79d2bdadec551cb9ca8c7fdeacb56db642158c56cdb039de47e9aad995", size = 1447894 }, + { url = "https://files.pythonhosted.org/packages/a2/76/1994abe2bf5cbe5f68231fd2c177e384b19bed86268d56c1b6b2dc19e203/thinc-8.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dc267f6aad80a681a85f50383afe91da9e2bec56fefdda86bfa2e4f529bef191", size = 843631 }, + { url = "https://files.pythonhosted.org/packages/e5/76/47e94af32943bd92d7cda4e92d185331a89116a0bf87123cc71796f21a00/thinc-8.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d80f1e497971c9fa0938f5cc8fe607bbe87356b405fb7bbc3ff9f32fb4eed3bb", size = 779045 }, + { url = "https://files.pythonhosted.org/packages/c0/76/7dcce5cd2b5a9fe92b76767d688f17fe459543c13893e588545db3c0dc85/thinc-8.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0933adbd3e65e30d3bef903e77a368bc8a41bed34b0d18df6d4fc0536908e21f", size = 868726 }, + { url = "https://files.pythonhosted.org/packages/d7/b5/ad029dc7346381922b7fd655b3fc39009cf675766345d8e13f9f8282bde8/thinc-8.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54bac2ba23b208fdaf267cd6113d26a5ecbb3b0e0c6015dff784ae6a9c5e78ca", size = 922374 }, + { url = "https://files.pythonhosted.org/packages/f6/3e/fb96407db92a15b5c0feb0deb930c4c223bdb772e04b51b9798a86059a26/thinc-8.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:399260197ef3f8d9600315fc5b5a1d5940400fceb0361de642e9fe3506d82385", size = 1482115 }, + { url = "https://files.pythonhosted.org/packages/76/37/8acfeba6bb25b08c2a33bfae5301a5df4dc164d2d17040bebbcf66d783a1/thinc-8.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a75c0de3340afed594beda293661de145f3842873df56d9989bc338148f13fab", size = 839072 }, + { url = "https://files.pythonhosted.org/packages/e9/eb/753a85875fb0261c83ca87a1a36d41346bde662c3a029ace9d68fe32bc5b/thinc-8.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6b166d1a22003ee03bc236370fff2884744c1fb758a6209a2512d305773d07d7", size = 773885 }, + { url = "https://files.pythonhosted.org/packages/34/47/06810a1bd9d3287076ba17299abec82c8c643563661b1af9b1d5d9aeab38/thinc-8.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34db8a023b9f70645fdf06c510584ba6d8b97ec53c1e094f42d95652bf8c875f", size = 868332 }, + { url = "https://files.pythonhosted.org/packages/1a/19/cd73e3b5f22d5d9399f6f2931ab0fb985415f34030dcfead070181866761/thinc-8.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8901b30db1071ea8d5e4437429c8632535bf5ed87938ce3bb5057bed9f15aed8", size = 920152 }, + { url = "https://files.pythonhosted.org/packages/5e/0e/5e7b24e046e0725eafc37ded0cd9bfaf789efb894101a7aca8a73dba81de/thinc-8.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:8ef5d46d62e31f2450224ab22391a606cf427b13e20cfc570f70422e2f333872", size = 1480120 }, + { url = "https://files.pythonhosted.org/packages/a4/9d/d2ed3aef9bb75ab86c521bde58f897db6a572c9fd639448173b516269a69/thinc-8.2.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9fc26697e2358c71a5fe243d52e98ae67ee1a3b314eead5031845b6d1c0d121c", size = 824150 }, + { url = "https://files.pythonhosted.org/packages/66/a6/30ed1edb2adab585b5f7d5d99e89b5be3014dcbf3f4e263997b2c2426681/thinc-8.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8e299d4dc41107385d6d14d8604a060825798a031cabe2b894b22f9d75d9eaad", size = 760640 }, + { url = "https://files.pythonhosted.org/packages/82/ce/aaff1f39bcc1e9a97bec5f3d20aa771c005a9faff3944fc56c7492c24466/thinc-8.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8a8f2f249f2be9a5ce2a81a6efe7503b68be7b57e47ad54ab28204e1f0c723b", size = 818820 }, + { url = "https://files.pythonhosted.org/packages/d7/fa/c96b01e46e5962d02de1206e497fda2902aef2b8ffb2926d66d5f0159040/thinc-8.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87e729f33c76ec6df9b375989743252ab880d79f3a2b4175169b21dece90f102", size = 865047 }, + { url = "https://files.pythonhosted.org/packages/cd/26/306b8bedb678c52464ed00e576edf9d365fce0bcae597a333bdad9fb5d67/thinc-8.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:c5f750ea2dd32ca6d46947025dacfc0f6037340c4e5f7adb9af84c75f65aa7d8", size = 1447893 }, ] [[package]] @@ -2948,6 +3336,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588 }, ] +[[package]] +name = "tomli" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f", size = 15164 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757 }, +] + [[package]] name = "torch" version = "2.4.0" @@ -3105,6 +3502,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c", size = 27880 }, ] +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] + [[package]] name = "weasel" version = "0.4.1" @@ -3145,61 +3551,61 @@ wheels = [ [[package]] name = "websockets" -version = "13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/b0/e53bdd53d86447d211694f3cf66f163d077c5d68e6bcaa726bf64e88ae3a/websockets-13.0.tar.gz", hash = "sha256:b7bf950234a482b7461afdb2ec99eee3548ec4d53f418c7990bb79c620476602", size = 147622 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/cc/8b3007ecf2d4e423251b2b3606c276e3fe85298982fc4fd0785a17b73ffb/websockets-13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad4fa707ff9e2ffee019e946257b5300a45137a58f41fbd9a4db8e684ab61528", size = 150919 }, - { url = "https://files.pythonhosted.org/packages/1b/17/44553bd98608378b0d17432431a0f8f4633a6799826418f93ac036125000/websockets-13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fd757f313c13c34dae9f126d3ba4cf97175859c719e57c6a614b781c86b617e", size = 148574 }, - { url = "https://files.pythonhosted.org/packages/ee/38/ac6d8f50dc8ac81c29036d6d26aafae3fcbb43cfe88e8bc35a0e6af24525/websockets-13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cbac2eb7ce0fac755fb983c9247c4a60c4019bcde4c0e4d167aeb17520cc7ef1", size = 148830 }, - { url = "https://files.pythonhosted.org/packages/6e/6e/b831097bb1843200d8636245f45fb8daaf4512329e8036f0f0b7ecd80f1c/websockets-13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4b83cf7354cbbc058e97b3e545dceb75b8d9cf17fd5a19db419c319ddbaaf7a", size = 157909 }, - { url = "https://files.pythonhosted.org/packages/e0/d9/4ceef7fb370eca3c33d02966e972c08ef49073199ad02ef9f0f9f2f6f107/websockets-13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9202c0010c78fad1041e1c5285232b6508d3633f92825687549540a70e9e5901", size = 156920 }, - { url = "https://files.pythonhosted.org/packages/b0/b1/8fb8bfad33f01d9085934c39bf5171c372edebed4c5440b28cb3270c0d56/websockets-13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6566e79c8c7cbea75ec450f6e1828945fc5c9a4769ceb1c7b6e22470539712", size = 157233 }, - { url = "https://files.pythonhosted.org/packages/ad/0a/1dbe4f15cb2fc6d2efea9e7c55651102dc52a10d34d322c0af8d332592be/websockets-13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e7fcad070dcd9ad37a09d89a4cbc2a5e3e45080b88977c0da87b3090f9f55ead", size = 157632 }, - { url = "https://files.pythonhosted.org/packages/9f/97/4e7e98b694ef3db9a9776cbc4f72121cf408c47d7bc1ec582cfd9fa16de1/websockets-13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8f7d65358a25172db00c69bcc7df834155ee24229f560d035758fd6613111a", size = 157049 }, - { url = "https://files.pythonhosted.org/packages/4f/8c/50c0b58e99a7dc19282b706b99316327380065d8b2325aa0c7ae0479a98a/websockets-13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:63b702fb31e3f058f946ccdfa551f4d57a06f7729c369e8815eb18643099db37", size = 157001 }, - { url = "https://files.pythonhosted.org/packages/a4/6f/cf602a9addf38396a2543bcd2c120651324169c0e88aa68a86a9b1e1f648/websockets-13.0-cp310-cp310-win32.whl", hash = "sha256:3a20cf14ba7b482c4a1924b5e061729afb89c890ca9ed44ac4127c6c5986e424", size = 151754 }, - { url = "https://files.pythonhosted.org/packages/d0/bf/4a0bab951456884638c9bbf4a6b5314e755217632be8da831f8b3c6d3954/websockets-13.0-cp310-cp310-win_amd64.whl", hash = "sha256:587245f0704d0bb675f919898d7473e8827a6d578e5a122a21756ca44b811ec8", size = 152192 }, - { url = "https://files.pythonhosted.org/packages/12/29/9fdf8a7f1ced2bac55d36e0b879991498c9858f1e524763434025948d254/websockets-13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:06df8306c241c235075d2ae77367038e701e53bc8c1bb4f6644f4f53aa6dedd0", size = 150915 }, - { url = "https://files.pythonhosted.org/packages/b9/27/723276e7fcb41a3e0859e347014e3e24637982a29222132746b98095ec02/websockets-13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85a1f92a02f0b8c1bf02699731a70a8a74402bb3f82bee36e7768b19a8ed9709", size = 148575 }, - { url = "https://files.pythonhosted.org/packages/04/54/39b1f809e34f78ebb1dcb9cf57465db9705bbf59f30bd1b3b381272dff2b/websockets-13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9ed02c604349068d46d87ef4c2012c112c791f2bec08671903a6bb2bd9c06784", size = 148825 }, - { url = "https://files.pythonhosted.org/packages/fe/df/0a8a90162c32ceb9f28415291c1d689310b503288d29169302964105a351/websockets-13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b89849171b590107f6724a7b0790736daead40926ddf47eadf998b4ff51d6414", size = 158482 }, - { url = "https://files.pythonhosted.org/packages/20/05/227dbb1861cd1e2eb04ac79b136da841dbf6f196e4dc0bd1e67edb4ee69d/websockets-13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:939a16849d71203628157a5e4a495da63967c744e1e32018e9b9e2689aca64d4", size = 157478 }, - { url = "https://files.pythonhosted.org/packages/fe/dd/3384d3eb26022703895d6ed65aec2d3af6976c3d9aed06200a322e7192cb/websockets-13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad818cdac37c0ad4c58e51cb4964eae4f18b43c4a83cb37170b0d90c31bd80cf", size = 157855 }, - { url = "https://files.pythonhosted.org/packages/93/ad/0320a24cd8309e1a257d43d762a732162f2956b769c1ad950b70d4d4d15a/websockets-13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cbfe82a07596a044de78bb7a62519e71690c5812c26c5f1d4b877e64e4f46309", size = 158160 }, - { url = "https://files.pythonhosted.org/packages/d0/33/acc24e576228301d1dc23ce9d3f7d20f51dfe6c16d1b241e6ba4b2904d3e/websockets-13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e07e76c49f39c5b45cbd7362b94f001ae209a3ea4905ae9a09cfd53b3c76373d", size = 157598 }, - { url = "https://files.pythonhosted.org/packages/83/47/01645a0ea041e32a9d8946a324845beb8daba2e2f00ee4fd2d04d3ceb598/websockets-13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:372f46a0096cfda23c88f7e42349a33f8375e10912f712e6b496d3a9a557290f", size = 157548 }, - { url = "https://files.pythonhosted.org/packages/73/89/ea73bc41934eb3ea3f0c04fa7b16455ec5925b8b72aa5e016bd22df5feb5/websockets-13.0-cp311-cp311-win32.whl", hash = "sha256:376a43a4fd96725f13450d3d2e98f4f36c3525c562ab53d9a98dd2950dca9a8a", size = 151756 }, - { url = "https://files.pythonhosted.org/packages/9b/b1/81f655476532b31c39814d55a1dc1e97ecedc5a1b4f9517ee665aec398f6/websockets-13.0-cp311-cp311-win_amd64.whl", hash = "sha256:2be1382a4daa61e2f3e2be3b3c86932a8db9d1f85297feb6e9df22f391f94452", size = 152200 }, - { url = "https://files.pythonhosted.org/packages/ad/0a/baeea2931827e73ebe3d958fad9df74ec66d08341d0cf701ced0381adc91/websockets-13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5407c34776b9b77bd89a5f95eb0a34aaf91889e3f911c63f13035220eb50107", size = 150928 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/306e2940829db34c5866e869eb5b1a08dd04d1c6d25c71327a028d124871/websockets-13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4782ec789f059f888c1e8fdf94383d0e64b531cffebbf26dd55afd53ab487ca4", size = 148585 }, - { url = "https://files.pythonhosted.org/packages/2b/3c/183a4f79e0ce6be8733f824e0a48db3771a373a7206aef900bc1ae4c176e/websockets-13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c8feb8e19ef65c9994e652c5b0324abd657bedd0abeb946fb4f5163012c1e730", size = 148821 }, - { url = "https://files.pythonhosted.org/packages/03/32/37e1c9dd9aa1e7fa6fb3147d6992d61a20ba63ffee2adc88a392e1ae7376/websockets-13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f3d2e20c442b58dbac593cb1e02bc02d149a86056cc4126d977ad902472e3b", size = 158746 }, - { url = "https://files.pythonhosted.org/packages/6c/da/0cace6358289c7de1ee02ed0d572dfe92e5cb97270bda60f04a4e49ac5c5/websockets-13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e39d393e0ab5b8bd01717cc26f2922026050188947ff54fe6a49dc489f7750b7", size = 157699 }, - { url = "https://files.pythonhosted.org/packages/c7/ab/b763b0e8598c4251ec6e17d18f46cbced157772b991200fb0d32550844c5/websockets-13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f661a4205741bdc88ac9c2b2ec003c72cee97e4acd156eb733662ff004ba429", size = 158124 }, - { url = "https://files.pythonhosted.org/packages/d0/2d/40b8c3ba08792c2ecdb81613671a4b9bd33b83c50519b235e8eeb0ae21a0/websockets-13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:384129ad0490e06bab2b98c1da9b488acb35bb11e2464c728376c6f55f0d45f3", size = 158415 }, - { url = "https://files.pythonhosted.org/packages/4c/5e/9a42db20f6c38d247a900bfb8633953df93d8873a99ed9432645a4d5e185/websockets-13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:df5c0eff91f61b8205a6c9f7b255ff390cdb77b61c7b41f79ca10afcbb22b6cb", size = 157795 }, - { url = "https://files.pythonhosted.org/packages/87/52/7fb5f052eefaa5d2b42da06b314c2af0467fadbd7f360716a1a4d4f7ab67/websockets-13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02cc9bb1a887dac0e08bf657c5d00aa3fac0d03215d35a599130c2034ae6663a", size = 157791 }, - { url = "https://files.pythonhosted.org/packages/9c/8b/4b7064d1a40fcb85f64bc051d8bdc8a9e388572eb5bec5cb85ffb2c43e01/websockets-13.0-cp312-cp312-win32.whl", hash = "sha256:d9726d2c9bd6aed8cb994d89b3910ca0079406edce3670886ec828a73e7bdd53", size = 151765 }, - { url = "https://files.pythonhosted.org/packages/8b/a3/297207726b292e85b9a8ce24ef6ab16a056c457100e915a67b6928a58fa9/websockets-13.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0839f35322f7b038d8adcf679e2698c3a483688cc92e3bd15ee4fb06669e9a", size = 152202 }, - { url = "https://files.pythonhosted.org/packages/03/b6/778678e1ff104df3a869dacb0bc845df34d74f2ff7451f99babccd212203/websockets-13.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:da7e501e59857e8e3e9d10586139dc196b80445a591451ca9998aafba1af5278", size = 150936 }, - { url = "https://files.pythonhosted.org/packages/fa/25/28609b2555f11e4913a4021147b7a7c5117b5c41da5d26a604a91bae85b9/websockets-13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a00e1e587c655749afb5b135d8d3edcfe84ec6db864201e40a882e64168610b3", size = 148590 }, - { url = "https://files.pythonhosted.org/packages/cb/1f/e06fb15fde90683fd98e6ca44fb54fe579161ce553d54fdbb578014ae1a7/websockets-13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a7fbf2a8fe7556a8f4e68cb3e736884af7bf93653e79f6219f17ebb75e97d8f0", size = 148826 }, - { url = "https://files.pythonhosted.org/packages/22/00/9892eee346f44cd814c18888bc1a05880e3f8091e4eb999e6b34634cd278/websockets-13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ea9c9c7443a97ea4d84d3e4d42d0e8c4235834edae652993abcd2aff94affd7", size = 158717 }, - { url = "https://files.pythonhosted.org/packages/dc/ad/2bdc3a5dd60b639e0f8e76ee4a57fda27abaf05f604708c61c6fd7f8ad88/websockets-13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35c2221b539b360203f3f9ad168e527bf16d903e385068ae842c186efb13d0ea", size = 157660 }, - { url = "https://files.pythonhosted.org/packages/0c/14/5585de16939608b77a37f8b88e1bd1d430d95ec19d3a8c26ec42a91f2815/websockets-13.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:358d37c5c431dd050ffb06b4b075505aae3f4f795d7fff9794e5ed96ce99b998", size = 158104 }, - { url = "https://files.pythonhosted.org/packages/7b/1e/6cd9063fd34fe7f649ed9a56d3c91e80dea95cf3ab3344203ee774d51a56/websockets-13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:038e7a0f1bfafc7bf52915ab3506b7a03d1e06381e9f60440c856e8918138151", size = 158463 }, - { url = "https://files.pythonhosted.org/packages/d9/4d/c3282f8e54103f3d38b5e56851d00911dafd0c37c8d03a9ecc7a25f2a9da/websockets-13.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fd038bc9e2c134847f1e0ce3191797fad110756e690c2fdd9702ed34e7a43abb", size = 157850 }, - { url = "https://files.pythonhosted.org/packages/a1/08/af4f67b74cc6891ee1c34a77b47a3cb77081b824c3df92c1196980df9a4f/websockets-13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93b8c2008f372379fb6e5d2b3f7c9ec32f7b80316543fd3a5ace6610c5cde1b0", size = 157843 }, - { url = "https://files.pythonhosted.org/packages/b4/b7/2c991e51d48b1b98847d0a0b608508a3b687f215a2390f99cf0ee7dd2777/websockets-13.0-cp313-cp313-win32.whl", hash = "sha256:851fd0afb3bc0b73f7c5b5858975d42769a5fdde5314f4ef2c106aec63100687", size = 151763 }, - { url = "https://files.pythonhosted.org/packages/bc/0f/f06ed6485cf9cdea7d89c2f6e9d19f1be963ba5d26fb79760bfd17dd4aa5/websockets-13.0-cp313-cp313-win_amd64.whl", hash = "sha256:7d14901fdcf212804970c30ab9ee8f3f0212e620c7ea93079d6534863444fb4e", size = 152197 }, - { url = "https://files.pythonhosted.org/packages/e0/1e/f7260a625b210f8242d0d858a3006a54b632843b796db39d9deb90068031/websockets-13.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:602cbd010d8c21c8475f1798b705bb18567eb189c533ab5ef568bc3033fdf417", size = 148603 }, - { url = "https://files.pythonhosted.org/packages/b7/b6/3462a3a2688a62ee52aa1555fd47c61ffad0b12d0ed6ccdefd1ef8c3eef4/websockets-13.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:bf8eb5dca4f484a60f5327b044e842e0d7f7cdbf02ea6dc4a4f811259f1f1f0b", size = 148837 }, - { url = "https://files.pythonhosted.org/packages/ca/74/9f7c4669c5b5e154384eace44a5a3e24609c230f1428fea6b9af257a66c5/websockets-13.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d795c1802d99a643bf689b277e8604c14b5af1bc0a31dade2cd7a678087212", size = 150200 }, - { url = "https://files.pythonhosted.org/packages/c0/33/a307018b358f5cca141497e95f9af19c3e8be748219773afc4fcd4791123/websockets-13.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:788bc841d250beccff67a20a5a53a15657a60111ef9c0c0a97fbdd614fae0fe2", size = 149804 }, - { url = "https://files.pythonhosted.org/packages/d9/62/c514d5b087f7b2cab8d97c80213d7ee8196b5954f8466886146c09d4fc46/websockets-13.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7334752052532c156d28b8eaf3558137e115c7871ea82adff69b6d94a7bee273", size = 149754 }, - { url = "https://files.pythonhosted.org/packages/f4/d7/b11dd0a18b9bd876158c463ac1a6cab7b1b38093866fce22d03ab5462258/websockets-13.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7a1963302947332c3039e3f66209ec73b1626f8a0191649e0713c391e9f5b0d", size = 152235 }, - { url = "https://files.pythonhosted.org/packages/b2/89/c0be9f09eea478659e9d936210ff03e6a2a3a8d4b8dfac6b1143ff646ded/websockets-13.0-py3-none-any.whl", hash = "sha256:dbbac01e80aee253d44c4f098ab3cc17c822518519e869b284cfbb8cd16cc9de", size = 142957 }, +version = "13.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/1c/78687e0267b09412409ac134f10fd14d14ac6475da892a8b09a02d0f6ae2/websockets-13.0.1.tar.gz", hash = "sha256:4d6ece65099411cfd9a48d13701d7438d9c34f479046b34c50ff60bb8834e43e", size = 149769 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/bd/224fd6c4c0d60645444bb77cabf3633a6c14a47e2d03cdbc2136486c51f7/websockets-13.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1841c9082a3ba4a05ea824cf6d99570a6a2d8849ef0db16e9c826acb28089e8f", size = 150946 }, + { url = "https://files.pythonhosted.org/packages/44/5b/16f06fa678432d0cdbc55477bb6f0215c42b31615948bd63a884c294e0a5/websockets-13.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c5870b4a11b77e4caa3937142b650fbbc0914a3e07a0cf3131f35c0587489c1c", size = 148600 }, + { url = "https://files.pythonhosted.org/packages/5a/33/c57b4ecdd26510ffcda37d30073097f1e9015b316fe21b513360bf2d8ee2/websockets-13.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f1d3d1f2eb79fe7b0fb02e599b2bf76a7619c79300fc55f0b5e2d382881d4f7f", size = 148853 }, + { url = "https://files.pythonhosted.org/packages/71/a3/6a8a0e86c44fc39fab83fc6b946f9f7d53e5be6824916450dac637937086/websockets-13.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15c7d62ee071fa94a2fc52c2b472fed4af258d43f9030479d9c4a2de885fd543", size = 157935 }, + { url = "https://files.pythonhosted.org/packages/a0/58/ba14373234d2b7cce48031f7bd05ab2d23a11ffa0d35c3348d5729fa0527/websockets-13.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6724b554b70d6195ba19650fef5759ef11346f946c07dbbe390e039bcaa7cc3d", size = 156949 }, + { url = "https://files.pythonhosted.org/packages/7d/8a/8e2319207bae70156d0505bf91e192de015ee91ccc5b1afb406bb7db3819/websockets-13.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a952fa2ae57a42ba7951e6b2605e08a24801a4931b5644dfc68939e041bc7f", size = 157260 }, + { url = "https://files.pythonhosted.org/packages/03/cd/31ff415c4b0dc3c185bd87c412affdc5fab42c700b04d02b380bfb789310/websockets-13.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:17118647c0ea14796364299e942c330d72acc4b248e07e639d34b75067b3cdd8", size = 157661 }, + { url = "https://files.pythonhosted.org/packages/e8/58/a95d1dc6f589cbbfca0918d160ff27c920ab2e94637b750591c6f226cf27/websockets-13.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64a11aae1de4c178fa653b07d90f2fb1a2ed31919a5ea2361a38760192e1858b", size = 157078 }, + { url = "https://files.pythonhosted.org/packages/ce/02/207f49e1c22c8fad9e6353815de698e778d365609801dc2387e01e0f94a2/websockets-13.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0617fd0b1d14309c7eab6ba5deae8a7179959861846cbc5cb528a7531c249448", size = 157027 }, + { url = "https://files.pythonhosted.org/packages/3b/aa/e59d994712635e9e6bc883471e12cc493e3a704e4e22e9d4a59ff1491161/websockets-13.0.1-cp310-cp310-win32.whl", hash = "sha256:11f9976ecbc530248cf162e359a92f37b7b282de88d1d194f2167b5e7ad80ce3", size = 151776 }, + { url = "https://files.pythonhosted.org/packages/7b/f9/83bc78788d6ce5492fa44133708584a885080aa7c790be2532f326948115/websockets-13.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c3c493d0e5141ec055a7d6809a28ac2b88d5b878bb22df8c621ebe79a61123d0", size = 152206 }, + { url = "https://files.pythonhosted.org/packages/20/95/e002ec55688b751d3c9cc131c1960af7e440d95e1954c441535b9da2bf36/websockets-13.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:699ba9dd6a926f82a277063603fc8d586b89f4cb128efc353b749b641fcddda7", size = 150948 }, + { url = "https://files.pythonhosted.org/packages/62/6b/85fb8c13b278db7d45e27ff6ee0db3009b0fadef7c37c85e6cb4a0fbf08e/websockets-13.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf2fae6d85e5dc384bf846f8243ddaa9197f3a1a70044f59399af001fd1f51d4", size = 148599 }, + { url = "https://files.pythonhosted.org/packages/e8/2e/c80cafbab86f8c399ba8323efff298b7062055724146391443d266e9c49b/websockets-13.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:52aed6ef21a0f1a2a5e310fb5c42d7555e9c5855476bbd7173c3aa3d8a0302f2", size = 148851 }, + { url = "https://files.pythonhosted.org/packages/2e/67/631d4b1f28fef6f12730c0cbe982203a9d6814768c2ab1e0a352d9a07a97/websockets-13.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb2b9a318542153674c6e377eb8cb9ca0fc011c04475110d3477862f15d29f0", size = 158509 }, + { url = "https://files.pythonhosted.org/packages/9b/e8/ba740eab2a9c5b903ea94d9a2a448db63f0a296265aee976d17abf734758/websockets-13.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5df891c86fe68b2c38da55b7aea7095beca105933c697d719f3f45f4220a5e0e", size = 157507 }, + { url = "https://files.pythonhosted.org/packages/f8/4e/ffa2f1aad2da67e483fb7bad6c69f80c786f4e85d1942a39d7b275b084ed/websockets-13.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac2d146ff30d9dd2fcf917e5d147db037a5c573f0446c564f16f1f94cf87462", size = 157881 }, + { url = "https://files.pythonhosted.org/packages/c0/85/0cbfe7b0e0dd3d885cd87b0523c6690ae7369feaf3aab5a23e95bdb4fefa/websockets-13.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b8ac5b46fd798bbbf2ac6620e0437c36a202b08e1f827832c4bf050da081b501", size = 158187 }, + { url = "https://files.pythonhosted.org/packages/39/29/d9df0a1daedebefaeea88fb8071539604df09fd0f1bfb73bf58333aa3eb6/websockets-13.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:46af561eba6f9b0848b2c9d2427086cabadf14e0abdd9fde9d72d447df268418", size = 157626 }, + { url = "https://files.pythonhosted.org/packages/7d/9a/f88e186059f6b89f8bb08461d9fda7a26940b7b8897c7d7f02aead40b7e4/websockets-13.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b5a06d7f60bc2fc378a333978470dfc4e1415ee52f5f0fce4f7853eb10c1e9df", size = 157575 }, + { url = "https://files.pythonhosted.org/packages/cf/e4/ecdb8352ebab2e44c10b9d6f50008f95e30bb0a7ef0e6b66cb475d539d74/websockets-13.0.1-cp311-cp311-win32.whl", hash = "sha256:556e70e4f69be1082e6ef26dcb70efcd08d1850f5d6c5f4f2bcb4e397e68f01f", size = 151779 }, + { url = "https://files.pythonhosted.org/packages/12/40/46967d00640e6c3231b73d310617927a11c91bcc044dd5a0860a3c457c33/websockets-13.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:67494e95d6565bf395476e9d040037ff69c8b3fa356a886b21d8422ad86ae075", size = 152206 }, + { url = "https://files.pythonhosted.org/packages/4e/51/23ed2d239f1c3087c1431d41cfd159865df0bc35bb0c89973e3b6a0fff9b/websockets-13.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f9c9e258e3d5efe199ec23903f5da0eeaad58cf6fccb3547b74fd4750e5ac47a", size = 150953 }, + { url = "https://files.pythonhosted.org/packages/57/8d/814a7ef62b916b0f39108ad2e4d9b4cb0f8c640f8c30202fb63041598ada/websockets-13.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6b41a1b3b561f1cba8321fb32987552a024a8f67f0d05f06fcf29f0090a1b956", size = 148610 }, + { url = "https://files.pythonhosted.org/packages/ad/8b/a378d21124011737e0e490a8a6ef778914b03e50c8d938de2f2170a20dbd/websockets-13.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f73e676a46b0fe9426612ce8caeca54c9073191a77c3e9d5c94697aef99296af", size = 148849 }, + { url = "https://files.pythonhosted.org/packages/46/d2/814a61226af313c1bc289cfe3a10f87bf426b6f2d9df0f927c47afab7612/websockets-13.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f613289f4a94142f914aafad6c6c87903de78eae1e140fa769a7385fb232fdf", size = 158772 }, + { url = "https://files.pythonhosted.org/packages/a1/7e/5987299eb7e131216c9027b05a65f149cbc2bde7c582e694d9eed6ec3d40/websockets-13.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f52504023b1480d458adf496dc1c9e9811df4ba4752f0bc1f89ae92f4f07d0c", size = 157724 }, + { url = "https://files.pythonhosted.org/packages/94/6e/eaf95894042ba8a05a125fe8bcf9ee3572fef6edbcbf49478f4991c027cc/websockets-13.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:139add0f98206cb74109faf3611b7783ceafc928529c62b389917a037d4cfdf4", size = 158152 }, + { url = "https://files.pythonhosted.org/packages/ce/ba/a1315d569cc2dadaafda74a9cea16ab5d68142525937f1994442d969b306/websockets-13.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47236c13be337ef36546004ce8c5580f4b1150d9538b27bf8a5ad8edf23ccfab", size = 158442 }, + { url = "https://files.pythonhosted.org/packages/90/9b/59866695cfd05e785c90932fef3dae4682eb4e06e7076b7c53478f25faad/websockets-13.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c44ca9ade59b2e376612df34e837013e2b273e6c92d7ed6636d0556b6f4db93d", size = 157823 }, + { url = "https://files.pythonhosted.org/packages/9b/47/20af68a313b6453d2d094ccc497b7232e8475175d234e3e5bef5088521e5/websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9bbc525f4be3e51b89b2a700f5746c2a6907d2e2ef4513a8daafc98198b92237", size = 157818 }, + { url = "https://files.pythonhosted.org/packages/f8/bb/60aaedc80e388e978617dda1ff38788780c6b0f6e462b85368cb934131a5/websockets-13.0.1-cp312-cp312-win32.whl", hash = "sha256:3624fd8664f2577cf8de996db3250662e259bfbc870dd8ebdcf5d7c6ac0b5185", size = 151785 }, + { url = "https://files.pythonhosted.org/packages/16/2e/e47692f569e1be2e66c1dbc5e85ea4d2cc93b80027fbafa28ae8b0dee52c/websockets-13.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0513c727fb8adffa6d9bf4a4463b2bade0186cbd8c3604ae5540fae18a90cb99", size = 152214 }, + { url = "https://files.pythonhosted.org/packages/46/37/d8ef4b68684d1fa368a5c64be466db07fc58b68163bc2496db2d4cc208ff/websockets-13.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1ee4cc030a4bdab482a37462dbf3ffb7e09334d01dd37d1063be1136a0d825fa", size = 150962 }, + { url = "https://files.pythonhosted.org/packages/95/49/78aeb3af08ec9887a9065e85cef9d7e199d6c6261fcd39eec087f3a62328/websockets-13.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dbb0b697cc0655719522406c059eae233abaa3243821cfdfab1215d02ac10231", size = 148621 }, + { url = "https://files.pythonhosted.org/packages/31/0d/dc9b7cec8deaee452092a631ccda894bd7098859f71dd7639b4b5b9c615c/websockets-13.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:acbebec8cb3d4df6e2488fbf34702cbc37fc39ac7abf9449392cefb3305562e9", size = 148853 }, + { url = "https://files.pythonhosted.org/packages/16/bf/734cbd815d7bc94cffe35c934f4e08b619bf3b47df1c6c7af21c1d35bcfe/websockets-13.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63848cdb6fcc0bf09d4a155464c46c64ffdb5807ede4fb251da2c2692559ce75", size = 158741 }, + { url = "https://files.pythonhosted.org/packages/af/9b/756f89b12fee8931785531a314e6f087b21774a7f8c60878e597c684f91b/websockets-13.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:872afa52a9f4c414d6955c365b6588bc4401272c629ff8321a55f44e3f62b553", size = 157690 }, + { url = "https://files.pythonhosted.org/packages/d3/37/31f97132d2262e666b797e250879ca833eab55115f88043b3952a2840eb8/websockets-13.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e70fec7c54aad4d71eae8e8cab50525e899791fc389ec6f77b95312e4e9920", size = 158132 }, + { url = "https://files.pythonhosted.org/packages/41/ce/59c8d44e148c002fec506a9527504fb4281676e2e75c2ee5a58180f1b99a/websockets-13.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e82db3756ccb66266504f5a3de05ac6b32f287faacff72462612120074103329", size = 158490 }, + { url = "https://files.pythonhosted.org/packages/1a/74/5b31ce0f318b902c0d70c031f8e1228ba1a4d95a46b2a24a2a5ac17f9cf0/websockets-13.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4e85f46ce287f5c52438bb3703d86162263afccf034a5ef13dbe4318e98d86e7", size = 157879 }, + { url = "https://files.pythonhosted.org/packages/0d/a7/6eac4f04177644bbc98deb98d11770cc7fbc216f6f67ab187c150540fd52/websockets-13.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3fea72e4e6edb983908f0db373ae0732b275628901d909c382aae3b592589f2", size = 157873 }, + { url = "https://files.pythonhosted.org/packages/72/f6/b8b30a3b134dfdb4ccd1694befa48fddd43783957c988a1dab175732af33/websockets-13.0.1-cp313-cp313-win32.whl", hash = "sha256:254ecf35572fca01a9f789a1d0f543898e222f7b69ecd7d5381d8d8047627bdb", size = 151782 }, + { url = "https://files.pythonhosted.org/packages/3e/88/d94ccc006c69583168aa9dd73b3f1885c8931f2c676f4bdd8cbfae91c7b6/websockets-13.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca48914cdd9f2ccd94deab5bcb5ac98025a5ddce98881e5cce762854a5de330b", size = 152212 }, + { url = "https://files.pythonhosted.org/packages/ae/d8/9d0e5c836f89147aa769b72e2d82217ae1c17ffd5f375de8d785e1e16870/websockets-13.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:faef9ec6354fe4f9a2c0bbb52fb1ff852effc897e2a4501e25eb3a47cb0a4f89", size = 148629 }, + { url = "https://files.pythonhosted.org/packages/9c/ff/005a440db101d298b42cc7565579ed55a7e12ccc0c6ea0491e53bb073930/websockets-13.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:03d3f9ba172e0a53e37fa4e636b86cc60c3ab2cfee4935e66ed1d7acaa4625ad", size = 148863 }, + { url = "https://files.pythonhosted.org/packages/9f/06/44d7c7d48e0beaecbacaf0020eafccd490741e496622da6b2a5626fe6689/websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d450f5a7a35662a9b91a64aefa852f0c0308ee256122f5218a42f1d13577d71e", size = 150226 }, + { url = "https://files.pythonhosted.org/packages/48/6f/861ba99aa3c5cb54412c3870d5549e466d82d2f7c440b435e23ca6496865/websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f55b36d17ac50aa8a171b771e15fbe1561217510c8768af3d546f56c7576cdc", size = 149833 }, + { url = "https://files.pythonhosted.org/packages/8d/a0/9fb50648f69ed341e30096356a815c89c4f9daef24a32e9754dbdc3de8a8/websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14b9c006cac63772b31abbcd3e3abb6228233eec966bf062e89e7fa7ae0b7333", size = 149778 }, + { url = "https://files.pythonhosted.org/packages/f1/ba/48b5b8343e6f62a8a809ffe987d4d7c911cedcb1b8353f3da615f2609893/websockets-13.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b79915a1179a91f6c5f04ece1e592e2e8a6bd245a0e45d12fd56b2b59e559a32", size = 152259 }, + { url = "https://files.pythonhosted.org/packages/fd/bd/d34c4b7918453506d2149208b175368738148ffc4ba256d7fd8708956732/websockets-13.0.1-py3-none-any.whl", hash = "sha256:b80f0c51681c517604152eb6a572f5a9378f877763231fddb883ba2f968e8817", size = 145262 }, ] [[package]]