diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..62efd1e
--- /dev/null
+++ b/.env.example
@@ -0,0 +1 @@
+OPENAI_API_KEY='sk-...'
\ No newline at end of file
diff --git a/examples/uso_basico.ipynb b/examples/uso_basico.ipynb
index e04aeb8..94caf41 100644
--- a/examples/uso_basico.ipynb
+++ b/examples/uso_basico.ipynb
@@ -20,7 +20,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -41,12 +41,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from cluster_facil import ClusterFacil\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv(override=True) # Isso carrega as variáveis do .env para o ambiente\n",
"\n",
"# Criando um DataFrame de exemplo simples com textos\n",
"data = {'id': [1, 2, 3, 4, 5, 6, 7, 8],\n",
@@ -64,9 +66,102 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DataFrame de Exemplo:\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " texto_documento | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " Acordo homologado entre as partes. | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 7 | \n",
+ " Indenização por danos morais foi concedida. | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 8 | \n",
+ " Extinção do processo sem resolução de mérito. | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id texto_documento\n",
+ "0 1 O juiz determinou o pagamento da indenização.\n",
+ "1 2 Recurso de apelação foi interposto pela defesa.\n",
+ "2 3 A sentença julgou procedente o pedido do autor.\n",
+ "3 4 A corte negou provimento ao recurso especial.\n",
+ "4 5 Processo arquivado por falta de movimentação.\n",
+ "5 6 Acordo homologado entre as partes.\n",
+ "6 7 Indenização por danos morais foi concedida.\n",
+ "7 8 Extinção do processo sem resolução de mérito."
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"df_exemplo = pd.DataFrame(data)\n",
"\n",
@@ -86,9 +181,18 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:39,165 - INFO - ClusterFacil iniciado com um DataFrame já existente.\n",
+ "2025-04-21 22:59:39,169 - INFO - Próxima rodada de clusterização definida como: 1\n"
+ ]
+ }
+ ],
"source": [
"cf = ClusterFacil(df_exemplo, random_state=42)"
]
@@ -108,9 +212,63 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:39,175 - INFO - Iniciando preparação dos textos para agrupamento (rodada 1). Coluna de texto: 'texto_documento', limite de grupos para teste: 5.\n",
+ "2025-04-21 22:59:39,175 - INFO - Analisando características de 8 textos (TF-IDF)...\n",
+ "2025-04-21 22:59:39,182 - INFO - Análise TF-IDF concluída. 8 textos processados, 30 características (palavras/termos) identificadas.\n",
+ "2025-04-21 22:59:39,182 - INFO - Avaliando diferentes números de grupos (método do cotovelo)...\n",
+ "2025-04-21 22:59:39,183 - INFO - Calculando opções de agrupamento (inércias) para K de 1 a 5...\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Iniciando a preparação e geração do gráfico do cotovelo...\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Avaliando número de grupos (K): 100%|██████████| 5/5 [00:00<00:00, 20.80K/s]\n",
+ "2025-04-21 22:59:39,425 - INFO - Cálculo das opções de agrupamento (inércias) concluído.\n",
+ "2025-04-21 22:59:39,427 - WARNING - O gráfico do cotovelo pode estar incompleto devido a erros no cálculo de alguns valores de K (exibindo 4 pontos).\n",
+ "2025-04-21 22:59:39,865 - INFO - Gerando gráfico do cotovelo para visualização...\n",
+ "2025-04-21 22:59:39,885 - INFO - Exibindo gráfico do cotovelo...\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAIkCAYAAADYsyCEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhwFJREFUeJzt3Qd4FNXXx/FfOi2E3nvvvbeA9CaIigoioqJioSl2xYaiKIKKBQtWBAugoPQSeu+9SO81dAhJ3ueM/+QNIUACCbub/X6eZyE7287M3t2dM/feMz7R0dHRAgAAAAAv4evqAAAAAADgViIJAgAAAOBVSIIAAAAAeBWSIAAAAABehSQIAAAAgFchCQIAAADgVUiCAAAAAHgVkiAAAAAAXoUkCEgB06ZN04ABA3T27FlXhwIA1zRq1Ch99NFHioqKcnUoAHDLkAQByWzr1q268847lTNnTqVLl+6K2ydNmqRKlSopTZo08vHx0YkTJ/Tggw+qUKFCcgfuFIsnmTVrlvN+2v9wH/aevP7667HX7W9bduTIEZfE426fr+nTp6tbt26qUKGCfH29Y5fgu+++c9rAjh07XB1KqvP++++rVKlSN5RQr1+/Xv7+/lq7dm2KxAbE5x3feMBVbN++XU899ZRKlCjhJCx2KVOmjJ588kmtXr06yc934cIFdezYUU8//bQeeeSRK24/evSoc3vatGk1bNgw/fjjj0qfPr28gSUHHTp0UK5cuRQYGKgcOXKobdu2GjNmTJKfy3rYbGeWhMO9diqvdlm4cKGrQ0y1LKmybWxJTHR09BW32232HZeQ/fv36/7779dXX32lxo0b34JoU7dDhw7phRdeUPny5ZUhQwbnQFexYsWcJHPu3LlK7U6ePKn33ntPzz///GUJ9dXa4DvvvOPc9tBDDzlJk/32tm7dWq+99totjhzeyt/VAQCuMmHCBN1zzz3OkafOnTurYsWKzhf3xo0bnR3zzz//3EmSChYsmOjnXLdunfODZ0lQQpYsWaJTp07prbfeUpMmTWKX205Iah6K0r9/f7355psqXry4HnvsMWebWkL4zz//OL1mP//8szp16pSkJOiNN95w/m7YsGEKRo6ksPe4cOHCVyy3HUGkrDVr1jjfW/Z5SqwVK1Y4w+DuvffeFI3NGyxevNjZgbfvd9uejz/+uIKCgpzfkHHjxjkHCsLCwtSgQQOlVt9++60uXbqk++6777r3HThwoF5++WV17dpVX3/9dWzSZNutVatW2rZtm4oWLXoLooY3IwmCV7IvWPuhsp1xGw6SO3fuy263o1mfffbZdYeHnDlz5rKenCpVqjiXax0pNJkyZbpseUBAgFKr33//3dk5vuuuuzRy5MjL1rVfv36aPHmyIiIiXBqjN7OEMqFhmzeiZcuWqlatWrI8FxLPepbz58/vfM6st9WOrieG7Wy6q/Pnzzs9xp4wRO/48eNq3769c0Bt5cqVznCwuN5++21n3pW9T0n5PfE0I0aM0O233+70gF3LoEGD9OKLL+qBBx5wEqe477EdHMycObO+//57pz0DKcn9v12AFBq3bD849qUdPwEy9mPWs2dPZ8ci7rATG+JgCZTtPAQHBzs9SGbOnDm6++67VaBAAefonz2uT58+OnfuXOzjrcfCjnqZ6tWrOzsq9pxXmydgPUNDhw51hlbYj0r27NnVokULLV26NPY+dtTNepXsiJm9rj3HSy+95AzLSww7QlmuXDnn+e3/sWPHJng/21bPPPOMs172OiVLltQHH3yQ4PCb+F599VVlyZLF+bFLKNlr3ry52rRpc1mi+PDDDztzqiwu66GzH8QYNo7ftoWx3qCYIVdx533MmDFD9evXd3YoLOFs166dNmzYcFliZo+xI7Pxffnll85tccelW++gJXG2HhaT7ej/9ddfSozffvtNVatWdXaAsmXL5gw/2rt3b6KHmM2ePdvpPcuaNasyZszo7DjYTldcf/75p3MUOk+ePM77Y+3B2kVkZORl97M2aO/zsmXLnCPSlvxYe0nKc9ws2xm07WGfH1sfa9/WzuOyeXL2+bH2bLHky5fPWe+483iu106uJ2YunrWPkJAQpwc3fiET+3647bbbnKGbFocN17Ee4sS6FZ8vYzuRr7zyijOE92qvcb35MAnNaYtpL/a8oaGhTnuxXj37/Bj7/NSsWdNp2xazFYSJz9q6DXey98nWrWzZss53QUKvbW3D1iNv3rzOa9nwqpv5DMX0ztt7aI+1dmQJydV63SdOnBj7vWHt0z4P9vjr+eKLL5yhhUOGDLkiATK2btY7Yt/78eem2TwY6wW3Hf969erFbveEerjj/07Ye2jPYW3FevTsoJ6tp71XCc2rud73orGerN69e8d+9qztN23aVMuXL7/mNrAeL2sncUc4JGTw4MF67rnnnPfQPl/xk1z7jbB1t+8jIKXREwSvHQpnP+b2A54UlnTYTrv9WNkPT8wRdPuRth2ZHj16ODurixYt0ieffKI9e/Y4txnr+rcdheHDh8cOG7pWd7/t4NkOix1dt/lF9tqWbNn8ipij7bbcdvxsB912oux13333XeeH7Xo7Q1OmTHGGztiOnT3GhqfZjqDtKMRlO2J2dG/mzJlOTFbUwXpvrBfHdkTsx/dqtmzZ4iQQthNkOxXXY0mj/QBacQkbQ27byLaf/fjbTmuvXr2cBMh2RG1b33HHHc6Rb2NzIoztiNk2K1KkiLOjYc9p70XdunWdH3L7cbedG0tof/31V2eHIa7Ro0c7O2q282dsJ8geaztmNt7fdiDscXbk948//nBiuBp7/2yb2s6PbeODBw86O/zz5s1zhiLF7xFMiG0Hu5+ty6ZNm5x137lzZ+yOY8zr2Pr07dvX+d92dmxcve1E2lHXuOx9tu1jPaG2I2I7p0l9jqsJDw+/ouCAxWifCTN16lRnZ9Dmn1hvq7G2atvD3ltz+vRpZ0fNllu7sZ5Ve05LOu3zZDvBiWkn12Nz8+xx9r5Yu7AhObbDFxOXsW1tbcHavx0YGT9+vJ544glnJ9rmDbr68xWX7Uhb0mrfLdYmE9sbdD2WcNtBCmsvdqDHton9bUNYbWfZhi/Za1sbse+h3bt3x37Wrb3XqlUrdk6IfXYt0bD1tHZlj4/L4rfen2effdY5kGN/38xn6MCBA2rUqJHz3Rnz2bXv34R6ZGx+ph2ksu93awOWENu62ne9vc61illYu7DnjPkuSgrbpjZM2ObHJDbpje+HH35wkhdrk9aDZtvHEj8bIhnz+U7M96Kx99OSXHu/rO1au7X5TPZ5vNYoh/nz5zv/X+s+Fpf9Tll7sff1ar18lvBaEmRtxA6UACkmGvAy4eHh9ksT3b59+ytuO378ePThw4djL2fPno29rWvXrs7jXnjhhSsed/r06SuWvf3229E+Pj7RO3fujF02YsQI5zmWLFly2X3tuQsWLBh7fcaMGc79evbsecXzRkVFOf+vXLnSuc8jjzxy2e3PPvuss9ye41oqVaoUnTt37ugTJ07ELpsyZYrz2LixjBs3zllm6xPXXXfd5azf1q1br/oaf/75p/PYjz76KDoxhgwZ4tz/p59+il128eLF6Nq1a0dnyJAh+uTJk84ye2/sfv37909wvXLkyBF99OjR2GWrVq2K9vX1jX7ggQdil913333O/S5duhS7bP/+/c793nzzzdhljRs3ji5fvnz0+fPnL3sP6tSpE128ePHYZTNnznRisv9j4rbnL1euXPS5c+di7zdhwgTnfq+99to1t0VMW6latarzXDHef/99Z7lt2xhx22mMxx57LDpdunSXxR0aGuo89osvvrji/ol9jmvFmtAlKCgo9n69evWKzpgx42XbPD7bLva4MWPGXLXtJ7admPjtxP62ZQ899NBlz33HHXdEZ82a9brbpHnz5tFFihSJvp5b8fmK+e5Inz698/f3339/xbaz608++eQV79X27dsve5747Tduexk5cmTsso0bNzrL7HOycOHC2OWTJ092ltvzx3j44YedbXDkyJHLXuvee++NDgkJid2+Ma9t2zXuNr/Zz1Dv3r2d+y1atCh22aFDh5zXjrsNTp06FZ0pU6bo7t27X/b4AwcOOPeNvzy+zJkzO+93fNYO4/6exP2diGmH9j0Un213u8QX/3fC4rfnSJs2bfSePXtil9v62vI+ffok+XvR1jdue0msV155xXlN25bxxbT5mPW91uffWHuL/74BKYHhcPA6MUMs7Gh3fHZ02Y5Wxlysglt81gMRX9xx3HaU2I7G2RFF+/63o4hJZT0MdvTUCgrEF3OE14oKGDtyH5cdaTN///33VZ/fhm7Y2HU78mlDgWLYsAc7+heXvY6fn58zPDD+69j62ZHd623rxPQCxbyWVY+LO7HWhkfYa1sPQULD1xJaL+sRsKFrMayXyNYtZpsZK4phQ6riDv+xI6D2/tlt5tixY06PiPUa2JFW65Gwix0dtffXerquNizHhi3a81vPQdwx8tYLZUNmrvX+xPXoo49eNozQ2p/1SsRdl7hHtmPitN4UO5ptPXFx2RAXO7IeX1Ke42rs82K9PXEvcduHHbW3HlNbfq22b0PbEuphi9v2b6adxBzxjsvW1d7XmDYbf5vE9HJZz+G///7rXHf15ys+G55rvQrWG3SjvQrx2fdk3MIJ1ptt72Pp0qUv60mP+du2jbHXt/fSKkDa3zGfHbvYZ8e2X/whVra94m7zm/0M2ba1nqgaNWrELrPv9ZhhzDGsPVoPorWnuHHa+2LrZb1012JtJqHfky5dulz2e2JV067XDm+E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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:39,968 - INFO - Preparação da rodada 1 concluída. Analise o gráfico do cotovelo (baseado em 8 textos) para escolher o número de grupos (K).\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Preparação concluída.\n"
+ ]
+ }
+ ],
"source": [
"print(\"Iniciando a preparação e geração do gráfico do cotovelo...\")\n",
"cf.preparar(coluna_textos='texto_documento', limite_k=5)\n",
@@ -141,9 +299,29 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:39,975 - INFO - Iniciando agrupamento (clusterização) em 3 grupos para a rodada 1 (prefixo: 'cluster_').\n",
+ "2025-04-21 22:59:39,975 - INFO - Agrupando 8 textos em 3 grupos (K-Means)...\n",
+ "2025-04-21 22:59:39,975 - INFO - Agrupamento K-Means concluído. 8 textos foram atribuídos a grupos.\n",
+ "2025-04-21 22:59:39,983 - INFO - Coluna de resultados 'cluster_1' adicionada/atualizada.\n",
+ "2025-04-21 22:59:39,983 - INFO - Agrupamento da rodada 1 (prefixo 'cluster_') concluído com sucesso. Resultados na coluna 'cluster_1'.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Executando a clusterização com K=3...\n",
+ "Clusterização concluída. Coluna 'cluster_1' adicionada ao DataFrame.\n"
+ ]
+ }
+ ],
"source": [
"k_escolhido = 3\n",
"print(f\"Executando a clusterização com K={k_escolhido}...\")\n",
@@ -162,9 +340,111 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DataFrame com a coluna de cluster:\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " cluster_1 | \n",
+ " texto_documento | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " Acordo homologado entre as partes. | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 7 | \n",
+ " 2 | \n",
+ " Indenização por danos morais foi concedida. | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 8 | \n",
+ " 1 | \n",
+ " Extinção do processo sem resolução de mérito. | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id cluster_1 texto_documento\n",
+ "0 1 2 O juiz determinou o pagamento da indenização.\n",
+ "1 2 2 Recurso de apelação foi interposto pela defesa.\n",
+ "2 3 0 A sentença julgou procedente o pedido do autor.\n",
+ "3 4 2 A corte negou provimento ao recurso especial.\n",
+ "4 5 1 Processo arquivado por falta de movimentação.\n",
+ "5 6 2 Acordo homologado entre as partes.\n",
+ "6 7 2 Indenização por danos morais foi concedida.\n",
+ "7 8 1 Extinção do processo sem resolução de mérito."
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"print(\"DataFrame com a coluna de cluster:\")\n",
"display(cf.df[['id', nome_coluna_cluster, 'texto_documento']])"
@@ -181,9 +461,49 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:40,007 - INFO - Iniciando processo para salvar resultados (Opção: 'ambos', Prefixo: 'cluster_')...\n",
+ "2025-04-21 22:59:40,010 - INFO - Usando caminho padrão para o arquivo completo: .\\resultados_cluster_cluster_rodada1.csv\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Salvando os resultados...\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:40,395 - INFO - Usando caminho padrão para o arquivo de amostras: .\\resultados_cluster_cluster_amostras_rodada1.xlsx\n",
+ "2025-04-21 22:59:40,395 - INFO - Salvando dados em 'resultados_cluster_cluster_rodada1.csv' (Formato: csv)...\n",
+ "2025-04-21 22:59:40,399 - INFO - Dados salvos com sucesso em: 'c:\\Users\\julio\\OneDrive\\Documentos\\insper\\cluster-facil\\examples\\resultados_cluster_cluster_rodada1.csv'.\n",
+ "2025-04-21 22:59:40,400 - INFO - Gerando e salvando arquivo de exemplos (até 10 por grupo) em 'resultados_cluster_cluster_amostras_rodada1.xlsx' (Formato: xlsx)...\n",
+ "2025-04-21 22:59:40,402 - INFO - Salvando dados em 'resultados_cluster_cluster_amostras_rodada1.xlsx' (Formato: xlsx)...\n",
+ "2025-04-21 22:59:40,415 - INFO - Dados salvos com sucesso em: 'c:\\Users\\julio\\OneDrive\\Documentos\\insper\\cluster-facil\\examples\\resultados_cluster_cluster_amostras_rodada1.xlsx'.\n",
+ "2025-04-21 22:59:40,417 - INFO - Processo de salvamento concluído. Status: {'tudo_salvo': True, 'caminho_tudo': 'c:\\\\Users\\\\julio\\\\OneDrive\\\\Documentos\\\\insper\\\\cluster-facil\\\\examples\\\\resultados_cluster_cluster_rodada1.csv', 'amostras_salvas': True, 'caminho_amostras': 'c:\\\\Users\\\\julio\\\\OneDrive\\\\Documentos\\\\insper\\\\cluster-facil\\\\examples\\\\resultados_cluster_cluster_amostras_rodada1.xlsx'}\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Status do salvamento:\n",
+ "{'tudo_salvo': True, 'caminho_tudo': 'c:\\\\Users\\\\julio\\\\OneDrive\\\\Documentos\\\\insper\\\\cluster-facil\\\\examples\\\\resultados_cluster_cluster_rodada1.csv', 'amostras_salvas': True, 'caminho_amostras': 'c:\\\\Users\\\\julio\\\\OneDrive\\\\Documentos\\\\insper\\\\cluster-facil\\\\examples\\\\resultados_cluster_cluster_amostras_rodada1.xlsx'}\n",
+ "- DataFrame completo salvo em: c:\\Users\\julio\\OneDrive\\Documentos\\insper\\cluster-facil\\examples\\resultados_cluster_cluster_rodada1.csv\n",
+ "- Amostras salvas em: c:\\Users\\julio\\OneDrive\\Documentos\\insper\\cluster-facil\\examples\\resultados_cluster_cluster_amostras_rodada1.xlsx\n"
+ ]
+ }
+ ],
"source": [
"print(\"Salvando os resultados...\")\n",
"status_salvar = cf.salvar(\n",
@@ -217,9 +537,143 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 22:59:40,425 - INFO - Iniciando atribuição da classificação 'Procedente/Indenização' para o(s) grupo(s) [0, 2] da última rodada.\n",
+ "2025-04-21 22:59:40,427 - INFO - Coluna de classificação 'classificacao' não encontrada. Criando coluna para futuras classificações.\n",
+ "2025-04-21 22:59:40,427 - INFO - Aplicando classificação 'Procedente/Indenização' a 6 texto(s) na coluna 'classificacao' correspondente(s) ao(s) grupo(s) [0, 2] da coluna 'cluster_1'.\n",
+ "2025-04-21 22:59:40,427 - INFO - Atribuição de classificação concluída.\n",
+ "2025-04-21 22:59:40,427 - INFO - Iniciando atribuição da classificação 'Recurso/Extinção' para o(s) grupo(s) 1 da última rodada.\n",
+ "2025-04-21 22:59:40,436 - INFO - Aplicando classificação 'Recurso/Extinção' a 2 texto(s) na coluna 'classificacao' correspondente(s) ao(s) grupo(s) [1] da coluna 'cluster_1'.\n",
+ "2025-04-21 22:59:40,437 - INFO - Atribuição de classificação concluída.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "DataFrame com a coluna de classificação:\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " cluster_1 | \n",
+ " classificacao | \n",
+ " texto_documento | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " Procedente/Indenização | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " Recurso/Extinção | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Acordo homologado entre as partes. | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 7 | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Indenização por danos morais foi concedida. | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 8 | \n",
+ " 1 | \n",
+ " Recurso/Extinção | \n",
+ " Extinção do processo sem resolução de mérito. | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id cluster_1 classificacao \\\n",
+ "0 1 2 Procedente/Indenização \n",
+ "1 2 2 Procedente/Indenização \n",
+ "2 3 0 Procedente/Indenização \n",
+ "3 4 2 Procedente/Indenização \n",
+ "4 5 1 Recurso/Extinção \n",
+ "5 6 2 Procedente/Indenização \n",
+ "6 7 2 Procedente/Indenização \n",
+ "7 8 1 Recurso/Extinção \n",
+ "\n",
+ " texto_documento \n",
+ "0 O juiz determinou o pagamento da indenização. \n",
+ "1 Recurso de apelação foi interposto pela defesa. \n",
+ "2 A sentença julgou procedente o pedido do autor. \n",
+ "3 A corte negou provimento ao recurso especial. \n",
+ "4 Processo arquivado por falta de movimentação. \n",
+ "5 Acordo homologado entre as partes. \n",
+ "6 Indenização por danos morais foi concedida. \n",
+ "7 Extinção do processo sem resolução de mérito. "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# Supondo que, após análise, o cluster 0 e 2 são 'Procedente/Indenização'\n",
"# e o cluster 1 é 'Recurso/Extinção'\n",
@@ -231,6 +685,165 @@
"display(cf.df[['id', nome_coluna_cluster, cf.nome_coluna_classificacao, 'texto_documento']])"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Também é possível anotar um cluster automaticamente com LLMs:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 23:01:45,683 - INFO - HTTP Request: POST https://api.openai.com/v1/responses \"HTTP/1.1 200 OK\"\n",
+ "2025-04-21 23:01:47,365 - INFO - HTTP Request: POST https://api.openai.com/v1/responses \"HTTP/1.1 200 OK\"\n",
+ "2025-04-21 23:01:48,702 - INFO - HTTP Request: POST https://api.openai.com/v1/responses \"HTTP/1.1 200 OK\"\n",
+ "2025-04-21 23:01:50,940 - INFO - HTTP Request: POST https://api.openai.com/v1/responses \"HTTP/1.1 200 OK\"\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{2: 'Decisões e Procedimentos Judiciais', 0: 'Decisões Favoráveis ao Autor', 1: 'Arquivamento e Extinção de Processos'}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " texto_documento | \n",
+ " cluster_1 | \n",
+ " classificacao | \n",
+ " cluster_1_classificacao | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões e Procedimentos Judiciais | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões e Procedimentos Judiciais | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ " 0 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões Favoráveis ao Autor | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões e Procedimentos Judiciais | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ " 1 | \n",
+ " Recurso/Extinção | \n",
+ " Arquivamento e Extinção de Processos | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " Acordo homologado entre as partes. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões e Procedimentos Judiciais | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 7 | \n",
+ " Indenização por danos morais foi concedida. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ " Decisões e Procedimentos Judiciais | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 8 | \n",
+ " Extinção do processo sem resolução de mérito. | \n",
+ " 1 | \n",
+ " Recurso/Extinção | \n",
+ " Arquivamento e Extinção de Processos | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id texto_documento cluster_1 \\\n",
+ "0 1 O juiz determinou o pagamento da indenização. 2 \n",
+ "1 2 Recurso de apelação foi interposto pela defesa. 2 \n",
+ "2 3 A sentença julgou procedente o pedido do autor. 0 \n",
+ "3 4 A corte negou provimento ao recurso especial. 2 \n",
+ "4 5 Processo arquivado por falta de movimentação. 1 \n",
+ "5 6 Acordo homologado entre as partes. 2 \n",
+ "6 7 Indenização por danos morais foi concedida. 2 \n",
+ "7 8 Extinção do processo sem resolução de mérito. 1 \n",
+ "\n",
+ " classificacao cluster_1_classificacao \n",
+ "0 Procedente/Indenização Decisões e Procedimentos Judiciais \n",
+ "1 Procedente/Indenização Decisões e Procedimentos Judiciais \n",
+ "2 Procedente/Indenização Decisões Favoráveis ao Autor \n",
+ "3 Procedente/Indenização Decisões e Procedimentos Judiciais \n",
+ "4 Recurso/Extinção Arquivamento e Extinção de Processos \n",
+ "5 Procedente/Indenização Decisões e Procedimentos Judiciais \n",
+ "6 Procedente/Indenização Decisões e Procedimentos Judiciais \n",
+ "7 Recurso/Extinção Arquivamento e Extinção de Processos "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Supondo que cf seja uma instância de ClusterFacil já clusterizada\n",
+ "rotulos = cf.auto_label_cluster()\n",
+ "print(rotulos)\n",
+ "display(cf.df)"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -242,9 +855,32 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 21:54:10,595 - INFO - Classificações manuais únicas encontradas: ['Procedente/Indenização', 'Recurso/Extinção']\n",
+ "2025-04-21 21:54:10,602 - INFO - Contagem de textos por classificação manual na coluna 'classificacao':\n",
+ "classificacao\n",
+ "Procedente/Indenização 6\n",
+ "Recurso/Extinção 2\n",
+ "Name: count, dtype: Int64\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Classificações únicas: ['Procedente/Indenização', 'Recurso/Extinção']\n",
+ "\n",
+ "Contagem por classificação:\n",
+ "None\n"
+ ]
+ }
+ ],
"source": [
"print(\"Classificações únicas:\", cf.listar_classificacoes())\n",
"print(\"\\nContagem por classificação:\")\n",
@@ -263,9 +899,106 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 21:54:16,635 - INFO - Criando um novo objeto ClusterFacil para analisar o subcluster da classificação: 'Procedente/Indenização'\n",
+ "2025-04-21 21:54:16,636 - INFO - Filtrando dados para criar o subcluster da classificação: 'Procedente/Indenização'\n",
+ "2025-04-21 21:54:16,637 - INFO - Subcluster criado com 6 textos correspondentes à classificação 'Procedente/Indenização'.\n",
+ "2025-04-21 21:54:16,637 - INFO - Colunas de resultados de agrupamentos anteriores removidas do subcluster: ['cluster_1']\n",
+ "2025-04-21 21:54:16,637 - INFO - Coluna de classificação original ('classificacao') renomeada para 'classificacao_origem' no subcluster.\n",
+ "2025-04-21 21:54:16,637 - INFO - ClusterFacil iniciado com um DataFrame já existente.\n",
+ "2025-04-21 21:54:16,637 - INFO - Próxima rodada de clusterização definida como: 1\n",
+ "2025-04-21 21:54:16,637 - INFO - Novo objeto ClusterFacil para o subcluster criado e configurado.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Criando subcluster para 'Procedente/Indenização'...\n",
+ "Nova instância 'sub_cf' criada com 6 linhas.\n",
+ "DataFrame do subcluster (observe a coluna 'classificacao_origem'):\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " texto_documento | \n",
+ " classificacao_origem | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " Acordo homologado entre as partes. | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id texto_documento classificacao_origem\n",
+ "0 1 O juiz determinou o pagamento da indenização. Procedente/Indenização\n",
+ "1 2 Recurso de apelação foi interposto pela defesa. Procedente/Indenização\n",
+ "2 3 A sentença julgou procedente o pedido do autor. Procedente/Indenização\n",
+ "3 4 A corte negou provimento ao recurso especial. Procedente/Indenização\n",
+ "5 6 Acordo homologado entre as partes. Procedente/Indenização"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"classificacao_alvo = 'Procedente/Indenização'\n",
"print(f\"Criando subcluster para '{classificacao_alvo}'...\")\n",
@@ -287,9 +1020,150 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 21:54:20,544 - INFO - Iniciando preparação dos textos para agrupamento (rodada 1). Coluna de texto: 'texto_documento', limite de grupos para teste: 3.\n",
+ "2025-04-21 21:54:20,546 - INFO - Analisando características de 6 textos (TF-IDF)...\n",
+ "2025-04-21 21:54:20,547 - INFO - Análise TF-IDF concluída. 6 textos processados, 23 características (palavras/termos) identificadas.\n",
+ "2025-04-21 21:54:20,548 - INFO - Avaliando diferentes números de grupos (método do cotovelo)...\n",
+ "2025-04-21 21:54:20,548 - INFO - Calculando opções de agrupamento (inércias) para K de 1 a 3...\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Preparando o subcluster...\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Avaliando número de grupos (K): 100%|██████████| 3/3 [00:00<00:00, 43.76K/s]\n",
+ "2025-04-21 21:54:20,620 - INFO - Cálculo das opções de agrupamento (inércias) concluído.\n",
+ "2025-04-21 21:54:20,621 - WARNING - O gráfico do cotovelo pode estar incompleto devido a erros no cálculo de alguns valores de K (exibindo 2 pontos).\n",
+ "2025-04-21 21:54:20,622 - INFO - Gerando gráfico do cotovelo para visualização...\n",
+ "2025-04-21 21:54:20,637 - INFO - Exibindo gráfico do cotovelo...\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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008/pVlyXsrpS8lxmV/WX58+fRKOHDmSrteS7fjjjz9Wn7V8jyReKSEv+w4/P79k86a1HerIpQTkubJtS6l0+S6mVW5dtpXvvvtOrWN5TR8fH1VKPaVX7RdjYmJU/JUqVUqwtrZW25X8/eOPP6br/X///fdqH5XyMgWpbRfi7Nmz6vsrn6n8hopNmzap+YODg9P1mkSvy0D+yd7UjYiI9IXuwqhytlh3QWgiIh1p4ZSuy9IaJT0mtCbdCKXlSioLSqvY65AWLGkxf9UF7okyi2OsiIiIiEgvSbdC6X4oid7rVM2UcXMy3laqWhJlNyZWRERERKS35PIMMs4y5WVJ0kPGWcpYv1ddx44oKzCxIiIiIiIiyiSOsSIiIiIiIsoktlgRERERERFlEhMrIiIiIiKiTOIFglMhVWd0F2SV8pxERERERJQ/JSQkqItdFy1a9KVFVJhYpUKSKjc3N63DICIiIiIiPREaGgpXV9c0H2dilQppqdKtPBsbG01jiY2NxdatW9GiRQuYmJhoGgsRUX7C/S8RkXZi9WgfHBERoRpddDlCWphYpULX/U+SKn1IrCwtLVUcWm9URET5Cfe/RETaidXDffCrhgixeAUREREREVEmMbEiIiIiIiLKJCZWREREREREmcTEioiIiIiIKJOYWBEREREREWUSEysiIiIiIqJMYmJFRERERESUSUysiIiIiIiIMomJFRERERERUSYxsSIiIiIiIsokJlZERERERESZxMSKiIiIiIgok5hYERERERERZRITKz0WF5+Ag5cfIPCegfpf7hMRERERkf4x1joASt3mU7cw4d8zuBUeDcAIvwYfgbOtOca390ar8s5ah0dEREREREmwxUpPk6rBvx/9/6Tqf26HR6vp8jgREREREekPJlZ6Rrr7SUtVap3+dNPkcXYLJCIiIiLSH0ys9Myhyw9eaKlKStIpeVzmIyIiIiIi/cDESs+EPY7O0vmIiIiIiCj7MbHSM47W5lk6HxERERERZT8mVnqmpoedqv5n8JJ5DA2AiKexORgVERERERG9DBMrPWNkaKBKqou0kiupWzHo90B8suoEnsQ8z9H4iIiIiIjoRUys9JBcp2reO1XhZJu8u5+0ZP3QvTIGNfSEgQGw4kgo2szyR+BVFrIgIiIiItISLxCsx8lVc28nBISEYav/QbTwqYU6Xo6qRat9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iRUREREREVEmMbEiIiIiIiLKJCZWREREREREmcTEioiIiIiIKJOYWBEREREREWUSEysiIiIiIqJMYmJFRERERESUScaZXUBelJCQoP6PiIjQOhTExsYiKipKxWJiYqJ1OERE+Qb3v0RE2onVo32wLifQ5QhpYWKVisePH6v/3dzctA6FiIiIiIj0JEewtbVN83GDhFelXvlQfHw8bt68CWtraxgYGGieIUuCFxoaChsbG01jISLKT7j/JSLSToQe7YMlXZKkqmjRojA0THskFVusUiErzNXVFfpENiitNyoiovyI+18iIu3Y6Mk++GUtVTosXkFERERERJRJTKyIiIiIiIgyiYmVnjMzM8P48ePV/0RElHO4/yUi0o5ZLtwHs3gFERERERFRJrHFioiIiIiIKJOYWBEREREREWUSEysiIiIiIqJMYmJFRERERESUSUysiIiIiIiIMomJlZ7y8/ND+/btUbRoURgYGGDdunVah0RElC9MnjwZNWrUgLW1NRwdHdGxY0ecP39e67CIiPK8efPmoWLFirCxsVG3OnXqYNOmTcgtmFjpqcjISFSqVAlz587VOhQionxlz549GDp0KA4cOIBt27YhNjYWLVq0UPtlIiLKPq6urpgyZQoCAwNx5MgRNGnSBB06dMDp06eRG/A6VrmAtFitXbtWnTUlIqKcdffuXdVyJQlXgwYNtA6HiChfsbOzw/Tp09GvXz/oO2OtAyAiItJn4eHhiT/uRESUM+Li4rBy5UrVW0C6BOYGTKyIiIjSEB8fD19fX9SrVw/ly5fXOhwiojzv5MmTKpGKjo5GgQIFVK8tb29v5AZMrIiIiNIgY61OnTqFvXv3ah0KEVG+ULp0aQQFBaneAqtWrULv3r1VV+zckFwxsSIiIkrFBx98gPXr16sqrTKgmoiIsp+pqSm8vLzU39WqVcPhw4cxa9YsLFiwAPqOiRUREVESUtNp2LBhqvvJ7t274eHhoXVIRET5ukt2TEwMcgMmVnrqyZMnCAkJSbx/+fJl1Swqg6eLFSumaWxERHm9+9+yZcvw999/q2tZ3b59W023tbWFhYWF1uEREeVZY8aMQevWrdWx7uPHj9W+WE5wbdmyBbkBy63rKdmIGjdu/MJ06Wf6888/axITEVF+ucRFapYuXYo+ffrkeDxERPlFv379sGPHDty6dUudzJKLBX/yySdo3rw5cgMmVkRERERERJlkmNkFEBERERER5XdMrIiIiIiIiDKJiRUREREREVEmMbEiIiIiIiLKJCZWREREREREmcTEioiIiIiIKJOYWBEREREREWUSEysiInqltWvX4q+//tI6DCIiIr3FxIqIiF7q0KFD8PX1Re3atZHb7d69GwYGBnj06JHWoeitd999F998802GniPbxurVq7MtJiKi3ICJFRFRPtKnTx+VWEyZMiXZ9HXr1qnpKYWHh6N///6qxapYsWI5GKl+e/bsGaZPn46qVavCysoKtra2qFSpEr744gvcvHkTudXx48exceNGDB8+PHFao0aNVGKd1KxZs2BmZobly5er+/K+P/30U8THx+d4zERE+oKJFRFRPmNubo6pU6fi4cOHr5xXEoYTJ06oBELLJEafxMTEoHnz5qpVRxJVPz8/nDx5ErNnz8a9e/fwww8/5Jr3kpLE3qVLFxQoUCDNecaPH4/PPvsMf//9N7p166amtW7dGo8fP8amTZtyMFoiIv3CxIqIKJ9p1qwZnJycMHny5DTn+fLLL1G5cuVk02bOnInixYsn3pekomPHjirBKFKkCAoWLIivvvoKz58/x8cffww7Ozu4urpi6dKlyZYTGhqKrl27qvllng4dOuDKlSsvLHfSpEkoWrQoSpcuraZL8tKkSRNYWFjA3t4eAwcOxJMnT176XqX1pVSpUuo5jRs3TvY6Onv37oWPj4+ax83NTbXWREZGprnMGTNmqOfs3LlTzVutWjXVmtewYUPMnz8/WTc6ae354IMPVIuPg4MDWrZsqWKQ1sGgoKDE+aRrokyTropJuyxu2LABFStWVMmwdLc7depUslik+125cuVU65F8Nt99912yx3/88UeULFlSPV8+o86dO6f5vuLi4rBq1Sq0b98+1ccTEhIwbNgwlUBu27YNrVq1SnzMyMgIbdq0SWzBIiLKj5hYERHlM3IQLAf/0jpx/fr1TC1Lkgvp+iatNt9//71qzWjXrh0KFSqEgwcP4v3338egQYMSXyc2NlYlF9bW1vD398e+fftU64gcpCdtzdmxYwfOnz+vDuDXr1+vEh15niz38OHDWLlyJbZv366SlrRIAtepUyeVKEgSI10apbtaUhcvXlSv/dZbb6mWuRUrVqik6WXL/fPPP1WLVZUqVVJ9PGWXyl9++QWmpqbqvUri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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 21:54:20,744 - INFO - Preparação da rodada 1 concluída. Analise o gráfico do cotovelo (baseado em 6 textos) para escolher o número de grupos (K).\n",
+ "2025-04-21 21:54:20,744 - INFO - Iniciando agrupamento (clusterização) em 2 grupos para a rodada 1 (prefixo: 'subcluster_').\n",
+ "2025-04-21 21:54:20,746 - INFO - Agrupando 6 textos em 2 grupos (K-Means)...\n",
+ "2025-04-21 21:54:20,749 - INFO - Agrupamento K-Means concluído. 6 textos foram atribuídos a grupos.\n",
+ "2025-04-21 21:54:20,749 - INFO - Coluna de resultados 'subcluster_1' adicionada/atualizada.\n",
+ "2025-04-21 21:54:20,752 - INFO - Agrupamento da rodada 1 (prefixo 'subcluster_') concluído com sucesso. Resultados na coluna 'subcluster_1'.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Clusterizando o subcluster com K=2...\n",
+ "Subclusterização concluída. Coluna 'subcluster_1' adicionada ao DataFrame 'sub_cf.df'.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " subcluster_1 | \n",
+ " texto_documento | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " Acordo homologado entre as partes. | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 7 | \n",
+ " 1 | \n",
+ " Indenização por danos morais foi concedida. | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id subcluster_1 texto_documento\n",
+ "0 1 1 O juiz determinou o pagamento da indenização.\n",
+ "1 2 0 Recurso de apelação foi interposto pela defesa.\n",
+ "2 3 0 A sentença julgou procedente o pedido do autor.\n",
+ "3 4 0 A corte negou provimento ao recurso especial.\n",
+ "5 6 0 Acordo homologado entre as partes.\n",
+ "6 7 1 Indenização por danos morais foi concedida."
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"print(\"Preparando o subcluster...\")\n",
"# Usamos a mesma coluna de texto original. limite_k pode ser menor.\n",
@@ -318,9 +1192,187 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Estado do DataFrame 'cf' ANTES do reset:\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " texto_documento | \n",
+ " cluster_1 | \n",
+ " classificacao | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ " 0 | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ " 2 | \n",
+ " Procedente/Indenização | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ " 1 | \n",
+ " Recurso/Extinção | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id texto_documento cluster_1 \\\n",
+ "0 1 O juiz determinou o pagamento da indenização. 2 \n",
+ "1 2 Recurso de apelação foi interposto pela defesa. 2 \n",
+ "2 3 A sentença julgou procedente o pedido do autor. 0 \n",
+ "3 4 A corte negou provimento ao recurso especial. 2 \n",
+ "4 5 Processo arquivado por falta de movimentação. 1 \n",
+ "\n",
+ " classificacao \n",
+ "0 Procedente/Indenização \n",
+ "1 Procedente/Indenização \n",
+ "2 Procedente/Indenização \n",
+ "3 Procedente/Indenização \n",
+ "4 Recurso/Extinção "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-04-21 21:54:30,224 - WARNING - Iniciando reinicialização do estado do ClusterFacil (Prefixo: 'cluster_', Coluna Classificação: 'classificacao')...\n",
+ "2025-04-21 21:54:30,226 - INFO - Colunas de resultados anteriores removidas: ['cluster_1', 'classificacao']\n",
+ "2025-04-21 21:54:30,226 - INFO - Estado do ClusterFacil reiniciado. Rodada definida para 1. Chame 'preparar' novamente para começar uma nova análise.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Estado do DataFrame 'cf' DEPOIS do reset (colunas de cluster/classificação removidas):\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " texto_documento | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " O juiz determinou o pagamento da indenização. | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Recurso de apelação foi interposto pela defesa. | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " A sentença julgou procedente o pedido do autor. | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " A corte negou provimento ao recurso especial. | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " Processo arquivado por falta de movimentação. | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id texto_documento\n",
+ "0 1 O juiz determinou o pagamento da indenização.\n",
+ "1 2 Recurso de apelação foi interposto pela defesa.\n",
+ "2 3 A sentença julgou procedente o pedido do autor.\n",
+ "3 4 A corte negou provimento ao recurso especial.\n",
+ "4 5 Processo arquivado por falta de movimentação."
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"print(\"Estado do DataFrame 'cf' ANTES do reset:\")\n",
"display(cf.df.head())\n",
@@ -343,7 +1395,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": ".venv",
"language": "python",
"name": "python3"
},
@@ -357,7 +1409,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.7"
+ "version": "3.12.5"
}
},
"nbformat": 4,
diff --git a/pyproject.toml b/pyproject.toml
index e55688a..08958cd 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -11,7 +11,7 @@ authors = [
description = "Uma biblioteca Python intuitiva para realizar clusterização de documentos textuais. Simplifica o processo desde a preparação dos dados e análise do número ideal de clusters (método do cotovelo) até a aplicação do algoritmo e exportação dos resultados. Ideal para agrupar grandes volumes de texto, como decisões judiciais, artigos ou comentários, de forma eficiente e com poucas linhas de código."
readme = "README.md"
license = { text = "MIT" }
-requires-python = ">=3.8"
+requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
@@ -29,8 +29,10 @@ dependencies = [
"matplotlib==3.10.1",
"scipy==1.15.2",
"openpyxl==3.1.5",
- "pyarrow==19.0.1",
- "tqdm" # Adicionado para barra de progresso
+ "pyarrow==19.0.1", # Adicionado para barra de progresso
+ "tqdm",
+ "openai>=1.75.0",
+ "python-dotenv>=1.1.0",
]
[project.urls]
diff --git a/src/cluster_facil/cluster.py b/src/cluster_facil/cluster.py
index 325f10d..0a66bdd 100644
--- a/src/cluster_facil/cluster.py
+++ b/src/cluster_facil/cluster.py
@@ -30,6 +30,7 @@
validar_tipo_classificacao,
validar_opcao_salvar
)
+from .utils_auto_label import gerar_rotulo_cluster, refinar_rotulos_clusters
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -255,7 +256,7 @@ def preparar(self, coluna_textos: str, limite_k: int = 10, n_init: str | int = '
logging.info(f"Analisando características de {len(df_para_preparar)} textos (TF-IDF)...")
# Define parâmetros padrão que podem ser sobrescritos pelos kwargs
- default_tfidf_params = {'stop_words': STOPWORDS_PT}
+ default_tfidf_params = {'stop_words': list(STOPWORDS_PT)}
final_tfidf_kwargs = {**default_tfidf_params, **self._tfidf_kwargs}
logging.debug(f"Parâmetros finais para TfidfVectorizer: {final_tfidf_kwargs}") # Movido para DEBUG
@@ -594,7 +595,6 @@ def subcluster(self, classificacao_desejada: str) -> Self:
Raises:
KeyError: Se a coluna de classificação original não for encontrada.
ValueError: Se a `classificacao_desejada` não existir na coluna de classificação.
- RuntimeError: Se `preparar` não foi chamado na instância original (necessário para saber qual era a coluna de texto).
"""
logging.info(f"Criando um novo objeto ClusterFacil para analisar o subcluster da classificação: '{classificacao_desejada}'")
@@ -680,3 +680,77 @@ def contar_classificacoes(self, inclui_na=False) -> pd.Series:
contagem = self.df[self.nome_coluna_classificacao].value_counts(dropna=inclui_na)
logging.info(f"Contagem de textos por classificação manual na coluna '{self.nome_coluna_classificacao}':\n{contagem}")
return None
+
+ def auto_label_cluster(self, rodada: int = None, model: str = "gpt-4.1-nano", api_key: str = None, temperature: float = 0.0, cut_limit: int = 30, random_state: int = None, final_refine: bool = True, n_examples_final: int = 10) -> dict:
+ """
+ Gera rótulos automáticos para todos os clusters de uma rodada e adiciona uma coluna com esses rótulos ao DataFrame.
+ Após a rotulação inicial, faz uma passada final no LLM para sugerir nomes finais (unificando ou ajustando rótulos se necessário).
+
+ Args:
+ rodada (int, opcional): Número da rodada de clusterização (se None, usa a última rodada).
+ model (str): Nome do modelo OpenAI (default: 'gpt-4.1-nano').
+ api_key (str, opcional): Chave da API OpenAI. Se não fornecida, busca em OPENAI_API_KEY.
+ temperature (float): Temperatura do modelo.
+ cut_limit (int, opcional): Número máximo de textos a serem enviados para o LLM por cluster. Se None, usa todos. Default=30.
+ random_state (int, opcional): Semente para amostragem aleatória dos textos. Default=None (não controla aleatoriedade).
+ final_refine (bool): Se True, faz uma passada final no LLM para refinar/unificar rótulos. Default=True.
+ n_examples_final (int): Número de exemplos de texto por cluster enviados na revisão final. Default=10.
+ Returns:
+ dict: Dicionário mapeando cluster_id para rótulo final gerado.
+ """
+ import json
+ if rodada is None:
+ rodada = self.rodada_clusterizacao - 1
+ coluna_cluster = f"{self.prefixo_cluster}{rodada}"
+ if coluna_cluster not in self.df.columns:
+ raise ValueError(f"Coluna de cluster '{coluna_cluster}' não encontrada no DataFrame.")
+ cluster_ids = self.df[coluna_cluster].dropna().unique()
+ cluster_labels = {}
+ cluster_samples = {}
+ for cluster_id in cluster_ids:
+ textos_do_cluster = self.df.loc[self.df[coluna_cluster] == cluster_id, self.coluna_textos].astype(str).tolist()
+ if not textos_do_cluster:
+ cluster_labels[cluster_id] = None
+ continue
+ # Amostragem se necessário
+ if cut_limit is not None and len(textos_do_cluster) > cut_limit:
+ import random
+ rnd = random.Random(random_state) if random_state is not None else random
+ textos_amostrados = rnd.sample(textos_do_cluster, cut_limit)
+ else:
+ textos_amostrados = textos_do_cluster
+ label = gerar_rotulo_cluster(
+ textos_amostrados,
+ model=model,
+ api_key=api_key,
+ temperature=temperature
+ )
+ cluster_labels[cluster_id] = label
+ # Amostras para revisão final
+ if n_examples_final is not None and len(textos_do_cluster) > n_examples_final:
+ import random
+ rnd = random.Random(random_state) if random_state is not None else random
+ examples = rnd.sample(textos_do_cluster, n_examples_final)
+ else:
+ examples = textos_do_cluster[:n_examples_final]
+ cluster_samples[cluster_id] = {"label": label, "examples": examples}
+ coluna_rotulo = f"{coluna_cluster}_classificacao"
+ self.df[coluna_rotulo] = self.df[coluna_cluster].map(cluster_labels)
+
+ # Passada final de refinamento global
+ if final_refine:
+ refined_labels_struct = refinar_rotulos_clusters(
+ cluster_samples=cluster_samples,
+ model=model,
+ api_key=api_key,
+ temperature=temperature
+ )
+ # Novo formato: {'clusters': [{'cluster_id': int, 'label': str}, ...]}
+ if isinstance(refined_labels_struct, dict) and "clusters" in refined_labels_struct:
+ refined_labels = {item["cluster_id"]: item["label"] for item in refined_labels_struct["clusters"]}
+ else:
+ refined_labels = refined_labels_struct
+ # Atualiza coluna de rótulos finais
+ self.df[coluna_rotulo] = self.df[coluna_cluster].map(refined_labels)
+ return refined_labels
+ return cluster_labels
diff --git a/src/cluster_facil/utils_auto_label.py b/src/cluster_facil/utils_auto_label.py
new file mode 100644
index 0000000..9ac8bb6
--- /dev/null
+++ b/src/cluster_facil/utils_auto_label.py
@@ -0,0 +1,145 @@
+"""
+Funções utilitárias para rotulação automática de clusters usando modelos de linguagem (ex: GPT-4.1-nano via OpenAI API).
+"""
+import os
+from typing import List, Optional, Dict
+from openai import OpenAI
+import json
+
+def gerar_rotulo_cluster(
+ cluster_texts: List[str],
+ model: str = "gpt-4.1-nano",
+ api_key: Optional[str] = None,
+ temperature: float = 0.0,
+) -> str:
+ """
+ Gera um rótulo (nome/tema) para um cluster de textos usando a OpenAI Responses API.
+ Args:
+ cluster_texts (List[str]): Lista de textos pertencentes ao cluster.
+ model (str): Nome do modelo OpenAI a ser utilizado. Padrão: 'gpt-4.1-nano'.
+ api_key (Optional[str]): Chave da API OpenAI. Se não fornecida, busca em OPENAI_API_KEY.
+ temperature (float): Temperatura do modelo (criatividade).
+ Returns:
+ str: Rótulo sugerido para o cluster.
+ """
+ if not api_key:
+ api_key = os.getenv("OPENAI_API_KEY")
+ if not api_key:
+ raise ValueError("É necessário fornecer uma chave de API OpenAI via argumento ou variável de ambiente OPENAI_API_KEY.")
+
+ client_kwargs = {"api_key": api_key}
+ client = OpenAI(**client_kwargs)
+
+ sample_texts = cluster_texts[:10]
+ # Delimita cada texto com ...
+ joined_texts = "\n\n".join(f"\n{t}\n" for i, t in enumerate(sample_texts))
+ prompt = (
+ "Dado o seguinte conjunto de textos, gere um rótulo curto (tema) que represente o cluster. "
+ "O rótulo deve ser claro, conciso e descritivo."
+ )
+ # Utiliza a Responses API mais recente com formato estruturado
+ resp_format = {
+ "format": {
+ "type": "json_schema",
+ "name": "rotulo",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "rotulo": {
+ "type": "string",
+ "description": "Rótulo curto, claro e descritivo para o cluster de textos."
+ }
+ },
+ "required": ["rotulo"],
+ "additionalProperties": False
+ },
+ "strict": True
+ }
+ }
+ response = client.responses.create(
+ model=model,
+ instructions=prompt,
+ temperature=temperature,
+ input=f"Textos do cluster:\n{joined_texts}\n\nRótulo:",
+ text=resp_format
+ )
+ label_obj = json.loads(response.output_text)
+ return label_obj["rotulo"]
+
+def refinar_rotulos_clusters(
+ cluster_samples: Dict,
+ model: str = "gpt-4.1-nano",
+ api_key: str = None,
+ temperature: float = 0.0,
+) -> Dict:
+ """
+ Usa o LLM para revisar, padronizar e possivelmente agrupar rótulos de clusters, a partir de amostras e rótulos iniciais.
+ Args:
+ cluster_samples (dict): Dict {cluster_id: {"label": rótulo, "examples": [str, ...]}}
+ model (str): Nome do modelo OpenAI.
+ api_key (str): Chave da API OpenAI.
+ temperature (float): Temperatura do modelo.
+ Returns:
+ dict: Dicionário {cluster_id: rótulo_final}
+ """
+ if not api_key:
+ api_key = os.getenv("OPENAI_API_KEY")
+ if not api_key:
+ raise ValueError("É necessário fornecer uma chave de API OpenAI via argumento ou variável de ambiente OPENAI_API_KEY.")
+
+ client_kwargs = {"api_key": api_key}
+ client = OpenAI(**client_kwargs)
+
+ # Monta prompt e input estruturado
+ prompt = (
+ "Você receberá exemplos de clusters, cada um com um rótulo sugerido e algumas amostras de textos.\n"
+ "Sua tarefa é:\n"
+ "- Unificar rótulos semelhantes se fizer sentido,\n"
+ "- Sugerir nomes mais claros e concisos para cada grupo,\n"
+ "- Retornar um dicionário JSON com o id do cluster e o novo rótulo.\n\n"
+ "Exemplo de entrada:\n"
+ "Cluster 0 - Rótulo inicial: 'Esportes'\nTexto exemplo\nTexto exemplo\n\n"
+ "Cluster 1 - Rótulo inicial: 'Futebol'\nTexto exemplo\nTexto exemplo\n\n"
+ "Agora, siga o mesmo padrão para os clusters abaixo:\n"
+ )
+ clusters_str = ""
+ for cid, info in cluster_samples.items():
+ label = info["label"]
+ examples = "\n\n".join(f"\n{t}\n" for i, t in enumerate(info["examples"]))
+ clusters_str += f"Cluster {cid} - Rótulo inicial: '{label}'\n{examples}\n\n"
+ input_text = clusters_str + "Retorne APENAS um JSON no formato: {\"cluster_id\": \"novo rótulo\", ...}"
+ resp_format = {
+ "format": {
+ "type": "json_schema",
+ "name": "refino_rotulos",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "clusters": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "cluster_id": {"type": "integer"},
+ "label": {"type": "string"}
+ },
+ "required": ["cluster_id", "label"],
+ "additionalProperties": False
+ }
+ }
+ },
+ "required": ["clusters"],
+ "additionalProperties": False
+ },
+ "strict": True
+ }
+ }
+ response = client.responses.create(
+ model=model,
+ instructions=prompt,
+ temperature=temperature,
+ input=input_text,
+ text=resp_format
+ )
+ refined_labels = json.loads(response.output_text)
+ return refined_labels
diff --git a/uv.lock b/uv.lock
new file mode 100644
index 0000000..f5e41b5
--- /dev/null
+++ b/uv.lock
@@ -0,0 +1,1147 @@
+version = 1
+revision = 1
+requires-python = ">=3.10"
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version < '3.11'",
+]
+
+[[package]]
+name = "annotated-types"
+version = "0.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
+]
+
+[[package]]
+name = "anyio"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
+ { name = "idna" },
+ { name = "sniffio" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 },
+]
+
+[[package]]
+name = "certifi"
+version = "2025.1.31"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
+]
+
+[[package]]
+name = "click"
+version = "8.1.8"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
+]
+
+[[package]]
+name = "cluster-facil"
+version = "0.1.0"
+source = { editable = "." }
+dependencies = [
+ { name = "matplotlib" },
+ { name = "nltk" },
+ { name = "openai" },
+ { name = "openpyxl" },
+ { name = "pandas" },
+ { name = "pyarrow" },
+ { name = "python-dotenv" },
+ { name = "scikit-learn" },
+ { name = "scipy" },
+ { name = "tqdm" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "matplotlib", specifier = "==3.10.1" },
+ { name = "nltk", specifier = "==3.9.1" },
+ { name = "openai", specifier = ">=1.75.0" },
+ { name = "openpyxl", specifier = "==3.1.5" },
+ { name = "pandas", specifier = "==2.2.3" },
+ { name = "pyarrow", specifier = "==19.0.1" },
+ { name = "python-dotenv", specifier = ">=1.1.0" },
+ { name = "scikit-learn", specifier = "==1.6.1" },
+ { name = "scipy", specifier = "==1.15.2" },
+ { name = "tqdm" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+]
+
+[[package]]
+name = "contourpy"
+version = "1.3.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551 },
+ { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399 },
+ { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061 },
+ { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956 },
+ { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872 },
+ { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027 },
+ { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641 },
+ { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075 },
+ { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534 },
+ { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188 },
+ { url = "https://files.pythonhosted.org/packages/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636 },
+ { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636 },
+ { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053 },
+ { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985 },
+ { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750 },
+ { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246 },
+ { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728 },
+ { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762 },
+ { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196 },
+ { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017 },
+ { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580 },
+ { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530 },
+ { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688 },
+ { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331 },
+ { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963 },
+ { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681 },
+ { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674 },
+ { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480 },
+ { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489 },
+ { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042 },
+ { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 },
+ { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 },
+ { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 },
+ { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 },
+ { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 },
+ { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 },
+ { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 },
+ { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 },
+ { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 },
+ { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 },
+ { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 },
+ { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 },
+ { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 },
+ { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 },
+ { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 },
+ { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 },
+ { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 },
+ { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 },
+ { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 },
+ { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 },
+ { url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681 },
+ { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101 },
+ { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599 },
+ { url = "https://files.pythonhosted.org/packages/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807 },
+ { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729 },
+ { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791 },
+]
+
+[[package]]
+name = "cycler"
+version = "0.12.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 },
+]
+
+[[package]]
+name = "distro"
+version = "1.9.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
+]
+
+[[package]]
+name = "et-xmlfile"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 },
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.2.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
+]
+
+[[package]]
+name = "fonttools"
+version = "4.57.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/db/17/3ddfd1881878b3f856065130bb603f5922e81ae8a4eb53bce0ea78f765a8/fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41", size = 2756260 },
+ { url = "https://files.pythonhosted.org/packages/26/2b/6957890c52c030b0bf9e0add53e5badab4682c6ff024fac9a332bb2ae063/fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02", size = 2284691 },
+ { url = "https://files.pythonhosted.org/packages/cc/8e/c043b4081774e5eb06a834cedfdb7d432b4935bc8c4acf27207bdc34dfc4/fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e", size = 4566077 },
+ { url = "https://files.pythonhosted.org/packages/59/bc/e16ae5d9eee6c70830ce11d1e0b23d6018ddfeb28025fda092cae7889c8b/fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab", size = 4608729 },
+ { url = "https://files.pythonhosted.org/packages/25/13/e557bf10bb38e4e4c436d3a9627aadf691bc7392ae460910447fda5fad2b/fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1", size = 4759646 },
+ { url = "https://files.pythonhosted.org/packages/bc/c9/5e2952214d4a8e31026bf80beb18187199b7001e60e99a6ce19773249124/fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f", size = 4941652 },
+ { url = "https://files.pythonhosted.org/packages/df/04/e80242b3d9ec91a1f785d949edc277a13ecfdcfae744de4b170df9ed77d8/fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec", size = 2159432 },
+ { url = "https://files.pythonhosted.org/packages/33/ba/e858cdca275daf16e03c0362aa43734ea71104c3b356b2100b98543dba1b/fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db", size = 2203869 },
+ { url = "https://files.pythonhosted.org/packages/81/1f/e67c99aa3c6d3d2f93d956627e62a57ae0d35dc42f26611ea2a91053f6d6/fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4", size = 2757392 },
+ { url = "https://files.pythonhosted.org/packages/aa/f1/f75770d0ddc67db504850898d96d75adde238c35313409bfcd8db4e4a5fe/fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8", size = 2285609 },
+ { url = "https://files.pythonhosted.org/packages/f5/d3/bc34e4953cb204bae0c50b527307dce559b810e624a733351a654cfc318e/fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683", size = 4873292 },
+ { url = "https://files.pythonhosted.org/packages/41/b8/d5933559303a4ab18c799105f4c91ee0318cc95db4a2a09e300116625e7a/fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746", size = 4902503 },
+ { url = "https://files.pythonhosted.org/packages/32/13/acb36bfaa316f481153ce78de1fa3926a8bad42162caa3b049e1afe2408b/fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344", size = 5077351 },
+ { url = "https://files.pythonhosted.org/packages/b5/23/6d383a2ca83b7516d73975d8cca9d81a01acdcaa5e4db8579e4f3de78518/fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f", size = 5275067 },
+ { url = "https://files.pythonhosted.org/packages/bc/ca/31b8919c6da0198d5d522f1d26c980201378c087bdd733a359a1e7485769/fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36", size = 2158263 },
+ { url = "https://files.pythonhosted.org/packages/13/4c/de2612ea2216eb45cfc8eb91a8501615dd87716feaf5f8fb65cbca576289/fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d", size = 2204968 },
+ { url = "https://files.pythonhosted.org/packages/cb/98/d4bc42d43392982eecaaca117d79845734d675219680cd43070bb001bc1f/fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31", size = 2751824 },
+ { url = "https://files.pythonhosted.org/packages/1a/62/7168030eeca3742fecf45f31e63b5ef48969fa230a672216b805f1d61548/fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92", size = 2283072 },
+ { url = "https://files.pythonhosted.org/packages/5d/82/121a26d9646f0986ddb35fbbaf58ef791c25b59ecb63ffea2aab0099044f/fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888", size = 4788020 },
+ { url = "https://files.pythonhosted.org/packages/5b/26/e0f2fb662e022d565bbe280a3cfe6dafdaabf58889ff86fdef2d31ff1dde/fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6", size = 4859096 },
+ { url = "https://files.pythonhosted.org/packages/9e/44/9075e323347b1891cdece4b3f10a3b84a8f4c42a7684077429d9ce842056/fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98", size = 4964356 },
+ { url = "https://files.pythonhosted.org/packages/48/28/caa8df32743462fb966be6de6a79d7f30393859636d7732e82efa09fbbb4/fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8", size = 5226546 },
+ { url = "https://files.pythonhosted.org/packages/f6/46/95ab0f0d2e33c5b1a4fc1c0efe5e286ba9359602c0a9907adb1faca44175/fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac", size = 2146776 },
+ { url = "https://files.pythonhosted.org/packages/06/5d/1be5424bb305880e1113631f49a55ea7c7da3a5fe02608ca7c16a03a21da/fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9", size = 2193956 },
+ { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 },
+ { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 },
+ { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 },
+ { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 },
+ { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 },
+ { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 },
+ { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 },
+ { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 },
+ { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 },
+]
+
+[[package]]
+name = "h11"
+version = "0.14.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
+]
+
+[[package]]
+name = "httpcore"
+version = "1.0.8"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "h11" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9f/45/ad3e1b4d448f22c0cff4f5692f5ed0666658578e358b8d58a19846048059/httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad", size = 85385 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/18/8d/f052b1e336bb2c1fc7ed1aaed898aa570c0b61a09707b108979d9fc6e308/httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", size = 78732 },
+]
+
+[[package]]
+name = "httpx"
+version = "0.28.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "certifi" },
+ { name = "httpcore" },
+ { name = "idna" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
+]
+
+[[package]]
+name = "idna"
+version = "3.10"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
+]
+
+[[package]]
+name = "jiter"
+version = "0.9.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1e/c2/e4562507f52f0af7036da125bb699602ead37a2332af0788f8e0a3417f36/jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893", size = 162604 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b0/82/39f7c9e67b3b0121f02a0b90d433626caa95a565c3d2449fea6bcfa3f5f5/jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad", size = 314540 },
+ { url = "https://files.pythonhosted.org/packages/01/07/7bf6022c5a152fca767cf5c086bb41f7c28f70cf33ad259d023b53c0b858/jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea", size = 321065 },
+ { url = "https://files.pythonhosted.org/packages/6c/b2/de3f3446ecba7c48f317568e111cc112613da36c7b29a6de45a1df365556/jiter-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1339f839b91ae30b37c409bf16ccd3dc453e8b8c3ed4bd1d6a567193651a4a51", size = 341664 },
+ { url = "https://files.pythonhosted.org/packages/13/cf/6485a4012af5d407689c91296105fcdb080a3538e0658d2abf679619c72f/jiter-0.9.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffba79584b3b670fefae66ceb3a28822365d25b7bf811e030609a3d5b876f538", size = 364635 },
+ { url = "https://files.pythonhosted.org/packages/0d/f7/4a491c568f005553240b486f8e05c82547340572d5018ef79414b4449327/jiter-0.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cfc7d0a8e899089d11f065e289cb5b2daf3d82fbe028f49b20d7b809193958d", size = 406288 },
+ { url = "https://files.pythonhosted.org/packages/d3/ca/f4263ecbce7f5e6bded8f52a9f1a66540b270c300b5c9f5353d163f9ac61/jiter-0.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e00a1a2bbfaaf237e13c3d1592356eab3e9015d7efd59359ac8b51eb56390a12", size = 397499 },
+ { url = "https://files.pythonhosted.org/packages/ac/a2/522039e522a10bac2f2194f50e183a49a360d5f63ebf46f6d890ef8aa3f9/jiter-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d9870561eb26b11448854dce0ff27a9a27cb616b632468cafc938de25e9e51", size = 352926 },
+ { url = "https://files.pythonhosted.org/packages/b1/67/306a5c5abc82f2e32bd47333a1c9799499c1c3a415f8dde19dbf876f00cb/jiter-0.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9872aeff3f21e437651df378cb75aeb7043e5297261222b6441a620218b58708", size = 384506 },
+ { url = "https://files.pythonhosted.org/packages/0f/89/c12fe7b65a4fb74f6c0d7b5119576f1f16c79fc2953641f31b288fad8a04/jiter-0.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1fd19112d1049bdd47f17bfbb44a2c0001061312dcf0e72765bfa8abd4aa30e5", size = 520621 },
+ { url = "https://files.pythonhosted.org/packages/c4/2b/d57900c5c06e6273fbaa76a19efa74dbc6e70c7427ab421bf0095dfe5d4a/jiter-0.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef5da104664e526836070e4a23b5f68dec1cc673b60bf1edb1bfbe8a55d0678", size = 512613 },
+ { url = "https://files.pythonhosted.org/packages/89/05/d8b90bfb21e58097d5a4e0224f2940568366f68488a079ae77d4b2653500/jiter-0.9.0-cp310-cp310-win32.whl", hash = "sha256:cb12e6d65ebbefe5518de819f3eda53b73187b7089040b2d17f5b39001ff31c4", size = 206613 },
+ { url = "https://files.pythonhosted.org/packages/2c/1d/5767f23f88e4f885090d74bbd2755518050a63040c0f59aa059947035711/jiter-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c43ca669493626d8672be3b645dbb406ef25af3f4b6384cfd306da7eb2e70322", size = 208371 },
+ { url = "https://files.pythonhosted.org/packages/23/44/e241a043f114299254e44d7e777ead311da400517f179665e59611ab0ee4/jiter-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c4d99c71508912a7e556d631768dcdef43648a93660670986916b297f1c54af", size = 314654 },
+ { url = "https://files.pythonhosted.org/packages/fb/1b/a7e5e42db9fa262baaa9489d8d14ca93f8663e7f164ed5e9acc9f467fc00/jiter-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f60fb8ce7df529812bf6c625635a19d27f30806885139e367af93f6e734ef58", size = 320909 },
+ { url = "https://files.pythonhosted.org/packages/60/bf/8ebdfce77bc04b81abf2ea316e9c03b4a866a7d739cf355eae4d6fd9f6fe/jiter-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51c4e1a4f8ea84d98b7b98912aa4290ac3d1eabfde8e3c34541fae30e9d1f08b", size = 341733 },
+ { url = "https://files.pythonhosted.org/packages/a8/4e/754ebce77cff9ab34d1d0fa0fe98f5d42590fd33622509a3ba6ec37ff466/jiter-0.9.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f4c677c424dc76684fea3e7285a7a2a7493424bea89ac441045e6a1fb1d7b3b", size = 365097 },
+ { url = "https://files.pythonhosted.org/packages/32/2c/6019587e6f5844c612ae18ca892f4cd7b3d8bbf49461ed29e384a0f13d98/jiter-0.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2221176dfec87f3470b21e6abca056e6b04ce9bff72315cb0b243ca9e835a4b5", size = 406603 },
+ { url = "https://files.pythonhosted.org/packages/da/e9/c9e6546c817ab75a1a7dab6dcc698e62e375e1017113e8e983fccbd56115/jiter-0.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c7adb66f899ffa25e3c92bfcb593391ee1947dbdd6a9a970e0d7e713237d572", size = 396625 },
+ { url = "https://files.pythonhosted.org/packages/be/bd/976b458add04271ebb5a255e992bd008546ea04bb4dcadc042a16279b4b4/jiter-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c98d27330fdfb77913c1097a7aab07f38ff2259048949f499c9901700789ac15", size = 351832 },
+ { url = "https://files.pythonhosted.org/packages/07/51/fe59e307aaebec9265dbad44d9d4381d030947e47b0f23531579b9a7c2df/jiter-0.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3f8cc74df66892b1d06b5d41a71670c22d95a1ca2cbab73654745ce9d0419", size = 384590 },
+ { url = "https://files.pythonhosted.org/packages/db/55/5dcd2693794d8e6f4889389ff66ef3be557a77f8aeeca8973a97a7c00557/jiter-0.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd5ab5ddc11418dce28343123644a100f487eaccf1de27a459ab36d6cca31043", size = 520690 },
+ { url = "https://files.pythonhosted.org/packages/54/d5/9f51dc90985e9eb251fbbb747ab2b13b26601f16c595a7b8baba964043bd/jiter-0.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42f8a68a69f047b310319ef8e2f52fdb2e7976fb3313ef27df495cf77bcad965", size = 512649 },
+ { url = "https://files.pythonhosted.org/packages/a6/e5/4e385945179bcf128fa10ad8dca9053d717cbe09e258110e39045c881fe5/jiter-0.9.0-cp311-cp311-win32.whl", hash = "sha256:a25519efb78a42254d59326ee417d6f5161b06f5da827d94cf521fed961b1ff2", size = 206920 },
+ { url = "https://files.pythonhosted.org/packages/4c/47/5e0b94c603d8e54dd1faab439b40b832c277d3b90743e7835879ab663757/jiter-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:923b54afdd697dfd00d368b7ccad008cccfeb1efb4e621f32860c75e9f25edbd", size = 210119 },
+ { url = "https://files.pythonhosted.org/packages/af/d7/c55086103d6f29b694ec79156242304adf521577530d9031317ce5338c59/jiter-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7b46249cfd6c48da28f89eb0be3f52d6fdb40ab88e2c66804f546674e539ec11", size = 309203 },
+ { url = "https://files.pythonhosted.org/packages/b0/01/f775dfee50beb420adfd6baf58d1c4d437de41c9b666ddf127c065e5a488/jiter-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:609cf3c78852f1189894383cf0b0b977665f54cb38788e3e6b941fa6d982c00e", size = 319678 },
+ { url = "https://files.pythonhosted.org/packages/ab/b8/09b73a793714726893e5d46d5c534a63709261af3d24444ad07885ce87cb/jiter-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d726a3890a54561e55a9c5faea1f7655eda7f105bd165067575ace6e65f80bb2", size = 341816 },
+ { url = "https://files.pythonhosted.org/packages/35/6f/b8f89ec5398b2b0d344257138182cc090302854ed63ed9c9051e9c673441/jiter-0.9.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e89dc075c1fef8fa9be219e249f14040270dbc507df4215c324a1839522ea75", size = 364152 },
+ { url = "https://files.pythonhosted.org/packages/9b/ca/978cc3183113b8e4484cc7e210a9ad3c6614396e7abd5407ea8aa1458eef/jiter-0.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e8ffa3c353b1bc4134f96f167a2082494351e42888dfcf06e944f2729cbe1d", size = 406991 },
+ { url = "https://files.pythonhosted.org/packages/13/3a/72861883e11a36d6aa314b4922125f6ae90bdccc225cd96d24cc78a66385/jiter-0.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203f28a72a05ae0e129b3ed1f75f56bc419d5f91dfacd057519a8bd137b00c42", size = 395824 },
+ { url = "https://files.pythonhosted.org/packages/87/67/22728a86ef53589c3720225778f7c5fdb617080e3deaed58b04789418212/jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca1a02ad60ec30bb230f65bc01f611c8608b02d269f998bc29cca8619a919dc", size = 351318 },
+ { url = "https://files.pythonhosted.org/packages/69/b9/f39728e2e2007276806d7a6609cda7fac44ffa28ca0d02c49a4f397cc0d9/jiter-0.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:237e5cee4d5d2659aaf91bbf8ec45052cc217d9446070699441a91b386ae27dc", size = 384591 },
+ { url = "https://files.pythonhosted.org/packages/eb/8f/8a708bc7fd87b8a5d861f1c118a995eccbe6d672fe10c9753e67362d0dd0/jiter-0.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:528b6b71745e7326eed73c53d4aa57e2a522242320b6f7d65b9c5af83cf49b6e", size = 520746 },
+ { url = "https://files.pythonhosted.org/packages/95/1e/65680c7488bd2365dbd2980adaf63c562d3d41d3faac192ebc7ef5b4ae25/jiter-0.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f48e86b57bc711eb5acdfd12b6cb580a59cc9a993f6e7dcb6d8b50522dcd50d", size = 512754 },
+ { url = "https://files.pythonhosted.org/packages/78/f3/fdc43547a9ee6e93c837685da704fb6da7dba311fc022e2766d5277dfde5/jiter-0.9.0-cp312-cp312-win32.whl", hash = "sha256:699edfde481e191d81f9cf6d2211debbfe4bd92f06410e7637dffb8dd5dfde06", size = 207075 },
+ { url = "https://files.pythonhosted.org/packages/cd/9d/742b289016d155f49028fe1bfbeb935c9bf0ffeefdf77daf4a63a42bb72b/jiter-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0", size = 207999 },
+ { url = "https://files.pythonhosted.org/packages/e7/1b/4cd165c362e8f2f520fdb43245e2b414f42a255921248b4f8b9c8d871ff1/jiter-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2764891d3f3e8b18dce2cff24949153ee30c9239da7c00f032511091ba688ff7", size = 308197 },
+ { url = "https://files.pythonhosted.org/packages/13/aa/7a890dfe29c84c9a82064a9fe36079c7c0309c91b70c380dc138f9bea44a/jiter-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:387b22fbfd7a62418d5212b4638026d01723761c75c1c8232a8b8c37c2f1003b", size = 318160 },
+ { url = "https://files.pythonhosted.org/packages/6a/38/5888b43fc01102f733f085673c4f0be5a298f69808ec63de55051754e390/jiter-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d8da8629ccae3606c61d9184970423655fb4e33d03330bcdfe52d234d32f69", size = 341259 },
+ { url = "https://files.pythonhosted.org/packages/3d/5e/bbdbb63305bcc01006de683b6228cd061458b9b7bb9b8d9bc348a58e5dc2/jiter-0.9.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1be73d8982bdc278b7b9377426a4b44ceb5c7952073dd7488e4ae96b88e1103", size = 363730 },
+ { url = "https://files.pythonhosted.org/packages/75/85/53a3edc616992fe4af6814c25f91ee3b1e22f7678e979b6ea82d3bc0667e/jiter-0.9.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2228eaaaa111ec54b9e89f7481bffb3972e9059301a878d085b2b449fbbde635", size = 405126 },
+ { url = "https://files.pythonhosted.org/packages/ae/b3/1ee26b12b2693bd3f0b71d3188e4e5d817b12e3c630a09e099e0a89e28fa/jiter-0.9.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11509bfecbc319459647d4ac3fd391d26fdf530dad00c13c4dadabf5b81f01a4", size = 393668 },
+ { url = "https://files.pythonhosted.org/packages/11/87/e084ce261950c1861773ab534d49127d1517b629478304d328493f980791/jiter-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f22238da568be8bbd8e0650e12feeb2cfea15eda4f9fc271d3b362a4fa0604d", size = 352350 },
+ { url = "https://files.pythonhosted.org/packages/f0/06/7dca84b04987e9df563610aa0bc154ea176e50358af532ab40ffb87434df/jiter-0.9.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17f5d55eb856597607562257c8e36c42bc87f16bef52ef7129b7da11afc779f3", size = 384204 },
+ { url = "https://files.pythonhosted.org/packages/16/2f/82e1c6020db72f397dd070eec0c85ebc4df7c88967bc86d3ce9864148f28/jiter-0.9.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6a99bed9fbb02f5bed416d137944419a69aa4c423e44189bc49718859ea83bc5", size = 520322 },
+ { url = "https://files.pythonhosted.org/packages/36/fd/4f0cd3abe83ce208991ca61e7e5df915aa35b67f1c0633eb7cf2f2e88ec7/jiter-0.9.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e057adb0cd1bd39606100be0eafe742de2de88c79df632955b9ab53a086b3c8d", size = 512184 },
+ { url = "https://files.pythonhosted.org/packages/a0/3c/8a56f6d547731a0b4410a2d9d16bf39c861046f91f57c98f7cab3d2aa9ce/jiter-0.9.0-cp313-cp313-win32.whl", hash = "sha256:f7e6850991f3940f62d387ccfa54d1a92bd4bb9f89690b53aea36b4364bcab53", size = 206504 },
+ { url = "https://files.pythonhosted.org/packages/f4/1c/0c996fd90639acda75ed7fa698ee5fd7d80243057185dc2f63d4c1c9f6b9/jiter-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7", size = 204943 },
+ { url = "https://files.pythonhosted.org/packages/78/0f/77a63ca7aa5fed9a1b9135af57e190d905bcd3702b36aca46a01090d39ad/jiter-0.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0b2827fb88dda2cbecbbc3e596ef08d69bda06c6f57930aec8e79505dc17001", size = 317281 },
+ { url = "https://files.pythonhosted.org/packages/f9/39/a3a1571712c2bf6ec4c657f0d66da114a63a2e32b7e4eb8e0b83295ee034/jiter-0.9.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062b756ceb1d40b0b28f326cba26cfd575a4918415b036464a52f08632731e5a", size = 350273 },
+ { url = "https://files.pythonhosted.org/packages/ee/47/3729f00f35a696e68da15d64eb9283c330e776f3b5789bac7f2c0c4df209/jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf", size = 206867 },
+]
+
+[[package]]
+name = "joblib"
+version = "1.4.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 },
+]
+
+[[package]]
+name = "kiwisolver"
+version = "1.4.8"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/47/5f/4d8e9e852d98ecd26cdf8eaf7ed8bc33174033bba5e07001b289f07308fd/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db", size = 124623 },
+ { url = "https://files.pythonhosted.org/packages/1d/70/7f5af2a18a76fe92ea14675f8bd88ce53ee79e37900fa5f1a1d8e0b42998/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b", size = 66720 },
+ { url = "https://files.pythonhosted.org/packages/c6/13/e15f804a142353aefd089fadc8f1d985561a15358c97aca27b0979cb0785/kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d", size = 65413 },
+ { url = "https://files.pythonhosted.org/packages/ce/6d/67d36c4d2054e83fb875c6b59d0809d5c530de8148846b1370475eeeece9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d", size = 1650826 },
+ { url = "https://files.pythonhosted.org/packages/de/c6/7b9bb8044e150d4d1558423a1568e4f227193662a02231064e3824f37e0a/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c", size = 1628231 },
+ { url = "https://files.pythonhosted.org/packages/b6/38/ad10d437563063eaaedbe2c3540a71101fc7fb07a7e71f855e93ea4de605/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3", size = 1408938 },
+ { url = "https://files.pythonhosted.org/packages/52/ce/c0106b3bd7f9e665c5f5bc1e07cc95b5dabd4e08e3dad42dbe2faad467e7/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed", size = 1422799 },
+ { url = "https://files.pythonhosted.org/packages/d0/87/efb704b1d75dc9758087ba374c0f23d3254505edaedd09cf9d247f7878b9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f", size = 1354362 },
+ { url = "https://files.pythonhosted.org/packages/eb/b3/fd760dc214ec9a8f208b99e42e8f0130ff4b384eca8b29dd0efc62052176/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff", size = 2222695 },
+ { url = "https://files.pythonhosted.org/packages/a2/09/a27fb36cca3fc01700687cc45dae7a6a5f8eeb5f657b9f710f788748e10d/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d", size = 2370802 },
+ { url = "https://files.pythonhosted.org/packages/3d/c3/ba0a0346db35fe4dc1f2f2cf8b99362fbb922d7562e5f911f7ce7a7b60fa/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c", size = 2334646 },
+ { url = "https://files.pythonhosted.org/packages/41/52/942cf69e562f5ed253ac67d5c92a693745f0bed3c81f49fc0cbebe4d6b00/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605", size = 2467260 },
+ { url = "https://files.pythonhosted.org/packages/32/26/2d9668f30d8a494b0411d4d7d4ea1345ba12deb6a75274d58dd6ea01e951/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e", size = 2288633 },
+ { url = "https://files.pythonhosted.org/packages/98/99/0dd05071654aa44fe5d5e350729961e7bb535372935a45ac89a8924316e6/kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751", size = 71885 },
+ { url = "https://files.pythonhosted.org/packages/6c/fc/822e532262a97442989335394d441cd1d0448c2e46d26d3e04efca84df22/kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271", size = 65175 },
+ { url = "https://files.pythonhosted.org/packages/da/ed/c913ee28936c371418cb167b128066ffb20bbf37771eecc2c97edf8a6e4c/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", size = 124635 },
+ { url = "https://files.pythonhosted.org/packages/4c/45/4a7f896f7467aaf5f56ef093d1f329346f3b594e77c6a3c327b2d415f521/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", size = 66717 },
+ { url = "https://files.pythonhosted.org/packages/5f/b4/c12b3ac0852a3a68f94598d4c8d569f55361beef6159dce4e7b624160da2/kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", size = 65413 },
+ { url = "https://files.pythonhosted.org/packages/a9/98/1df4089b1ed23d83d410adfdc5947245c753bddfbe06541c4aae330e9e70/kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", size = 1343994 },
+ { url = "https://files.pythonhosted.org/packages/8d/bf/b4b169b050c8421a7c53ea1ea74e4ef9c335ee9013216c558a047f162d20/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", size = 1434804 },
+ { url = "https://files.pythonhosted.org/packages/66/5a/e13bd341fbcf73325ea60fdc8af752addf75c5079867af2e04cc41f34434/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", size = 1450690 },
+ { url = "https://files.pythonhosted.org/packages/9b/4f/5955dcb376ba4a830384cc6fab7d7547bd6759fe75a09564910e9e3bb8ea/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", size = 1376839 },
+ { url = "https://files.pythonhosted.org/packages/3a/97/5edbed69a9d0caa2e4aa616ae7df8127e10f6586940aa683a496c2c280b9/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", size = 1435109 },
+ { url = "https://files.pythonhosted.org/packages/13/fc/e756382cb64e556af6c1809a1bbb22c141bbc2445049f2da06b420fe52bf/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", size = 2245269 },
+ { url = "https://files.pythonhosted.org/packages/76/15/e59e45829d7f41c776d138245cabae6515cb4eb44b418f6d4109c478b481/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", size = 2393468 },
+ { url = "https://files.pythonhosted.org/packages/e9/39/483558c2a913ab8384d6e4b66a932406f87c95a6080112433da5ed668559/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", size = 2355394 },
+ { url = "https://files.pythonhosted.org/packages/01/aa/efad1fbca6570a161d29224f14b082960c7e08268a133fe5dc0f6906820e/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", size = 2490901 },
+ { url = "https://files.pythonhosted.org/packages/c9/4f/15988966ba46bcd5ab9d0c8296914436720dd67fca689ae1a75b4ec1c72f/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", size = 2312306 },
+ { url = "https://files.pythonhosted.org/packages/2d/27/bdf1c769c83f74d98cbc34483a972f221440703054894a37d174fba8aa68/kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", size = 71966 },
+ { url = "https://files.pythonhosted.org/packages/4a/c9/9642ea855604aeb2968a8e145fc662edf61db7632ad2e4fb92424be6b6c0/kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", size = 65311 },
+ { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 },
+ { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 },
+ { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 },
+ { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 },
+ { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 },
+ { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 },
+ { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 },
+ { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 },
+ { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 },
+ { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 },
+ { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 },
+ { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 },
+ { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 },
+ { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 },
+ { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 },
+ { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 },
+ { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 },
+ { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 },
+ { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 },
+ { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 },
+ { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 },
+ { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 },
+ { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 },
+ { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 },
+ { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 },
+ { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 },
+ { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 },
+ { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 },
+ { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 },
+ { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 },
+ { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 },
+ { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 },
+ { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 },
+ { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 },
+ { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 },
+ { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 },
+ { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 },
+ { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 },
+ { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 },
+ { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 },
+ { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 },
+ { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 },
+ { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 },
+ { url = "https://files.pythonhosted.org/packages/1f/f9/ae81c47a43e33b93b0a9819cac6723257f5da2a5a60daf46aa5c7226ea85/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a", size = 60403 },
+ { url = "https://files.pythonhosted.org/packages/58/ca/f92b5cb6f4ce0c1ebfcfe3e2e42b96917e16f7090e45b21102941924f18f/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8", size = 58657 },
+ { url = "https://files.pythonhosted.org/packages/80/28/ae0240f732f0484d3a4dc885d055653c47144bdf59b670aae0ec3c65a7c8/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0", size = 84948 },
+ { url = "https://files.pythonhosted.org/packages/5d/eb/78d50346c51db22c7203c1611f9b513075f35c4e0e4877c5dde378d66043/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c", size = 81186 },
+ { url = "https://files.pythonhosted.org/packages/43/f8/7259f18c77adca88d5f64f9a522792e178b2691f3748817a8750c2d216ef/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b", size = 80279 },
+ { url = "https://files.pythonhosted.org/packages/3a/1d/50ad811d1c5dae091e4cf046beba925bcae0a610e79ae4c538f996f63ed5/kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", size = 71762 },
+]
+
+[[package]]
+name = "matplotlib"
+version = "3.10.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "contourpy" },
+ { name = "cycler" },
+ { name = "fonttools" },
+ { name = "kiwisolver" },
+ { name = "numpy" },
+ { name = "packaging" },
+ { name = "pillow" },
+ { name = "pyparsing" },
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ee/b1/f70e27cf1cd76ce2a5e1aa5579d05afe3236052c6d9b9a96325bc823a17e/matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16", size = 8163654 },
+ { url = "https://files.pythonhosted.org/packages/26/af/5ec3d4636106718bb62503a03297125d4514f98fe818461bd9e6b9d116e4/matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2", size = 8037943 },
+ { url = "https://files.pythonhosted.org/packages/a1/3d/07f9003a71b698b848c9925d05979ffa94a75cd25d1a587202f0bb58aa81/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698", size = 8449510 },
+ { url = "https://files.pythonhosted.org/packages/12/87/9472d4513ff83b7cd864311821793ab72234fa201ab77310ec1b585d27e2/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19", size = 8586585 },
+ { url = "https://files.pythonhosted.org/packages/31/9e/fe74d237d2963adae8608faeb21f778cf246dbbf4746cef87cffbc82c4b6/matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044", size = 9397911 },
+ { url = "https://files.pythonhosted.org/packages/b6/1b/025d3e59e8a4281ab463162ad7d072575354a1916aba81b6a11507dfc524/matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f", size = 8052998 },
+ { url = "https://files.pythonhosted.org/packages/a5/14/a1b840075be247bb1834b22c1e1d558740b0f618fe3a823740181ca557a1/matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401", size = 8174669 },
+ { url = "https://files.pythonhosted.org/packages/0a/e4/300b08e3e08f9c98b0d5635f42edabf2f7a1d634e64cb0318a71a44ff720/matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe", size = 8047996 },
+ { url = "https://files.pythonhosted.org/packages/75/f9/8d99ff5a2498a5f1ccf919fb46fb945109623c6108216f10f96428f388bc/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd", size = 8461612 },
+ { url = "https://files.pythonhosted.org/packages/40/b8/53fa08a5eaf78d3a7213fd6da1feec4bae14a81d9805e567013811ff0e85/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c", size = 8602258 },
+ { url = "https://files.pythonhosted.org/packages/40/87/4397d2ce808467af86684a622dd112664553e81752ea8bf61bdd89d24a41/matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7", size = 9408896 },
+ { url = "https://files.pythonhosted.org/packages/d7/68/0d03098b3feb786cbd494df0aac15b571effda7f7cbdec267e8a8d398c16/matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a", size = 8061281 },
+ { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 },
+ { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 },
+ { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 },
+ { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 },
+ { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 },
+ { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 },
+ { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 },
+ { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 },
+ { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 },
+ { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 },
+ { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 },
+ { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 },
+ { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 },
+ { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 },
+ { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 },
+ { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 },
+ { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 },
+ { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 },
+ { url = "https://files.pythonhosted.org/packages/c8/f6/10adb696d8cbeed2ab4c2e26ecf1c80dd3847bbf3891f4a0c362e0e08a5a/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc", size = 8158685 },
+ { url = "https://files.pythonhosted.org/packages/3f/84/0603d917406072763e7f9bb37747d3d74d7ecd4b943a8c947cc3ae1cf7af/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4", size = 8035491 },
+ { url = "https://files.pythonhosted.org/packages/fd/7d/6a8b31dd07ed856b3eae001c9129670ef75c4698fa1c2a6ac9f00a4a7054/matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779", size = 8590087 },
+]
+
+[[package]]
+name = "nltk"
+version = "3.9.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "joblib" },
+ { name = "regex" },
+ { name = "tqdm" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/3c/87/db8be88ad32c2d042420b6fd9ffd4a149f9a0d7f0e86b3f543be2eeeedd2/nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868", size = 2904691 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442 },
+]
+
+[[package]]
+name = "numpy"
+version = "2.2.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/dc/b2/ce4b867d8cd9c0ee84938ae1e6a6f7926ebf928c9090d036fc3c6a04f946/numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291", size = 20273920 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ef/4e/3d9e6d16237c2aa5485695f0626cbba82f6481efca2e9132368dea3b885e/numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26", size = 21252117 },
+ { url = "https://files.pythonhosted.org/packages/38/e4/db91349d4079cd15c02ff3b4b8882a529991d6aca077db198a2f2a670406/numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a", size = 14424615 },
+ { url = "https://files.pythonhosted.org/packages/f8/59/6e5b011f553c37b008bd115c7ba7106a18f372588fbb1b430b7a5d2c41ce/numpy-2.2.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:19f4718c9012e3baea91a7dba661dcab2451cda2550678dc30d53acb91a7290f", size = 5428691 },
+ { url = "https://files.pythonhosted.org/packages/a2/58/d5d70ebdac82b3a6ddf409b3749ca5786636e50fd64d60edb46442af6838/numpy-2.2.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:eb7fd5b184e5d277afa9ec0ad5e4eb562ecff541e7f60e69ee69c8d59e9aeaba", size = 6965010 },
+ { url = "https://files.pythonhosted.org/packages/dc/a8/c290394be346d4e7b48a40baf292626fd96ec56a6398ace4c25d9079bc6a/numpy-2.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6413d48a9be53e183eb06495d8e3b006ef8f87c324af68241bbe7a39e8ff54c3", size = 14369885 },
+ { url = "https://files.pythonhosted.org/packages/c2/70/fed13c70aabe7049368553e81d7ca40f305f305800a007a956d7cd2e5476/numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7451f92eddf8503c9b8aa4fe6aa7e87fd51a29c2cfc5f7dbd72efde6c65acf57", size = 16418372 },
+ { url = "https://files.pythonhosted.org/packages/04/ab/c3c14f25ddaecd6fc58a34858f6a93a21eea6c266ba162fa99f3d0de12ac/numpy-2.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0bcb1d057b7571334139129b7f941588f69ce7c4ed15a9d6162b2ea54ded700c", size = 15883173 },
+ { url = "https://files.pythonhosted.org/packages/50/18/f53710a19042911c7aca824afe97c203728a34b8cf123e2d94621a12edc3/numpy-2.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36ab5b23915887543441efd0417e6a3baa08634308894316f446027611b53bf1", size = 18206881 },
+ { url = "https://files.pythonhosted.org/packages/6b/ec/5b407bab82f10c65af5a5fe754728df03f960fd44d27c036b61f7b3ef255/numpy-2.2.5-cp310-cp310-win32.whl", hash = "sha256:422cc684f17bc963da5f59a31530b3936f57c95a29743056ef7a7903a5dbdf88", size = 6609852 },
+ { url = "https://files.pythonhosted.org/packages/b6/f5/467ca8675c7e6c567f571d8db942cc10a87588bd9e20a909d8af4171edda/numpy-2.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:e4f0b035d9d0ed519c813ee23e0a733db81ec37d2e9503afbb6e54ccfdee0fa7", size = 12944922 },
+ { url = "https://files.pythonhosted.org/packages/f5/fb/e4e4c254ba40e8f0c78218f9e86304628c75b6900509b601c8433bdb5da7/numpy-2.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c42365005c7a6c42436a54d28c43fe0e01ca11eb2ac3cefe796c25a5f98e5e9b", size = 21256475 },
+ { url = "https://files.pythonhosted.org/packages/81/32/dd1f7084f5c10b2caad778258fdaeedd7fbd8afcd2510672811e6138dfac/numpy-2.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:498815b96f67dc347e03b719ef49c772589fb74b8ee9ea2c37feae915ad6ebda", size = 14461474 },
+ { url = "https://files.pythonhosted.org/packages/0e/65/937cdf238ef6ac54ff749c0f66d9ee2b03646034c205cea9b6c51f2f3ad1/numpy-2.2.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6411f744f7f20081b1b4e7112e0f4c9c5b08f94b9f086e6f0adf3645f85d3a4d", size = 5426875 },
+ { url = "https://files.pythonhosted.org/packages/25/17/814515fdd545b07306eaee552b65c765035ea302d17de1b9cb50852d2452/numpy-2.2.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9de6832228f617c9ef45d948ec1cd8949c482238d68b2477e6f642c33a7b0a54", size = 6969176 },
+ { url = "https://files.pythonhosted.org/packages/e5/32/a66db7a5c8b5301ec329ab36d0ecca23f5e18907f43dbd593c8ec326d57c/numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:369e0d4647c17c9363244f3468f2227d557a74b6781cb62ce57cf3ef5cc7c610", size = 14374850 },
+ { url = "https://files.pythonhosted.org/packages/ad/c9/1bf6ada582eebcbe8978f5feb26584cd2b39f94ededeea034ca8f84af8c8/numpy-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262d23f383170f99cd9191a7c85b9a50970fe9069b2f8ab5d786eca8a675d60b", size = 16430306 },
+ { url = "https://files.pythonhosted.org/packages/6a/f0/3f741863f29e128f4fcfdb99253cc971406b402b4584663710ee07f5f7eb/numpy-2.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa70fdbdc3b169d69e8c59e65c07a1c9351ceb438e627f0fdcd471015cd956be", size = 15884767 },
+ { url = "https://files.pythonhosted.org/packages/98/d9/4ccd8fd6410f7bf2d312cbc98892e0e43c2fcdd1deae293aeb0a93b18071/numpy-2.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37e32e985f03c06206582a7323ef926b4e78bdaa6915095ef08070471865b906", size = 18219515 },
+ { url = "https://files.pythonhosted.org/packages/b1/56/783237243d4395c6dd741cf16eeb1a9035ee3d4310900e6b17e875d1b201/numpy-2.2.5-cp311-cp311-win32.whl", hash = "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175", size = 6607842 },
+ { url = "https://files.pythonhosted.org/packages/98/89/0c93baaf0094bdaaaa0536fe61a27b1dce8a505fa262a865ec142208cfe9/numpy-2.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:b13f04968b46ad705f7c8a80122a42ae8f620536ea38cf4bdd374302926424dd", size = 12949071 },
+ { url = "https://files.pythonhosted.org/packages/e2/f7/1fd4ff108cd9d7ef929b8882692e23665dc9c23feecafbb9c6b80f4ec583/numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051", size = 20948633 },
+ { url = "https://files.pythonhosted.org/packages/12/03/d443c278348371b20d830af155ff2079acad6a9e60279fac2b41dbbb73d8/numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc", size = 14176123 },
+ { url = "https://files.pythonhosted.org/packages/2b/0b/5ca264641d0e7b14393313304da48b225d15d471250376f3fbdb1a2be603/numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e", size = 5163817 },
+ { url = "https://files.pythonhosted.org/packages/04/b3/d522672b9e3d28e26e1613de7675b441bbd1eaca75db95680635dd158c67/numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa", size = 6698066 },
+ { url = "https://files.pythonhosted.org/packages/a0/93/0f7a75c1ff02d4b76df35079676b3b2719fcdfb39abdf44c8b33f43ef37d/numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571", size = 14087277 },
+ { url = "https://files.pythonhosted.org/packages/b0/d9/7c338b923c53d431bc837b5b787052fef9ae68a56fe91e325aac0d48226e/numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073", size = 16135742 },
+ { url = "https://files.pythonhosted.org/packages/2d/10/4dec9184a5d74ba9867c6f7d1e9f2e0fb5fe96ff2bf50bb6f342d64f2003/numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8", size = 15581825 },
+ { url = "https://files.pythonhosted.org/packages/80/1f/2b6fcd636e848053f5b57712a7d1880b1565eec35a637fdfd0a30d5e738d/numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae", size = 17899600 },
+ { url = "https://files.pythonhosted.org/packages/ec/87/36801f4dc2623d76a0a3835975524a84bd2b18fe0f8835d45c8eae2f9ff2/numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb", size = 6312626 },
+ { url = "https://files.pythonhosted.org/packages/8b/09/4ffb4d6cfe7ca6707336187951992bd8a8b9142cf345d87ab858d2d7636a/numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282", size = 12645715 },
+ { url = "https://files.pythonhosted.org/packages/e2/a0/0aa7f0f4509a2e07bd7a509042967c2fab635690d4f48c6c7b3afd4f448c/numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4", size = 20935102 },
+ { url = "https://files.pythonhosted.org/packages/7e/e4/a6a9f4537542912ec513185396fce52cdd45bdcf3e9d921ab02a93ca5aa9/numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f", size = 14191709 },
+ { url = "https://files.pythonhosted.org/packages/be/65/72f3186b6050bbfe9c43cb81f9df59ae63603491d36179cf7a7c8d216758/numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9", size = 5149173 },
+ { url = "https://files.pythonhosted.org/packages/e5/e9/83e7a9432378dde5802651307ae5e9ea07bb72b416728202218cd4da2801/numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191", size = 6684502 },
+ { url = "https://files.pythonhosted.org/packages/ea/27/b80da6c762394c8ee516b74c1f686fcd16c8f23b14de57ba0cad7349d1d2/numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372", size = 14084417 },
+ { url = "https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d", size = 16133807 },
+ { url = "https://files.pythonhosted.org/packages/bf/9b/4cc171a0acbe4666f7775cfd21d4eb6bb1d36d3a0431f48a73e9212d2278/numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7", size = 15575611 },
+ { url = "https://files.pythonhosted.org/packages/a3/45/40f4135341850df48f8edcf949cf47b523c404b712774f8855a64c96ef29/numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73", size = 17895747 },
+ { url = "https://files.pythonhosted.org/packages/f8/4c/b32a17a46f0ffbde8cc82df6d3daeaf4f552e346df143e1b188a701a8f09/numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b", size = 6309594 },
+ { url = "https://files.pythonhosted.org/packages/13/ae/72e6276feb9ef06787365b05915bfdb057d01fceb4a43cb80978e518d79b/numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471", size = 12638356 },
+ { url = "https://files.pythonhosted.org/packages/79/56/be8b85a9f2adb688e7ded6324e20149a03541d2b3297c3ffc1a73f46dedb/numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6", size = 20963778 },
+ { url = "https://files.pythonhosted.org/packages/ff/77/19c5e62d55bff507a18c3cdff82e94fe174957bad25860a991cac719d3ab/numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba", size = 14207279 },
+ { url = "https://files.pythonhosted.org/packages/75/22/aa11f22dc11ff4ffe4e849d9b63bbe8d4ac6d5fae85ddaa67dfe43be3e76/numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133", size = 5199247 },
+ { url = "https://files.pythonhosted.org/packages/4f/6c/12d5e760fc62c08eded0394f62039f5a9857f758312bf01632a81d841459/numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376", size = 6711087 },
+ { url = "https://files.pythonhosted.org/packages/ef/94/ece8280cf4218b2bee5cec9567629e61e51b4be501e5c6840ceb593db945/numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19", size = 14059964 },
+ { url = "https://files.pythonhosted.org/packages/39/41/c5377dac0514aaeec69115830a39d905b1882819c8e65d97fc60e177e19e/numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0", size = 16121214 },
+ { url = "https://files.pythonhosted.org/packages/db/54/3b9f89a943257bc8e187145c6bc0eb8e3d615655f7b14e9b490b053e8149/numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a", size = 15575788 },
+ { url = "https://files.pythonhosted.org/packages/b1/c4/2e407e85df35b29f79945751b8f8e671057a13a376497d7fb2151ba0d290/numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066", size = 17893672 },
+ { url = "https://files.pythonhosted.org/packages/29/7e/d0b44e129d038dba453f00d0e29ebd6eaf2f06055d72b95b9947998aca14/numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e", size = 6377102 },
+ { url = "https://files.pythonhosted.org/packages/63/be/b85e4aa4bf42c6502851b971f1c326d583fcc68227385f92089cf50a7b45/numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8", size = 12750096 },
+ { url = "https://files.pythonhosted.org/packages/35/e4/5ef5ef1d4308f96961198b2323bfc7c7afb0ccc0d623b01c79bc87ab496d/numpy-2.2.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4ea7e1cff6784e58fe281ce7e7f05036b3e1c89c6f922a6bfbc0a7e8768adbe", size = 21083404 },
+ { url = "https://files.pythonhosted.org/packages/a3/5f/bde9238e8e977652a16a4b114ed8aa8bb093d718c706eeecb5f7bfa59572/numpy-2.2.5-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d7543263084a85fbc09c704b515395398d31d6395518446237eac219eab9e55e", size = 6828578 },
+ { url = "https://files.pythonhosted.org/packages/ef/7f/813f51ed86e559ab2afb6a6f33aa6baf8a560097e25e4882a938986c76c2/numpy-2.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70", size = 16234796 },
+ { url = "https://files.pythonhosted.org/packages/68/67/1175790323026d3337cc285cc9c50eca637d70472b5e622529df74bb8f37/numpy-2.2.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2e3bdadaba0e040d1e7ab39db73e0afe2c74ae277f5614dad53eadbecbbb169", size = 12859001 },
+]
+
+[[package]]
+name = "openai"
+version = "1.75.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "distro" },
+ { name = "httpx" },
+ { name = "jiter" },
+ { name = "pydantic" },
+ { name = "sniffio" },
+ { name = "tqdm" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/99/b1/318f5d4c482f19c5fcbcde190801bfaaaec23413cda0b88a29f6897448ff/openai-1.75.0.tar.gz", hash = "sha256:fb3ea907efbdb1bcfd0c44507ad9c961afd7dce3147292b54505ecfd17be8fd1", size = 429492 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/80/9a/f34f163294345f123673ed03e77c33dee2534f3ac1f9d18120384457304d/openai-1.75.0-py3-none-any.whl", hash = "sha256:fe6f932d2ded3b429ff67cc9ad118c71327db32eb9d32dd723de3acfca337125", size = 646972 },
+]
+
+[[package]]
+name = "openpyxl"
+version = "3.1.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "et-xmlfile" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 },
+]
+
+[[package]]
+name = "packaging"
+version = "25.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 },
+]
+
+[[package]]
+name = "pandas"
+version = "2.2.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy" },
+ { name = "python-dateutil" },
+ { name = "pytz" },
+ { name = "tzdata" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 },
+ { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 },
+ { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 },
+ { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 },
+ { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 },
+ { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 },
+ { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 },
+ { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 },
+ { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 },
+ { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 },
+ { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 },
+ { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 },
+ { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 },
+ { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 },
+ { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 },
+ { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 },
+ { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 },
+ { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 },
+ { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 },
+ { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 },
+ { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 },
+ { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 },
+ { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 },
+ { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 },
+ { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 },
+ { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 },
+ { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 },
+ { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 },
+ { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 },
+ { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 },
+ { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 },
+ { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 },
+ { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 },
+ { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 },
+]
+
+[[package]]
+name = "pillow"
+version = "11.2.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/cb/bb5c01fcd2a69335b86c22142b2bccfc3464087efb7fd382eee5ffc7fdf7/pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", size = 47026707 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/8b/b158ad57ed44d3cc54db8d68ad7c0a58b8fc0e4c7a3f995f9d62d5b464a1/pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047", size = 3198442 },
+ { url = "https://files.pythonhosted.org/packages/b1/f8/bb5d956142f86c2d6cc36704943fa761f2d2e4c48b7436fd0a85c20f1713/pillow-11.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95", size = 3030553 },
+ { url = "https://files.pythonhosted.org/packages/22/7f/0e413bb3e2aa797b9ca2c5c38cb2e2e45d88654e5b12da91ad446964cfae/pillow-11.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ba4be812c7a40280629e55ae0b14a0aafa150dd6451297562e1764808bbe61", size = 4405503 },
+ { url = "https://files.pythonhosted.org/packages/f3/b4/cc647f4d13f3eb837d3065824aa58b9bcf10821f029dc79955ee43f793bd/pillow-11.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8bd62331e5032bc396a93609982a9ab6b411c05078a52f5fe3cc59234a3abd1", size = 4490648 },
+ { url = "https://files.pythonhosted.org/packages/c2/6f/240b772a3b35cdd7384166461567aa6713799b4e78d180c555bd284844ea/pillow-11.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:562d11134c97a62fe3af29581f083033179f7ff435f78392565a1ad2d1c2c45c", size = 4508937 },
+ { url = "https://files.pythonhosted.org/packages/f3/5e/7ca9c815ade5fdca18853db86d812f2f188212792780208bdb37a0a6aef4/pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c97209e85b5be259994eb5b69ff50c5d20cca0f458ef9abd835e262d9d88b39d", size = 4599802 },
+ { url = "https://files.pythonhosted.org/packages/02/81/c3d9d38ce0c4878a77245d4cf2c46d45a4ad0f93000227910a46caff52f3/pillow-11.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0c3e6d0f59171dfa2e25d7116217543310908dfa2770aa64b8f87605f8cacc97", size = 4576717 },
+ { url = "https://files.pythonhosted.org/packages/42/49/52b719b89ac7da3185b8d29c94d0e6aec8140059e3d8adcaa46da3751180/pillow-11.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc1c3bc53befb6096b84165956e886b1729634a799e9d6329a0c512ab651e579", size = 4654874 },
+ { url = "https://files.pythonhosted.org/packages/5b/0b/ede75063ba6023798267023dc0d0401f13695d228194d2242d5a7ba2f964/pillow-11.2.1-cp310-cp310-win32.whl", hash = "sha256:312c77b7f07ab2139924d2639860e084ec2a13e72af54d4f08ac843a5fc9c79d", size = 2331717 },
+ { url = "https://files.pythonhosted.org/packages/ed/3c/9831da3edea527c2ed9a09f31a2c04e77cd705847f13b69ca60269eec370/pillow-11.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9bc7ae48b8057a611e5fe9f853baa88093b9a76303937449397899385da06fad", size = 2676204 },
+ { url = "https://files.pythonhosted.org/packages/01/97/1f66ff8a1503d8cbfc5bae4dc99d54c6ec1e22ad2b946241365320caabc2/pillow-11.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:2728567e249cdd939f6cc3d1f049595c66e4187f3c34078cbc0a7d21c47482d2", size = 2414767 },
+ { url = "https://files.pythonhosted.org/packages/68/08/3fbf4b98924c73037a8e8b4c2c774784805e0fb4ebca6c5bb60795c40125/pillow-11.2.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35ca289f712ccfc699508c4658a1d14652e8033e9b69839edf83cbdd0ba39e70", size = 3198450 },
+ { url = "https://files.pythonhosted.org/packages/84/92/6505b1af3d2849d5e714fc75ba9e69b7255c05ee42383a35a4d58f576b16/pillow-11.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0409af9f829f87a2dfb7e259f78f317a5351f2045158be321fd135973fff7bf", size = 3030550 },
+ { url = "https://files.pythonhosted.org/packages/3c/8c/ac2f99d2a70ff966bc7eb13dacacfaab57c0549b2ffb351b6537c7840b12/pillow-11.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e5c5edee874dce4f653dbe59db7c73a600119fbea8d31f53423586ee2aafd7", size = 4415018 },
+ { url = "https://files.pythonhosted.org/packages/1f/e3/0a58b5d838687f40891fff9cbaf8669f90c96b64dc8f91f87894413856c6/pillow-11.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93a07e76d13bff9444f1a029e0af2964e654bfc2e2c2d46bfd080df5ad5f3d8", size = 4498006 },
+ { url = "https://files.pythonhosted.org/packages/21/f5/6ba14718135f08fbfa33308efe027dd02b781d3f1d5c471444a395933aac/pillow-11.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6def7eed9e7fa90fde255afaf08060dc4b343bbe524a8f69bdd2a2f0018f600", size = 4517773 },
+ { url = "https://files.pythonhosted.org/packages/20/f2/805ad600fc59ebe4f1ba6129cd3a75fb0da126975c8579b8f57abeb61e80/pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8f4f3724c068be008c08257207210c138d5f3731af6c155a81c2b09a9eb3a788", size = 4607069 },
+ { url = "https://files.pythonhosted.org/packages/71/6b/4ef8a288b4bb2e0180cba13ca0a519fa27aa982875882392b65131401099/pillow-11.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0a6709b47019dff32e678bc12c63008311b82b9327613f534e496dacaefb71e", size = 4583460 },
+ { url = "https://files.pythonhosted.org/packages/62/ae/f29c705a09cbc9e2a456590816e5c234382ae5d32584f451c3eb41a62062/pillow-11.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f6b0c664ccb879109ee3ca702a9272d877f4fcd21e5eb63c26422fd6e415365e", size = 4661304 },
+ { url = "https://files.pythonhosted.org/packages/6e/1a/c8217b6f2f73794a5e219fbad087701f412337ae6dbb956db37d69a9bc43/pillow-11.2.1-cp311-cp311-win32.whl", hash = "sha256:cc5d875d56e49f112b6def6813c4e3d3036d269c008bf8aef72cd08d20ca6df6", size = 2331809 },
+ { url = "https://files.pythonhosted.org/packages/e2/72/25a8f40170dc262e86e90f37cb72cb3de5e307f75bf4b02535a61afcd519/pillow-11.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:0f5c7eda47bf8e3c8a283762cab94e496ba977a420868cb819159980b6709193", size = 2676338 },
+ { url = "https://files.pythonhosted.org/packages/06/9e/76825e39efee61efea258b479391ca77d64dbd9e5804e4ad0fa453b4ba55/pillow-11.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:4d375eb838755f2528ac8cbc926c3e31cc49ca4ad0cf79cff48b20e30634a4a7", size = 2414918 },
+ { url = "https://files.pythonhosted.org/packages/c7/40/052610b15a1b8961f52537cc8326ca6a881408bc2bdad0d852edeb6ed33b/pillow-11.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f", size = 3190185 },
+ { url = "https://files.pythonhosted.org/packages/e5/7e/b86dbd35a5f938632093dc40d1682874c33dcfe832558fc80ca56bfcb774/pillow-11.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b", size = 3030306 },
+ { url = "https://files.pythonhosted.org/packages/a4/5c/467a161f9ed53e5eab51a42923c33051bf8d1a2af4626ac04f5166e58e0c/pillow-11.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d", size = 4416121 },
+ { url = "https://files.pythonhosted.org/packages/62/73/972b7742e38ae0e2ac76ab137ca6005dcf877480da0d9d61d93b613065b4/pillow-11.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4", size = 4501707 },
+ { url = "https://files.pythonhosted.org/packages/e4/3a/427e4cb0b9e177efbc1a84798ed20498c4f233abde003c06d2650a6d60cb/pillow-11.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d", size = 4522921 },
+ { url = "https://files.pythonhosted.org/packages/fe/7c/d8b1330458e4d2f3f45d9508796d7caf0c0d3764c00c823d10f6f1a3b76d/pillow-11.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4", size = 4612523 },
+ { url = "https://files.pythonhosted.org/packages/b3/2f/65738384e0b1acf451de5a573d8153fe84103772d139e1e0bdf1596be2ea/pillow-11.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443", size = 4587836 },
+ { url = "https://files.pythonhosted.org/packages/6a/c5/e795c9f2ddf3debb2dedd0df889f2fe4b053308bb59a3cc02a0cd144d641/pillow-11.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c", size = 4669390 },
+ { url = "https://files.pythonhosted.org/packages/96/ae/ca0099a3995976a9fce2f423166f7bff9b12244afdc7520f6ed38911539a/pillow-11.2.1-cp312-cp312-win32.whl", hash = "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3", size = 2332309 },
+ { url = "https://files.pythonhosted.org/packages/7c/18/24bff2ad716257fc03da964c5e8f05d9790a779a8895d6566e493ccf0189/pillow-11.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941", size = 2676768 },
+ { url = "https://files.pythonhosted.org/packages/da/bb/e8d656c9543276517ee40184aaa39dcb41e683bca121022f9323ae11b39d/pillow-11.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb", size = 2415087 },
+ { url = "https://files.pythonhosted.org/packages/36/9c/447528ee3776e7ab8897fe33697a7ff3f0475bb490c5ac1456a03dc57956/pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", size = 3190098 },
+ { url = "https://files.pythonhosted.org/packages/b5/09/29d5cd052f7566a63e5b506fac9c60526e9ecc553825551333e1e18a4858/pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", size = 3030166 },
+ { url = "https://files.pythonhosted.org/packages/71/5d/446ee132ad35e7600652133f9c2840b4799bbd8e4adba881284860da0a36/pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", size = 4408674 },
+ { url = "https://files.pythonhosted.org/packages/69/5f/cbe509c0ddf91cc3a03bbacf40e5c2339c4912d16458fcb797bb47bcb269/pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", size = 4496005 },
+ { url = "https://files.pythonhosted.org/packages/f9/b3/dd4338d8fb8a5f312021f2977fb8198a1184893f9b00b02b75d565c33b51/pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", size = 4518707 },
+ { url = "https://files.pythonhosted.org/packages/13/eb/2552ecebc0b887f539111c2cd241f538b8ff5891b8903dfe672e997529be/pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", size = 4610008 },
+ { url = "https://files.pythonhosted.org/packages/72/d1/924ce51bea494cb6e7959522d69d7b1c7e74f6821d84c63c3dc430cbbf3b/pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", size = 4585420 },
+ { url = "https://files.pythonhosted.org/packages/43/ab/8f81312d255d713b99ca37479a4cb4b0f48195e530cdc1611990eb8fd04b/pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b", size = 4667655 },
+ { url = "https://files.pythonhosted.org/packages/94/86/8f2e9d2dc3d308dfd137a07fe1cc478df0a23d42a6c4093b087e738e4827/pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", size = 2332329 },
+ { url = "https://files.pythonhosted.org/packages/6d/ec/1179083b8d6067a613e4d595359b5fdea65d0a3b7ad623fee906e1b3c4d2/pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", size = 2676388 },
+ { url = "https://files.pythonhosted.org/packages/23/f1/2fc1e1e294de897df39fa8622d829b8828ddad938b0eaea256d65b84dd72/pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", size = 2414950 },
+ { url = "https://files.pythonhosted.org/packages/c4/3e/c328c48b3f0ead7bab765a84b4977acb29f101d10e4ef57a5e3400447c03/pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", size = 3192759 },
+ { url = "https://files.pythonhosted.org/packages/18/0e/1c68532d833fc8b9f404d3a642991441d9058eccd5606eab31617f29b6d4/pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", size = 3033284 },
+ { url = "https://files.pythonhosted.org/packages/b7/cb/6faf3fb1e7705fd2db74e070f3bf6f88693601b0ed8e81049a8266de4754/pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", size = 4445826 },
+ { url = "https://files.pythonhosted.org/packages/07/94/8be03d50b70ca47fb434a358919d6a8d6580f282bbb7af7e4aa40103461d/pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", size = 4527329 },
+ { url = "https://files.pythonhosted.org/packages/fd/a4/bfe78777076dc405e3bd2080bc32da5ab3945b5a25dc5d8acaa9de64a162/pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", size = 4549049 },
+ { url = "https://files.pythonhosted.org/packages/65/4d/eaf9068dc687c24979e977ce5677e253624bd8b616b286f543f0c1b91662/pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", size = 4635408 },
+ { url = "https://files.pythonhosted.org/packages/1d/26/0fd443365d9c63bc79feb219f97d935cd4b93af28353cba78d8e77b61719/pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", size = 4614863 },
+ { url = "https://files.pythonhosted.org/packages/49/65/dca4d2506be482c2c6641cacdba5c602bc76d8ceb618fd37de855653a419/pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", size = 4692938 },
+ { url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774 },
+ { url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895 },
+ { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 },
+ { url = "https://files.pythonhosted.org/packages/33/49/c8c21e4255b4f4a2c0c68ac18125d7f5460b109acc6dfdef1a24f9b960ef/pillow-11.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156", size = 3181727 },
+ { url = "https://files.pythonhosted.org/packages/6d/f1/f7255c0838f8c1ef6d55b625cfb286835c17e8136ce4351c5577d02c443b/pillow-11.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772", size = 2999833 },
+ { url = "https://files.pythonhosted.org/packages/e2/57/9968114457bd131063da98d87790d080366218f64fa2943b65ac6739abb3/pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363", size = 3437472 },
+ { url = "https://files.pythonhosted.org/packages/b2/1b/e35d8a158e21372ecc48aac9c453518cfe23907bb82f950d6e1c72811eb0/pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85d27ea4c889342f7e35f6d56e7e1cb345632ad592e8c51b693d7b7556043ce0", size = 3459976 },
+ { url = "https://files.pythonhosted.org/packages/26/da/2c11d03b765efff0ccc473f1c4186dc2770110464f2177efaed9cf6fae01/pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bf2c33d6791c598142f00c9c4c7d47f6476731c31081331664eb26d6ab583e01", size = 3527133 },
+ { url = "https://files.pythonhosted.org/packages/79/1a/4e85bd7cadf78412c2a3069249a09c32ef3323650fd3005c97cca7aa21df/pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e616e7154c37669fc1dfc14584f11e284e05d1c650e1c0f972f281c4ccc53193", size = 3571555 },
+ { url = "https://files.pythonhosted.org/packages/69/03/239939915216de1e95e0ce2334bf17a7870ae185eb390fab6d706aadbfc0/pillow-11.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39ad2e0f424394e3aebc40168845fee52df1394a4673a6ee512d840d14ab3013", size = 2674713 },
+ { url = "https://files.pythonhosted.org/packages/a4/ad/2613c04633c7257d9481ab21d6b5364b59fc5d75faafd7cb8693523945a3/pillow-11.2.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80f1df8dbe9572b4b7abdfa17eb5d78dd620b1d55d9e25f834efdbee872d3aed", size = 3181734 },
+ { url = "https://files.pythonhosted.org/packages/a4/fd/dcdda4471ed667de57bb5405bb42d751e6cfdd4011a12c248b455c778e03/pillow-11.2.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ea926cfbc3957090becbcbbb65ad177161a2ff2ad578b5a6ec9bb1e1cd78753c", size = 2999841 },
+ { url = "https://files.pythonhosted.org/packages/ac/89/8a2536e95e77432833f0db6fd72a8d310c8e4272a04461fb833eb021bf94/pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:738db0e0941ca0376804d4de6a782c005245264edaa253ffce24e5a15cbdc7bd", size = 3437470 },
+ { url = "https://files.pythonhosted.org/packages/9d/8f/abd47b73c60712f88e9eda32baced7bfc3e9bd6a7619bb64b93acff28c3e/pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db98ab6565c69082ec9b0d4e40dd9f6181dab0dd236d26f7a50b8b9bfbd5076", size = 3460013 },
+ { url = "https://files.pythonhosted.org/packages/f6/20/5c0a0aa83b213b7a07ec01e71a3d6ea2cf4ad1d2c686cc0168173b6089e7/pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:036e53f4170e270ddb8797d4c590e6dd14d28e15c7da375c18978045f7e6c37b", size = 3527165 },
+ { url = "https://files.pythonhosted.org/packages/58/0e/2abab98a72202d91146abc839e10c14f7cf36166f12838ea0c4db3ca6ecb/pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14f73f7c291279bd65fda51ee87affd7c1e097709f7fdd0188957a16c264601f", size = 3571586 },
+ { url = "https://files.pythonhosted.org/packages/21/2c/5e05f58658cf49b6667762cca03d6e7d85cededde2caf2ab37b81f80e574/pillow-11.2.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:208653868d5c9ecc2b327f9b9ef34e0e42a4cdd172c2988fd81d62d2bc9bc044", size = 2674751 },
+]
+
+[[package]]
+name = "pyarrow"
+version = "19.0.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7f/09/a9046344212690f0632b9c709f9bf18506522feb333c894d0de81d62341a/pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e", size = 1129437 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/36/01/b23b514d86b839956238d3f8ef206fd2728eee87ff1b8ce150a5678d9721/pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69", size = 30688914 },
+ { url = "https://files.pythonhosted.org/packages/c6/68/218ff7cf4a0652a933e5f2ed11274f724dd43b9813cb18dd72c0a35226a2/pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec", size = 32102866 },
+ { url = "https://files.pythonhosted.org/packages/98/01/c295050d183014f4a2eb796d7d2bbfa04b6cccde7258bb68aacf6f18779b/pyarrow-19.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76aef7f5f7e4a757fddcdcf010a8290958f09e3470ea458c80d26f4316ae89", size = 41147682 },
+ { url = "https://files.pythonhosted.org/packages/40/17/a6c3db0b5f3678f33bbb552d2acbc16def67f89a72955b67b0109af23eb0/pyarrow-19.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d03c9d6f2a3dffbd62671ca070f13fc527bb1867b4ec2b98c7eeed381d4f389a", size = 42179192 },
+ { url = "https://files.pythonhosted.org/packages/cf/75/c7c8e599300d8cebb6cb339014800e1c720c9db2a3fcb66aa64ec84bac72/pyarrow-19.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:65cf9feebab489b19cdfcfe4aa82f62147218558d8d3f0fc1e9dea0ab8e7905a", size = 40517272 },
+ { url = "https://files.pythonhosted.org/packages/ef/c9/68ab123ee1528699c4d5055f645ecd1dd68ff93e4699527249d02f55afeb/pyarrow-19.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:41f9706fbe505e0abc10e84bf3a906a1338905cbbcf1177b71486b03e6ea6608", size = 42069036 },
+ { url = "https://files.pythonhosted.org/packages/54/e3/d5cfd7654084e6c0d9c3ce949e5d9e0ccad569ae1e2d5a68a3ec03b2be89/pyarrow-19.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb2335a411b713fdf1e82a752162f72d4a7b5dbc588e32aa18383318b05866", size = 25277951 },
+ { url = "https://files.pythonhosted.org/packages/a0/55/f1a8d838ec07fe3ca53edbe76f782df7b9aafd4417080eebf0b42aab0c52/pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90", size = 30713987 },
+ { url = "https://files.pythonhosted.org/packages/13/12/428861540bb54c98a140ae858a11f71d041ef9e501e6b7eb965ca7909505/pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00", size = 32135613 },
+ { url = "https://files.pythonhosted.org/packages/2f/8a/23d7cc5ae2066c6c736bce1db8ea7bc9ac3ef97ac7e1c1667706c764d2d9/pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae", size = 41149147 },
+ { url = "https://files.pythonhosted.org/packages/a2/7a/845d151bb81a892dfb368bf11db584cf8b216963ccce40a5cf50a2492a18/pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5", size = 42178045 },
+ { url = "https://files.pythonhosted.org/packages/a7/31/e7282d79a70816132cf6cae7e378adfccce9ae10352d21c2fecf9d9756dd/pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3", size = 40532998 },
+ { url = "https://files.pythonhosted.org/packages/b8/82/20f3c290d6e705e2ee9c1fa1d5a0869365ee477e1788073d8b548da8b64c/pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6", size = 42084055 },
+ { url = "https://files.pythonhosted.org/packages/ff/77/e62aebd343238863f2c9f080ad2ef6ace25c919c6ab383436b5b81cbeef7/pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466", size = 25283133 },
+ { url = "https://files.pythonhosted.org/packages/78/b4/94e828704b050e723f67d67c3535cf7076c7432cd4cf046e4bb3b96a9c9d/pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b", size = 30670749 },
+ { url = "https://files.pythonhosted.org/packages/7e/3b/4692965e04bb1df55e2c314c4296f1eb12b4f3052d4cf43d29e076aedf66/pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294", size = 32128007 },
+ { url = "https://files.pythonhosted.org/packages/22/f7/2239af706252c6582a5635c35caa17cb4d401cd74a87821ef702e3888957/pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14", size = 41144566 },
+ { url = "https://files.pythonhosted.org/packages/fb/e3/c9661b2b2849cfefddd9fd65b64e093594b231b472de08ff658f76c732b2/pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34", size = 42202991 },
+ { url = "https://files.pythonhosted.org/packages/fe/4f/a2c0ed309167ef436674782dfee4a124570ba64299c551e38d3fdaf0a17b/pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6", size = 40507986 },
+ { url = "https://files.pythonhosted.org/packages/27/2e/29bb28a7102a6f71026a9d70d1d61df926887e36ec797f2e6acfd2dd3867/pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832", size = 42087026 },
+ { url = "https://files.pythonhosted.org/packages/16/33/2a67c0f783251106aeeee516f4806161e7b481f7d744d0d643d2f30230a5/pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960", size = 25250108 },
+ { url = "https://files.pythonhosted.org/packages/2b/8d/275c58d4b00781bd36579501a259eacc5c6dfb369be4ddeb672ceb551d2d/pyarrow-19.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e45274b20e524ae5c39d7fc1ca2aa923aab494776d2d4b316b49ec7572ca324c", size = 30653552 },
+ { url = "https://files.pythonhosted.org/packages/a0/9e/e6aca5cc4ef0c7aec5f8db93feb0bde08dbad8c56b9014216205d271101b/pyarrow-19.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d9dedeaf19097a143ed6da37f04f4051aba353c95ef507764d344229b2b740ae", size = 32103413 },
+ { url = "https://files.pythonhosted.org/packages/6a/fa/a7033f66e5d4f1308c7eb0dfcd2ccd70f881724eb6fd1776657fdf65458f/pyarrow-19.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebfb5171bb5f4a52319344ebbbecc731af3f021e49318c74f33d520d31ae0c4", size = 41134869 },
+ { url = "https://files.pythonhosted.org/packages/2d/92/34d2569be8e7abdc9d145c98dc410db0071ac579b92ebc30da35f500d630/pyarrow-19.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a21d39fbdb948857f67eacb5bbaaf36802de044ec36fbef7a1c8f0dd3a4ab2", size = 42192626 },
+ { url = "https://files.pythonhosted.org/packages/0a/1f/80c617b1084fc833804dc3309aa9d8daacd46f9ec8d736df733f15aebe2c/pyarrow-19.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:99bc1bec6d234359743b01e70d4310d0ab240c3d6b0da7e2a93663b0158616f6", size = 40496708 },
+ { url = "https://files.pythonhosted.org/packages/e6/90/83698fcecf939a611c8d9a78e38e7fed7792dcc4317e29e72cf8135526fb/pyarrow-19.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1b93ef2c93e77c442c979b0d596af45e4665d8b96da598db145b0fec014b9136", size = 42075728 },
+ { url = "https://files.pythonhosted.org/packages/40/49/2325f5c9e7a1c125c01ba0c509d400b152c972a47958768e4e35e04d13d8/pyarrow-19.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9d46e06846a41ba906ab25302cf0fd522f81aa2a85a71021826f34639ad31ef", size = 25242568 },
+ { url = "https://files.pythonhosted.org/packages/3f/72/135088d995a759d4d916ec4824cb19e066585b4909ebad4ab196177aa825/pyarrow-19.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c0fe3dbbf054a00d1f162fda94ce236a899ca01123a798c561ba307ca38af5f0", size = 30702371 },
+ { url = "https://files.pythonhosted.org/packages/2e/01/00beeebd33d6bac701f20816a29d2018eba463616bbc07397fdf99ac4ce3/pyarrow-19.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:96606c3ba57944d128e8a8399da4812f56c7f61de8c647e3470b417f795d0ef9", size = 32116046 },
+ { url = "https://files.pythonhosted.org/packages/1f/c9/23b1ea718dfe967cbd986d16cf2a31fe59d015874258baae16d7ea0ccabc/pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f04d49a6b64cf24719c080b3c2029a3a5b16417fd5fd7c4041f94233af732f3", size = 41091183 },
+ { url = "https://files.pythonhosted.org/packages/3a/d4/b4a3aa781a2c715520aa8ab4fe2e7fa49d33a1d4e71c8fc6ab7b5de7a3f8/pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9137cf7e1640dce4c190551ee69d478f7121b5c6f323553b319cac936395f6", size = 42171896 },
+ { url = "https://files.pythonhosted.org/packages/23/1b/716d4cd5a3cbc387c6e6745d2704c4b46654ba2668260d25c402626c5ddb/pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7c1bca1897c28013db5e4c83944a2ab53231f541b9e0c3f4791206d0c0de389a", size = 40464851 },
+ { url = "https://files.pythonhosted.org/packages/ed/bd/54907846383dcc7ee28772d7e646f6c34276a17da740002a5cefe90f04f7/pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:58d9397b2e273ef76264b45531e9d552d8ec8a6688b7390b5be44c02a37aade8", size = 42085744 },
+]
+
+[[package]]
+name = "pydantic"
+version = "2.11.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "annotated-types" },
+ { name = "pydantic-core" },
+ { name = "typing-extensions" },
+ { name = "typing-inspection" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/10/2e/ca897f093ee6c5f3b0bee123ee4465c50e75431c3d5b6a3b44a47134e891/pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3", size = 785513 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b0/1d/407b29780a289868ed696d1616f4aad49d6388e5a77f567dcd2629dcd7b8/pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f", size = 443591 },
+]
+
+[[package]]
+name = "pydantic-core"
+version = "2.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/17/19/ed6a078a5287aea7922de6841ef4c06157931622c89c2a47940837b5eecd/pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df", size = 434395 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/38/ea/5f572806ab4d4223d11551af814d243b0e3e02cc6913def4d1fe4a5ca41c/pydantic_core-2.33.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3077cfdb6125cc8dab61b155fdd714663e401f0e6883f9632118ec12cf42df26", size = 2044021 },
+ { url = "https://files.pythonhosted.org/packages/8c/d1/f86cc96d2aa80e3881140d16d12ef2b491223f90b28b9a911346c04ac359/pydantic_core-2.33.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ffab8b2908d152e74862d276cf5017c81a2f3719f14e8e3e8d6b83fda863927", size = 1861742 },
+ { url = "https://files.pythonhosted.org/packages/37/08/fbd2cd1e9fc735a0df0142fac41c114ad9602d1c004aea340169ae90973b/pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5183e4f6a2d468787243ebcd70cf4098c247e60d73fb7d68d5bc1e1beaa0c4db", size = 1910414 },
+ { url = "https://files.pythonhosted.org/packages/7f/73/3ac217751decbf8d6cb9443cec9b9eb0130eeada6ae56403e11b486e277e/pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:398a38d323f37714023be1e0285765f0a27243a8b1506b7b7de87b647b517e48", size = 1996848 },
+ { url = "https://files.pythonhosted.org/packages/9a/f5/5c26b265cdcff2661e2520d2d1e9db72d117ea00eb41e00a76efe68cb009/pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87d3776f0001b43acebfa86f8c64019c043b55cc5a6a2e313d728b5c95b46969", size = 2141055 },
+ { url = "https://files.pythonhosted.org/packages/5d/14/a9c3cee817ef2f8347c5ce0713e91867a0dceceefcb2973942855c917379/pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c566dd9c5f63d22226409553531f89de0cac55397f2ab8d97d6f06cfce6d947e", size = 2753806 },
+ { url = "https://files.pythonhosted.org/packages/f2/68/866ce83a51dd37e7c604ce0050ff6ad26de65a7799df89f4db87dd93d1d6/pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d5f3acc81452c56895e90643a625302bd6be351e7010664151cc55b7b97f89", size = 2007777 },
+ { url = "https://files.pythonhosted.org/packages/b6/a8/36771f4404bb3e49bd6d4344da4dede0bf89cc1e01f3b723c47248a3761c/pydantic_core-2.33.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3a07fadec2a13274a8d861d3d37c61e97a816beae717efccaa4b36dfcaadcde", size = 2122803 },
+ { url = "https://files.pythonhosted.org/packages/18/9c/730a09b2694aa89360d20756369822d98dc2f31b717c21df33b64ffd1f50/pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f99aeda58dce827f76963ee87a0ebe75e648c72ff9ba1174a253f6744f518f65", size = 2086755 },
+ { url = "https://files.pythonhosted.org/packages/54/8e/2dccd89602b5ec31d1c58138d02340ecb2ebb8c2cac3cc66b65ce3edb6ce/pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:902dbc832141aa0ec374f4310f1e4e7febeebc3256f00dc359a9ac3f264a45dc", size = 2257358 },
+ { url = "https://files.pythonhosted.org/packages/d1/9c/126e4ac1bfad8a95a9837acdd0963695d69264179ba4ede8b8c40d741702/pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fe44d56aa0b00d66640aa84a3cbe80b7a3ccdc6f0b1ca71090696a6d4777c091", size = 2257916 },
+ { url = "https://files.pythonhosted.org/packages/7d/ba/91eea2047e681a6853c81c20aeca9dcdaa5402ccb7404a2097c2adf9d038/pydantic_core-2.33.1-cp310-cp310-win32.whl", hash = "sha256:ed3eb16d51257c763539bde21e011092f127a2202692afaeaccb50db55a31383", size = 1923823 },
+ { url = "https://files.pythonhosted.org/packages/94/c0/fcdf739bf60d836a38811476f6ecd50374880b01e3014318b6e809ddfd52/pydantic_core-2.33.1-cp310-cp310-win_amd64.whl", hash = "sha256:694ad99a7f6718c1a498dc170ca430687a39894a60327f548e02a9c7ee4b6504", size = 1952494 },
+ { url = "https://files.pythonhosted.org/packages/d6/7f/c6298830cb780c46b4f46bb24298d01019ffa4d21769f39b908cd14bbd50/pydantic_core-2.33.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e966fc3caaf9f1d96b349b0341c70c8d6573bf1bac7261f7b0ba88f96c56c24", size = 2044224 },
+ { url = "https://files.pythonhosted.org/packages/a8/65/6ab3a536776cad5343f625245bd38165d6663256ad43f3a200e5936afd6c/pydantic_core-2.33.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bfd0adeee563d59c598ceabddf2c92eec77abcb3f4a391b19aa7366170bd9e30", size = 1858845 },
+ { url = "https://files.pythonhosted.org/packages/e9/15/9a22fd26ba5ee8c669d4b8c9c244238e940cd5d818649603ca81d1c69861/pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91815221101ad3c6b507804178a7bb5cb7b2ead9ecd600041669c8d805ebd595", size = 1910029 },
+ { url = "https://files.pythonhosted.org/packages/d5/33/8cb1a62818974045086f55f604044bf35b9342900318f9a2a029a1bec460/pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9fea9c1869bb4742d174a57b4700c6dadea951df8b06de40c2fedb4f02931c2e", size = 1997784 },
+ { url = "https://files.pythonhosted.org/packages/c0/ca/49958e4df7715c71773e1ea5be1c74544923d10319173264e6db122543f9/pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d20eb4861329bb2484c021b9d9a977566ab16d84000a57e28061151c62b349a", size = 2141075 },
+ { url = "https://files.pythonhosted.org/packages/7b/a6/0b3a167a9773c79ba834b959b4e18c3ae9216b8319bd8422792abc8a41b1/pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb935c5591573ae3201640579f30128ccc10739b45663f93c06796854405505", size = 2745849 },
+ { url = "https://files.pythonhosted.org/packages/0b/60/516484135173aa9e5861d7a0663dce82e4746d2e7f803627d8c25dfa5578/pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c964fd24e6166420d18fb53996d8c9fd6eac9bf5ae3ec3d03015be4414ce497f", size = 2005794 },
+ { url = "https://files.pythonhosted.org/packages/86/70/05b1eb77459ad47de00cf78ee003016da0cedf8b9170260488d7c21e9181/pydantic_core-2.33.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:681d65e9011f7392db5aa002b7423cc442d6a673c635668c227c6c8d0e5a4f77", size = 2123237 },
+ { url = "https://files.pythonhosted.org/packages/c7/57/12667a1409c04ae7dc95d3b43158948eb0368e9c790be8b095cb60611459/pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e100c52f7355a48413e2999bfb4e139d2977a904495441b374f3d4fb4a170961", size = 2086351 },
+ { url = "https://files.pythonhosted.org/packages/57/61/cc6d1d1c1664b58fdd6ecc64c84366c34ec9b606aeb66cafab6f4088974c/pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:048831bd363490be79acdd3232f74a0e9951b11b2b4cc058aeb72b22fdc3abe1", size = 2258914 },
+ { url = "https://files.pythonhosted.org/packages/d1/0a/edb137176a1f5419b2ddee8bde6a0a548cfa3c74f657f63e56232df8de88/pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bdc84017d28459c00db6f918a7272a5190bec3090058334e43a76afb279eac7c", size = 2257385 },
+ { url = "https://files.pythonhosted.org/packages/26/3c/48ca982d50e4b0e1d9954919c887bdc1c2b462801bf408613ccc641b3daa/pydantic_core-2.33.1-cp311-cp311-win32.whl", hash = "sha256:32cd11c5914d1179df70406427097c7dcde19fddf1418c787540f4b730289896", size = 1923765 },
+ { url = "https://files.pythonhosted.org/packages/33/cd/7ab70b99e5e21559f5de38a0928ea84e6f23fdef2b0d16a6feaf942b003c/pydantic_core-2.33.1-cp311-cp311-win_amd64.whl", hash = "sha256:2ea62419ba8c397e7da28a9170a16219d310d2cf4970dbc65c32faf20d828c83", size = 1950688 },
+ { url = "https://files.pythonhosted.org/packages/4b/ae/db1fc237b82e2cacd379f63e3335748ab88b5adde98bf7544a1b1bd10a84/pydantic_core-2.33.1-cp311-cp311-win_arm64.whl", hash = "sha256:fc903512177361e868bc1f5b80ac8c8a6e05fcdd574a5fb5ffeac5a9982b9e89", size = 1908185 },
+ { url = "https://files.pythonhosted.org/packages/c8/ce/3cb22b07c29938f97ff5f5bb27521f95e2ebec399b882392deb68d6c440e/pydantic_core-2.33.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8", size = 2026640 },
+ { url = "https://files.pythonhosted.org/packages/19/78/f381d643b12378fee782a72126ec5d793081ef03791c28a0fd542a5bee64/pydantic_core-2.33.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498", size = 1852649 },
+ { url = "https://files.pythonhosted.org/packages/9d/2b/98a37b80b15aac9eb2c6cfc6dbd35e5058a352891c5cce3a8472d77665a6/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939", size = 1892472 },
+ { url = "https://files.pythonhosted.org/packages/4e/d4/3c59514e0f55a161004792b9ff3039da52448f43f5834f905abef9db6e4a/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d", size = 1977509 },
+ { url = "https://files.pythonhosted.org/packages/a9/b6/c2c7946ef70576f79a25db59a576bce088bdc5952d1b93c9789b091df716/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e", size = 2128702 },
+ { url = "https://files.pythonhosted.org/packages/88/fe/65a880f81e3f2a974312b61f82a03d85528f89a010ce21ad92f109d94deb/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3", size = 2679428 },
+ { url = "https://files.pythonhosted.org/packages/6f/ff/4459e4146afd0462fb483bb98aa2436d69c484737feaceba1341615fb0ac/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d", size = 2008753 },
+ { url = "https://files.pythonhosted.org/packages/7c/76/1c42e384e8d78452ededac8b583fe2550c84abfef83a0552e0e7478ccbc3/pydantic_core-2.33.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b", size = 2114849 },
+ { url = "https://files.pythonhosted.org/packages/00/72/7d0cf05095c15f7ffe0eb78914b166d591c0eed72f294da68378da205101/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39", size = 2069541 },
+ { url = "https://files.pythonhosted.org/packages/b3/69/94a514066bb7d8be499aa764926937409d2389c09be0b5107a970286ef81/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a", size = 2239225 },
+ { url = "https://files.pythonhosted.org/packages/84/b0/e390071eadb44b41f4f54c3cef64d8bf5f9612c92686c9299eaa09e267e2/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db", size = 2248373 },
+ { url = "https://files.pythonhosted.org/packages/d6/b2/288b3579ffc07e92af66e2f1a11be3b056fe1214aab314748461f21a31c3/pydantic_core-2.33.1-cp312-cp312-win32.whl", hash = "sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda", size = 1907034 },
+ { url = "https://files.pythonhosted.org/packages/02/28/58442ad1c22b5b6742b992ba9518420235adced665513868f99a1c2638a5/pydantic_core-2.33.1-cp312-cp312-win_amd64.whl", hash = "sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4", size = 1956848 },
+ { url = "https://files.pythonhosted.org/packages/a1/eb/f54809b51c7e2a1d9f439f158b8dd94359321abcc98767e16fc48ae5a77e/pydantic_core-2.33.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea", size = 1903986 },
+ { url = "https://files.pythonhosted.org/packages/7a/24/eed3466a4308d79155f1cdd5c7432c80ddcc4530ba8623b79d5ced021641/pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a", size = 2033551 },
+ { url = "https://files.pythonhosted.org/packages/ab/14/df54b1a0bc9b6ded9b758b73139d2c11b4e8eb43e8ab9c5847c0a2913ada/pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266", size = 1852785 },
+ { url = "https://files.pythonhosted.org/packages/fa/96/e275f15ff3d34bb04b0125d9bc8848bf69f25d784d92a63676112451bfb9/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3", size = 1897758 },
+ { url = "https://files.pythonhosted.org/packages/b7/d8/96bc536e975b69e3a924b507d2a19aedbf50b24e08c80fb00e35f9baaed8/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a", size = 1986109 },
+ { url = "https://files.pythonhosted.org/packages/90/72/ab58e43ce7e900b88cb571ed057b2fcd0e95b708a2e0bed475b10130393e/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516", size = 2129159 },
+ { url = "https://files.pythonhosted.org/packages/dc/3f/52d85781406886c6870ac995ec0ba7ccc028b530b0798c9080531b409fdb/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764", size = 2680222 },
+ { url = "https://files.pythonhosted.org/packages/f4/56/6e2ef42f363a0eec0fd92f74a91e0ac48cd2e49b695aac1509ad81eee86a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d", size = 2006980 },
+ { url = "https://files.pythonhosted.org/packages/4c/c0/604536c4379cc78359f9ee0aa319f4aedf6b652ec2854953f5a14fc38c5a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4", size = 2120840 },
+ { url = "https://files.pythonhosted.org/packages/1f/46/9eb764814f508f0edfb291a0f75d10854d78113fa13900ce13729aaec3ae/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde", size = 2072518 },
+ { url = "https://files.pythonhosted.org/packages/42/e3/fb6b2a732b82d1666fa6bf53e3627867ea3131c5f39f98ce92141e3e3dc1/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e", size = 2248025 },
+ { url = "https://files.pythonhosted.org/packages/5c/9d/fbe8fe9d1aa4dac88723f10a921bc7418bd3378a567cb5e21193a3c48b43/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd", size = 2254991 },
+ { url = "https://files.pythonhosted.org/packages/aa/99/07e2237b8a66438d9b26482332cda99a9acccb58d284af7bc7c946a42fd3/pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f", size = 1915262 },
+ { url = "https://files.pythonhosted.org/packages/8a/f4/e457a7849beeed1e5defbcf5051c6f7b3c91a0624dd31543a64fc9adcf52/pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40", size = 1956626 },
+ { url = "https://files.pythonhosted.org/packages/20/d0/e8d567a7cff7b04e017ae164d98011f1e1894269fe8e90ea187a3cbfb562/pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523", size = 1909590 },
+ { url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963 },
+ { url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896 },
+ { url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810 },
+ { url = "https://files.pythonhosted.org/packages/9c/c7/8b311d5adb0fe00a93ee9b4e92a02b0ec08510e9838885ef781ccbb20604/pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c834f54f8f4640fd7e4b193f80eb25a0602bba9e19b3cd2fc7ffe8199f5ae02", size = 2041659 },
+ { url = "https://files.pythonhosted.org/packages/8a/d6/4f58d32066a9e26530daaf9adc6664b01875ae0691570094968aaa7b8fcc/pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:049e0de24cf23766f12cc5cc71d8abc07d4a9deb9061b334b62093dedc7cb068", size = 1873294 },
+ { url = "https://files.pythonhosted.org/packages/f7/3f/53cc9c45d9229da427909c751f8ed2bf422414f7664ea4dde2d004f596ba/pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a28239037b3d6f16916a4c831a5a0eadf856bdd6d2e92c10a0da3a59eadcf3e", size = 1903771 },
+ { url = "https://files.pythonhosted.org/packages/f0/49/bf0783279ce674eb9903fb9ae43f6c614cb2f1c4951370258823f795368b/pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d3da303ab5f378a268fa7d45f37d7d85c3ec19769f28d2cc0c61826a8de21fe", size = 2083558 },
+ { url = "https://files.pythonhosted.org/packages/9c/5b/0d998367687f986c7d8484a2c476d30f07bf5b8b1477649a6092bd4c540e/pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25626fb37b3c543818c14821afe0fd3830bc327a43953bc88db924b68c5723f1", size = 2118038 },
+ { url = "https://files.pythonhosted.org/packages/b3/33/039287d410230ee125daee57373ac01940d3030d18dba1c29cd3089dc3ca/pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3ab2d36e20fbfcce8f02d73c33a8a7362980cff717926bbae030b93ae46b56c7", size = 2079315 },
+ { url = "https://files.pythonhosted.org/packages/1f/85/6d8b2646d99c062d7da2d0ab2faeb0d6ca9cca4c02da6076376042a20da3/pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2f9284e11c751b003fd4215ad92d325d92c9cb19ee6729ebd87e3250072cdcde", size = 2249063 },
+ { url = "https://files.pythonhosted.org/packages/17/d7/c37d208d5738f7b9ad8f22ae8a727d88ebf9c16c04ed2475122cc3f7224a/pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:048c01eee07d37cbd066fc512b9d8b5ea88ceeb4e629ab94b3e56965ad655add", size = 2254631 },
+ { url = "https://files.pythonhosted.org/packages/13/e0/bafa46476d328e4553b85ab9b2f7409e7aaef0ce4c937c894821c542d347/pydantic_core-2.33.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5ccd429694cf26af7997595d627dd2637e7932214486f55b8a357edaac9dae8c", size = 2080877 },
+ { url = "https://files.pythonhosted.org/packages/0b/76/1794e440c1801ed35415238d2c728f26cd12695df9057154ad768b7b991c/pydantic_core-2.33.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a371dc00282c4b84246509a5ddc808e61b9864aa1eae9ecc92bb1268b82db4a", size = 2042858 },
+ { url = "https://files.pythonhosted.org/packages/73/b4/9cd7b081fb0b1b4f8150507cd59d27b275c3e22ad60b35cb19ea0977d9b9/pydantic_core-2.33.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f59295ecc75a1788af8ba92f2e8c6eeaa5a94c22fc4d151e8d9638814f85c8fc", size = 1873745 },
+ { url = "https://files.pythonhosted.org/packages/e1/d7/9ddb7575d4321e40d0363903c2576c8c0c3280ebea137777e5ab58d723e3/pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08530b8ac922003033f399128505f513e30ca770527cc8bbacf75a84fcc2c74b", size = 1904188 },
+ { url = "https://files.pythonhosted.org/packages/d1/a8/3194ccfe461bb08da19377ebec8cb4f13c9bd82e13baebc53c5c7c39a029/pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae370459da6a5466978c0eacf90690cb57ec9d533f8e63e564ef3822bfa04fe", size = 2083479 },
+ { url = "https://files.pythonhosted.org/packages/42/c7/84cb569555d7179ca0b3f838cef08f66f7089b54432f5b8599aac6e9533e/pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3de2777e3b9f4d603112f78006f4ae0acb936e95f06da6cb1a45fbad6bdb4b5", size = 2118415 },
+ { url = "https://files.pythonhosted.org/packages/3b/67/72abb8c73e0837716afbb58a59cc9e3ae43d1aa8677f3b4bc72c16142716/pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a64e81e8cba118e108d7126362ea30e021291b7805d47e4896e52c791be2761", size = 2079623 },
+ { url = "https://files.pythonhosted.org/packages/0b/cd/c59707e35a47ba4cbbf153c3f7c56420c58653b5801b055dc52cccc8e2dc/pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:52928d8c1b6bda03cc6d811e8923dffc87a2d3c8b3bfd2ce16471c7147a24850", size = 2250175 },
+ { url = "https://files.pythonhosted.org/packages/84/32/e4325a6676b0bed32d5b084566ec86ed7fd1e9bcbfc49c578b1755bde920/pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1b30d92c9412beb5ac6b10a3eb7ef92ccb14e3f2a8d7732e2d739f58b3aa7544", size = 2254674 },
+ { url = "https://files.pythonhosted.org/packages/12/6f/5596dc418f2e292ffc661d21931ab34591952e2843e7168ea5a52591f6ff/pydantic_core-2.33.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f995719707e0e29f0f41a8aa3bcea6e761a36c9136104d3189eafb83f5cec5e5", size = 2080951 },
+]
+
+[[package]]
+name = "pyparsing"
+version = "3.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
+]
+
+[[package]]
+name = "python-dotenv"
+version = "1.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 },
+]
+
+[[package]]
+name = "pytz"
+version = "2025.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 },
+]
+
+[[package]]
+name = "regex"
+version = "2024.11.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/95/3c/4651f6b130c6842a8f3df82461a8950f923925db8b6961063e82744bddcc/regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91", size = 482674 },
+ { url = "https://files.pythonhosted.org/packages/15/51/9f35d12da8434b489c7b7bffc205c474a0a9432a889457026e9bc06a297a/regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0", size = 287684 },
+ { url = "https://files.pythonhosted.org/packages/bd/18/b731f5510d1b8fb63c6b6d3484bfa9a59b84cc578ac8b5172970e05ae07c/regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e", size = 284589 },
+ { url = "https://files.pythonhosted.org/packages/78/a2/6dd36e16341ab95e4c6073426561b9bfdeb1a9c9b63ab1b579c2e96cb105/regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde", size = 782511 },
+ { url = "https://files.pythonhosted.org/packages/1b/2b/323e72d5d2fd8de0d9baa443e1ed70363ed7e7b2fb526f5950c5cb99c364/regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e", size = 821149 },
+ { url = "https://files.pythonhosted.org/packages/90/30/63373b9ea468fbef8a907fd273e5c329b8c9535fee36fc8dba5fecac475d/regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2", size = 809707 },
+ { url = "https://files.pythonhosted.org/packages/f2/98/26d3830875b53071f1f0ae6d547f1d98e964dd29ad35cbf94439120bb67a/regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf", size = 781702 },
+ { url = "https://files.pythonhosted.org/packages/87/55/eb2a068334274db86208ab9d5599ffa63631b9f0f67ed70ea7c82a69bbc8/regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c", size = 771976 },
+ { url = "https://files.pythonhosted.org/packages/74/c0/be707bcfe98254d8f9d2cff55d216e946f4ea48ad2fd8cf1428f8c5332ba/regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86", size = 697397 },
+ { url = "https://files.pythonhosted.org/packages/49/dc/bb45572ceb49e0f6509f7596e4ba7031f6819ecb26bc7610979af5a77f45/regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67", size = 768726 },
+ { url = "https://files.pythonhosted.org/packages/5a/db/f43fd75dc4c0c2d96d0881967897926942e935d700863666f3c844a72ce6/regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d", size = 775098 },
+ { url = "https://files.pythonhosted.org/packages/99/d7/f94154db29ab5a89d69ff893159b19ada89e76b915c1293e98603d39838c/regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2", size = 839325 },
+ { url = "https://files.pythonhosted.org/packages/f7/17/3cbfab1f23356fbbf07708220ab438a7efa1e0f34195bf857433f79f1788/regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008", size = 843277 },
+ { url = "https://files.pythonhosted.org/packages/7e/f2/48b393b51900456155de3ad001900f94298965e1cad1c772b87f9cfea011/regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62", size = 773197 },
+ { url = "https://files.pythonhosted.org/packages/45/3f/ef9589aba93e084cd3f8471fded352826dcae8489b650d0b9b27bc5bba8a/regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e", size = 261714 },
+ { url = "https://files.pythonhosted.org/packages/42/7e/5f1b92c8468290c465fd50c5318da64319133231415a8aa6ea5ab995a815/regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519", size = 274042 },
+ { url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669 },
+ { url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684 },
+ { url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589 },
+ { url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121 },
+ { url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275 },
+ { url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257 },
+ { url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727 },
+ { url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667 },
+ { url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963 },
+ { url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700 },
+ { url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592 },
+ { url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929 },
+ { url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213 },
+ { url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734 },
+ { url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052 },
+ { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 },
+ { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 },
+ { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 },
+ { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 },
+ { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 },
+ { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 },
+ { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 },
+ { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 },
+ { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 },
+ { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 },
+ { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 },
+ { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 },
+ { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 },
+ { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 },
+ { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
+ { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 },
+ { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 },
+ { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 },
+ { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 },
+ { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 },
+ { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 },
+ { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 },
+ { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 },
+ { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 },
+ { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 },
+ { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 },
+ { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 },
+ { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 },
+ { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 },
+ { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 },
+]
+
+[[package]]
+name = "scikit-learn"
+version = "1.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "joblib" },
+ { name = "numpy" },
+ { name = "scipy" },
+ { name = "threadpoolctl" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2e/3a/f4597eb41049110b21ebcbb0bcb43e4035017545daa5eedcfeb45c08b9c5/scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e", size = 12067702 },
+ { url = "https://files.pythonhosted.org/packages/37/19/0423e5e1fd1c6ec5be2352ba05a537a473c1677f8188b9306097d684b327/scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36", size = 11112765 },
+ { url = "https://files.pythonhosted.org/packages/70/95/d5cb2297a835b0f5fc9a77042b0a2d029866379091ab8b3f52cc62277808/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5", size = 12643991 },
+ { url = "https://files.pythonhosted.org/packages/b7/91/ab3c697188f224d658969f678be86b0968ccc52774c8ab4a86a07be13c25/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b", size = 13497182 },
+ { url = "https://files.pythonhosted.org/packages/17/04/d5d556b6c88886c092cc989433b2bab62488e0f0dafe616a1d5c9cb0efb1/scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002", size = 11125517 },
+ { url = "https://files.pythonhosted.org/packages/6c/2a/e291c29670795406a824567d1dfc91db7b699799a002fdaa452bceea8f6e/scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33", size = 12102620 },
+ { url = "https://files.pythonhosted.org/packages/25/92/ee1d7a00bb6b8c55755d4984fd82608603a3cc59959245068ce32e7fb808/scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d", size = 11116234 },
+ { url = "https://files.pythonhosted.org/packages/30/cd/ed4399485ef364bb25f388ab438e3724e60dc218c547a407b6e90ccccaef/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2", size = 12592155 },
+ { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069 },
+ { url = "https://files.pythonhosted.org/packages/a1/a6/c5b78606743a1f28eae8f11973de6613a5ee87366796583fb74c67d54939/scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415", size = 11139809 },
+ { url = "https://files.pythonhosted.org/packages/0a/18/c797c9b8c10380d05616db3bfb48e2a3358c767affd0857d56c2eb501caa/scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b", size = 12104516 },
+ { url = "https://files.pythonhosted.org/packages/c4/b7/2e35f8e289ab70108f8cbb2e7a2208f0575dc704749721286519dcf35f6f/scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2", size = 11167837 },
+ { url = "https://files.pythonhosted.org/packages/a4/f6/ff7beaeb644bcad72bcfd5a03ff36d32ee4e53a8b29a639f11bcb65d06cd/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f", size = 12253728 },
+ { url = "https://files.pythonhosted.org/packages/29/7a/8bce8968883e9465de20be15542f4c7e221952441727c4dad24d534c6d99/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86", size = 13147700 },
+ { url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52", size = 11110613 },
+ { url = "https://files.pythonhosted.org/packages/2e/59/8eb1872ca87009bdcdb7f3cdc679ad557b992c12f4b61f9250659e592c63/scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322", size = 12010001 },
+ { url = "https://files.pythonhosted.org/packages/9d/05/f2fc4effc5b32e525408524c982c468c29d22f828834f0625c5ef3d601be/scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1", size = 11096360 },
+ { url = "https://files.pythonhosted.org/packages/c8/e4/4195d52cf4f113573fb8ebc44ed5a81bd511a92c0228889125fac2f4c3d1/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348", size = 12209004 },
+ { url = "https://files.pythonhosted.org/packages/94/be/47e16cdd1e7fcf97d95b3cb08bde1abb13e627861af427a3651fcb80b517/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97", size = 13171776 },
+ { url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb", size = 11071865 },
+ { url = "https://files.pythonhosted.org/packages/12/ae/993b0fb24a356e71e9a894e42b8a9eec528d4c70217353a1cd7a48bc25d4/scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236", size = 11955804 },
+ { url = "https://files.pythonhosted.org/packages/d6/54/32fa2ee591af44507eac86406fa6bba968d1eb22831494470d0a2e4a1eb1/scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35", size = 11100530 },
+ { url = "https://files.pythonhosted.org/packages/3f/58/55856da1adec655bdce77b502e94a267bf40a8c0b89f8622837f89503b5a/scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691", size = 12433852 },
+ { url = "https://files.pythonhosted.org/packages/ff/4f/c83853af13901a574f8f13b645467285a48940f185b690936bb700a50863/scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f", size = 11337256 },
+]
+
+[[package]]
+name = "scipy"
+version = "1.15.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/95/df/ef233fff6838fe6f7840d69b5ef9f20d2b5c912a8727b21ebf876cb15d54/scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9", size = 38692502 },
+ { url = "https://files.pythonhosted.org/packages/5c/20/acdd4efb8a68b842968f7bc5611b1aeb819794508771ad104de418701422/scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5", size = 30085508 },
+ { url = "https://files.pythonhosted.org/packages/42/55/39cf96ca7126f1e78ee72a6344ebdc6702fc47d037319ad93221063e6cf4/scipy-1.15.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ecf797d2d798cf7c838c6d98321061eb3e72a74710e6c40540f0e8087e3b499e", size = 22359166 },
+ { url = "https://files.pythonhosted.org/packages/51/48/708d26a4ab8a1441536bf2dfcad1df0ca14a69f010fba3ccbdfc02df7185/scipy-1.15.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:9b18aa747da280664642997e65aab1dd19d0c3d17068a04b3fe34e2559196cb9", size = 25112047 },
+ { url = "https://files.pythonhosted.org/packages/dd/65/f9c5755b995ad892020381b8ae11f16d18616208e388621dfacc11df6de6/scipy-1.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87994da02e73549dfecaed9e09a4f9d58a045a053865679aeb8d6d43747d4df3", size = 35536214 },
+ { url = "https://files.pythonhosted.org/packages/de/3c/c96d904b9892beec978562f64d8cc43f9cca0842e65bd3cd1b7f7389b0ba/scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69ea6e56d00977f355c0f84eba69877b6df084516c602d93a33812aa04d90a3d", size = 37646981 },
+ { url = "https://files.pythonhosted.org/packages/3d/74/c2d8a24d18acdeae69ed02e132b9bc1bb67b7bee90feee1afe05a68f9d67/scipy-1.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:888307125ea0c4466287191e5606a2c910963405ce9671448ff9c81c53f85f58", size = 37230048 },
+ { url = "https://files.pythonhosted.org/packages/42/19/0aa4ce80eca82d487987eff0bc754f014dec10d20de2f66754fa4ea70204/scipy-1.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9412f5e408b397ff5641080ed1e798623dbe1ec0d78e72c9eca8992976fa65aa", size = 40010322 },
+ { url = "https://files.pythonhosted.org/packages/d0/d2/f0683b7e992be44d1475cc144d1f1eeae63c73a14f862974b4db64af635e/scipy-1.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:b5e025e903b4f166ea03b109bb241355b9c42c279ea694d8864d033727205e65", size = 41233385 },
+ { url = "https://files.pythonhosted.org/packages/40/1f/bf0a5f338bda7c35c08b4ed0df797e7bafe8a78a97275e9f439aceb46193/scipy-1.15.2-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:92233b2df6938147be6fa8824b8136f29a18f016ecde986666be5f4d686a91a4", size = 38703651 },
+ { url = "https://files.pythonhosted.org/packages/de/54/db126aad3874601048c2c20ae3d8a433dbfd7ba8381551e6f62606d9bd8e/scipy-1.15.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:62ca1ff3eb513e09ed17a5736929429189adf16d2d740f44e53270cc800ecff1", size = 30102038 },
+ { url = "https://files.pythonhosted.org/packages/61/d8/84da3fffefb6c7d5a16968fe5b9f24c98606b165bb801bb0b8bc3985200f/scipy-1.15.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4c6676490ad76d1c2894d77f976144b41bd1a4052107902238047fb6a473e971", size = 22375518 },
+ { url = "https://files.pythonhosted.org/packages/44/78/25535a6e63d3b9c4c90147371aedb5d04c72f3aee3a34451f2dc27c0c07f/scipy-1.15.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8bf5cb4a25046ac61d38f8d3c3426ec11ebc350246a4642f2f315fe95bda655", size = 25142523 },
+ { url = "https://files.pythonhosted.org/packages/e0/22/4b4a26fe1cd9ed0bc2b2cb87b17d57e32ab72c346949eaf9288001f8aa8e/scipy-1.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a8e34cf4c188b6dd004654f88586d78f95639e48a25dfae9c5e34a6dc34547e", size = 35491547 },
+ { url = "https://files.pythonhosted.org/packages/32/ea/564bacc26b676c06a00266a3f25fdfe91a9d9a2532ccea7ce6dd394541bc/scipy-1.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28a0d2c2075946346e4408b211240764759e0fabaeb08d871639b5f3b1aca8a0", size = 37634077 },
+ { url = "https://files.pythonhosted.org/packages/43/c2/bfd4e60668897a303b0ffb7191e965a5da4056f0d98acfb6ba529678f0fb/scipy-1.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:42dabaaa798e987c425ed76062794e93a243be8f0f20fff6e7a89f4d61cb3d40", size = 37231657 },
+ { url = "https://files.pythonhosted.org/packages/4a/75/5f13050bf4f84c931bcab4f4e83c212a36876c3c2244475db34e4b5fe1a6/scipy-1.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f5e296ec63c5da6ba6fa0343ea73fd51b8b3e1a300b0a8cae3ed4b1122c7462", size = 40035857 },
+ { url = "https://files.pythonhosted.org/packages/b9/8b/7ec1832b09dbc88f3db411f8cdd47db04505c4b72c99b11c920a8f0479c3/scipy-1.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:597a0c7008b21c035831c39927406c6181bcf8f60a73f36219b69d010aa04737", size = 41217654 },
+ { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 },
+ { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 },
+ { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 },
+ { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 },
+ { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 },
+ { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 },
+ { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 },
+ { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 },
+ { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 },
+ { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 },
+ { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 },
+ { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 },
+ { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 },
+ { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 },
+ { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 },
+ { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 },
+ { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 },
+ { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 },
+ { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 },
+ { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 },
+ { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 },
+ { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 },
+ { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 },
+ { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 },
+ { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 },
+ { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 },
+ { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
+]
+
+[[package]]
+name = "threadpoolctl"
+version = "3.6.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 },
+]
+
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.13.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 },
+]
+
+[[package]]
+name = "typing-inspection"
+version = "0.4.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
+]
+
+[[package]]
+name = "tzdata"
+version = "2025.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 },
+]