diff --git a/docs/coefficients.ipynb b/docs/coefficients.ipynb new file mode 100644 index 0000000..5703ac2 --- /dev/null +++ b/docs/coefficients.ipynb @@ -0,0 +1,197 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pennylane.numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from qml_essentials.model import Model\n", + "from qml_essentials.coefficients import Coefficients" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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l4kTJ2rixImXPa6qqkqdnZ1qaGhQZWWlJGnr1q0KBoORQDIczc3NkqT8fL4EAQDAOYY8bTR9+nT91V/9lR555BHt3LlTf/rTn7R06VJ97WtfU0FBgSTp6NGjmjZtmnbu3ClJ+vTTT/WDH/xADQ0N+stf/qL/+I//0MKFC3X77berpKTEiDIBAIAFGTbn5Ve/+pWmTZumu+++W1/96ld122236aWXXor8vre3VwcOHNDp06clSWlpafrjH/+oe++9V9OmTdOTTz6pv/3bv9Xvf/97o0oEAAAWZAuFQiGzi4gmn88nl8slr9fLjBgAACxiJN/frG0EAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAsZUQLM1pBeGCwz+czuRIAADBc4e/t4Qz+T7jw0tXVJUlyu90mVwIAAEaqq6tLLpfrksck3NpGwWBQx44dU2Zmpmw2W1Rf2+fzye12q7W1lXWTRonPMrr4PKOLzzO6+DyjJ5E/y1AopK6uLhUUFMhuv3RXS8JdebHb7SosLDT0PZxOZ8L9R2MWPsvo4vOMLj7P6OLzjJ5E/Swvd8UljIZdAABgKYQXAABgKYSXEXA4HFq+fLkcDofZpVgen2V08XlGF59ndPF5Rg+f5TkJ17ALAAASG1deAACApRBeAACApRBeAACApRBeAACApRBehmnlypWaPHmy0tPTNWfOHO3cudPskixr+/btuv/++1VQUCCbzab169ebXZJl1dXVafbs2crMzFROTo5qamp04MABs8uyrBdeeEElJSWRAWBVVVV66623zC4rITz77LOy2Wx64oknzC7Fkp555hnZbLYB27Rp08wuyzSEl2F47bXXtGzZMi1fvlyNjY0qLS3V3Llz1dHRYXZpluT3+1VaWqqVK1eaXYrlbdu2TUuWLNF7772nzZs3q7e3V/fee6/8fr/ZpVlSYWGhnn32WTU0NGjXrl36yle+ogceeEB79+41uzRL++CDD/Tiiy+qpKTE7FIs7YYbblBbW1tke/fdd80uyTQ8Kj0Mc+bM0ezZs/X8889LOrd+ktvt1re+9S099dRTJldnbTabTevWrVNNTY3ZpSSE48ePKycnR9u2bdPtt99udjkJITs7Wz/60Y+0ePFis0uxpO7ublVUVOinP/2p/vmf/1llZWV67rnnzC7Lcp555hmtX79ezc3NZpcSF7jychk9PT1qaGhQdXV1ZJ/dbld1dbXq6+tNrAz4Iq/XK+ncFy5Gp7+/X2vXrpXf71dVVZXZ5VjWkiVLdN999w34fyiuzCeffKKCggJdc801evDBB9XS0mJ2SaZJuIUZo+3EiRPq7+9Xbm7ugP25ubnav3+/SVUBXxQMBvXEE0/o1ltv1cyZM80ux7J2796tqqoqnT17VuPHj9e6des0Y8YMs8uypLVr16qxsVEffPCB2aVY3pw5c7R69WpNnTpVbW1t+t73vqcvf/nL2rNnjzIzM80uL+YIL0CCWLJkifbs2ZPU98GjYerUqWpubpbX69VvfvMbLVq0SNu2bSPAjFBra6sef/xxbd68Wenp6WaXY3nz5s2L/HNJSYnmzJmj4uJi/frXv07KW5qEl8uYMGGCUlJS1N7ePmB/e3u78vLyTKoKGGjp0qXasGGDtm/frsLCQrPLsbS0tDRde+21kqTKykp98MEH+vGPf6wXX3zR5MqspaGhQR0dHaqoqIjs6+/v1/bt2/X8888rEAgoJSXFxAqtLSsrS9dff70OHjxodimmoOflMtLS0lRZWaktW7ZE9gWDQW3ZsoX74DBdKBTS0qVLtW7dOm3dulVTpkwxu6SEEwwGFQgEzC7Dcu6++27t3r1bzc3Nke3GG2/Ugw8+qObmZoLLKHV3d+vTTz9Vfn6+2aWYgisvw7Bs2TItWrRIN954o2666SY999xz8vv9euihh8wuzZK6u7sH/G3hs88+U3Nzs7Kzs1VUVGRiZdazZMkSrVmzRm+88YYyMzPl8XgkSS6XS2PHjjW5Ouupra3VvHnzVFRUpK6uLq1Zs0bvvPOONm3aZHZplpOZmfmF3qtx48bp6quvpifrCvzDP/yD7r//fhUXF+vYsWNavny5UlJStGDBArNLMwXhZRjmz5+v48eP6+mnn5bH41FZWZk2btz4hSZeDM+uXbt01113RX5etmyZJGnRokVavXq1SVVZ0wsvvCBJuvPOOwfs//nPf65vfvObsS/I4jo6OrRw4UK1tbXJ5XKppKREmzZt0j333GN2aUhyR44c0YIFC/T5559r4sSJuu222/Tee+9p4sSJZpdmCua8AAAAS6HnBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWMr/B5afAZIqy3W2AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "class Model_Fct:\n", + " def __init__(self, c, f):\n", + " self.c = c\n", + " self.f = f\n", + " self.degree = max(f)\n", + "\n", + " def __call__(self, inputs, **kwargs):\n", + " return np.sum([c * np.cos(inputs * f) for f, c in zip(self.f, self.c)], axis=0)\n", + "\n", + "freqs = [1,2,3]\n", + "coeffs = [1,1,1]\n", + "\n", + "fs = max(freqs) * 2 + 1\n", + "model_fct = Model_Fct(coeffs,freqs)\n", + "\n", + "x = np.arange(0,2 * np.pi, 2 * np.pi/fs)\n", + "\n", + "out = model_fct(x)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, out)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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J+3+58yZw5M1RqyVM6xX7Fir2LFWsWOtYjdZa3WyMyLHcAErAAAwRYwAAABTp3WMuFwuVVdXy+VyWY8S91grZ1iv2LFWsWOtYsdaxS4e1mpaXMAKAABmrtP6zAgAALBHjAAAAFPECAAAMEWMAAAAU8TI51xxxRVatGiRUlJSNH/+fF133XU6fPiw9Vhx58CBA7r++uu1ePFizZo1S0uWLFF1dbWGh4etR4tL9957r1asWKHU1FSdffbZ1uPEldraWmVnZyslJUXLly9XS0uL9Uhx6YUXXtCaNWu0YMECJSQk6Mknn7QeKW7V1NTokksuUVpams455xytXbtW+/fvtx4rLm3dulUXXXRR9MPOioqK9Pe//91kFmLkc1atWqU//elP2r9/v/7yl7/ovffe01VXXWU9Vtx55513FA6H9eCDD2rfvn164IEHVFdXp9tvv916tLg0PDysq6++WuvWrbMeJa40NDTI7/erurpabW1tys3NVXFxsbq7u61HizuDg4PKzc1VbW2t9Shx7/nnn9f69ev18ssv69lnn9Wnn36qyy+/XIODg9ajxZ1zzz1XGzZsUGtrq1577TV95zvf0ZVXXql9+/ZN/TARjGnPnj2RhISEyPDwsPUoce++++6LLF682HqMuLZ9+/ZIenq69Rhxo7CwMLJ+/fro16FQKLJgwYJITU2N4VTxT1Jk9+7d1mNMG93d3RFJkeeff956lGlh7ty5kYceemjKH5czI2M4evSoHnvsMa1YsUJnnnmm9Thxr6+vTxkZGdZjYJoYHh5Wa2urvF5vdFtiYqK8Xq+am5sNJ8NM09fXJ0n8+/QlQqGQdu3apcHBQRUVFU354xMjX3DrrbfqrLPO0le+8hV1dHRoz5491iPFvXfffVdbtmzRz3/+c+tRME309vYqFArJ7XaP2O52uxUMBo2mwkwTDod1880361vf+paWLVtmPU5cevPNNzV79my5XC7dcMMN2r17t3JycqZ8jhkfI7fddpsSEhJOenvnnXei+99yyy16/fXX9cwzzygpKUmlpaWKnCYfUut0rSTp0KFDWr16ta6++mqVl5cbTT71xrNWAKbW+vXrtXfvXu3atct6lLh14YUXqr29Xa+88orWrVunsrIyvfXWW1M+x4z/OPienh79+9//Puk+559/vpKTk0/YfvDgQXk8Hr300ksmp62mmtO1Onz4sFauXKlvfvOb2rFjhxITZ3zbRo3nebVjxw7dfPPN+vDDDyd5uvg3PDys1NRUPf7441q7dm10e1lZmT788EPOSJ5EQkKCdu/ePWLdcKKKigrt2bNHL7zwghYvXmw9zrTh9Xq1ZMkSPfjgg1P6uGdM6aMZmDdvnubNmzeuY8PhsCRpaGhoIkeKW07W6tChQ1q1apXy8/O1ffv20ypEpFN7XkFKTk5Wfn6+AoFA9JdqOBxWIBBQRUWF7XCY1iKRiH7xi19o9+7dampqIkQcCofDJr/zZnyMxOqVV17Rq6++qm9/+9uaO3eu3nvvPf3mN7/RkiVLTouzIk4cOnRIK1eu1HnnnaeNGzeqp6cn+r2srCzDyeJTR0eHjh49qo6ODoVCIbW3t0uSLrjgAs2ePdt2OEN+v19lZWUqKChQYWGhNm/erMHBQfl8PuvR4s5HH32kd999N/r1+++/r/b2dmVkZGjRokWGk8Wf9evXa+fOndqzZ4/S0tKi1yClp6dr1qxZxtPFl8rKSn3/+9/XokWLNDAwoJ07d6qpqUlPP/301A8z5e/fiVNvvPFGZNWqVZGMjIyIy+WKZGdnR2644YbIwYMHrUeLO9u3b49IGvWGE5WVlY26Vs8995z1aOa2bNkSWbRoUSQ5OTlSWFgYefnll61HikvPPffcqM+hsrIy69Hizlj/Nm3fvt16tLjz05/+NHLeeedFkpOTI/PmzYt897vfjTzzzDMms8z4a0YAAEB8O71e6AcAAHGHGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACm/h+wLEiZOCkI5gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X = np.fft.fft(out)\n", + "\n", + "X_freq = np.fft.fftfreq(X.size, 1/fs)\n", + "\n", + "if X.size % 2 == 0:\n", + " X = np.delete(X, len(X) // 2)\n", + " X_freq = np.delete(X_freq, len(X_freq) // 2)\n", + " \n", + "print(len(X))\n", + "X_shift = np.fft.fftshift(X)\n", + "X_freq_shift = np.fft.fftshift(X_freq)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.stem(X_freq_shift, np.abs(X_shift)/X_shift.size)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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jAAAAFPECAAAMEWMAAAAU47+1V4rRz8ktqenx3gSAAAQr6O/t7/qw94nRYz09vZKknw+n/EkAADAqd7eXqWnp4/4/Unxb9NEIhEdOnRIaWlpSkgYu39UqKenRz6fT21tbfybN1+BXTnDvuLHruLHruLHruI3nruKRqPq7e3VvHnzlJg48itDJsUzI4mJiTrzzDPH7fZnzJjBgzVO7MoZ9hU/dhU/dhU/dhW/8drViZ4ROYoXsAIAAFPECAAAMHVKx4jH41FlZaU8Ho/1KK7HrpxhX/FjV/FjV/FjV/Fzw64mxQtYAQDA1HVKPzMCAADsESMAAMAUMQIAAEwRIwAAwBQx8gWXX365FixYoJSUFM2dO1fXXnutDh06ZD2W6+zfv1/XXXedFi5cqGnTpmnRokWqrKzUwMCA9WiudM899+jiiy9WamqqZs6caT2Oq1RXVys7O1spKSlasmSJdu/ebT2SK7344otasWKF5s2bp4SEBD3zzDPWI7lWVVWVLrroIqWlpWnOnDlauXKl9u3bZz2WK23evFkXXHBB7MPOioqK9I9//MNkFmLkC5YtW6Y///nP2rdvn/7yl7/o/fff15VXXmk9luu8++67ikQieuihh7R371498MADqqmp0W9+8xvr0VxpYGBAV111lVavXm09iqvU1dUpGAyqsrJSzc3Nys3NVXFxsTo6OqxHc52+vj7l5uaqurraehTXe+GFF7RmzRq98soreu655/TZZ5/psssuU19fn/VornPmmWdq3bp1ampq0uuvv67vfve7uuKKK7R3796JHyaKEe3cuTOakJAQHRgYsB7F9e67777owoULrcdwta1bt0bT09Otx3CNwsLC6Jo1a2JfDw4ORufNmxetqqoynMr9JEV37NhhPcak0dHREZUUfeGFF6xHmRRmzZoVffjhhyf8fnlmZARHjhzR448/rosvvlinn3669Tiu193drYyMDOsxMEkMDAyoqalJfr8/diwxMVF+v1+NjY2Gk2Gq6e7uliT++/QVBgcHtX37dvX19amoqGjC758Y+ZJbbrlFZ5xxhr72ta+ptbVVO3futB7J9d577z1t2rRJv/zlL61HwSTR1dWlwcFBeb3eIce9Xq/C4bDRVJhqIpGIbrrpJn3rW9/S4sWLrcdxpbfeekvTp0+Xx+PR9ddfrx07dignJ2fC55jyMXLrrbcqISHhhJd33303dv7NN9+sN954Q7t27VJSUpJKSkoUPUU+pNbpriTp4MGDWr58ua666iqVlZUZTT7xRrMrABNrzZo12rNnj7Zv3249imude+65amlp0auvvqrVq1ertLRUb7/99oTPMeU/Dr6zs1P/+c9/TnjO2WefreTk5OOOHzhwQD6fTy+//LLJ01YTzemuDh06pKVLl+qb3/ymtm3bpsTEKd+2MaN5XG3btk033XSTPvroo3Gezv0GBgaUmpqqp556SitXrowdLy0t1UcffcQzkieQkJCgHTt2DNkbjldeXq6dO3fqxRdf1MKFC63HmTT8fr8WLVqkhx56aELv97QJvTcDs2fP1uzZs0d13UgkIknq7+8fy5Fcy8muDh48qGXLlik/P19bt249pUJEOrnHFaTk5GTl5+crFArFfqlGIhGFQiGVl5fbDodJLRqN6le/+pV27NihhoYGQsShSCRi8jtvysdIvF599VW99tpr+va3v61Zs2bp/fff12233aZFixadEs+KOHHw4EEtXbpUZ511ltavX6/Ozs7Y97Kysgwnc6fW1lYdOXJEra2tGhwcVEtLiyTpnHPO0fTp022HMxQMBlVaWqqCggIVFhZq48aN6uvrUyAQsB7NdT7++GO99957sa8/+OADtbS0KCMjQwsWLDCczH3WrFmjJ554Qjt37lRaWlrsNUjp6emaNm2a8XTuUlFRoR/84AdasGCBent79cQTT6ihoUHPPvvsxA8z4e/fcak333wzumzZsmhGRkbU4/FEs7Ozo9dff330wIED1qO5ztatW6OShr3geKWlpcPu6vnnn7cezdymTZuiCxYsiCYnJ0cLCwujr7zyivVIrvT8888P+xgqLS21Hs11Rvpv09atW61Hc52f//zn0bPOOiuanJwcnT17dvR73/tedNeuXSazTPnXjAAAAHc7tf7QDwAAXIcYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKb+H8vX8do1CVAzAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "coeffs, freqs = Coefficients.get_spectrum(model_fct, mfs=1, mts=2, trim=False, shift=True)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.stem(freqs[1:], np.abs(coeffs[1:]))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = Model(\n", + " n_qubits=4,\n", + " n_layers=1,\n", + " circuit_type=\"Circuit_19\",\n", + " random_seed=1000\n", + ")\n", + "\n", + "coeffs, freqs = Coefficients.get_spectrum(model, mfs=1, mts=1\n", + ", shift=True)\n", + "\n", + "psd = Coefficients.get_psd(coeffs)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.stem(freqs, psd)\n", + "#logy\n", + "ax.set_yscale('log')\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/coefficients.md b/docs/coefficients.md index 55c8070..cca7c13 100644 --- a/docs/coefficients.md +++ b/docs/coefficients.md @@ -1,7 +1,7 @@ # Coefficients A characteristic property of any Fourier model are its coefficients. -Our package can, given a model, calculate the corresponding coefficients by utilizing the [Pennylane Fourier Coefficients](https://docs.pennylane.ai/en/stable/_modules/pennylane/fourier/coefficients.html) method. +Our package can, given a model, calculate the corresponding coefficients. In the simplest case, this could look as follows: ```python @@ -9,10 +9,114 @@ from qml_essentials.model import Model from qml_essentials.coefficients import Coefficients model = Model( - n_qubits=2 - n_layers=1 - circuit_type="HardwareEfficient", + n_qubits=2, + n_layers=1, + circuit_type="Hardware_Efficient", ) -coeffs = Coefficients.sample_coefficients(model) -``` \ No newline at end of file +coeffs = Coefficients.get_spectrum(model) +``` + +But wait! There is much more to this. Let's keep on reading if you're curious :eyes:. + +## Detailled Explanation + +To visualize what happens, let's create a very simplified Fourier model +```python +class Model_Fct: + def __init__(self, c, f): + self.c = c + self.f = f + self.degree = max(f) + + def __call__(self, inputs, **kwargs): + return np.sum([c * np.cos(inputs * f) for f, c in zip(self.f, self.c)], axis=0) +``` + +This model takes a vector of coefficients and frequencies on instantiation. +When called, these coefficients and frequencies are used to compute the output of the model, which is the sum of sine functions determined by the length of the vectors. +Let's try that for just two frequencies: + +```python +freqs = [1,3] +coeffs = [1,1] + +fs = max(freqs) * 2 + 1 +model_fct = Model_Fct(coeffs,freqs) + +x = np.arange(0,2 * np.pi, 2 * np.pi/fs) +out = model_fct(x) +``` + +We can now calculate the [Fast Fourier Transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform) of our model: +```python +X = np.fft.fft(out) / len(out) +X_shift = np.fft.fftshift(X) +X_freq = np.fft.fftfreq(X.size, 1/fs) +X_freq_shift = np.fft.fftshift(X_freq) +``` +Note that calling `np.fft.fftshift` is not required from a technical point of view, but makes our spectrum nicely zero-centered and projected correctly. + +![Model Fct Spectr](model_fct_spectr_light.png#only-light) +![Model Fct Spectr](model_fct_spectr_dark.png#only-dark) + +The same can be done with our framework, with a neat one-liner: +```python +X_shift, X_freq_shift = Coefficients.get_spectrum(model_fct, shift=True) +``` + +![Model Fct Spectr Ours](model_fct_spectr_ours_light.png#only-light) +![Model Fct Spectr Ours](model_fct_spectr_ours_dark.png#only-dark) + +Note, that applying the shift can be controlled with the optional `shift` argument. + +## Increasing the Resolution + +You might have noticed that we choose our sampling frequency `fs` in such a way, that it just fulfills the [Nyquist criterium](https://en.wikipedia.org/wiki/Nyquist_frequency). +Also the number of samples `x` are just enough to sufficiently represent our function. +In such a simplified scenario, this is fine, but there are cases, where we want to have more information both in the time and frequency domain. +Therefore, two additional arguments exist in the `get_spectrum` method: +- `mfs`: The multiplier for the highest frequency. Increasing this will increase the width of the spectrum +- `mts`: The multiplier for the number of time samples. Increasing this will increase the resolution of the time domain and therefore "add" frequencies in between our original frequencies. +- `trim`: Whether to remove the Nyquist frequency if spectrum is even. This will result in a symmetric spectrum + +```python +X_shift, X_freq_shift = Coefficients.get_spectrum(model_fct, mfs=2, mts=3, shift=True) +``` + +![Model Fct Spectr OS](model_fct_spectr_os_light.png#only-light) +![Model Fct Spectr OS](model_fct_spectr_os_dark.png#only-dark) + +Note that, as the frequencies change with the `mts` argument, we have to take that into account when calculating the frequencies with the last call. + +Feel free to checkout our [jupyter notebook](https://github.com/quantum-machine-learning/qml_essentials/blob/main/docs/notebooks/coefficients.ipynb) if you would like to play around with this. + +A sidenote on the performance; Increasing the `mts` value effectively increases the input lenght that goes into the model. +This means that `mts=2` will require twice the time to compute, which will be very noticable when running noisy simulations. + +## Power spectral density + +In some cases it can be useful to get the [power spectral density (PSD)](https://en.wikipedia.org/wiki/Spectral_density). +As calculation of this metric might differ between the different research domains, we included a function to get the PSD of a given spectrum using the following formula: + +$$ +PSD = \frac{2 (\mathrm{Re}(F)^2+\mathrm{Im}(F)^2)}{n_\text{samples}^2} +$$ + +where $F$ is the spectrum and $n_\text{samples}$ the length of the input vector. + +```python +model = Model( + n_qubits=4, + n_layers=1, + circuit_type="Circuit_19", + random_seed=1000 +) + +coeffs, freqs = Coefficients.get_spectrum(model, mfs=1, mts=1, shift=True) + +psd = Coefficients.get_psd(coeffs) +``` + +![Model PSD](model_psd_light.png#only-light) +![Model PSD](model_psd_dark.png#only-dark) \ No newline at end of file diff --git a/docs/model_fct_dark.png b/docs/model_fct_dark.png new file mode 100644 index 0000000..363fe97 Binary files /dev/null and b/docs/model_fct_dark.png differ diff --git a/docs/model_fct_light.png b/docs/model_fct_light.png new file mode 100644 index 0000000..5fccdb2 Binary files /dev/null and b/docs/model_fct_light.png differ diff --git a/docs/model_fct_spectr_dark.png b/docs/model_fct_spectr_dark.png new file mode 100644 index 0000000..c857f3b Binary files /dev/null and b/docs/model_fct_spectr_dark.png differ diff --git a/docs/model_fct_spectr_light.png b/docs/model_fct_spectr_light.png new file mode 100644 index 0000000..97c7dd9 Binary files /dev/null and b/docs/model_fct_spectr_light.png differ diff --git a/docs/model_fct_spectr_os_dark.png b/docs/model_fct_spectr_os_dark.png new file mode 100644 index 0000000..e3df2c8 Binary files /dev/null and b/docs/model_fct_spectr_os_dark.png differ diff --git a/docs/model_fct_spectr_os_light.png b/docs/model_fct_spectr_os_light.png new file mode 100644 index 0000000..0ffca9e Binary files /dev/null and b/docs/model_fct_spectr_os_light.png differ diff --git a/docs/model_fct_spectr_ours_dark.png b/docs/model_fct_spectr_ours_dark.png new file mode 100644 index 0000000..d9cc6cf Binary files /dev/null and b/docs/model_fct_spectr_ours_dark.png differ diff --git a/docs/model_fct_spectr_ours_light.png b/docs/model_fct_spectr_ours_light.png new file mode 100644 index 0000000..d3f6357 Binary files /dev/null and b/docs/model_fct_spectr_ours_light.png differ diff --git a/docs/model_psd_dark.png b/docs/model_psd_dark.png new file mode 100644 index 0000000..536d4ac Binary files /dev/null and b/docs/model_psd_dark.png differ diff --git a/docs/model_psd_light.png b/docs/model_psd_light.png new file mode 100644 index 0000000..c930ae4 Binary files /dev/null and b/docs/model_psd_light.png differ diff --git a/poetry.lock b/poetry.lock index 69b9cfd..4db4aff 100644 --- a/poetry.lock +++ b/poetry.lock @@ -37,6 +37,21 @@ files = [ astroid = ["astroid (>=2,<4)"] test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "astunparse" +version = "1.6.3" +description = "An AST unparser for Python" +optional = false +python-versions = "*" +files = [ + {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, + {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, +] + +[package.dependencies] +six = ">=1.6.1,<2.0" +wheel = ">=0.23.0,<1.0" + [[package]] name = "attrs" version = "23.2.0" @@ -90,17 +105,17 @@ tests = ["coverage", "numpy", "pytest", "pytest-cov"] [[package]] name = "babel" -version = "2.16.0" +version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" files = [ - {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, - {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, ] [package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] [[package]] name = "black" @@ -150,13 +165,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "cachetools" -version = "5.5.0" +version = "5.5.1" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, - {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, + {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, + {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, ] [[package]] @@ -187,13 +202,13 @@ ujson = ["ujson (>=5.7.0)"] [[package]] name = "certifi" -version = "2024.12.14" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, - {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] @@ -504,73 +519,74 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.10" +version = "7.6.12" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, - {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, - {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, - {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, - {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, - {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, - {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, - {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, - {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, - {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, - {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, - {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, - {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, - {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, - {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, - {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, + {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, + {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, + {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, + {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, + {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, + {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, + {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, + {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, + {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, + {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, + {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, + {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, + {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, + {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, + {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, + {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, + {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, ] [package.extras] @@ -593,37 +609,37 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "debugpy" -version = "1.8.11" +version = "1.8.12" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2b26fefc4e31ff85593d68b9022e35e8925714a10ab4858fb1b577a8a48cb8cd"}, - {file = "debugpy-1.8.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61bc8b3b265e6949855300e84dc93d02d7a3a637f2aec6d382afd4ceb9120c9f"}, - {file = "debugpy-1.8.11-cp310-cp310-win32.whl", hash = "sha256:c928bbf47f65288574b78518449edaa46c82572d340e2750889bbf8cd92f3737"}, - {file = "debugpy-1.8.11-cp310-cp310-win_amd64.whl", hash = "sha256:8da1db4ca4f22583e834dcabdc7832e56fe16275253ee53ba66627b86e304da1"}, - {file = "debugpy-1.8.11-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:85de8474ad53ad546ff1c7c7c89230db215b9b8a02754d41cb5a76f70d0be296"}, - {file = "debugpy-1.8.11-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ffc382e4afa4aee367bf413f55ed17bd91b191dcaf979890af239dda435f2a1"}, - {file = "debugpy-1.8.11-cp311-cp311-win32.whl", hash = "sha256:40499a9979c55f72f4eb2fc38695419546b62594f8af194b879d2a18439c97a9"}, - {file = "debugpy-1.8.11-cp311-cp311-win_amd64.whl", hash = "sha256:987bce16e86efa86f747d5151c54e91b3c1e36acc03ce1ddb50f9d09d16ded0e"}, - {file = "debugpy-1.8.11-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:84e511a7545d11683d32cdb8f809ef63fc17ea2a00455cc62d0a4dbb4ed1c308"}, - {file = "debugpy-1.8.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce291a5aca4985d82875d6779f61375e959208cdf09fcec40001e65fb0a54768"}, - {file = "debugpy-1.8.11-cp312-cp312-win32.whl", hash = "sha256:28e45b3f827d3bf2592f3cf7ae63282e859f3259db44ed2b129093ca0ac7940b"}, - {file = "debugpy-1.8.11-cp312-cp312-win_amd64.whl", hash = "sha256:44b1b8e6253bceada11f714acf4309ffb98bfa9ac55e4fce14f9e5d4484287a1"}, - {file = "debugpy-1.8.11-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:8988f7163e4381b0da7696f37eec7aca19deb02e500245df68a7159739bbd0d3"}, - {file = "debugpy-1.8.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c1f6a173d1140e557347419767d2b14ac1c9cd847e0b4c5444c7f3144697e4e"}, - {file = "debugpy-1.8.11-cp313-cp313-win32.whl", hash = "sha256:bb3b15e25891f38da3ca0740271e63ab9db61f41d4d8541745cfc1824252cb28"}, - {file = "debugpy-1.8.11-cp313-cp313-win_amd64.whl", hash = "sha256:d8768edcbeb34da9e11bcb8b5c2e0958d25218df7a6e56adf415ef262cd7b6d1"}, - {file = "debugpy-1.8.11-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:ad7efe588c8f5cf940f40c3de0cd683cc5b76819446abaa50dc0829a30c094db"}, - {file = "debugpy-1.8.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:189058d03a40103a57144752652b3ab08ff02b7595d0ce1f651b9acc3a3a35a0"}, - {file = "debugpy-1.8.11-cp38-cp38-win32.whl", hash = "sha256:32db46ba45849daed7ccf3f2e26f7a386867b077f39b2a974bb5c4c2c3b0a280"}, - {file = "debugpy-1.8.11-cp38-cp38-win_amd64.whl", hash = "sha256:116bf8342062246ca749013df4f6ea106f23bc159305843491f64672a55af2e5"}, - {file = "debugpy-1.8.11-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:654130ca6ad5de73d978057eaf9e582244ff72d4574b3e106fb8d3d2a0d32458"}, - {file = "debugpy-1.8.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23dc34c5e03b0212fa3c49a874df2b8b1b8fda95160bd79c01eb3ab51ea8d851"}, - {file = "debugpy-1.8.11-cp39-cp39-win32.whl", hash = "sha256:52d8a3166c9f2815bfae05f386114b0b2d274456980d41f320299a8d9a5615a7"}, - {file = "debugpy-1.8.11-cp39-cp39-win_amd64.whl", hash = "sha256:52c3cf9ecda273a19cc092961ee34eb9ba8687d67ba34cc7b79a521c1c64c4c0"}, - {file = "debugpy-1.8.11-py2.py3-none-any.whl", hash = "sha256:0e22f846f4211383e6a416d04b4c13ed174d24cc5d43f5fd52e7821d0ebc8920"}, - {file = "debugpy-1.8.11.tar.gz", hash = "sha256:6ad2688b69235c43b020e04fecccdf6a96c8943ca9c2fb340b8adc103c655e57"}, + {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"}, + {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"}, + {file = "debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c"}, + {file = "debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9"}, + {file = "debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5"}, + {file = "debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7"}, + {file = "debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb"}, + {file = "debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1"}, + {file = "debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498"}, + {file = "debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06"}, + {file = "debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d"}, + {file = "debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969"}, + {file = "debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f"}, + {file = "debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9"}, + {file = "debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180"}, + {file = "debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c"}, + {file = "debugpy-1.8.12-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:b0232cd42506d0c94f9328aaf0d1d0785f90f87ae72d9759df7e5051be039738"}, + {file = "debugpy-1.8.12-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9af40506a59450f1315168d47a970db1a65aaab5df3833ac389d2899a5d63b3f"}, + {file = "debugpy-1.8.12-cp38-cp38-win32.whl", hash = "sha256:5cc45235fefac57f52680902b7d197fb2f3650112379a6fa9aa1b1c1d3ed3f02"}, + {file = "debugpy-1.8.12-cp38-cp38-win_amd64.whl", hash = "sha256:557cc55b51ab2f3371e238804ffc8510b6ef087673303890f57a24195d096e61"}, + {file = "debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41"}, + {file = "debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a"}, + {file = "debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018"}, + {file = "debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069"}, + {file = "debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6"}, + {file = "debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce"}, ] [[package]] @@ -637,6 +653,22 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "diastatic-malt" +version = "2.15.2" +description = "A library for Python operator overloading" +optional = false +python-versions = ">=3.9" +files = [ + {file = "diastatic-malt-2.15.2.tar.gz", hash = "sha256:7eb90d8c30b7ff16b4e84c3a65de2ff7f5b7b9d0f5cdea23918e747ff7fb5320"}, + {file = "diastatic_malt-2.15.2-py3-none-any.whl", hash = "sha256:85429257b356030f101c31b2c7d506c4829f21bd865aed796766f900d7908407"}, +] + +[package.dependencies] +astunparse = "*" +gast = "*" +termcolor = "*" + [[package]] name = "distlib" version = "0.3.9" @@ -664,13 +696,13 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -693,18 +725,18 @@ tomli = ">=2.0.1,<3" [[package]] name = "filelock" -version = "3.16.1" +version = "3.17.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, + {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, + {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2)"] [[package]] @@ -725,61 +757,61 @@ pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "fonttools" -version = "4.55.3" +version = "4.56.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, - {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, - {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, - {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, - {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, - {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, - {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, - {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, - {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, - {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, - {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, - {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, - {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, - {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, - {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, - {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, - {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, - {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, - {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, - {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, - {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, - {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, - {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, - {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, - {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, - {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, - {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, - {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, - {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, - {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, - {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, - {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, - {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, - {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, - {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, - {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, - {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, - {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, - {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, - {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, - {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, - {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, - {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, - {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, - {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, - {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, - {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, - {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, - {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, - {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, + {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:331954d002dbf5e704c7f3756028e21db07097c19722569983ba4d74df014000"}, + {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d1613abd5af2f93c05867b3a3759a56e8bf97eb79b1da76b2bc10892f96ff16"}, + {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:705837eae384fe21cee5e5746fd4f4b2f06f87544fa60f60740007e0aa600311"}, + {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc871904a53a9d4d908673c6faa15689874af1c7c5ac403a8e12d967ebd0c0dc"}, + {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:38b947de71748bab150259ee05a775e8a0635891568e9fdb3cdd7d0e0004e62f"}, + {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:86b2a1013ef7a64d2e94606632683f07712045ed86d937c11ef4dde97319c086"}, + {file = "fonttools-4.56.0-cp310-cp310-win32.whl", hash = "sha256:133bedb9a5c6376ad43e6518b7e2cd2f866a05b1998f14842631d5feb36b5786"}, + {file = "fonttools-4.56.0-cp310-cp310-win_amd64.whl", hash = "sha256:17f39313b649037f6c800209984a11fc256a6137cbe5487091c6c7187cae4685"}, + {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ef04bc7827adb7532be3d14462390dd71287644516af3f1e67f1e6ff9c6d6df"}, + {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ffda9b8cd9cb8b301cae2602ec62375b59e2e2108a117746f12215145e3f786c"}, + {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e993e8db36306cc3f1734edc8ea67906c55f98683d6fd34c3fc5593fdbba4c"}, + {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003548eadd674175510773f73fb2060bb46adb77c94854af3e0cc5bc70260049"}, + {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd9825822e7bb243f285013e653f6741954d8147427aaa0324a862cdbf4cbf62"}, + {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b23d30a2c0b992fb1c4f8ac9bfde44b5586d23457759b6cf9a787f1a35179ee0"}, + {file = "fonttools-4.56.0-cp311-cp311-win32.whl", hash = "sha256:47b5e4680002ae1756d3ae3b6114e20aaee6cc5c69d1e5911f5ffffd3ee46c6b"}, + {file = "fonttools-4.56.0-cp311-cp311-win_amd64.whl", hash = "sha256:14a3e3e6b211660db54ca1ef7006401e4a694e53ffd4553ab9bc87ead01d0f05"}, + {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9"}, + {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f"}, + {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2"}, + {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563"}, + {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a"}, + {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28"}, + {file = "fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c"}, + {file = "fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba"}, + {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692"}, + {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0"}, + {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1"}, + {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea"}, + {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3"}, + {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278"}, + {file = "fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f"}, + {file = "fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6"}, + {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3fd3fccb7b9adaaecfa79ad51b759f2123e1aba97f857936ce044d4f029abd71"}, + {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:193b86e9f769320bc98ffdb42accafb5d0c8c49bd62884f1c0702bc598b3f0a2"}, + {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e81c1cc80c1d8bf071356cc3e0e25071fbba1c75afc48d41b26048980b3c771"}, + {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9270505a19361e81eecdbc2c251ad1e1a9a9c2ad75fa022ccdee533f55535dc"}, + {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53f5e9767978a4daf46f28e09dbeb7d010319924ae622f7b56174b777258e5ba"}, + {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9da650cb29bc098b8cfd15ef09009c914b35c7986c8fa9f08b51108b7bc393b4"}, + {file = "fonttools-4.56.0-cp38-cp38-win32.whl", hash = "sha256:965d0209e6dbdb9416100123b6709cb13f5232e2d52d17ed37f9df0cc31e2b35"}, + {file = "fonttools-4.56.0-cp38-cp38-win_amd64.whl", hash = "sha256:654ac4583e2d7c62aebc6fc6a4c6736f078f50300e18aa105d87ce8925cfac31"}, + {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ca7962e8e5fc047cc4e59389959843aafbf7445b6c08c20d883e60ced46370a5"}, + {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1af375734018951c31c0737d04a9d5fd0a353a0253db5fbed2ccd44eac62d8c"}, + {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:442ad4122468d0e47d83bc59d0e91b474593a8c813839e1872e47c7a0cb53b10"}, + {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf4f8d2a30b454ac682e12c61831dcb174950c406011418e739de592bbf8f76"}, + {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96a4271f63a615bcb902b9f56de00ea225d6896052c49f20d0c91e9f43529a29"}, + {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c1d38642ca2dddc7ae992ef5d026e5061a84f10ff2b906be5680ab089f55bb8"}, + {file = "fonttools-4.56.0-cp39-cp39-win32.whl", hash = "sha256:2d351275f73ebdd81dd5b09a8b8dac7a30f29a279d41e1c1192aedf1b6dced40"}, + {file = "fonttools-4.56.0-cp39-cp39-win_amd64.whl", hash = "sha256:d6ca96d1b61a707ba01a43318c9c40aaf11a5a568d1e61146fafa6ab20890793"}, + {file = "fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14"}, + {file = "fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4"}, ] [package.extras] @@ -796,6 +828,17 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "gast" +version = "0.6.0" +description = "Python AST that abstracts the underlying Python version" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "gast-0.6.0-py3-none-any.whl", hash = "sha256:52b182313f7330389f72b069ba00f174cfe2a06411099547288839c6cbafbd54"}, + {file = "gast-0.6.0.tar.gz", hash = "sha256:88fc5300d32c7ac6ca7b515310862f71e6fdf2c029bbec7c66c0f5dd47b6b1fb"}, +] + [[package]] name = "ghp-import" version = "2.1.0" @@ -815,13 +858,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "1.5.4" +version = "1.5.7" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" files = [ - {file = "griffe-1.5.4-py3-none-any.whl", hash = "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d"}, - {file = "griffe-1.5.4.tar.gz", hash = "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52"}, + {file = "griffe-1.5.7-py3-none-any.whl", hash = "sha256:4af8ec834b64de954d447c7b6672426bb145e71605c74a4e22d510cc79fe7d8b"}, + {file = "griffe-1.5.7.tar.gz", hash = "sha256:465238c86deaf1137761f700fb343edd8ffc846d72f6de43c3c345ccdfbebe92"}, ] [package.dependencies] @@ -829,13 +872,13 @@ colorama = ">=0.4" [[package]] name = "identify" -version = "2.6.5" +version = "2.6.7" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ - {file = "identify-2.6.5-py2.py3-none-any.whl", hash = "sha256:14181a47091eb75b337af4c23078c9d09225cd4c48929f521f3bf16b09d02566"}, - {file = "identify-2.6.5.tar.gz", hash = "sha256:c10b33f250e5bba374fae86fb57f3adcebf1161bce7cdf92031915fd480c13bc"}, + {file = "identify-2.6.7-py2.py3-none-any.whl", hash = "sha256:155931cb617a401807b09ecec6635d6c692d180090a1cedca8ef7d58ba5b6aa0"}, + {file = "identify-2.6.7.tar.gz", hash = "sha256:3fa266b42eba321ee0b2bb0936a6a6b9e36a1351cbb69055b3082f4193035684"}, ] [package.extras] @@ -901,13 +944,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.31.0" +version = "8.32.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6"}, - {file = "ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b"}, + {file = "ipython-8.32.0-py3-none-any.whl", hash = "sha256:cae85b0c61eff1fc48b0a8002de5958b6528fa9c8defb1894da63f42613708aa"}, + {file = "ipython-8.32.0.tar.gz", hash = "sha256:be2c91895b0b9ea7ba49d33b23e2040c352b33eb6a519cca7ce6e0c743444251"}, ] [package.dependencies] @@ -1408,13 +1451,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-autorefs" -version = "1.3.0" +version = "1.3.1" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.9" files = [ - {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, - {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, + {file = "mkdocs_autorefs-1.3.1-py3-none-any.whl", hash = "sha256:18c504ae4d3ee7f344369bb26cb31d4105569ee252aab7d75ec2734c2c8b0474"}, + {file = "mkdocs_autorefs-1.3.1.tar.gz", hash = "sha256:a6d30cbcccae336d622a66c2418a3c92a8196b69782774529ad441abb23c0902"}, ] [package.dependencies] @@ -1440,13 +1483,13 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-material" -version = "9.5.49" +version = "9.6.4" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, - {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, + {file = "mkdocs_material-9.6.4-py3-none-any.whl", hash = "sha256:414e8376551def6d644b8e6f77226022868532a792eb2c9accf52199009f568f"}, + {file = "mkdocs_material-9.6.4.tar.gz", hash = "sha256:4d1d35e1c1d3e15294cb7fa5d02e0abaee70d408f75027dc7be6e30fb32e6867"}, ] [package.dependencies] @@ -1463,7 +1506,7 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] @@ -1480,23 +1523,22 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.27.0" +version = "0.28.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" files = [ - {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, - {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, + {file = "mkdocstrings-0.28.0-py3-none-any.whl", hash = "sha256:84cf3dc910614781fe0fee46ce8006fde7df6cc7cca2e3f799895fb8a9170b39"}, + {file = "mkdocstrings-0.28.0.tar.gz", hash = "sha256:df20afef1eafe36ba466ae20732509ecb74237653a585f5061937e54b553b4e0"}, ] [package.dependencies] -click = ">=7.0" Jinja2 = ">=2.11.1" Markdown = ">=3.6" MarkupSafe = ">=1.1" mkdocs = ">=1.4" -mkdocs-autorefs = ">=1.2" -platformdirs = ">=2.2" +mkdocs-autorefs = ">=1.3" +mkdocs-get-deps = ">=0.2" pymdown-extensions = ">=6.3" [package.extras] @@ -1506,19 +1548,20 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.13.0" +version = "1.15.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" files = [ - {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, - {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, + {file = "mkdocstrings_python-1.15.0-py3-none-any.whl", hash = "sha256:77aced1bb28840d7d3510f77353319eeb450961880d87f9c53fdab331ba0120d"}, + {file = "mkdocstrings_python-1.15.0.tar.gz", hash = "sha256:2bfecbbe1252c67281408a6567d59545f4979931110f01ab625aa8c227c06edc"}, ] [package.dependencies] griffe = ">=0.49" mkdocs-autorefs = ">=1.2" -mkdocstrings = ">=0.26" +mkdocstrings = ">=0.28" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [[package]] name = "mypy-extensions" @@ -1680,12 +1723,12 @@ files = [ [[package]] name = "pennylane" -version = "0.39.0" +version = "0.40.0" description = "PennyLane is a cross-platform Python library for quantum computing, quantum machine learning, and quantum chemistry. Train a quantum computer the same way as a neural network." optional = false python-versions = "*" files = [ - {file = "PennyLane-0.39.0-py3-none-any.whl", hash = "sha256:e11928a8ffd652b9c1b4f11955b50210c3b637f36ee3d8cea64a3a9a6a830977"}, + {file = "PennyLane-0.40.0-py3-none-any.whl", hash = "sha256:c93bb48ff80833edaf424b3b91e01a56cd25b22170bc99b7e53e7168a1ad4dd1"}, ] [package.dependencies] @@ -1693,14 +1736,15 @@ appdirs = "*" autograd = "*" autoray = ">=0.6.11" cachetools = "*" +diastatic-malt = "*" networkx = "*" numpy = "<2.1" packaging = "*" -pennylane-lightning = ">=0.39" +pennylane-lightning = ">=0.40" requests = "*" rustworkx = ">=0.14.0" scipy = "*" -toml = "*" +tomlkit = "*" typing-extensions = "*" [package.extras] @@ -1708,32 +1752,33 @@ kernels = ["cvxopt", "cvxpy"] [[package]] name = "pennylane-lightning" -version = "0.39.0" +version = "0.40.0" description = "PennyLane-Lightning plugin" optional = false python-versions = ">=3.10" files = [ - {file = "PennyLane_Lightning-0.39.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:dfdf6071337f743519d7bcbe4d1bf35f1822bf14020dbda3c734b0471c4dbb12"}, - {file = "PennyLane_Lightning-0.39.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:0d9d7a865cf81923a05247e811a1534f3395fc9f27ea51a0472837b2dbe88f8d"}, - {file = "PennyLane_Lightning-0.39.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1d4c22f28afdb816bca37617d9d508e3a73b0bd50df4581bafd1de7f8ab028b2"}, - {file = "PennyLane_Lightning-0.39.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1878dbf59c779face32ee8b9291e2cf18a601c491a132afe89f9b1e477026455"}, - {file = "PennyLane_Lightning-0.39.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e5e68f467f68216d2b5f19639b4b3d621743c389a4d207282c52557e20ff10c"}, - {file = "PennyLane_Lightning-0.39.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8b5dfb5ee187a98925130965b5cbfb9ecfc650ec23b2cfdbf16040db25d79f73"}, - {file = "PennyLane_Lightning-0.39.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:80debc3b1c7a5923509f4662b95ca1703ac8a29eaaa78a169240b23c4c1c7875"}, - {file = "PennyLane_Lightning-0.39.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:ac2bcafd8b10b58e99cd050bb89a67e97b53e66ab8636e37bafd67a32905f935"}, - {file = "PennyLane_Lightning-0.39.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:de45c1c2e97572e59081878dc80bbebe17b938a783005ce0ad6632ba8dd46956"}, - {file = "PennyLane_Lightning-0.39.0-cp311-cp311-win_amd64.whl", hash = "sha256:dcbec946148018a8aebae6cf45bb0d9d6f9a418bb0655ed4b3ae2f7e948e320d"}, - {file = "PennyLane_Lightning-0.39.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:6c7553d206f185ab6f7688fe086d80a33f382beb56e9ad579090bdba041adfb1"}, - {file = "PennyLane_Lightning-0.39.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:30a08ed59fd2c11257bc989303547b8125e7453c8165f8c75ec7d8090451ec54"}, - {file = "PennyLane_Lightning-0.39.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c0f52da46791605e3f8f0644b45a97de799df1f69cd3659a58fc04f7288f948e"}, - {file = "PennyLane_Lightning-0.39.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a9ab74b0cf2cbc9556a0c85a750a5d6063721405f76cacf8b17f9e6774dd9b"}, - {file = "PennyLane_Lightning-0.39.0-cp312-cp312-win_amd64.whl", hash = "sha256:f568120eac4ed4b5d498889cb9359040dd7070ef711e98cdbace4efde794c866"}, - {file = "PennyLane_Lightning-0.39.0-py3-none-any.whl", hash = "sha256:55de99da8e513f89b416087d1665257498be244006968b472b82a56b972d0f0d"}, - {file = "PennyLane_Lightning-0.39.0.tar.gz", hash = "sha256:a1db6069c7d97eea50846d5b51a3d9ae97539bf68ac480b5c9bea1eaa5e3f1d1"}, + {file = "PennyLane_Lightning-0.40.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:3a6915cc17ce99cd4f3d04dcf7d579f59cecdc2866cd4e8e1c33478d86101437"}, + {file = "PennyLane_Lightning-0.40.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:4a66e8c644f634f9d1fda6b9223f5cc106acf4146334a25a23f948ec59b075c0"}, + {file = "PennyLane_Lightning-0.40.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a58ab1489fee0424840bc8f91e8f7e32ecc3338a714b2fe1bf68a9026a5a295a"}, + {file = "PennyLane_Lightning-0.40.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7fe9262c602b6c7f0ab893468867e24c63e9cacc7d77e19b448ac1361bb86a47"}, + {file = "PennyLane_Lightning-0.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:3f75b7d39d63880e9d59562d78ae5ec63d2aed936b2feee3c937dfbcd080b834"}, + {file = "PennyLane_Lightning-0.40.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:99cf7bcfb3a2a29838cc12f0001e3e7e02d35c5c1d696ce2e5ba0c3f2995c4d9"}, + {file = "PennyLane_Lightning-0.40.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6b89ad785e16cc3b3d155b1abd27e42fcb5854a0e2d90452f6445fc0e80b1cf4"}, + {file = "PennyLane_Lightning-0.40.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:20052041abc417d74d1794506d4340a8a2298b858e2b94591704e73670d913f9"}, + {file = "PennyLane_Lightning-0.40.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a3db3cf2c3caed80ce561b66bb4bf6b5712ecf0b08db986f24c4ff9e187e82b3"}, + {file = "PennyLane_Lightning-0.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:fed88008b7d468cb1d0e5b3ef92d87f9b600d0896d21eff43655a521cc841d7b"}, + {file = "PennyLane_Lightning-0.40.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:e3152f6b53390281334257554ecad90566cd4d200187971d238d2c7691000466"}, + {file = "PennyLane_Lightning-0.40.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8a4ff3f1d82f664e6d608d155cb019b189aac676c6c7cb40c4f92b15e0d2d485"}, + {file = "PennyLane_Lightning-0.40.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b2209727b8c914c8101087da188cbbc7b332bb77ceab4b6791c7ed7b3c5a942c"}, + {file = "PennyLane_Lightning-0.40.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2ba97b4d6aa0a6eb774413ea3272d418959b792de6df8e4196171cad450f25af"}, + {file = "PennyLane_Lightning-0.40.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7715c84290fc1291e315d2c0d2bf5719cbe86e3e92fb538393ab130b3f5ba2"}, + {file = "PennyLane_Lightning-0.40.0-py3-none-any.whl", hash = "sha256:96390ce82767b3a66c4f8e0b1bcec2f4f15fb317652cffa9815e371e74458197"}, + {file = "pennylane_lightning-0.40.0.tar.gz", hash = "sha256:edc95e75ef1b4e6dba96e914893175f9448d4d1b53a6e78614cb7587a8a22f2f"}, ] [package.dependencies] pennylane = ">=0.37" +scipy-openblas32 = ">=0.3.26" [package.extras] gpu = ["pennylane-lightning-gpu"] @@ -1875,13 +1920,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "4.0.1" +version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, - {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, + {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, + {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, ] [package.dependencies] @@ -1893,13 +1938,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] [package.dependencies] @@ -2009,13 +2054,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.14" +version = "10.14.3" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, - {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, + {file = "pymdown_extensions-10.14.3-py3-none-any.whl", hash = "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9"}, + {file = "pymdown_extensions-10.14.3.tar.gz", hash = "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"}, ] [package.dependencies] @@ -2180,120 +2225,120 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "26.2.0" +version = "26.2.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, - {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, - {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, - {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, - {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, - {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, - {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, - {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, - {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, - {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, - {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, - {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, - {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, - {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, - {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, - {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, - {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, - {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, - {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, - {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, - {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, - {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, - {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, - {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, - {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, - {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, - {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, - {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, - {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, - {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, - {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, - {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, - {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, - {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, - {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, + {file = "pyzmq-26.2.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:f39d1227e8256d19899d953e6e19ed2ccb689102e6d85e024da5acf410f301eb"}, + {file = "pyzmq-26.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a23948554c692df95daed595fdd3b76b420a4939d7a8a28d6d7dea9711878641"}, + {file = "pyzmq-26.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95f5728b367a042df146cec4340d75359ec6237beebf4a8f5cf74657c65b9257"}, + {file = "pyzmq-26.2.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95f7b01b3f275504011cf4cf21c6b885c8d627ce0867a7e83af1382ebab7b3ff"}, + {file = "pyzmq-26.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80a00370a2ef2159c310e662c7c0f2d030f437f35f478bb8b2f70abd07e26b24"}, + {file = "pyzmq-26.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8531ed35dfd1dd2af95f5d02afd6545e8650eedbf8c3d244a554cf47d8924459"}, + {file = "pyzmq-26.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cdb69710e462a38e6039cf17259d328f86383a06c20482cc154327968712273c"}, + {file = "pyzmq-26.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e7eeaef81530d0b74ad0d29eec9997f1c9230c2f27242b8d17e0ee67662c8f6e"}, + {file = "pyzmq-26.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:361edfa350e3be1f987e592e834594422338d7174364763b7d3de5b0995b16f3"}, + {file = "pyzmq-26.2.1-cp310-cp310-win32.whl", hash = "sha256:637536c07d2fb6a354988b2dd1d00d02eb5dd443f4bbee021ba30881af1c28aa"}, + {file = "pyzmq-26.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:45fad32448fd214fbe60030aa92f97e64a7140b624290834cc9b27b3a11f9473"}, + {file = "pyzmq-26.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:d9da0289d8201c8a29fd158aaa0dfe2f2e14a181fd45e2dc1fbf969a62c1d594"}, + {file = "pyzmq-26.2.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:c059883840e634a21c5b31d9b9a0e2b48f991b94d60a811092bc37992715146a"}, + {file = "pyzmq-26.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed038a921df836d2f538e509a59cb638df3e70ca0fcd70d0bf389dfcdf784d2a"}, + {file = "pyzmq-26.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9027a7fcf690f1a3635dc9e55e38a0d6602dbbc0548935d08d46d2e7ec91f454"}, + {file = "pyzmq-26.2.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d75fcb00a1537f8b0c0bb05322bc7e35966148ffc3e0362f0369e44a4a1de99"}, + {file = "pyzmq-26.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0019cc804ac667fb8c8eaecdb66e6d4a68acf2e155d5c7d6381a5645bd93ae4"}, + {file = "pyzmq-26.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f19dae58b616ac56b96f2e2290f2d18730a898a171f447f491cc059b073ca1fa"}, + {file = "pyzmq-26.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f5eeeb82feec1fc5cbafa5ee9022e87ffdb3a8c48afa035b356fcd20fc7f533f"}, + {file = "pyzmq-26.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:000760e374d6f9d1a3478a42ed0c98604de68c9e94507e5452951e598ebecfba"}, + {file = "pyzmq-26.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:817fcd3344d2a0b28622722b98500ae9c8bfee0f825b8450932ff19c0b15bebd"}, + {file = "pyzmq-26.2.1-cp311-cp311-win32.whl", hash = "sha256:88812b3b257f80444a986b3596e5ea5c4d4ed4276d2b85c153a6fbc5ca457ae7"}, + {file = "pyzmq-26.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:ef29630fde6022471d287c15c0a2484aba188adbfb978702624ba7a54ddfa6c1"}, + {file = "pyzmq-26.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:f32718ee37c07932cc336096dc7403525301fd626349b6eff8470fe0f996d8d7"}, + {file = "pyzmq-26.2.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:a6549ecb0041dafa55b5932dcbb6c68293e0bd5980b5b99f5ebb05f9a3b8a8f3"}, + {file = "pyzmq-26.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0250c94561f388db51fd0213cdccbd0b9ef50fd3c57ce1ac937bf3034d92d72e"}, + {file = "pyzmq-26.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36ee4297d9e4b34b5dc1dd7ab5d5ea2cbba8511517ef44104d2915a917a56dc8"}, + {file = "pyzmq-26.2.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2a9cb17fd83b7a3a3009901aca828feaf20aa2451a8a487b035455a86549c09"}, + {file = "pyzmq-26.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:786dd8a81b969c2081b31b17b326d3a499ddd1856e06d6d79ad41011a25148da"}, + {file = "pyzmq-26.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2d88ba221a07fc2c5581565f1d0fe8038c15711ae79b80d9462e080a1ac30435"}, + {file = "pyzmq-26.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c84c1297ff9f1cd2440da4d57237cb74be21fdfe7d01a10810acba04e79371a"}, + {file = "pyzmq-26.2.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46d4ebafc27081a7f73a0f151d0c38d4291656aa134344ec1f3d0199ebfbb6d4"}, + {file = "pyzmq-26.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:91e2bfb8e9a29f709d51b208dd5f441dc98eb412c8fe75c24ea464734ccdb48e"}, + {file = "pyzmq-26.2.1-cp312-cp312-win32.whl", hash = "sha256:4a98898fdce380c51cc3e38ebc9aa33ae1e078193f4dc641c047f88b8c690c9a"}, + {file = "pyzmq-26.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:a0741edbd0adfe5f30bba6c5223b78c131b5aa4a00a223d631e5ef36e26e6d13"}, + {file = "pyzmq-26.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:e5e33b1491555843ba98d5209439500556ef55b6ab635f3a01148545498355e5"}, + {file = "pyzmq-26.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:099b56ef464bc355b14381f13355542e452619abb4c1e57a534b15a106bf8e23"}, + {file = "pyzmq-26.2.1-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:651726f37fcbce9f8dd2a6dab0f024807929780621890a4dc0c75432636871be"}, + {file = "pyzmq-26.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57dd4d91b38fa4348e237a9388b4423b24ce9c1695bbd4ba5a3eada491e09399"}, + {file = "pyzmq-26.2.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d51a7bfe01a48e1064131f3416a5439872c533d756396be2b39e3977b41430f9"}, + {file = "pyzmq-26.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7154d228502e18f30f150b7ce94f0789d6b689f75261b623f0fdc1eec642aab"}, + {file = "pyzmq-26.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:f1f31661a80cc46aba381bed475a9135b213ba23ca7ff6797251af31510920ce"}, + {file = "pyzmq-26.2.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:290c96f479504439b6129a94cefd67a174b68ace8a8e3f551b2239a64cfa131a"}, + {file = "pyzmq-26.2.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f2c307fbe86e18ab3c885b7e01de942145f539165c3360e2af0f094dd440acd9"}, + {file = "pyzmq-26.2.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:b314268e716487bfb86fcd6f84ebbe3e5bec5fac75fdf42bc7d90fdb33f618ad"}, + {file = "pyzmq-26.2.1-cp313-cp313-win32.whl", hash = "sha256:edb550616f567cd5603b53bb52a5f842c0171b78852e6fc7e392b02c2a1504bb"}, + {file = "pyzmq-26.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:100a826a029c8ef3d77a1d4c97cbd6e867057b5806a7276f2bac1179f893d3bf"}, + {file = "pyzmq-26.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:6991ee6c43e0480deb1b45d0c7c2bac124a6540cba7db4c36345e8e092da47ce"}, + {file = "pyzmq-26.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:25e720dba5b3a3bb2ad0ad5d33440babd1b03438a7a5220511d0c8fa677e102e"}, + {file = "pyzmq-26.2.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:9ec6abfb701437142ce9544bd6a236addaf803a32628d2260eb3dbd9a60e2891"}, + {file = "pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e1eb9d2bfdf5b4e21165b553a81b2c3bd5be06eeddcc4e08e9692156d21f1f6"}, + {file = "pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90dc731d8e3e91bcd456aa7407d2eba7ac6f7860e89f3766baabb521f2c1de4a"}, + {file = "pyzmq-26.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6a93d684278ad865fc0b9e89fe33f6ea72d36da0e842143891278ff7fd89c3"}, + {file = "pyzmq-26.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c1bb37849e2294d519117dd99b613c5177934e5c04a5bb05dd573fa42026567e"}, + {file = "pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:632a09c6d8af17b678d84df442e9c3ad8e4949c109e48a72f805b22506c4afa7"}, + {file = "pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:fc409c18884eaf9ddde516d53af4f2db64a8bc7d81b1a0c274b8aa4e929958e8"}, + {file = "pyzmq-26.2.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:17f88622b848805d3f6427ce1ad5a2aa3cf61f12a97e684dab2979802024d460"}, + {file = "pyzmq-26.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3ef584f13820d2629326fe20cc04069c21c5557d84c26e277cfa6235e523b10f"}, + {file = "pyzmq-26.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:160194d1034902937359c26ccfa4e276abffc94937e73add99d9471e9f555dd6"}, + {file = "pyzmq-26.2.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:574b285150afdbf0a0424dddf7ef9a0d183988eb8d22feacb7160f7515e032cb"}, + {file = "pyzmq-26.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44dba28c34ce527cf687156c81f82bf1e51f047838d5964f6840fd87dfecf9fe"}, + {file = "pyzmq-26.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9fbdb90b85c7624c304f72ec7854659a3bd901e1c0ffb2363163779181edeb68"}, + {file = "pyzmq-26.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a7ad34a2921e8f76716dc7205c9bf46a53817e22b9eec2e8a3e08ee4f4a72468"}, + {file = "pyzmq-26.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:866c12b7c90dd3a86983df7855c6f12f9407c8684db6aa3890fc8027462bda82"}, + {file = "pyzmq-26.2.1-cp37-cp37m-win32.whl", hash = "sha256:eeb37f65350d5c5870517f02f8bbb2ac0fbec7b416c0f4875219fef305a89a45"}, + {file = "pyzmq-26.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4eb3197f694dfb0ee6af29ef14a35f30ae94ff67c02076eef8125e2d98963cd0"}, + {file = "pyzmq-26.2.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:36d4e7307db7c847fe37413f333027d31c11d5e6b3bacbb5022661ac635942ba"}, + {file = "pyzmq-26.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1c6ae0e95d0a4b0cfe30f648a18e764352d5415279bdf34424decb33e79935b8"}, + {file = "pyzmq-26.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5b4fc44f5360784cc02392f14235049665caaf7c0fe0b04d313e763d3338e463"}, + {file = "pyzmq-26.2.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:51431f6b2750eb9b9d2b2952d3cc9b15d0215e1b8f37b7a3239744d9b487325d"}, + {file = "pyzmq-26.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdbc78ae2065042de48a65f1421b8af6b76a0386bb487b41955818c3c1ce7bed"}, + {file = "pyzmq-26.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d14f50d61a89b0925e4d97a0beba6053eb98c426c5815d949a43544f05a0c7ec"}, + {file = "pyzmq-26.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:004837cb958988c75d8042f5dac19a881f3d9b3b75b2f574055e22573745f841"}, + {file = "pyzmq-26.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b2007f28ce1b8acebdf4812c1aab997a22e57d6a73b5f318b708ef9bcabbe95"}, + {file = "pyzmq-26.2.1-cp38-cp38-win32.whl", hash = "sha256:269c14904da971cb5f013100d1aaedb27c0a246728c341d5d61ddd03f463f2f3"}, + {file = "pyzmq-26.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:31fff709fef3b991cfe7189d2cfe0c413a1d0e82800a182cfa0c2e3668cd450f"}, + {file = "pyzmq-26.2.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:a4bffcadfd40660f26d1b3315a6029fd4f8f5bf31a74160b151f5c577b2dc81b"}, + {file = "pyzmq-26.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e76ad4729c2f1cf74b6eb1bdd05f6aba6175999340bd51e6caee49a435a13bf5"}, + {file = "pyzmq-26.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8b0f5bab40a16e708e78a0c6ee2425d27e1a5d8135c7a203b4e977cee37eb4aa"}, + {file = "pyzmq-26.2.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8e47050412f0ad3a9b2287779758073cbf10e460d9f345002d4779e43bb0136"}, + {file = "pyzmq-26.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f18ce33f422d119b13c1363ed4cce245b342b2c5cbbb76753eabf6aa6f69c7d"}, + {file = "pyzmq-26.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ceb0d78b7ef106708a7e2c2914afe68efffc0051dc6a731b0dbacd8b4aee6d68"}, + {file = "pyzmq-26.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ebdd96bd637fd426d60e86a29ec14b8c1ab64b8d972f6a020baf08a30d1cf46"}, + {file = "pyzmq-26.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:03719e424150c6395b9513f53a5faadcc1ce4b92abdf68987f55900462ac7eec"}, + {file = "pyzmq-26.2.1-cp39-cp39-win32.whl", hash = "sha256:ef5479fac31df4b304e96400fc67ff08231873ee3537544aa08c30f9d22fce38"}, + {file = "pyzmq-26.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:f92a002462154c176dac63a8f1f6582ab56eb394ef4914d65a9417f5d9fde218"}, + {file = "pyzmq-26.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:1fd4b3efc6f62199886440d5e27dd3ccbcb98dfddf330e7396f1ff421bfbb3c2"}, + {file = "pyzmq-26.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:380816d298aed32b1a97b4973a4865ef3be402a2e760204509b52b6de79d755d"}, + {file = "pyzmq-26.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97cbb368fd0debdbeb6ba5966aa28e9a1ae3396c7386d15569a6ca4be4572b99"}, + {file = "pyzmq-26.2.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf7b5942c6b0dafcc2823ddd9154f419147e24f8df5b41ca8ea40a6db90615c"}, + {file = "pyzmq-26.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fe6e28a8856aea808715f7a4fc11f682b9d29cac5d6262dd8fe4f98edc12d53"}, + {file = "pyzmq-26.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bd8fdee945b877aa3bffc6a5a8816deb048dab0544f9df3731ecd0e54d8c84c9"}, + {file = "pyzmq-26.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ee7152f32c88e0e1b5b17beb9f0e2b14454235795ef68c0c120b6d3d23d12833"}, + {file = "pyzmq-26.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:baa1da72aecf6a490b51fba7a51f1ce298a1e0e86d0daef8265c8f8f9848eb77"}, + {file = "pyzmq-26.2.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49135bb327fca159262d8fd14aa1f4a919fe071b04ed08db4c7c37d2f0647162"}, + {file = "pyzmq-26.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bacc1a10c150d58e8a9ee2b2037a70f8d903107e0f0b6e079bf494f2d09c091"}, + {file = "pyzmq-26.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:09dac387ce62d69bec3f06d51610ca1d660e7849eb45f68e38e7f5cf1f49cbcb"}, + {file = "pyzmq-26.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:70b3a46ecd9296e725ccafc17d732bfc3cdab850b54bd913f843a0a54dfb2c04"}, + {file = "pyzmq-26.2.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:59660e15c797a3b7a571c39f8e0b62a1f385f98ae277dfe95ca7eaf05b5a0f12"}, + {file = "pyzmq-26.2.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0f50db737d688e96ad2a083ad2b453e22865e7e19c7f17d17df416e91ddf67eb"}, + {file = "pyzmq-26.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a003200b6cd64e89b5725ff7e284a93ab24fd54bbac8b4fa46b1ed57be693c27"}, + {file = "pyzmq-26.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f9ba5def063243793dec6603ad1392f735255cbc7202a3a484c14f99ec290705"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1238c2448c58b9c8d6565579393148414a42488a5f916b3f322742e561f6ae0d"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eddb3784aed95d07065bcf94d07e8c04024fdb6b2386f08c197dfe6b3528fda"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0f19c2097fffb1d5b07893d75c9ee693e9cbc809235cf3f2267f0ef6b015f24"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0995fd3530f2e89d6b69a2202e340bbada3191014352af978fa795cb7a446331"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7c6160fe513654e65665332740f63de29ce0d165e053c0c14a161fa60dd0da01"}, + {file = "pyzmq-26.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8ec8e3aea6146b761d6c57fcf8f81fcb19f187afecc19bf1701a48db9617a217"}, + {file = "pyzmq-26.2.1.tar.gz", hash = "sha256:17d72a74e5e9ff3829deb72897a175333d3ef5b5413948cae3cf7ebf0b02ecca"}, ] [package.dependencies] @@ -2489,23 +2534,22 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rustworkx" -version = "0.15.1" +version = "0.16.0" description = "A python graph library implemented in Rust" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rustworkx-0.15.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6cd4496d3298cd3205c03545e48cc37d21e0455d57752af801d3fb250452d590"}, - {file = "rustworkx-0.15.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:cb518f5649e62d753e29ca1e57290c8f58adbebcd154dc3159f4a36ebfa1e2b7"}, - {file = "rustworkx-0.15.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac68ae2515ece22ba3ef56f3d16ad6bf707955f650d623190b2e7d706c6dc92"}, - {file = "rustworkx-0.15.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b903edec1d803704b499959f9d6f6119cdda63b9b64194a4b4307e506b112f0"}, - {file = "rustworkx-0.15.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2c97a56ff8a0f6c273a83e26e627c72207442b4252aa550acad0bff42caac40"}, - {file = "rustworkx-0.15.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:241c502532e348ba89200823326dba30de4df4b886cb2fd5a140b359ff124bb3"}, - {file = "rustworkx-0.15.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e5f4156f46fa03177c9b0580450eab87786063495d48b457762a5bdd20c55e2"}, - {file = "rustworkx-0.15.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7834ab34748db6214ec3b3836b996b23882dc83184234e6d346d6bb85fd58ae5"}, - {file = "rustworkx-0.15.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ce53f173fed16e1d51d9df9f23475a16c981b03bf1a412d991c75a70db6b1dc1"}, - {file = "rustworkx-0.15.1-cp38-abi3-win32.whl", hash = "sha256:308bc76a01bcae9af4602d8b9ed58021df37dd0bb5a7b2e3831ae53c5e234ff0"}, - {file = "rustworkx-0.15.1-cp38-abi3-win_amd64.whl", hash = "sha256:89077382633e918d2392772f53b9d6d30eee51eb536f8d38ee195c212b2f0427"}, - {file = "rustworkx-0.15.1.tar.gz", hash = "sha256:0e0cc86599f979285b2ab9c357276f3272f3fcb3b2df5651a6bf9704c570d4c1"}, + {file = "rustworkx-0.16.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:476a6c67b0142acd941691943750cc6737a48372304489969c2b62d30aaf4c27"}, + {file = "rustworkx-0.16.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:bef2ef42870f806af93979b457e240f6dfa4f867ca33965c620f3a804409ed3a"}, + {file = "rustworkx-0.16.0-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0db3a73bf68b3e66c08322a2fc95d3aa663d037d9b4e49c3509da4898d3529cc"}, + {file = "rustworkx-0.16.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f12a13d7486234fa2a84746d5e41f436bf9df43548043e7a232f48804ff8c61"}, + {file = "rustworkx-0.16.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89efd5c3a4653ddacc55ca39f28b261d43deec7d678f8f8fc6b76b5087f1dfea"}, + {file = "rustworkx-0.16.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec0c12aac8c54910ace20ac6ada4b890cd39f95f69100514715f8ad7af9041e4"}, + {file = "rustworkx-0.16.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d650e39fc1a1534335f7517358ebfc3478bb235428463cfcd7c5750d50377b33"}, + {file = "rustworkx-0.16.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:293180b83509ee9bff4c3af7ccc1024f6528d61b65d0cb7320bd31924f10cb71"}, + {file = "rustworkx-0.16.0-cp39-abi3-win32.whl", hash = "sha256:040c4368729cf502f756a3b0ff5f1c6915fc389f74dcc6afc6c3833688c97c01"}, + {file = "rustworkx-0.16.0-cp39-abi3-win_amd64.whl", hash = "sha256:905df608843c32fa45ac023687769fe13056edf7584474c801d5c50705d76e9b"}, + {file = "rustworkx-0.16.0.tar.gz", hash = "sha256:9f0dcb83f38d5ca2c3a683eb9b6951c8aec3262fbfe5141946a7ee5ba37e0bb6"}, ] [package.dependencies] @@ -2573,6 +2617,24 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodest doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "scipy-openblas32" +version = "0.3.29.0.0" +description = "Provides OpenBLAS for python packaging" +optional = false +python-versions = ">=3.7" +files = [ + {file = "scipy_openblas32-0.3.29.0.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:6b276ac72c00cc0850588663b9da4c8099d4bee8a2527557747cf6b8ed5179cb"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:dd74159091a83ae7bf7b066345c3d3e43e212cd4537c03a2fd873154e5a179f2"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33994f0a37373ff6717fd9c948053a76c272efd516f8b33b3e51ecec786922fe"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d6301960024370f6061c71e8efd8bcb5be22c6526a529ff05c370048adb6b04"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02d32eafdf101f9503b99bd623e84f109a95cbe16d65492e174ed386339e2e1f"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2ca3ee3b9143b86addccda36a741462621413766dbc09896b0b43cc223a3b051"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768352307e56873538222526b7dbcfd3dcd8615451741d15eef9af718ac93750"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-win32.whl", hash = "sha256:e56c9c8e5e41d91d357b0d514fc59ca25467fbd68e5bdffa1f3dfa96f3249eb2"}, + {file = "scipy_openblas32-0.3.29.0.0-py3-none-win_amd64.whl", hash = "sha256:8b21c803bdc344a383a1d5d392d3cfe5366d9b89d2aeee963705156000cbbc7a"}, +] + [[package]] name = "six" version = "1.17.0" @@ -2604,16 +2666,19 @@ pure-eval = "*" tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" +name = "termcolor" +version = "2.5.0" +description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.9" files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, ] +[package.extras] +tests = ["pytest", "pytest-cov"] + [[package]] name = "tomli" version = "2.2.1" @@ -2655,6 +2720,17 @@ files = [ {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + [[package]] name = "tornado" version = "6.4.2" @@ -2692,13 +2768,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-setuptools" -version = "75.8.0.20250110" +version = "75.8.0.20250210" description = "Typing stubs for setuptools" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, - {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, + {file = "types_setuptools-75.8.0.20250210-py3-none-any.whl", hash = "sha256:a217d7b4d59be04c29e23d142c959a0f85e71292fd3fc4313f016ca11f0b56dc"}, + {file = "types_setuptools-75.8.0.20250210.tar.gz", hash = "sha256:c1547361b2441f07c94e25dce8a068e18c611593ad4b6fdd727b1a8f5d1fda33"}, ] [[package]] @@ -2745,39 +2821,40 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uv" -version = "0.5.18" +version = "0.5.30" description = "An extremely fast Python package and project manager, written in Rust." optional = false python-versions = ">=3.8" files = [ - {file = "uv-0.5.18-py3-none-linux_armv6l.whl", hash = "sha256:bae3a5ca2dda3e9ff9a2b5df4ed9a9a3574b88d06059271bdd8e0900dd5a80b7"}, - {file = "uv-0.5.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8eb1e11df5225ddff5e7b1501c6a09dd30e8f331f244420e74fe990aca0ec6a6"}, - {file = "uv-0.5.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b198af4b93e9a6a8c6a3b404daa8d6aae621920e0ecc9d4db101ee93ce0e1353"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:78cfdb412b1f7444f7caf130a233cba3c01e08016478404cb6359468653f298e"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe63438062f8bdb51b26f3f9fe52f37ad1dffaa5f5ad50faee48e1259c232001"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63af3ee21750ce2821f9a3d0d9ed6a668bb104abd80e5cfc593cae4341008b65"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e91752bc465b1b09597e98431febed2baa35263bdb7cc7113f4e7c8d3d942220"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a48afa00f6731a46ecc2f68563f65f716e0268f4b30daf70168f5fdbba0b5ffa"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:360cb1457f07a31698f2bbb952af4aa5c37a8ed04babd3c763a4037cf51d9dc5"}, - {file = "uv-0.5.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04e6c62d8947f62f1ec3255b5743cc775950b6203b06bf9c4d50682dcd68f340"}, - {file = "uv-0.5.18-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:039ff8b675f59b80161801f73d033675e2428e802cc0d26ef073ddb4d249f75f"}, - {file = "uv-0.5.18-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:acdafc89928fdad7ffbb1b384a2c27379c669077e47194ca567a7faeed1bdb3b"}, - {file = "uv-0.5.18-py3-none-musllinux_1_1_i686.whl", hash = "sha256:f26dad874fa4e545fd241963d7f389b38524f2f6b2fb1f5ec0e3b3f803cee6b4"}, - {file = "uv-0.5.18-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:c1ed0742fd83cb92c3ad8080a2b10e402f3aa8f4da6361160f846020aa323916"}, - {file = "uv-0.5.18-py3-none-win32.whl", hash = "sha256:9477c9209fcc54079aa307ecc669c30df8a491d88abb7c5b097ebc38b7645467"}, - {file = "uv-0.5.18-py3-none-win_amd64.whl", hash = "sha256:16cc5871e875b6498aed3ffcd40d4ca82fba5a7e9a26bb5e3bf4ecdcc3bdd3d1"}, - {file = "uv-0.5.18.tar.gz", hash = "sha256:5e45f257ab433a398369ba8835c72b82388d7bdebf692a9e23ad50b2bfcfa366"}, + {file = "uv-0.5.30-py3-none-linux_armv6l.whl", hash = "sha256:b4ad4c4597f27d97f9273aa2b06654dab97380d1567582c7e719624220556eb2"}, + {file = "uv-0.5.30-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:20a3fbe5662aa12d9196d1c842d267f375195818e53d0687761ae1571676cd40"}, + {file = "uv-0.5.30-py3-none-macosx_11_0_arm64.whl", hash = "sha256:98aacbaa74393710e1125382688b74d1080fb3fdeb8659484b3a30120106524b"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:c39834b2ba5ed4ce27641dcdd6b601fc091d0c45c8bc95d2f684148beb35d032"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7eaa0ea685b2962c995fa68c817740002379327767d25b6bfc4449afd9d28350"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a35a297e8835ac686492228085c18799a4f9e4502b97830d9fa629ab33c628fc"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e3323a6aef65d7c35ce557a1dfe32c18b2c98b14361e6991e8903473cdc1c80a"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39d0daa24e41b0d7f69cced458eb69cd32f1259edb7f1c7018ed8906694c5af9"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f442f1962c325921d5141f47a970aeb0454a1808f1901e27e25a958e0055244a"}, + {file = "uv-0.5.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46b72bdb1855789b35277f894dac2b15fc0a084146ea8821b7cc7cae559a901"}, + {file = "uv-0.5.30-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ee63749036afe168f477006e5d198cce618fcb6accf036fa33d4006f7e787e12"}, + {file = "uv-0.5.30-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:0a2624d586e71f4c8d27fb45fe7c27f8585b2669cfb85344be435bea5932a774"}, + {file = "uv-0.5.30-py3-none-musllinux_1_1_i686.whl", hash = "sha256:194891c7473eb9cedfcd0ddd25fe7c1f208df639f67474068459c53f2f1ac034"}, + {file = "uv-0.5.30-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:79dd27c2c0fdf887aadc9796345339786f27a07de7f80c9a892696e5740251c4"}, + {file = "uv-0.5.30-py3-none-win32.whl", hash = "sha256:5d42cd9051ab6d1bd18ca1cceb8099963a28315bcd8c9cd4104ffdb896af3075"}, + {file = "uv-0.5.30-py3-none-win_amd64.whl", hash = "sha256:a8ebb553230ae811c16b2c4889095f7a8c39f657d75cf39f6f3fa5a38a5b9731"}, + {file = "uv-0.5.30-py3-none-win_arm64.whl", hash = "sha256:c6b359832c7caf58c43b37e156bfeabf3adc8f2a894a0f325d617cd41a57578e"}, + {file = "uv-0.5.30.tar.gz", hash = "sha256:e40c77c012d087a51ae9a33189e7c59aa25da40f883c06e034a841b7a05c6639"}, ] [[package]] name = "virtualenv" -version = "20.28.1" +version = "20.29.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb"}, - {file = "virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329"}, + {file = "virtualenv-20.29.2-py3-none-any.whl", hash = "sha256:febddfc3d1ea571bdb1dc0f98d7b45d24def7428214d4fb73cc486c9568cce6a"}, + {file = "virtualenv-20.29.2.tar.gz", hash = "sha256:fdaabebf6d03b5ba83ae0a02cfe96f48a716f4fae556461d180825866f75b728"}, ] [package.dependencies] @@ -2842,6 +2919,20 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "wheel" +version = "0.45.1" +description = "A built-package format for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, + {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, +] + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + [[package]] name = "win32-setctime" version = "1.2.0" @@ -2859,4 +2950,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "e05dfac639407d60bc803755ebb5d56f7d2616ab05f2afd38befbc966fc83325" +content-hash = "9f72085eaf86d05728b623f387344fbe94d94e08375c1ea89f0bfea168386426" diff --git a/pyproject.toml b/pyproject.toml index 9daaf4d..76c13bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ keywords = ["quantum", "quantum machine learning", "qml"] [tool.poetry.dependencies] python = ">=3.10,<3.13" -pennylane = "^0.39.0" +pennylane = "^0.40.0" [tool.poetry.group.dev] optional = true diff --git a/qml_essentials/coefficients.py b/qml_essentials/coefficients.py index 43c6540..3d3bf3a 100644 --- a/qml_essentials/coefficients.py +++ b/qml_essentials/coefficients.py @@ -1,23 +1,31 @@ from qml_essentials.model import Model -from functools import partial -from pennylane.fourier import coefficients import numpy as np +from typing import Any class Coefficients: @staticmethod - def sample_coefficients(model: Model, **kwargs) -> np.ndarray: + def get_spectrum( + model: Model, mfs: int = 1, mts: int = 1, shift=False, trim=False, **kwargs + ) -> np.ndarray: """ - Sample the Fourier coefficients of a given model - using Pennylane fourier.coefficients function. + Extracts the coefficients of a given model using a FFT (np-fft). Note that the coefficients are complex numbers, but the imaginary part of the coefficients should be very close to zero, since the expectation values of the Pauli operators are real numbers. + It can perform oversampling in both the frequency and time domain + using the `mfs` and `mts` arguments. + Args: model (Model): The model to sample. + mfs (int): Multiplicator for the highest frequency. Default is 2. + mts (int): Multiplicator for the number of time samples. Default is 1. + shift (bool): Whether to apply np-fftshift. Default is False. + trim (bool): Whether to remove the Nyquist frequency if spectrum is even. + Default is False. kwargs (Any): Additional keyword arguments for the model function. Returns: @@ -26,8 +34,9 @@ def sample_coefficients(model: Model, **kwargs) -> np.ndarray: kwargs.setdefault("force_mean", True) kwargs.setdefault("execution_type", "expval") - partial_circuit = partial(model, model.params, **kwargs) - coeffs = coefficients(partial_circuit, 1, model.degree) + coeffs, freqs = Coefficients._fourier_transform( + model, mfs=mfs, mts=mts, **kwargs + ) if not np.isclose(np.sum(coeffs).imag, 0.0, rtol=1.0e-5): raise ValueError( @@ -35,4 +44,53 @@ def sample_coefficients(model: Model, **kwargs) -> np.ndarray: {np.sum(coeffs).imag}" ) - return coeffs + if trim and coeffs.size % 2 == 0: + coeffs = np.delete(coeffs, len(coeffs) // 2) + freqs = np.delete(freqs, len(freqs) // 2) + + if shift: + return np.fft.fftshift(coeffs), np.fft.fftshift(freqs) + else: + return coeffs, freqs + + @staticmethod + def _fourier_transform( + model: Model, mfs: int, mts: int, **kwargs: Any + ) -> np.ndarray: + # Create a frequency vector with as many frequencies as model degrees, + # oversampled by nfs + n_freqs: int = 2 * mfs * model.degree + 1 + + # Stretch according to the number of frequencies + inputs: np.ndarray = np.arange(0, 2 * mts * np.pi, 2 * np.pi / n_freqs) + + # Output vector is not necessarily the same length as input + outputs: np.ndarray = np.zeros((mts * n_freqs)) + + outputs = model(inputs=inputs, **kwargs) + + coeffs = np.fft.fft(outputs) + + freqs = np.fft.fftfreq(coeffs.size, mts / coeffs.size) + + # Run the fft and rearrange + normalize the output + return coeffs / outputs.size, freqs + + @staticmethod + def get_psd(coeffs: np.ndarray) -> np.ndarray: + # TODO: if we apply trim=True in advance, this will be slightly wrong.. + """ + Calculates the power spectral density (PSD) from given Fourier coefficients. + + Args: + coeffs (np.ndarray): The Fourier coefficients. + + Returns: + np.ndarray: The power spectral density. + """ + + def abs2(x): + return x.real**2 + x.imag**2 + + scale = 2.0 / (len(coeffs) ** 2) + return scale * abs2(coeffs) diff --git a/tests/test_coefficients.py b/tests/test_coefficients.py index 22bf3d6..8b24f5e 100644 --- a/tests/test_coefficients.py +++ b/tests/test_coefficients.py @@ -1,10 +1,14 @@ from qml_essentials.model import Model from qml_essentials.coefficients import Coefficients +from pennylane.fourier import coefficients as pcoefficients import numpy as np import logging import pytest +from functools import partial + + logger = logging.getLogger(__name__) @@ -15,28 +19,19 @@ def test_coefficients() -> None: "circuit_type": "Circuit_1", "n_qubits": 1, "n_layers": 3, - "n_bins": 10, - "n_samples": 200, - "n_input_samples": 2, "output_qubit": 0, }, { "circuit_type": "Circuit_9", "n_qubits": 4, "n_layers": 1, - "n_bins": 10, - "n_samples": 200, - "n_input_samples": 2, "output_qubit": 0, }, { - "circuit_type": "Circuit_9", - "n_qubits": 4, + "circuit_type": "Circuit_19", + "n_qubits": 5, "n_layers": 1, - "n_bins": 10, - "n_samples": 200, - "n_input_samples": 2, - "output_qubit": [0, 1, 2, 3], + "output_qubit": 0, }, ] @@ -45,14 +40,73 @@ def test_coefficients() -> None: n_qubits=test_case["n_qubits"], n_layers=test_case["n_layers"], circuit_type=test_case["circuit_type"], - data_reupload=True, - initialization="random", output_qubit=test_case["output_qubit"], ) - coeffs = Coefficients.sample_coefficients(model) + coeffs, _ = Coefficients.get_spectrum(model) assert len(coeffs) == model.degree * 2 + 1, "Wrong number of coefficients" assert np.isclose( np.sum(coeffs).imag, 0.0, rtol=1.0e-5 ), "Imaginary part is not zero" + + partial_circuit = partial(model, model.params) + ref_coeffs = pcoefficients(partial_circuit, 1, model.degree) + + assert np.allclose( + coeffs, ref_coeffs, rtol=1.0e-5 + ), "Coefficients don't match the pennylane reference" + + +@pytest.mark.unittest +def test_oversampling_time() -> None: + model = Model( + n_qubits=2, + n_layers=1, + circuit_type="Circuit_19", + ) + + assert ( + Coefficients.get_spectrum(model, mts=2)[0].shape[0] == 10 + ), "Oversampling time failed" + + +@pytest.mark.unittest +def test_oversampling_frequency() -> None: + model = Model( + n_qubits=2, + n_layers=1, + circuit_type="Circuit_19", + ) + + assert ( + Coefficients.get_spectrum(model, mfs=2)[0].shape[0] == 9 + ), "Oversampling frequency failed" + + +@pytest.mark.unittest +def test_shift() -> None: + model = Model( + n_qubits=2, + n_layers=1, + circuit_type="Circuit_19", + ) + coeffs, freqs = Coefficients.get_spectrum(model, shift=True) + + assert ( + np.abs(coeffs) == np.abs(coeffs[::-1]) + ).all(), "Shift failed. Spectrum must be symmetric." + + +@pytest.mark.smoketest +def test_frequencies() -> None: + model = Model( + n_qubits=2, + n_layers=1, + circuit_type="Circuit_19", + ) + coeffs, freqs = Coefficients.get_spectrum(model, shift=True) + + assert ( + freqs.size == coeffs.size + ), "Frequencies and coefficients must have the same length."