diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index 11852458..07e31679 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -16,7 +16,26 @@ "cell_type": "markdown", "id": "4ea73db3", "metadata": {}, - "source": [] + "source": [ + " infected_indices = np.random.choice(ppl.index, size=int(len(ppl) * ATTACK_RATE), replace=False)\n", + " ppl.loc[infected_indices, 'infected'] = True\n", + "\n", + "The above code is simple random sampling using np.random.choice to sample the people to randomly assign an infection status. the sample size is the entire population n = 1000. the sampling frame is all individuals from the wedding and brunch. The underlying distribution is the proportion of individuals at the wedding and those at the brunch where 1/5 are from the wedding and 4/5 are from brunch however the sampling does not take this into consideration.\n", + "\n", + "ppl.loc[ppl['infected'], 'traced'] = np.random.rand(sum(ppl['infected'])) < TRACE_SUCCESS\n", + "\n", + "the above is stratified random sampling, where its stratified based on infection status (ppl.loc[ppl['infected'], 'traced']) and then randomly assigning tracing to those who are infected only (np.random.rand(sum(ppl['infected'])) < TRACE_SUCCESS). The sample frame are the infected individuals (0.10 x 1000 = 100) and the sample size of those who are selected to be traced is 0.2 x 100 = 20. \n", + "\n", + "event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + " events_traced = event_trace_counts[event_trace_counts >= SECONDARY_TRACE_THRESHOLD].index\n", + " ppl.loc[ppl['event'].isin(events_traced) & ppl['infected'], 'traced'] = True\n", + "\n", + "The above code is first stratifying by traced vs untraced infectees and further stratifying the event (brunch or wedding) : event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + "Then it is counting the number of traced individuals at each event and putting them in clusters that either reach the secondary trace threshold or not, and then sampling everyone in the cluster that reaches the threshold: events_traced = event_trace_counts[event_trace_counts >= SECONDARY_TRACE_THRESHOLD].index\n", + " ppl.loc[ppl['event'].isin(events_traced) & ppl['infected'], 'traced'] = True\n", + "\n", + "This is cluster sampling, and samples only those that are infected and have been to an event that meets the threshold (threshold of 2)" + ] }, { "cell_type": "markdown", @@ -30,7 +49,9 @@ "cell_type": "markdown", "id": "4cf5d993", "metadata": {}, - "source": [] + "source": [ + "When running the simulation multiple times using the same number of repetitions, the graphs outputted are vastly different especially with the smaller simulation numbers (10 appears far more different from one another than 1000). The reproducibility appears to be more consistent with the higher simulation numbers. With 10 simulations it is basically not reproducible." + ] }, { "cell_type": "markdown", @@ -44,7 +65,9 @@ "cell_type": "markdown", "id": "77613cc3", "metadata": {}, - "source": [] + "source": [ + "to make the code reproducible I set a random seed of 44 so that when the randomization occurs it randomizes the same way everytime, therefore making it reproducible" + ] }, { "cell_type": "markdown", @@ -56,10 +79,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "id": "ab8587a0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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9uyxfk9T6khOTtbkyZNVqVIlubq6ytfXV7179071+yxl/bcgvW1cu3at9XOXN29etW3bVvv27cv0Nqbn7NmzunTpkurVq5fm9MKFC9u8z8j3MjPjmFPfmYMHD6pjx47y8/OTq6urihUrpmeffVYXL1685/4B8OA40g0g2yQlJally5Zq0KCBPvzwQ3311Vfq16+fPDw8NGLECHXr1k0dOnTQjBkzFBISojp16qhUqVI2y+jXr5/y5s2rUaNGKSYmRtOnT9exY8es/4CRbgd0T09PDRo0SJ6enlq7dq3eeecdXbp0SePHj7cuKyIiQk899ZT8/f01YMAA+fn5ad++ffrpp580YMAA9e7dWydPnlRERIS+/PLLDG3jqFGjNHr0aDVp0kR9+vSx1rh582atX79eTk5Omjx5sr744gstWbJE06dPl6enp82R2ztdvXpVa9asUYMGDVS8ePH7rt8wDD399NOKjIxUr169VLVqVa1atUpDhw7ViRMnUp0S+vvvv2vx4sV69dVX5eXlpY8//lgdO3ZUbGysChQooA4dOujAgQP6+uuvNWnSJBUsWFDS/53+On36dFWqVElPP/208uTJox9//FGvvvqqkpOT1bdvX+t6wsPD9cILL6hSpUoaPny48ubNq+3bt2vlypV67rnnNGLECF28eFF///23tUZPT88M7fN7GTNmjJydnTVkyBAlJibK2dlZe/fu1dKlS9WpUyeVKlVKp06d0syZMxUcHKy9e/daT5VOSkrSU089pTVr1ujZZ5/VgAEDdPnyZUVERGj37t0qXbr0PdfduXNnlSpVSmFhYdq2bZs+++wzFS5cWOPGjbP2CQ0N1bfffqvu3burdu3aWrdunVq3bp2hbbt27ZoaNmyoQ4cOqV+/fipVqpQWLVqk0NBQXbhwQQMGDLDpv2DBAl2+fFm9e/eWxWLRhx9+qA4dOujIkSNZOiqc8oeHAgUKSLp9Y8AePXqoefPmGjdunK5evarp06erfv362r59u80fUW7duqXmzZurfv36+uijj+Tu7i5J6tWrl8LDw9WyZUu9+OKLunXrln777Tf98ccfqlmzpiTp/fff19tvv63OnTvrxRdf1JkzZzR16lQ1aNBA27dvT/MorJOTk9q3b6/Fixdr5syZcnZ2tk5bunSpEhMT9eyzz0q6HWKefvpp/f7773r55ZdVoUIF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UyRJnTp10unTp7VixQpt3bpV1atXV+PGjXXu3DlJ0s8//6z27durVatW2r59u9asWaPHHntMkrR48WIVK1ZM7777ruLi4hQXF5dmXUuWLNGAAQM0ePBg7d69W71791bPnj0VGRlp02/06NHq3Lmzdu7cqVatWqlbt27WOt5++23t3btXK1as0L59+zR9+vR0TxmfMmWK3n33XRUrVkxxcXHavHmzzT5ydnbW+vXrNWPGDJ04cUKtWrVSrVq1tGPHDk2fPl2ff/653nvvvVT7tmDBgvrzzz/12muvqU+fPurUqZPq1q2rbdu2qVmzZurevbuuXk37kgQPDw/VqlXLZpujoqLUuHFj1atXz9p+5MgRxcbGWkN3v379tHHjRi1cuFA7d+5Up06d1KJFCx08eFCStGnTJvXq1Uv9+vVTdHS0GjVqlKr2b7/9VqNGjdIHH3ygLVu2yN/fX59++mmadd69zel9npKSktSuXTu5u7tr06ZNmjVrlkaMGGEz/8cff6wffvhB3377rWJiYvTVV19Z/wACAAAA5FacXp6LVa5cWSNHjpQkBQYGatq0aVqzZo2aNm2qQoUKycXFRW5ubtbTm3///Xf9+eefOn36tFxcXCRJH330kZYuXarvvvtOL7/8st5//309++yzGj16tHU9VapUkSTlz59fjo6O8vLysi4zLR999JFCQ0P16quvSpIGDRqkP/74Qx999JE1XEq3j7Z27dpVkvTBBx/o448/1p9//qkWLVooNjZW1apVU82aNSXpnuHNx8dHXl5ecnR0TFVXYGCgPvzwQ+v7ESNGKCAgQNOmTZPFYlH58uV18uRJvfHGG3rnnXfk4OBg3ea33npLkjR8+HCNHTtWBQsW1EsvvSRJeueddzR9+nTt3LlTtWvXTrOuRo0aadGiRZKkvXv36vr166pWrZoaNGigqKgo9ezZU1FRUXJ1dVXt2rUVGxuruXPnKjY2VkWKFJEkDRkyRCtXrtTcuXP1wQcfaMqUKWrRooWGDRsmSSpbtqw2bNiglStXWtc7efJk9erVS7169ZIkvffee1q9enWqo913u9fnKSIiQocPH1ZUVJR1H7///vtq2rSpdf7Y2FgFBgaqfv36slgsKlGixD3XBwAAAOQGHOnOxSpXrmzz3t/fX6dPn063/44dO5SQkKACBQrI09PT+jp69KgOHz4sSYqO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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Import necessary libraries\n", "import pandas as pd\n", @@ -75,6 +109,9 @@ "import warnings\n", "warnings.simplefilter(action='ignore', category=FutureWarning)\n", "\n", + "#setting seed for reproducibility\n", + "np.random.seed(44)\n", + "\n", "# Constants representing the parameters of the model\n", "ATTACK_RATE = 0.10\n", "TRACE_SUCCESS = 0.20\n", @@ -131,7 +168,7 @@ " return p_wedding_infections, p_wedding_traces\n", "\n", "# Run the simulation 1000 times\n", - "results = [simulate_event(m) for m in range(1000)]\n", + "results = [simulate_event(m) for m in range(10)]\n", "props_df = pd.DataFrame(results, columns=[\"Infections\", \"Traces\"])\n", "\n", "# Plotting the results\n", @@ -193,7 +230,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "sampling-env", "language": "python", "name": "python3" }, @@ -207,7 +244,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.11.13" } }, "nbformat": 4, diff --git a/uv.lock b/uv.lock index 467e0b9c..1745642f 100644 --- a/uv.lock +++ b/uv.lock @@ -1,11 +1,29 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.12'", "python_full_version < '3.12'", ] +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, +] + [[package]] name = "cffi" version = "2.0.0" @@ -103,6 +121,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + [[package]] name = "contourpy" version = "1.3.3" @@ -253,6 +280,49 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] +[[package]] +name = "debugpy" +version = "1.8.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/75/9e12d4d42349b817cd545b89247696c67917aab907012ae5b64bbfea3199/debugpy-1.8.19.tar.gz", hash = "sha256:eea7e5987445ab0b5ed258093722d5ecb8bb72217c5c9b1e21f64efe23ddebdb", size = 1644590, upload-time = "2025-12-15T21:53:28.044Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/e2/48531a609b5a2aa94c6b6853afdfec8da05630ab9aaa96f1349e772119e9/debugpy-1.8.19-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:c5dcfa21de1f735a4f7ced4556339a109aa0f618d366ede9da0a3600f2516d8b", size = 2207620, upload-time = "2025-12-15T21:53:37.1Z" }, + { url = "https://files.pythonhosted.org/packages/1b/d4/97775c01d56071969f57d93928899e5616a4cfbbf4c8cc75390d3a51c4a4/debugpy-1.8.19-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:806d6800246244004625d5222d7765874ab2d22f3ba5f615416cf1342d61c488", size = 3170796, upload-time = "2025-12-15T21:53:38.513Z" }, + { url = "https://files.pythonhosted.org/packages/8d/7e/8c7681bdb05be9ec972bbb1245eb7c4c7b0679bb6a9e6408d808bc876d3d/debugpy-1.8.19-cp311-cp311-win32.whl", hash = "sha256:783a519e6dfb1f3cd773a9bda592f4887a65040cb0c7bd38dde410f4e53c40d4", size = 5164287, upload-time = "2025-12-15T21:53:40.857Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a8/aaac7ff12ddf5d68a39e13a423a8490426f5f661384f5ad8d9062761bd8e/debugpy-1.8.19-cp311-cp311-win_amd64.whl", hash = "sha256:14035cbdbb1fe4b642babcdcb5935c2da3b1067ac211c5c5a8fdc0bb31adbcaa", size = 5188269, upload-time = "2025-12-15T21:53:42.359Z" }, + { url = "https://files.pythonhosted.org/packages/4a/15/d762e5263d9e25b763b78be72dc084c7a32113a0bac119e2f7acae7700ed/debugpy-1.8.19-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:bccb1540a49cde77edc7ce7d9d075c1dbeb2414751bc0048c7a11e1b597a4c2e", size = 2549995, upload-time = "2025-12-15T21:53:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/a7/88/f7d25c68b18873b7c53d7c156ca7a7ffd8e77073aa0eac170a9b679cf786/debugpy-1.8.19-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:e9c68d9a382ec754dc05ed1d1b4ed5bd824b9f7c1a8cd1083adb84b3c93501de", size = 4309891, upload-time = "2025-12-15T21:53:45.26Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4f/a65e973aba3865794da65f71971dca01ae66666132c7b2647182d5be0c5f/debugpy-1.8.19-cp312-cp312-win32.whl", hash = "sha256:6599cab8a783d1496ae9984c52cb13b7c4a3bd06a8e6c33446832a5d97ce0bee", size = 5286355, upload-time = "2025-12-15T21:53:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/d8/3a/d3d8b48fec96e3d824e404bf428276fb8419dfa766f78f10b08da1cb2986/debugpy-1.8.19-cp312-cp312-win_amd64.whl", hash = "sha256:66e3d2fd8f2035a8f111eb127fa508469dfa40928a89b460b41fd988684dc83d", size = 5328239, upload-time = "2025-12-15T21:53:48.868Z" }, + { url = "https://files.pythonhosted.org/packages/71/3d/388035a31a59c26f1ecc8d86af607d0c42e20ef80074147cd07b180c4349/debugpy-1.8.19-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:91e35db2672a0abaf325f4868fcac9c1674a0d9ad9bb8a8c849c03a5ebba3e6d", size = 2538859, upload-time = "2025-12-15T21:53:50.478Z" }, + { url = "https://files.pythonhosted.org/packages/4a/19/c93a0772d0962294f083dbdb113af1a7427bb632d36e5314297068f55db7/debugpy-1.8.19-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:85016a73ab84dea1c1f1dcd88ec692993bcbe4532d1b49ecb5f3c688ae50c606", size = 4292575, upload-time = "2025-12-15T21:53:51.821Z" }, + { url = "https://files.pythonhosted.org/packages/5c/56/09e48ab796b0a77e3d7dc250f95251832b8bf6838c9632f6100c98bdf426/debugpy-1.8.19-cp313-cp313-win32.whl", hash = "sha256:b605f17e89ba0ecee994391194285fada89cee111cfcd29d6f2ee11cbdc40976", size = 5286209, upload-time = "2025-12-15T21:53:53.602Z" }, + { url = "https://files.pythonhosted.org/packages/fb/4e/931480b9552c7d0feebe40c73725dd7703dcc578ba9efc14fe0e6d31cfd1/debugpy-1.8.19-cp313-cp313-win_amd64.whl", hash = "sha256:c30639998a9f9cd9699b4b621942c0179a6527f083c72351f95c6ab1728d5b73", size = 5328206, upload-time = "2025-12-15T21:53:55.433Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b9/cbec520c3a00508327476c7fce26fbafef98f412707e511eb9d19a2ef467/debugpy-1.8.19-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:1e8c4d1bd230067bf1bbcdbd6032e5a57068638eb28b9153d008ecde288152af", size = 2537372, upload-time = "2025-12-15T21:53:57.318Z" }, + { url = "https://files.pythonhosted.org/packages/88/5e/cf4e4dc712a141e10d58405c58c8268554aec3c35c09cdcda7535ff13f76/debugpy-1.8.19-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d40c016c1f538dbf1762936e3aeb43a89b965069d9f60f9e39d35d9d25e6b809", size = 4268729, upload-time = "2025-12-15T21:53:58.712Z" }, + { url = "https://files.pythonhosted.org/packages/82/a3/c91a087ab21f1047db328c1d3eb5d1ff0e52de9e74f9f6f6fa14cdd93d58/debugpy-1.8.19-cp314-cp314-win32.whl", hash = "sha256:0601708223fe1cd0e27c6cce67a899d92c7d68e73690211e6788a4b0e1903f5b", size = 5286388, upload-time = "2025-12-15T21:54:00.687Z" }, + { url = "https://files.pythonhosted.org/packages/17/b8/bfdc30b6e94f1eff09f2dc9cc1f9cd1c6cde3d996bcbd36ce2d9a4956e99/debugpy-1.8.19-cp314-cp314-win_amd64.whl", hash = "sha256:8e19a725f5d486f20e53a1dde2ab8bb2c9607c40c00a42ab646def962b41125f", size = 5327741, upload-time = "2025-12-15T21:54:02.148Z" }, + { url = "https://files.pythonhosted.org/packages/25/3e/e27078370414ef35fafad2c06d182110073daaeb5d3bf734b0b1eeefe452/debugpy-1.8.19-py2.py3-none-any.whl", hash = "sha256:360ffd231a780abbc414ba0f005dad409e71c78637efe8f2bd75837132a41d38", size = 5292321, upload-time = "2025-12-15T21:54:16.024Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + [[package]] name = "fancyimpute" version = "0.7.0" @@ -325,6 +395,76 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, ] +[[package]] +name = "ipykernel" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, +] + +[[package]] +name = "ipython" +version = "9.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/dd/fb08d22ec0c27e73c8bc8f71810709870d51cadaf27b7ddd3f011236c100/ipython-9.9.0.tar.gz", hash = "sha256:48fbed1b2de5e2c7177eefa144aba7fcb82dac514f09b57e2ac9da34ddb54220", size = 4425043, upload-time = "2026-01-05T12:36:46.233Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/92/162cfaee4ccf370465c5af1ce36a9eacec1becb552f2033bb3584e6f640a/ipython-9.9.0-py3-none-any.whl", hash = "sha256:b457fe9165df2b84e8ec909a97abcf2ed88f565970efba16b1f7229c283d252b", size = 621431, upload-time = "2026-01-05T12:36:44.669Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -346,6 +486,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" }, ] +[[package]] +name = "jupyter-client" +version = "8.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/27/d10de45e8ad4ce872372c4a3a37b7b35b6b064f6f023a5c14ffcced4d59d/jupyter_client-8.7.0.tar.gz", hash = "sha256:3357212d9cbe01209e59190f67a3a7e1f387a4f4e88d1e0433ad84d7b262531d", size = 344691, upload-time = "2025-12-09T18:37:01.953Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/f5/fddaec430367be9d62a7ed125530e133bfd4a1c0350fe221149ee0f2b526/jupyter_client-8.7.0-py3-none-any.whl", hash = "sha256:3671a94fd25e62f5f2f554f5e95389c2294d89822378a5f2dd24353e1494a9e0", size = 106215, upload-time = "2025-12-09T18:37:00.024Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + [[package]] name = "kiwisolver" version = "1.4.9" @@ -558,6 +727,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/16/53/8d8fa0ea32a8c8239e04d022f6c059ee5e1b77517769feccd50f1df43d6d/matplotlib-3.10.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d6ca6ef03dfd269f4ead566ec6f3fb9becf8dab146fb999022ed85ee9f6b3eb", size = 8693933, upload-time = "2025-08-30T00:14:22.942Z" }, ] +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110, upload-time = "2025-10-23T09:00:22.126Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, +] + [[package]] name = "missingno" version = "0.5.2" @@ -573,6 +754,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/22/cd5cf999af21c2f97486622c551ac3d07361ced8125121e907f588ff5f24/missingno-0.5.2-py3-none-any.whl", hash = "sha256:55782621ce09ba0f0a1d08e5bd6d6fe1946469fb03951fadf7d209911ca5b072", size = 8704, upload-time = "2023-02-26T20:10:26.042Z" }, ] +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + [[package]] name = "nose" version = "1.3.7" @@ -740,6 +930,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cd/d7/612123674d7b17cf345aad0a10289b2a384bff404e0463a83c4a3a59d205/pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370", size = 13186141, upload-time = "2025-08-21T10:28:05.377Z" }, ] +[[package]] +name = "parso" +version = "0.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, +] + [[package]] name = "patsy" version = "1.0.1" @@ -752,6 +951,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923, upload-time = "2024-11-12T14:10:52.85Z" }, ] +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + [[package]] name = "pillow" version = "11.3.0" @@ -836,6 +1047,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, ] +[[package]] +name = "platformdirs" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -845,6 +1065,64 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/cb/09e5184fb5fc0358d110fc3ca7f6b1d033800734d34cac10f4136cfac10e/psutil-7.2.1.tar.gz", hash = "sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3", size = 490253, upload-time = "2025-12-29T08:26:00.169Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/8e/f0c242053a368c2aa89584ecd1b054a18683f13d6e5a318fc9ec36582c94/psutil-7.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d", size = 129624, upload-time = "2025-12-29T08:26:04.255Z" }, + { url = "https://files.pythonhosted.org/packages/26/97/a58a4968f8990617decee234258a2b4fc7cd9e35668387646c1963e69f26/psutil-7.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49", size = 130132, upload-time = "2025-12-29T08:26:06.228Z" }, + { url = "https://files.pythonhosted.org/packages/db/6d/ed44901e830739af5f72a85fa7ec5ff1edea7f81bfbf4875e409007149bd/psutil-7.2.1-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc", size = 180612, upload-time = "2025-12-29T08:26:08.276Z" }, + { url = "https://files.pythonhosted.org/packages/c7/65/b628f8459bca4efbfae50d4bf3feaab803de9a160b9d5f3bd9295a33f0c2/psutil-7.2.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf", size = 183201, upload-time = "2025-12-29T08:26:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/fb/23/851cadc9764edcc18f0effe7d0bf69f727d4cf2442deb4a9f78d4e4f30f2/psutil-7.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f", size = 139081, upload-time = "2025-12-29T08:26:12.483Z" }, + { url = "https://files.pythonhosted.org/packages/59/82/d63e8494ec5758029f31c6cb06d7d161175d8281e91d011a4a441c8a43b5/psutil-7.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672", size = 134767, upload-time = "2025-12-29T08:26:14.528Z" }, + { url = "https://files.pythonhosted.org/packages/05/c2/5fb764bd61e40e1fe756a44bd4c21827228394c17414ade348e28f83cd79/psutil-7.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679", size = 129716, upload-time = "2025-12-29T08:26:16.017Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d2/935039c20e06f615d9ca6ca0ab756cf8408a19d298ffaa08666bc18dc805/psutil-7.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f", size = 130133, upload-time = "2025-12-29T08:26:18.009Z" }, + { url = "https://files.pythonhosted.org/packages/77/69/19f1eb0e01d24c2b3eacbc2f78d3b5add8a89bf0bb69465bc8d563cc33de/psutil-7.2.1-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129", size = 181518, upload-time = "2025-12-29T08:26:20.241Z" }, + { url = "https://files.pythonhosted.org/packages/e1/6d/7e18b1b4fa13ad370787626c95887b027656ad4829c156bb6569d02f3262/psutil-7.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a", size = 184348, upload-time = "2025-12-29T08:26:22.215Z" }, + { url = "https://files.pythonhosted.org/packages/98/60/1672114392dd879586d60dd97896325df47d9a130ac7401318005aab28ec/psutil-7.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79", size = 140400, upload-time = "2025-12-29T08:26:23.993Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7b/d0e9d4513c46e46897b46bcfc410d51fc65735837ea57a25170f298326e6/psutil-7.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266", size = 135430, upload-time = "2025-12-29T08:26:25.999Z" }, + { url = "https://files.pythonhosted.org/packages/c5/cf/5180eb8c8bdf6a503c6919f1da28328bd1e6b3b1b5b9d5b01ae64f019616/psutil-7.2.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42", size = 128137, upload-time = "2025-12-29T08:26:27.759Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2c/78e4a789306a92ade5000da4f5de3255202c534acdadc3aac7b5458fadef/psutil-7.2.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1", size = 128947, upload-time = "2025-12-29T08:26:29.548Z" }, + { url = "https://files.pythonhosted.org/packages/29/f8/40e01c350ad9a2b3cb4e6adbcc8a83b17ee50dd5792102b6142385937db5/psutil-7.2.1-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8", size = 154694, upload-time = "2025-12-29T08:26:32.147Z" }, + { url = "https://files.pythonhosted.org/packages/06/e4/b751cdf839c011a9714a783f120e6a86b7494eb70044d7d81a25a5cd295f/psutil-7.2.1-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6", size = 156136, upload-time = "2025-12-29T08:26:34.079Z" }, + { url = "https://files.pythonhosted.org/packages/44/ad/bbf6595a8134ee1e94a4487af3f132cef7fce43aef4a93b49912a48c3af7/psutil-7.2.1-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8", size = 148108, upload-time = "2025-12-29T08:26:36.225Z" }, + { url = "https://files.pythonhosted.org/packages/1c/15/dd6fd869753ce82ff64dcbc18356093471a5a5adf4f77ed1f805d473d859/psutil-7.2.1-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67", size = 147402, upload-time = "2025-12-29T08:26:39.21Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/d9317542e3f2b180c4306e3f45d3c922d7e86d8ce39f941bb9e2e9d8599e/psutil-7.2.1-cp37-abi3-win_amd64.whl", hash = "sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17", size = 136938, upload-time = "2025-12-29T08:26:41.036Z" }, + { url = "https://files.pythonhosted.org/packages/3e/73/2ce007f4198c80fcf2cb24c169884f833fe93fbc03d55d302627b094ee91/psutil-7.2.1-cp37-abi3-win_arm64.whl", hash = "sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442", size = 133836, upload-time = "2025-12-29T08:26:43.086Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + [[package]] name = "pycparser" version = "2.23" @@ -909,12 +1187,71 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + [[package]] name = "sampling-env" version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "fancyimpute" }, + { name = "ipykernel" }, { name = "matplotlib" }, { name = "missingno" }, { name = "numpy" }, @@ -925,6 +1262,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "fancyimpute", specifier = ">=0.7.0" }, + { name = "ipykernel", specifier = ">=6.30.1" }, { name = "matplotlib", specifier = ">=3.10.6" }, { name = "missingno", specifier = ">=0.5.2" }, { name = "numpy", specifier = ">=2.3.3" }, @@ -1116,6 +1454,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + [[package]] name = "statsmodels" version = "0.14.5" @@ -1147,6 +1499,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/48/973da1ee8bc0743519759e74c3615b39acdc3faf00e0a0710f8c856d8c9d/statsmodels-0.14.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a085d47c8ef5387279a991633883d0e700de2b0acc812d7032d165888627bef", size = 10453538, upload-time = "2025-07-07T14:24:06.959Z" }, { url = "https://files.pythonhosted.org/packages/c7/d6/18903fb707afd31cf1edaec5201964dbdacb2bfae9a22558274647a7c88f/statsmodels-0.14.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f866b2ebb2904b47c342d00def83c526ef2eb1df6a9a3c94ba5fe63d0005aec", size = 10681584, upload-time = "2025-07-07T14:24:21.038Z" }, { url = "https://files.pythonhosted.org/packages/44/d6/80df1bbbfcdc50bff4152f43274420fa9856d56e234d160d6206eb1f5827/statsmodels-0.14.5-cp313-cp313-win_amd64.whl", hash = "sha256:2a06bca03b7a492f88c8106103ab75f1a5ced25de90103a89f3a287518017939", size = 9604641, upload-time = "2025-07-07T12:08:36.23Z" }, + { url = "https://files.pythonhosted.org/packages/fd/6c/0fb40a89d715412160097c6f3387049ed88c9bd866c8838a8852c705ae2f/statsmodels-0.14.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:07c4dad25bbb15864a31b4917a820f6d104bdc24e5ddadcda59027390c3bed9e", size = 10211256, upload-time = "2025-10-30T13:46:58.591Z" }, + { url = "https://files.pythonhosted.org/packages/88/4a/e36fe8b19270ab3e80df357da924c6c029cab0fb9a0fbd28aaf49341707d/statsmodels-0.14.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:babb067c852e966c2c933b79dbb5d0240919d861941a2ef6c0e13321c255528d", size = 10110933, upload-time = "2025-10-30T13:47:11.774Z" }, + { url = "https://files.pythonhosted.org/packages/8a/bf/1b7e7b1a6c09a88a9c5c9e60622c050dfd08af11c2e6d4a42dbc71b32ee1/statsmodels-0.14.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:110194b137286173cc676d7bad0119a197778de6478fc6cbdc3b33571165ac1e", size = 10253981, upload-time = "2025-10-30T16:32:22.399Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d0/f95da95524bdd99613923ca61a3036d1308cee1290e5e8acb89f51736a8c/statsmodels-0.14.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c8a9c384a60c80731b278e7fd18764364c8817f4995b13a175d636f967823d1", size = 10460450, upload-time = "2025-10-30T16:32:44.985Z" }, + { url = "https://files.pythonhosted.org/packages/28/bb/59e7be0271be264b7b541baf3973f97747740950bfd5115de731f63da8ab/statsmodels-0.14.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:557df3a870a57248df744fdfcc444ecbc5bdbf1c042b8a8b5d8e3e797830dc2a", size = 10694060, upload-time = "2025-10-30T16:33:07.656Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c0/b28d0fd0347ea38d3610052f479e4b922eb33bb8790817f93cd89e6e08ba/statsmodels-0.14.5-cp314-cp314-win_amd64.whl", hash = "sha256:95af7a9c4689d514f4341478b891f867766f3da297f514b8c4adf08f4fa61d03", size = 9648961, upload-time = "2025-10-30T13:47:24.303Z" }, ] [[package]] @@ -1158,6 +1516,43 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] +[[package]] +name = "tornado" +version = "6.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/1d/0a336abf618272d53f62ebe274f712e213f5a03c0b2339575430b8362ef2/tornado-6.5.4.tar.gz", hash = "sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7", size = 513632, upload-time = "2025-12-15T19:21:03.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9", size = 443909, upload-time = "2025-12-15T19:20:48.382Z" }, + { url = "https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843", size = 442163, upload-time = "2025-12-15T19:20:49.791Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b5/206f82d51e1bfa940ba366a8d2f83904b15942c45a78dd978b599870ab44/tornado-6.5.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17", size = 445746, upload-time = "2025-12-15T19:20:51.491Z" }, + { url = "https://files.pythonhosted.org/packages/8e/9d/1a3338e0bd30ada6ad4356c13a0a6c35fbc859063fa7eddb309183364ac1/tornado-6.5.4-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335", size = 445083, upload-time = "2025-12-15T19:20:52.778Z" }, + { url = "https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f", size = 445315, upload-time = "2025-12-15T19:20:53.996Z" }, + { url = "https://files.pythonhosted.org/packages/27/07/2273972f69ca63dbc139694a3fc4684edec3ea3f9efabf77ed32483b875c/tornado-6.5.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84", size = 446003, upload-time = "2025-12-15T19:20:56.101Z" }, + { url = "https://files.pythonhosted.org/packages/d1/83/41c52e47502bf7260044413b6770d1a48dda2f0246f95ee1384a3cd9c44a/tornado-6.5.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f", size = 445412, upload-time = "2025-12-15T19:20:57.398Z" }, + { url = "https://files.pythonhosted.org/packages/10/c7/bc96917f06cbee182d44735d4ecde9c432e25b84f4c2086143013e7b9e52/tornado-6.5.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8", size = 445392, upload-time = "2025-12-15T19:20:58.692Z" }, + { url = "https://files.pythonhosted.org/packages/0c/1a/d7592328d037d36f2d2462f4bc1fbb383eec9278bc786c1b111cbbd44cfa/tornado-6.5.4-cp39-abi3-win32.whl", hash = "sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1", size = 446481, upload-time = "2025-12-15T19:21:00.008Z" }, + { url = "https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-cp39-abi3-win_amd64.whl", hash = "sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc", size = 446886, upload-time = "2025-12-15T19:21:01.287Z" }, + { url = "https://files.pythonhosted.org/packages/50/49/8dc3fd90902f70084bd2cd059d576ddb4f8bb44c2c7c0e33a11422acb17e/tornado-6.5.4-cp39-abi3-win_arm64.whl", hash = "sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1", size = 445910, upload-time = "2025-12-15T19:21:02.571Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + [[package]] name = "tzdata" version = "2025.2" @@ -1166,3 +1561,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be76 wheels = [ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, ] + +[[package]] +name = "wcwidth" +version = "0.2.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, +]