From 1d77e374aa0aad3bd0d17ce4ea91c1c729608454 Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 08:17:39 -0300 Subject: [PATCH 01/10] Update --- book/_quarto.yml | 3 +- book/content/pt/part2/img/reduction.png | Bin 0 -> 44380 bytes book/content/pt/part2/ml_models.qmd | 209 ++- .../pt/part2/probabilistic_forecasting.qmd | 181 ++ .../content/pt/part3/img/global_reduction.png | Bin 0 -> 33718 bytes book/content/pt/part3/panel_data.qmd | 323 +++- book/content/pt/part3/panel_data.quarto_ipynb | 525 ++++++ book/references.bib | 11 + panel.qmd | 454 +++++ poetry.lock | 344 +++- pyproject.toml | 2 + reduction.ipynb | 16 +- .../__pycache__/reduction.cpython-311.pyc | Bin 40157 -> 64121 bytes src/tsbook/forecasting/global_reduction.py | 1431 --------------- src/tsbook/forecasting/reduction.py | 1587 +++++++++++------ ...est_reduction.cpython-311-pytest-8.4.2.pyc | Bin 1037 -> 1018 bytes tests/forecasting/test_reduction.py | 6 +- 17 files changed, 3086 insertions(+), 2006 deletions(-) create mode 100644 book/content/pt/part2/img/reduction.png create mode 100644 book/content/pt/part3/img/global_reduction.png create mode 100644 book/content/pt/part3/panel_data.quarto_ipynb create mode 100644 panel.qmd delete mode 100644 src/tsbook/forecasting/global_reduction.py diff --git a/book/_quarto.yml b/book/_quarto.yml index 53caa0a..e503d51 100644 --- a/book/_quarto.yml +++ b/book/_quarto.yml @@ -19,8 +19,7 @@ book: - content/pt/part2/exog_variables.qmd - content/pt/part2/feature_engineering.qmd - content/pt/part2/ml_models.qmd - - content/pt/part2/probabilistic_forecasting.qmd - - content/pt/part2/probabilistic_metrics.qmd + #- content/pt/part2/probabilistic_forecasting.qmd - part: "Part III: Avançado" chapters: - content/pt/part3/panel_data.qmd diff --git a/book/content/pt/part2/img/reduction.png b/book/content/pt/part2/img/reduction.png new file mode 100644 index 0000000000000000000000000000000000000000..d672f20ec4e6c7a7e867d8b0f64f1a8c2ed7d0a3 GIT binary patch literal 44380 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 Wy8-ngRy+gzDc@JWS0r!z`o945O0t6h literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/panel_data.qmd b/book/content/pt/part3/panel_data.qmd index 2e2be5c..9e465b4 100644 --- a/book/content/pt/part3/panel_data.qmd +++ b/book/content/pt/part3/panel_data.qmd @@ -1 +1,322 @@ -# Dados em Painel e modelos globais \ No newline at end of file +# Dados em painel (multi-series) + +Em muitas aplicações, não temos acesso a uma única série temporal, mas sim a um conjunto de séries temporais relacionadas. Isso é comum em cenários como vendas de produtos em diferentes lojas, consumo de energia em diferentes regiões, etc. Esses dados são chamados de dados em painel. + +Uma ideia poderosa é aproveitar a similaridade entre as séries para melhorar as previsões. Chamamos de **modelos globais** os modelos capazes de aprender padrões comuns entre as séries, ao contrário dos **modelos locais** que aprendem apenas com uma única série. + +A maioria dos modelos clássicos de séries temporais são locais. Modelos globais são, em geral, baseados em modelos tabulares de ML ou deep learning. Segundo competições de séries temporais, como a M5, em forecasts de painel os modelos globais são os que apresentam melhor desempenho [@makridakis2022m5]. + + +## Acessando os dados + +Aqui, vamos usar o dataset sintético que vimos antes, mas agora teremos acesso às várias séries temporais que compõe o total. + +Esse dataset é feito para simular um caso de varejo, onde temos vendas diárias de vários produtos: + +```{python} +# | echo: false +import warnings + +warnings.filterwarnings("ignore") +``` + +```{python} +# | code-fold: true +import pandas as pd +import matplotlib.pyplot as plt + +from sktime.utils.plotting import plot_series + +``` + +```{python} +from tsbook.datasets.retail import SyntheticRetail +dataset = SyntheticRetail("panel") +y_train, X_train, y_test, X_test = dataset.load( + "y_train", "X_train", "y_test", "X_test" +) +``` + +Note que, para dados em painel, os dataframes possuem mais um nível de índice, que identifica a série temporal a que cada observação pertence: + +```{python} +display(X_train) +``` + +Podemos visualizar algumas séries. Vemos que há mais zeros nesse dataset, em comparação +ao que usamos antes. + +```{python} +from sktime.utils.plotting import plot_series + +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, [0,10]].plot(ax=ax, alpha=0.7) +plt.show() +``` + +### Pandas e multi-índices + +Para trabalhar com essas estruturas de dados, é importante revisar algumas operações do pandas. + +```{python} +y_train.index.get_level_values(-1) +``` + +As seguintes operações são bem úteis para trabalhar com multi-índices: + +```{python} +y_train.index +``` + +Acessar valores únicos no primeiro nivel (nível 0, mais à esquerda): +```{python} +y_train.index.get_level_values(0).unique() +``` + +Selecionar uma série específica (nível 0 igual a 0): +```{python} +y_train.loc[0] +``` + +Aqui, podemos usar `pd.IndexSlice` para selecionar várias séries ao mesmo tempo. +Note que pd.IndexSlice é passado diretamente para `.loc`: +```{python} +y_train.loc[pd.IndexSlice[[0,2], :]] +``` + +Agora, para selecionar o horizonte de forecasting, temos que chamar `unique`: + +```{python} +fh = y_test.index.get_level_values(1).unique() + +fh +``` + +## Upcasting automático + +Nem todos modelos suportam nativamente dados em painel. Por exemplo, exponential smoothing. +Aqui, temos uma boa notícia: sem linhas extras necessárias. O sktime faz *upcasting* automático para dados em painel ao usar estimadores do `sktime`. + +```{python} +from sktime.forecasting.naive import NaiveForecaster + + +naive_forecaster = NaiveForecaster(strategy="last", window_length=1) +naive_forecaster.fit(y_train) +y_pred_naive = naive_forecaster.predict(fh=fh) + +y_pred_naive +``` + +Internamente, o `sktime` cria um clone do estimador para cada série nos dados em painel. +Em seguida, cada clone é treinado com a série correspondente. Isso é feito de +forma transparente para usuário, mas sem exigir esforço. + +O atributo `forecasters_` armazena um DataFrame com os estimatores de cada série. + +```{python} +naive_forecaster.forecasters_.head() +``` + +É dificil explicar o quanto isso é extremamente útil para código limpo e prototipagem rápida. +Foi um dos motivos que me levaram a usar o `sktime`. + + +## Métricas + +Agora que temos várias séries, precisamos explicar como calcular métricas de avaliação. +O sktime oferece duas opções para isso, como argumentos na criação da métrica: + +* `multilevel="uniform_average_time"` para calcular a média das séries temporais no painel. +* `multilevel="raw_values"` para obter o erro por série. + + +```{python} +from sktime.performance_metrics.forecasting import MeanSquaredScaledError + +metric = MeanSquaredScaledError(multilevel="uniform_average_time") +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_naive, y_train=y_train) +``` + +Na prática, as métricas que a sua aplicação exige podem ser diferentes. Por exemplo, +as séries temporais podem ter diferentes importâncias, e você pode querer ponderar +as métricas de acordo. + +Para isso, é possível criar uma métrica customizada no sktime, mas não entraremos +nesse mérito aqui. + +## Modelos globais de Machine Learning + +Quando vimos como usar modelos de Machine Learning para forecasting, já mencionamos +como é necessário traduzir o problema de séries temporais para um problema de regressão tradicional. + +No caso de dados em painel, também podemos usar essa abordagem, mas agora aproveitando +todas as séries temporais para treinar um único modelo global. + +![](img/global_reduction.png) + +Abaixo, vamos comparar um LightGBM global com um local. Veremos o seguinte: o modelo local é **melhor** que o modelo global, **se não processarmos os dados** corretamente para o modelo global aproveitar as **similaridades** entre as séries! + +```{python} +from tsbook.forecasting.reduction import ReductionForecaster +from lightgbm import LGBMRegressor + +global_forecaster1 = ReductionForecaster( + LGBMRegressor(n_estimators=100), + window_length=30, +) + +global_forecaster1.fit(y_train, X_train) +``` + +```{python} +y_pred_global1 = global_forecaster1.predict(fh=fh, X=X_test) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[10, "sales"].plot(ax=ax, label="Treino") +y_test.loc[10, "sales"].plot(ax=ax, label="Teste") +y_pred_global1.loc[10, "sales"].plot(ax=ax, label="Global 1") +plt.legend() +plt.show() +``` + + +Para forçar que um modelo global funcione como um modelo local, podemos usar `ForecastByLevel`, que cria um modelo separado para cada série temporal, mesmo quando o estimador suporta dados em painel. + + +```{python} +from sktime.forecasting.compose import ForecastByLevel + +local_forecaster1 = ForecastByLevel(global_forecaster1, groupby="local") + +local_forecaster1.fit(y_train, X=X_train) +``` + +```{python} +y_pred_local1 = local_forecaster1.predict(fh=fh, X=X_test) + +err_global1 = metric(y_true=y_test, y_pred=y_pred_global1, y_train=y_train) +err_local1 = metric(y_true=y_test, y_pred=y_pred_local1, y_train=y_train) + +errors = pd.DataFrame( + { + "Global (1)": [err_global1], + "Local (1)": [err_local1], + }, + index=["MSE"], +) +``` + +## Preprocessamento e engenharia de features + +Sabemos como preprocessar séries temporais univariadas para melhorar o desempenho dos modelos de ML. Aplicamos da mesma maneira que fizemos anteriormente o `Differencer`, com objetivo de remover tendências. + +```{python} +from sktime.transformations.series.difference import Differencer + + +global_forecaster2 = Differencer() global_forecaster1 +global_forecaster2.fit(y_train, X_train) +``` + +```{python} +y_pred_global2 = global_forecaster2.predict(fh=fh, X=X_test) +metric_global2 = metric(y_true=y_test, y_pred=y_pred_global2, y_train=y_train) +``` + +E agora sua versão local: + +```{python} + +local_forecaster2 = ForecastByLevel(global_forecaster2, groupby="local") +local_forecaster2.fit(y_train, X=X_train) + +y_pred_local2 = local_forecaster2.predict(fh=fh, X=X_test) +metric_local2 = metric(y_true=y_test, y_pred=y_pred_local2, y_train=y_train) +``` + +Agora, podemos comparar: + +```{python} +errors["Global (2)"] = metric_global2 +errors["Local (2)"] = metric_local2 + +errors +``` + +Note como já superamos o modelo global incial, e o modelo local. Isso é para +destacar que é **essencial** realizar um bom preprocessamento e engenharia de features para que modelos de Machine Learning tenham bom desempenho em dados em painel. + +### Ainda está faltando uma peça + +Note que, quando diferenciamos as séries, elas ainda continuam com escalas diferentes. Por exemplo, uma série pode variar entre 0 e 10, enquanto outra varia entre 0 e 1000. Isso pode dificultar o aprendizado do modelo global, que precisa lidar com essas diferentes escalas ao mesmo tempo. + +Vamos adicionar o `StandardScaler` do sklearn ao pipeline para normalizar as séries: + +```{python} +from sklearn.preprocessing import StandardScaler + +global_forecaster2_scaled = Differencer() * StandardScaler() * global_forecaster1 +global_forecaster2_scaled.fit(y_train, X_train) + +``` + +```{python} + +# Prevemos +y_pred_global2_scaled = global_forecaster2_scaled.predict(fh=fh, X=X_test) + +# Calculamos a métrica +metric_global2_scaled = metric(y_true=y_test, y_pred=y_pred_global2_scaled, y_train=y_train) + +errors["Global (2 + scaled)"] = metric_global2_scaled +errors +``` + + + +### Normalização por janela + +Agora, vamos usar a normalização por janela, que é especialmente útil em dados em painel, onde as séries podem ter diferentes escalas. + +```{python} + +global_forecaster3 = global_forecaster1.clone().set_params( + normalization_strategy="divide_mean" +) + +global_forecaster3.fit(y_train, X_train) + +# Predict +y_pred_global3 = global_forecaster3.predict(fh=fh, X=X_test) + +# Métrica +metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train) +``` + +Vemos que resultados são ainda melhores! + +### Pipelines exógenos também para dados em painel! + +```{python} +from sktime.transformations.series.fourier import FourierFeatures + +fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq="D") + +global_forecaster4 = fourier_features ** global_forecaster3 +global_forecaster4.fit(y_train, X_train) +``` + +```{python} +y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test) +metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) +``` diff --git a/book/content/pt/part3/panel_data.quarto_ipynb b/book/content/pt/part3/panel_data.quarto_ipynb new file mode 100644 index 0000000..01a1ae6 --- /dev/null +++ b/book/content/pt/part3/panel_data.quarto_ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dados em painel (multi-series)\n", + "\n", + "Em muitas aplicações, não temos acesso a uma única série temporal, mas sim a um conjunto de séries temporais relacionadas. Isso é comum em cenários como vendas de produtos em diferentes lojas, consumo de energia em diferentes regiões, etc. Esses dados são chamados de dados em painel.\n", + "\n", + "Uma ideia poderosa é aproveitar a similaridade entre as séries para melhorar as previsões. Chamamos de **modelos globais** os modelos capazes de aprender padrões comuns entre as séries, ao contrário dos **modelos locais** que aprendem apenas com uma única série.\n", + "\n", + "A maioria dos modelos clássicos de séries temporais são locais. Modelos globais são, em geral, baseados em modelos tabulares de ML ou deep learning. Segundo competições de séries temporais, como a M5, em forecasts de painel os modelos globais são os que apresentam melhor desempenho [@makridakis2022m5].\n", + "\n", + "\n", + "## Acessando os dados\n", + "\n", + "Aqui, vamos usar o dataset sintético que vimos antes, mas agora teremos acesso às várias séries temporais que compõe o total.\n", + "\n", + "Esse dataset é feito para simular um caso de varejo, onde temos vendas diárias de vários produtos:\n" + ], + "id": "e137e756" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# | echo: false\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ], + "id": "0c5f7df4", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# | code-fold: true\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from sktime.utils.plotting import plot_series" + ], + "id": "2270a18e", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from tsbook.datasets.retail import SyntheticRetail\n", + "dataset = SyntheticRetail(\"panel\")\n", + "y_train, X_train, y_test, X_test = dataset.load(\n", + " \"y_train\", \"X_train\", \"y_test\", \"X_test\"\n", + ")" + ], + "id": "f493045c", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note que, para dados em painel, os dataframes possuem mais um nível de índice, que identifica a série temporal a que cada observação pertence:\n" + ], + "id": "fa5fb010" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "display(X_train)" + ], + "id": "3622dc30", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Podemos visualizar algumas séries. Vemos que há mais zeros nesse dataset, em comparação\n", + "ao que usamos antes.\n" + ], + "id": "95a04b79" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.utils.plotting import plot_series\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 4))\n", + "y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, [0,10]].plot(ax=ax, alpha=0.7)\n", + "plt.show()" + ], + "id": "22e2243c", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pandas e multi-índices\n", + "\n", + "Para trabalhar com essas estruturas de dados, é importante revisar algumas operações do pandas.\n" + ], + "id": "c01307ab" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.index.get_level_values(-1)" + ], + "id": "5532c93b", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As seguintes operações são bem úteis para trabalhar com multi-índices:\n" + ], + "id": "862d2e83" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.index" + ], + "id": "68266066", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Acessar valores únicos no primeiro nivel (nível 0, mais à esquerda):\n" + ], + "id": "1a649a81" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.index.get_level_values(0).unique()" + ], + "id": "59f4c74a", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Selecionar uma série específica (nível 0 igual a 0):\n" + ], + "id": "19701269" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.loc[0]" + ], + "id": "854f8d35", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Aqui, podemos usar `pd.IndexSlice` para selecionar várias séries ao mesmo tempo.\n", + "Note que pd.IndexSlice é passado diretamente para `.loc`:\n" + ], + "id": "b786bfe5" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.loc[pd.IndexSlice[[0,2], :]]" + ], + "id": "0c12cef0", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Agora, para selecionar o horizonte de forecasting, temos que chamar `unique`:\n" + ], + "id": "39f713b9" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "fh = y_test.index.get_level_values(1).unique()\n", + "\n", + "fh" + ], + "id": "301d79e1", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Upcasting automático\n", + "\n", + "Nem todos modelos suportam nativamente dados em painel. Por exemplo, exponential smoothing.\n", + "Aqui, temos uma boa notícia: sem linhas extras necessárias. O sktime faz *upcasting* automático para dados em painel ao usar estimadores do `sktime`.\n" + ], + "id": "7b1a4122" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.forecasting.naive import NaiveForecaster\n", + "\n", + "\n", + "naive_forecaster = NaiveForecaster(strategy=\"last\", window_length=1)\n", + "naive_forecaster.fit(y_train)\n", + "y_pred_naive = naive_forecaster.predict(fh=fh)\n", + "\n", + "y_pred_naive" + ], + "id": "6798f87d", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Internamente, o `sktime` cria um clone do estimador para cada série nos dados em painel.\n", + "Em seguida, cada clone é treinado com a série correspondente. Isso é feito de\n", + "forma transparente para usuário, mas sem exigir esforço.\n", + "\n", + "O atributo `forecasters_` armazena um DataFrame com os estimatores de cada série.\n" + ], + "id": "62a55f55" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "naive_forecaster.forecasters_.head()" + ], + "id": "46c3b021", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "É dificil explicar o quanto isso é extremamente útil para código limpo e prototipagem rápida.\n", + "Foi um dos motivos que me levaram a usar o `sktime`.\n", + "\n", + "\n", + "## Métricas\n", + "\n", + "Agora que temos várias séries, precisamos explicar como calcular métricas de avaliação.\n", + "O sktime oferece duas opções para isso, como argumentos na criação da métrica:\n", + "\n", + "* `multilevel=\"uniform_average_time\"` para calcular a média das séries temporais no painel.\n", + "* `multilevel=\"raw_values\"` para obter o erro por série.\n" + ], + "id": "af733bd6" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.performance_metrics.forecasting import MeanSquaredScaledError\n", + "\n", + "metric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")" + ], + "id": "03f8f93f", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "metric(y_true=y_test, y_pred=y_pred_naive, y_train=y_train)" + ], + "id": "a630f862", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Na prática, as métricas que a sua aplicação exige podem ser diferentes. Por exemplo,\n", + "as séries temporais podem ter diferentes importâncias, e você pode querer ponderar\n", + "as métricas de acordo. \n", + "\n", + "Para isso, é possível criar uma métrica customizada no sktime, mas não entraremos\n", + "nesse mérito aqui.\n", + "\n", + "## Modelos globais de Machine Learning\n", + "\n", + "Quando vimos como usar modelos de Machine Learning para forecasting, já mencionamos\n", + "como é necessário traduzir o problema de séries temporais para um problema de regressão tradicional.\n", + "\n", + "No caso de dados em painel, também podemos usar essa abordagem, mas agora aproveitando\n", + "todas as séries temporais para treinar um único modelo global.\n", + " \n", + "![](img/global_reduction.png)\n", + "\n", + "Abaixo, vamos comparar um LightGBM global com um local, e ver como o global\n", + "aproveita melhor os dados.\n" + ], + "id": "5c5885a4" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from tsbook.forecasting.reduction import ReductionForecaster\n", + "from lightgbm import LGBMRegressor\n", + "\n", + "global_forecaster1 = ReductionForecaster(\n", + " LGBMRegressor(n_estimators=100),\n", + " window_length=30,\n", + ")\n", + "\n", + "global_forecaster1.fit(y_train, X_train)" + ], + "id": "45eacc63", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_global1 = global_forecaster1.predict(fh=fh, X=X_test)" + ], + "id": "6c0581f9", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "fig, ax = plt.subplots(figsize=(10, 4))\n", + "y_train.loc[10, \"sales\"].plot(ax=ax, label=\"Treino\")\n", + "y_test.loc[10, \"sales\"].plot(ax=ax, label=\"Teste\")\n", + "y_pred_global1.loc[10, \"sales\"].plot(ax=ax, label=\"Global 1\")\n", + "plt.legend()\n", + "plt.show()" + ], + "id": "3cb544c1", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para forçar que um modelo global funcione como um modelo local, podemos usar `ForecastByLevel`, que cria um modelo separado para cada série temporal, mesmo quando o estimador suporta dados em painel.\n" + ], + "id": "f12c3123" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.forecasting.compose import ForecastByLevel\n", + "\n", + "local_forecaster = ForecastByLevel(global_forecaster1, groupby=\"local\")\n", + "\n", + "local_forecaster.fit(y_train, X=X_train)" + ], + "id": "cff929c3", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_local = local_forecaster.predict(fh=fh, X=X_test)\n", + "\n", + "err_global = metric(y_true=y_test, y_pred=y_pred_global1, y_train=y_train)\n", + "err_local = metric(y_true=y_test, y_pred=y_pred_local, y_train=y_train)\n", + "\n", + "pd.DataFrame(\n", + " {\n", + " \"Global\": [err_global],\n", + " \"Local\": [err_local],\n", + " },\n", + " index=[\"MSE\"],\n", + ")" + ], + "id": "c17ed417", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preprocessamento e engenharia de features\n", + "\n", + "Sabemos como preprocessar séries temporais univariadas para melhorar o desempenho dos modelos de ML. Aplicamos da mesma maneira que fizemos anteriormente o `Differencer`, com objetivo de remover tendências.\n" + ], + "id": "f85129f1" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.transformations.series.difference import Differencer\n", + "from sktime.transformations.series.boxcox import LogTransformer\n", + "\n", + "global_forecaster2 = Differencer() * global_forecaster1\n", + "global_forecaster2.fit(y_train, X_train)" + ], + "id": "4921f2fe", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_global2 = global_forecaster2.predict(fh=fh, X=X_test)\n", + "metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train)" + ], + "id": "81461eef", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "fig, ax = plt.subplots(figsize=(10, 4))\n", + "y_train.loc[0].plot(ax=ax, label=\"Treino\")\n", + "y_test.loc[0].plot(ax=ax, label=\"Teste\")\n", + "y_pred_global3.loc[0].plot(ax=ax, label=\"Global 4\")\n", + "fig.show()" + ], + "id": "37de385b", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pipelines exógenos também para dados em painel!\n" + ], + "id": "7e61973c" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.transformations.series.fourier import FourierFeatures\n", + "\n", + "fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq=\"D\")\n", + "\n", + "global_forecaster4 = fourier_features ** global_forecaster3\n", + "global_forecaster4.fit(y_train, X_train)" + ], + "id": "3b4a59d7", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test)\n", + "metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train)" + ], + "id": "88e8b975", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train)" + ], + "id": "091e328c", + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)", + "path": "/Users/felipeangelim/Workspace/python_brasil_2025/.venv/share/jupyter/kernels/python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/book/references.bib b/book/references.bib index 332c9f9..af4a1ac 100644 --- a/book/references.bib +++ b/book/references.bib @@ -3,4 +3,15 @@ @book{hyndman2018forecasting author = {Hyndman, Rob J and Athanasopoulos, George}, year = {2018}, publisher = {OTexts} +} + +@article{makridakis2022m5, + title = {M5 accuracy competition: Results, findings, and conclusions}, + author = {Makridakis, Spyros and Spiliotis, Evangelos and Assimakopoulos, Vassilios}, + journal = {International journal of forecasting}, + volume = {38}, + number = {4}, + pages = {1346--1364}, + year = {2022}, + publisher = {Elsevier} } \ No newline at end of file diff --git a/panel.qmd b/panel.qmd new file mode 100644 index 0000000..79147da --- /dev/null +++ b/panel.qmd @@ -0,0 +1,454 @@ +--- +title: 'Sktime workshop: Pycon Colombia 2025 (Part 2)' +jupyter: python3 +--- + + +![](imgs/sktime-logo.png) + +2. **Forecasting panel data with sktime** (30 min) + 1. Data representation for panel data + 2. Upcasting feature in sktime + 3. Probabilistic forecasting + 4. Panel forecasting with Machine Learning models + + +## 2.1. Loading the data + + +```{python} +import warnings +import pandas as pd +import matplotlib.pyplot as plt + +warnings.filterwarnings("ignore") +``` + +```{python} +from pycon_workshop.dataset import PyConWorkshopDataset + +dataset = PyConWorkshopDataset("panel") + +y_train, y_test, X_train, X_test = dataset.load("y_train", "y_test", "X_train", "X_test") + +display(y_train) +``` + +```{python} +display(X_train) +``` + +```{python} +from sktime.utils.plotting import plot_series + +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, :10].plot(ax=ax, alpha=0.4) +ax.legend([]) +plt.show() +``` + +```{python} +from sktime.utils.plotting import plot_series + +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, [0,10]].plot(ax=ax, alpha=0.7) +plt.show() +``` + +#### 2.1.1. Pandas for multiindex data + +To work with such data structures, it is important to revisit some pandas operations. + +```{python} +y_train.index.get_level_values(-1) +``` + +In pandas, the following operations are useful: + +```{python} +y_train.index +``` + +```{python} +y_train.index.get_level_values(0).unique() +``` + +```{python} +y_train.loc[0] +``` + +```{python} +y_train.loc[pd.IndexSlice[[0,2], :]] +``` + +```{python} +fh = y_test.index.get_level_values(1).unique() +``` + +```{python} +fh +``` + +## 2.2. Automatic upcasting + +Have you ever dreamed of a world that you do not need to change code to switch between univariate and panel data? + +**No extra lines needed!** Automatically upcast to panel data when using `sktime` estimators. + +```{python} +from sktime.forecasting.naive import NaiveForecaster + + +naive_forecaster = NaiveForecaster(strategy="last", window_length=1) +naive_forecaster.fit(y_train) +y_pred_naive = naive_forecaster.predict(fh=fh) + +y_pred_naive +``` + +* Internally, sktime creates one clone of the estimator for each series in the panel data +* Then it fits each clone to the corresponding series. + +```{python} +naive_forecaster.forecasters_.head() +``` + +**This is extremely useful for clean code and rapid prototyping!** + + +#### Metrics + +Now that we have multiple series, we need to explain to the metric how to handle this! + +* Use `multilevel="uniform_average_time"` to average the time series across the panel. +* Use `multilevel="raw_values"` to obtain the error per series. + +```{python} +from sktime.performance_metrics.forecasting import MeanSquaredScaledError + +metric = MeanSquaredScaledError(multilevel="uniform_average_time") +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_naive, y_train=y_train) +``` + +## 2.3. Machine learning models for timeseries forecasting + +* We can apply ML Regressors to time series forecasting. +* We call this process **reduction** + +![](imgs/global_reduction.png) + +The `WindowSummarizer` creates the set of temporal tabular features for the ML model. + +```{python} +from sktime.transformations.series.summarize import WindowSummarizer + +summarizer = WindowSummarizer( + lag_feature={ + "lag" : list(range(1,20)), + "std" : [list(range(1,20))], + }, +) + +summarizer.fit_transform(y_train, X_train) +``` + +* How to compute forecasts for multiple steps ahead? +* We can use two approaches: + * `RecursiveTabularRegressionForecaster`: recursively predicts the next value and uses it as input for the next prediction. + * `DirectTabularRegressionForecaster`: creates a separate model for each step ahead. + +```{python} +from sktime.forecasting.compose import RecursiveTabularRegressionForecaster +from sklearn.ensemble import RandomForestRegressor + +global_forecaster1 = RecursiveTabularRegressionForecaster( + RandomForestRegressor(n_estimators=20, random_state=42), + pooling="global", + window_length=None, + transformers=[summarizer] +) + +global_forecaster1.fit(y_train, X_train) +``` + +```{python} +global_forecaster1.get_params() +``` + +```{python} +y_pred_global1 = global_forecaster1.predict(fh=fh, X=X_test) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[10, "sales"].plot(ax=ax, label="Train") +y_test.loc[10, "sales"].plot(ax=ax, label="Test") +y_pred_global1.loc[10, "sales"].plot(ax=ax, label="Global 1") +plt.legend() +plt.show() +``` + +### Feature engineering is important! + +* We should not think that ML models learn everything by themselves. +* We have to think as they think. They see values, not time series. +* The **scale becomes a feature** that allows the model to identify which series is it forecasting. +* We can standardize the different series to make them comparable. + +```{python} +metric(y_true=y_test, y_pred=y_pred_global1, y_train=y_train) +``` + +```{python} +from sklearn.preprocessing import StandardScaler + + +global_forecaster2 = StandardScaler() * global_forecaster1 + +global_forecaster2.fit(y_train, X_train) +``` + +```{python} +y_pred_global2 = global_forecaster2.predict(fh=fh, X=X_test) +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_global2, y_train=y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[0].plot(ax=ax, label="Train") +y_test.loc[0].plot(ax=ax, label="Test") +y_pred_global2.loc[0].plot(ax=ax, label="Global 1") +``` + +* Only scaling each timeseries allows the model to learn accross them... +* They cannot forecast out of the scale of the training data. +* How can 2022's and 2023's autoregressive behaviour be used together to enhance the model, without having the level as a feature? + +```{python} +from sktime.transformations.series.difference import Differencer +from sktime.transformations.series.boxcox import LogTransformer + +global_forecaster3 = Differencer() * global_forecaster2 +global_forecaster3.fit(y_train, X_train) +``` + +```{python} +y_pred_global3 = global_forecaster3.predict(fh=fh, X=X_test) +metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[0].plot(ax=ax, label="Train") +y_test.loc[0].plot(ax=ax, label="Test") +y_pred_global3.loc[0].plot(ax=ax, label="Global 4") +fig.show() +``` + +### Exogenous pipelines also for panel data! + +```{python} +from sktime.transformations.series.fourier import FourierFeatures + +fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq="D") + +global_forecaster4 = fourier_features ** global_forecaster3 +global_forecaster4.fit(y_train, X_train) +``` + +```{python} +y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test) +metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) +``` + +## 2.4. Probabilistic forecasting + +When forecasting for retail, we often interested in the uncertainty of the forecasts. + +* Safety stock +* Predict probability of stockouts + +```{python} +from sktime.registry import all_estimators + +all_estimators("forecaster", filter_tags={"capability:pred_int": True}, as_dataframe=True) +``` + +```{python} +from sktime.forecasting.auto_reg import AutoREG +from sktime.transformations.series.difference import Differencer +from sktime.transformations.series.fourier import FourierFeatures +from sktime.forecasting.conformal import ConformalIntervals + +fourier_features = FourierFeatures( + sp_list=[365.25, 365.25 / 12], fourier_terms_list=[1, 1], freq="D" +) +auto_reg = fourier_features ** (Differencer() * AutoREG()) + + +conformal_forecaster = ConformalIntervals( + forecaster=auto_reg, initial_window=365 * 2, sample_frac=0.5 +) +``` + +```{python} +parallel_config = { + "backend:parallel": "joblib", + "backend:parallel:params": {"backend": "loky", "n_jobs": -1}, + } + +conformal_forecaster.set_config( + **parallel_config +) + +conformal_forecaster.fit(y_train) +``` + +```{python} +y_pred_int = conformal_forecaster.predict_interval(fh=fh, coverage=0.9) +``` + +```{python} +y_pred_int +``` + +```{python} +plot_series( + y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", + pred_interval=y_pred_int.loc[10], markers=[None]*2 +) +``` + +There are negative values in the data, which do not make sense for our problem. + +We can use a model that predicts a distribution that does not allow negative values, such as the **negative binomial distribution**. + +```{python} +from prophetverse import Prophetverse, PiecewiseLinearTrend, MAPInferenceEngine + + +prophet = Prophetverse( + trend=PiecewiseLinearTrend(changepoint_interval=365), + likelihood="negbinomial", + inference_engine=MAPInferenceEngine() +) + +prophet.set_config( + **parallel_config +) + +prophet.fit(y_train, X_train) +``` + +```{python} +y_pred_int_prophetverse = prophet.predict_interval(fh=fh, X=X_test, coverage=0.9) +``` + +```{python} +plot_series( + y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", + pred_interval=y_pred_int_prophetverse.loc[10], markers=[None]*2 +) + +plt.show() +``` + +### Example of metric for probabilistic forecasting + +```{python} +from sktime.performance_metrics.forecasting.probabilistic import PinballLoss + +pinball_loss = PinballLoss() + +pd.DataFrame( + {"Conformal": pinball_loss(y_true=y_test, y_pred=y_pred_int), + "Prophetverse Negbinomial": pinball_loss(y_true=y_test, y_pred=y_pred_int_prophetverse)}, + index=["Pinball Loss"] +) +``` + +## 2.5. Deep learning models and zero-shot forecasting + +* In addition to simple ML models, we can also use deep learning models for forecasting. +* There are some models with tailored architectures for time series forecasting. +* For example, N-BEATS is a deep learning model that can be used for forecasting. + +* **Zero-shot forecasting** is extremely useful when a new product appears, a new warehouse... etc. + +![](imgs/nbeats_simplified.png) + +```{python} +from sktime.forecasting.pytorchforecasting import PytorchForecastingNBeats +from pytorch_forecasting.data.encoders import EncoderNormalizer + +CONTEXT_LENGTH = 365 +nbeats = PytorchForecastingNBeats( + train_to_dataloader_params={"batch_size": 256}, + trainer_params={"max_epochs": 1}, + model_params={ + "stack_types": ["trend", "seasonality"], # One of the following values: “generic”, “seasonality” or “trend”. + "num_blocks" : [2,2], # The number of blocks per stack. + "context_length": CONTEXT_LENGTH, # lookback period + "expansion_coefficient_lengths" : [2, 5], + "learning_rate": 1e-3, + }, + dataset_params={ + + "max_encoder_length": CONTEXT_LENGTH, + "target_normalizer": EncoderNormalizer() + }, +) + +nbeats.fit(y_train.astype(float), fh=fh) +``` + +```{python} +y_pred_nbeats = nbeats.predict(fh=fh, X=X_test) +``` + +```{python} +metric(y_true=y_test, y_pred=y_pred_nbeats, y_train=y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[10].plot(ax=ax, label="Train") +y_test.loc[10].plot(ax=ax, label="Test") +y_pred_nbeats.loc[10].plot(ax=ax, label="N-BEATS") +fig.show() +``` + +```{python} +new_y_train = (y_train.loc[0]**2 + y_train.loc[20]).astype(float) +new_y_test = (y_test.loc[0]**2 + y_test.loc[20]).astype(float) + +# Plotting the new series +fig, ax = plt.subplots(figsize=(10, 4)) +new_y_train["sales"].plot.line(ax=ax, label="New Train") +new_y_test["sales"].plot.line(ax=ax, label="New Test") +fig.show() +``` + +```{python} +y_pred_zeroshot = nbeats.predict(fh=fh, y=new_y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +new_y_train["sales"].plot.line(ax=ax, label="New Train") +new_y_test["sales"].plot.line(ax=ax, label="New Test") +y_pred_zeroshot["sales"].plot.line(ax=ax, label="N-BEATS Zero-shot") +plt.legend() +plt.show() +``` + diff --git a/poetry.lock b/poetry.lock index 2ed62da..59c942c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,16 @@ # This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +[[package]] +name = "absl-py" +version = "2.3.1" +description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." +optional = false +python-versions = ">=3.8" +files = [ + {file = "absl_py-2.3.1-py3-none-any.whl", hash = "sha256:eeecf07f0c2a93ace0772c92e596ace6d3d3996c042b2128459aaae2a76de11d"}, + {file = "absl_py-2.3.1.tar.gz", hash = "sha256:a97820526f7fbfd2ec1bce83f3f25e3a14840dac0d8e02a0b71cd75db3f77fc9"}, +] + [[package]] name = "anyio" version = "4.11.0" @@ -421,6 +432,29 @@ files = [ {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, ] +[[package]] +name = "chex" +version = "0.1.91" +description = "Chex: Testing made fun, in JAX!" +optional = false +python-versions = ">=3.11" +files = [ + {file = "chex-0.1.91-py3-none-any.whl", hash = "sha256:6fc4cbfc22301c08d4a7ef706045668410100962eba8ba6af03fa07f4e5dcf9b"}, + {file = "chex-0.1.91.tar.gz", hash = "sha256:65367a521415ada905b8c0222b0a41a68337fcadf79a1fb6fc992dbd95dd9f76"}, +] + +[package.dependencies] +absl-py = ">=2.3.1" +jax = ">=0.7.0" +jaxlib = ">=0.7.0" +numpy = ">=1.24.1" +toolz = ">=1.0.0" +typing_extensions = ">=4.15.0" + +[package.extras] +docs = ["sphinx (>=6.0.0)", "sphinx-book-theme (>=1.0.1)", "sphinxcontrib-katex"] +test = ["cloudpickle (==3.1.0)", "dm-tree (>=0.1.9)"] + [[package]] name = "colorama" version = "0.4.6" @@ -732,6 +766,22 @@ files = [ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +[[package]] +name = "graphviz" +version = "0.21" +description = "Simple Python interface for Graphviz" +optional = false +python-versions = ">=3.9" +files = [ + {file = "graphviz-0.21-py3-none-any.whl", hash = "sha256:54f33de9f4f911d7e84e4191749cac8cc5653f815b06738c54db9a15ab8b1e42"}, + {file = "graphviz-0.21.tar.gz", hash = "sha256:20743e7183be82aaaa8ad6c93f8893c923bd6658a04c32ee115edb3c8a835f78"}, +] + +[package.extras] +dev = ["Flake8-pyproject", "build", "flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] +docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme (>=0.2.5)"] +test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] + [[package]] name = "h11" version = "0.16.0" @@ -927,6 +977,73 @@ files = [ [package.dependencies] arrow = ">=0.15.0" +[[package]] +name = "jax" +version = "0.8.0" +description = "Differentiate, compile, and transform Numpy code." +optional = false +python-versions = ">=3.11" +files = [ + {file = "jax-0.8.0-py3-none-any.whl", hash = "sha256:d190158bc019756c6a0f6b3d5fc8783471fb407e6deaff559eaac60dd5ee850a"}, + {file = "jax-0.8.0.tar.gz", hash = "sha256:0ea5a7be7068c25934450dfd87d7d80a18a5d30e0a53454e7aade525b23accd5"}, +] + +[package.dependencies] +jaxlib = "0.8.0" +ml_dtypes = ">=0.5.0" +numpy = ">=2.0" +opt_einsum = "*" +scipy = ">=1.13" + +[package.extras] +ci = ["jaxlib (==0.7.2)"] +cuda = ["jax-cuda12-plugin[with-cuda] (==0.8.0)", "jaxlib (==0.8.0)"] +cuda12 = ["jax-cuda12-plugin[with-cuda] (==0.8.0)", "jaxlib (==0.8.0)"] +cuda12-local = ["jax-cuda12-plugin (==0.8.0)", "jaxlib (==0.8.0)"] +cuda13 = ["jax-cuda13-plugin[with-cuda] (==0.8.0)", "jaxlib (==0.8.0)"] +cuda13-local = ["jax-cuda13-plugin (==0.8.0)", "jaxlib (==0.8.0)"] +k8s = ["kubernetes"] +minimum-jaxlib = ["jaxlib (==0.8.0)"] +rocm = ["jax-rocm60-plugin (==0.8.0)", "jaxlib (==0.8.0)"] +tpu = ["jaxlib (==0.8.0)", "libtpu (==0.0.24.*)", "requests"] +xprof = ["xprof"] + +[[package]] +name = "jaxlib" +version = "0.8.0" +description = "XLA library for JAX" +optional = false +python-versions = ">=3.11" +files = [ + {file = "jaxlib-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb602a8c24c614cb8ca6eeed3e70a733d9399c6a2f88900a0252623cd67276b5"}, + {file = "jaxlib-0.8.0-cp311-cp311-manylinux_2_27_aarch64.whl", hash = "sha256:41aebddef67a555a6de17427a4e66ce60a528a815847e2dd96dabce579f7acf8"}, + {file = "jaxlib-0.8.0-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:ff53e8baf978f6b7c4076215af78f0ba969cac434ed2f72565d87e38c23f00e7"}, + {file = "jaxlib-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:9cd4c7a8acc5b3dee4ad28a5d101264d89754e29553b0cdb92c79f5b460a511b"}, + {file = "jaxlib-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f60aac0f64e9e70a5cef341fe292684518695514c71ad00036774bbed5f7312e"}, + {file = "jaxlib-0.8.0-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:d83ff8cf1b070299639cda4f8427707f69051dc8421e59fbb73305523937570d"}, + {file = "jaxlib-0.8.0-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:2c8675bf86e391afe4f8d863080be1a024d734dfd3dd137f7aa8e7f22091adcd"}, + {file = "jaxlib-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:659d894d93876e3675c2132d13c3d241f204b21172a58f928b96f654f603f6dc"}, + {file = "jaxlib-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5fcf33a5639f8f164a473a9c78a1fa0b2e15ac3fcbecd6d96aa0f88bf25ea6bb"}, + {file = "jaxlib-0.8.0-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:b3eac503b90ffecc68f11fa122133eef2c62c536db28e801e436d7e7a9b67bf8"}, + {file = "jaxlib-0.8.0-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:66c6f576f54a63ed052f5c469bef4db723f5f050b839ec0c429573011341bd58"}, + {file = "jaxlib-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:72759ebbfb40a717349f174712207d306aa28630359f05cd69b091bd4efa0603"}, + {file = "jaxlib-0.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df2781e0fc93fb6f42111b385b90126b9571eafe0e860f033615ff7156b76817"}, + {file = "jaxlib-0.8.0-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:7eb3be931de77bfcde27df659ada432719aa1e19a2fa5b835638e7404c74cb63"}, + {file = "jaxlib-0.8.0-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:accebe89a36e28306a4db3f68f527a0f87b8a0fd253b3c1556fbd24f16bec22c"}, + {file = "jaxlib-0.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ba7e8a2231e4138ccbd8e096debdbbcd82edc5fc1b13c66f32a51bc240651349"}, + {file = "jaxlib-0.8.0-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:a9bfca27ae597804db08694a2bf7e1cf7fc3fac4ac2e65ace83be8effaa927ea"}, + {file = "jaxlib-0.8.0-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:bd3219a4d2bfe4b72605900fde395b62126a053c0b99643eb931b7c20e577bf2"}, + {file = "jaxlib-0.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3320a72d532713c2a31eb20d02c342540a0dec28603a3ac2be0fc0631f086cf2"}, + {file = "jaxlib-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:248f1ac3acee1fe2cc81e8a668311f3ccb8f28090404391c276869cae8a95daf"}, + {file = "jaxlib-0.8.0-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:a5f0656bbbb3f135a360ce0fde55bf34faf73fbc62ab887941e85f0014b3f476"}, + {file = "jaxlib-0.8.0-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:61cb2fde154e5a399db2880d560e3443cfa97bda9f074b545c886232ac8fe024"}, +] + +[package.dependencies] +ml_dtypes = ">=0.5.0" +numpy = ">=2.0" +scipy = ">=1.13" + [[package]] name = "jedi" version = "0.19.2" @@ -1430,6 +1547,31 @@ interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] +[[package]] +name = "lightgbm" +version = "4.6.0" +description = "LightGBM Python-package" +optional = false +python-versions = ">=3.7" +files = [ + {file = "lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed"}, + {file = "lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad"}, + {file = "lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336"}, + {file = "lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d"}, + {file = "lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b"}, + {file = "lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe"}, +] + +[package.dependencies] +numpy = ">=1.17.0" +scipy = "*" + +[package.extras] +arrow = ["cffi (>=1.15.1)", "pyarrow (>=6.0.1)"] +dask = ["dask[array,dataframe,distributed] (>=2.0.0)", "pandas (>=0.24.0)"] +pandas = ["pandas (>=0.24.0)"] +scikit-learn = ["scikit-learn (>=0.24.2)"] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1631,6 +1773,67 @@ files = [ {file = "mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164"}, ] +[[package]] +name = "ml-dtypes" +version = "0.5.3" +description = "ml_dtypes is a stand-alone implementation of several NumPy dtype extensions used in machine learning." +optional = false +python-versions = ">=3.9" +files = [ + {file = "ml_dtypes-0.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0a1d68a7cb53e3f640b2b6a34d12c0542da3dd935e560fdf463c0c77f339fc20"}, + {file = "ml_dtypes-0.5.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cd5a6c711b5350f3cbc2ac28def81cd1c580075ccb7955e61e9d8f4bfd40d24"}, + {file = "ml_dtypes-0.5.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdcf26c2dbc926b8a35ec8cbfad7eff1a8bd8239e12478caca83a1fc2c400dc2"}, + {file = "ml_dtypes-0.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:aecbd7c5272c82e54d5b99d8435fd10915d1bc704b7df15e4d9ca8dc3902be61"}, + {file = "ml_dtypes-0.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4a177b882667c69422402df6ed5c3428ce07ac2c1f844d8a1314944651439458"}, + {file = "ml_dtypes-0.5.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9849ce7267444c0a717c80c6900997de4f36e2815ce34ac560a3edb2d9a64cd2"}, + {file = "ml_dtypes-0.5.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3f5ae0309d9f888fd825c2e9d0241102fadaca81d888f26f845bc8c13c1e4ee"}, + {file = "ml_dtypes-0.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:58e39349d820b5702bb6f94ea0cb2dc8ec62ee81c0267d9622067d8333596a46"}, + {file = "ml_dtypes-0.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:66c2756ae6cfd7f5224e355c893cfd617fa2f747b8bbd8996152cbdebad9a184"}, + {file = "ml_dtypes-0.5.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:156418abeeda48ea4797db6776db3c5bdab9ac7be197c1233771e0880c304057"}, + {file = "ml_dtypes-0.5.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1db60c154989af253f6c4a34e8a540c2c9dce4d770784d426945e09908fbb177"}, + {file = "ml_dtypes-0.5.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b255acada256d1fa8c35ed07b5f6d18bc21d1556f842fbc2d5718aea2cd9e55"}, + {file = "ml_dtypes-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:da65e5fd3eea434ccb8984c3624bc234ddcc0d9f4c81864af611aaebcc08a50e"}, + {file = "ml_dtypes-0.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:8bb9cd1ce63096567f5f42851f5843b5a0ea11511e50039a7649619abfb4ba6d"}, + {file = "ml_dtypes-0.5.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5103856a225465371fe119f2fef737402b705b810bd95ad5f348e6e1a6ae21af"}, + {file = "ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cae435a68861660af81fa3c5af16b70ca11a17275c5b662d9c6f58294e0f113"}, + {file = "ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6936283b56d74fbec431ca57ce58a90a908fdbd14d4e2d22eea6d72bb208a7b7"}, + {file = "ml_dtypes-0.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:d0f730a17cf4f343b2c7ad50cee3bd19e969e793d2be6ed911f43086460096e4"}, + {file = "ml_dtypes-0.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:2db74788fc01914a3c7f7da0763427280adfc9cd377e9604b6b64eb8097284bd"}, + {file = "ml_dtypes-0.5.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:93c36a08a6d158db44f2eb9ce3258e53f24a9a4a695325a689494f0fdbc71770"}, + {file = "ml_dtypes-0.5.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e44a3761f64bc009d71ddb6d6c71008ba21b53ab6ee588dadab65e2fa79eafc"}, + {file = "ml_dtypes-0.5.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdf40d2aaabd3913dec11840f0d0ebb1b93134f99af6a0a4fd88ffe924928ab4"}, + {file = "ml_dtypes-0.5.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:aec640bd94c4c85c0d11e2733bd13cbb10438fb004852996ec0efbc6cacdaf70"}, + {file = "ml_dtypes-0.5.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bda32ce212baa724e03c68771e5c69f39e584ea426bfe1a701cb01508ffc7035"}, + {file = "ml_dtypes-0.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c205cac07d24a29840c163d6469f61069ce4b065518519216297fc2f261f8db9"}, + {file = "ml_dtypes-0.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:cd7c0bb22d4ff86d65ad61b5dd246812e8993fbc95b558553624c33e8b6903ea"}, + {file = "ml_dtypes-0.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:9d55ea7f7baf2aed61bf1872116cefc9d0c3693b45cae3916897ee27ef4b835e"}, + {file = "ml_dtypes-0.5.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:e12e29764a0e66a7a31e9b8bf1de5cc0423ea72979f45909acd4292de834ccd3"}, + {file = "ml_dtypes-0.5.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19f6c3a4f635c2fc9e2aa7d91416bd7a3d649b48350c51f7f715a09370a90d93"}, + {file = "ml_dtypes-0.5.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ab039ffb40f3dc0aeeeba84fd6c3452781b5e15bef72e2d10bcb33e4bbffc39"}, + {file = "ml_dtypes-0.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5ee72568d46b9533ad54f78b1e1f3067c0534c5065120ea8ecc6f210d22748b3"}, + {file = "ml_dtypes-0.5.3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01de48de4537dc3c46e684b969a40ec36594e7eeb7c69e9a093e7239f030a28a"}, + {file = "ml_dtypes-0.5.3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b1a6e231b0770f2894910f1dce6d2f31d65884dbf7668f9b08d73623cdca909"}, + {file = "ml_dtypes-0.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:a4f39b9bf6555fab9bfb536cf5fdd1c1c727e8d22312078702e9ff005354b37f"}, + {file = "ml_dtypes-0.5.3.tar.gz", hash = "sha256:95ce33057ba4d05df50b1f3cfefab22e351868a843b3b15a46c65836283670c9"}, +] + +[package.dependencies] +numpy = {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_version < \"3.12\""} + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + +[[package]] +name = "multipledispatch" +version = "1.0.0" +description = "Multiple dispatch" +optional = false +python-versions = "*" +files = [ + {file = "multipledispatch-1.0.0-py3-none-any.whl", hash = "sha256:0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4"}, + {file = "multipledispatch-1.0.0.tar.gz", hash = "sha256:5c839915465c68206c3e9c473357908216c28383b425361e5d144594bf85a7e0"}, +] + [[package]] name = "nbclient" version = "0.10.2" @@ -1844,6 +2047,66 @@ files = [ {file = "numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a"}, ] +[[package]] +name = "numpyro" +version = "0.19.0" +description = "Pyro PPL on NumPy" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpyro-0.19.0-py3-none-any.whl", hash = "sha256:1063a2c131a0785719e13c8e55f1b82e41850d814df149418097531f4dbdeda8"}, + {file = "numpyro-0.19.0.tar.gz", hash = "sha256:bbf5b772a6ba8b7a79448fa6787afb069e5eb2dff8295078c3ec04d3e6276742"}, +] + +[package.dependencies] +jax = ">=0.4.25" +jaxlib = ">=0.4.25" +multipledispatch = "*" +numpy = "*" +tqdm = "*" + +[package.extras] +cpu = ["jax[cpu] (>=0.4.25)"] +cuda = ["jax[cuda] (>=0.4.25)"] +dev = ["dm-haiku (<0.0.14)", "dm-haiku (>=0.0.14)", "equinox", "flax", "funsor (>=0.4.1)", "graphviz", "jaxns (>=2.6.3,<=2.6.9)", "matplotlib", "optax (>=0.0.6)", "pylab-sdk", "pytest-cov", "pyyaml", "requests", "tfp-nightly"] +doc = ["ipython", "nbsphinx (>=0.8.9)", "readthedocs-sphinx-search (>=0.3.2)", "sphinx (>=5)", "sphinx-gallery", "sphinx_rtd_theme"] +examples = ["arviz", "jupyter", "matplotlib", "pandas", "scikit-learn", "seaborn", "wordcloud"] +test = ["importlib-metadata (<5.0)", "mypy (>=1.13)", "pyro-api (>=0.1.1)", "pytest (>=4.1)", "ruff (>=0.1.8)", "scikit-learn", "scipy (>=1.9)"] +tpu = ["jax[tpu] (>=0.4.25)"] + +[[package]] +name = "opt-einsum" +version = "3.4.0" +description = "Path optimization of einsum functions." +optional = false +python-versions = ">=3.8" +files = [ + {file = "opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd"}, + {file = "opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac"}, +] + +[[package]] +name = "optax" +version = "0.2.6" +description = "A gradient processing and optimization library in JAX." +optional = false +python-versions = ">=3.10" +files = [ + {file = "optax-0.2.6-py3-none-any.whl", hash = "sha256:f875251a5ab20f179d4be57478354e8e21963373b10f9c3b762b94dcb8c36d91"}, + {file = "optax-0.2.6.tar.gz", hash = "sha256:ba8d1e12678eba2657484d6feeca4fb281b8066bdfd5efbfc0f41b87663109c0"}, +] + +[package.dependencies] +absl-py = ">=0.7.1" +chex = ">=0.1.87" +jax = ">=0.5.3" +jaxlib = ">=0.5.3" +numpy = ">=1.18.0" + +[package.extras] +docs = ["flax", "ipython (>=8.8.0)", "matplotlib (>=3.5.0)", "myst-nb (>=1.0.0)", "setuptools", "sphinx (>=6.0.0)", "sphinx-autodoc-typehints", "sphinx-book-theme (>=1.0.1)", "sphinx-collections (>=0.0.1)", "sphinx-gallery (>=0.14.0)", "sphinx_contributors", "sphinxcontrib-katex"] +test = ["flax (>=0.5.3)", "scikit-learn", "scipy (>=1.7.1)"] + [[package]] name = "overrides" version = "7.7.0" @@ -2188,6 +2451,28 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "prophetverse" +version = "0.10.0" +description = "A multiverse of prophet models, for forecasting and Marketing Mix Modeling." +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "prophetverse-0.10.0-py3-none-any.whl", hash = "sha256:f75ace261351599cc3c3b00882c0884d83abb0e5a187efa2f6f4cb93e698b3df"}, + {file = "prophetverse-0.10.0.tar.gz", hash = "sha256:17305f5fe96401b49f36b5f73507a48e0ea1d83ed670ac2b79c651aaf45d3be6"}, +] + +[package.dependencies] +graphviz = ">=0.20.3,<0.22.0" +numpyro = ">=0.19.0" +optax = ">=0.2.4" +scikit-base = ">=0.12.0,<0.13.0" +skpro = ">=2.9.2,<3.0.0" +sktime = ">=0.30.0" + +[package.extras] +dev = ["black (>=24.4.2,<26.0.0)", "commitlint (>=1.0.0,<2.0.0)", "ipykernel (>=6.26.0,<7.0.0)", "isort (>=5.13.2,<7.0.0)", "jupyterlab (>=4.4.2,<5.0.0)", "matplotlib (>=3.8.2,<4.0.0)", "mypy (>=1.10.0,<2.0.0)", "pre-commit (>=3.7.1,<5.0.0)", "pydocstyle (>=6.3.0,<7.0.0)", "pylint (>=3.2.2,<4.0.0)", "pytest (>=8.0.0,<9.0.0)", "pytest-cov (>=5.0.0,<8.0.0)", "pyyaml (>=6.0.2,<7.0.0)", "quartodoc (>=0.9.1,<0.12.0)", "seaborn (>=0.13.2,<0.14.0)", "statsmodels (>=0.14.4,<0.15.0)"] + [[package]] name = "psutil" version = "7.1.0" @@ -3030,6 +3315,31 @@ files = [ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] +[[package]] +name = "skpro" +version = "2.10.0" +description = "A unified framework for tabular probabilistic regression, time-to-event prediction, and probability distributions in python" +optional = false +python-versions = "<3.15,>=3.9" +files = [ + {file = "skpro-2.10.0-py3-none-any.whl", hash = "sha256:cd6e2ccb4d9832f3d848944daa2c8e802488807be62557d860cfe4bcaac52e44"}, + {file = "skpro-2.10.0.tar.gz", hash = "sha256:f15682a0ec5f38769bc0354264415c0ecb98c813295e9e23d027a1ad57bd15d8"}, +] + +[package.dependencies] +numpy = ">=1.21.0,<2.4" +packaging = "*" +pandas = ">=1.1.0,<2.4.0" +scikit-base = ">=0.6.1,<0.14.0" +scikit-learn = ">=0.24.0,<1.8.0" +scipy = ">=1.2.0,<2.0.0" + +[package.extras] +all-extras = ["cyclic-boosting (>=1.4.0)", "distfit", "lifelines (<0.31.0)", "mapie", "matplotlib (>=3.3.2)", "ngboost (<0.6.0)", "polars (<1.34.0)", "pyarrow (<14.0.0)", "pymc", "statsmodels (>=0.12.1)", "xgboostlss"] +binder = ["jupyter"] +dev = ["backoff", "httpx", "pre-commit", "pytest", "pytest-cov", "pytest-randomly", "pytest-timeout", "pytest-xdist", "wheel"] +docs = ["jupyter", "myst-parser", "nbsphinx (>=0.8.6)", "numpydoc", "pydata-sphinx-theme", "sphinx (!=7.2.0,<9.0.0)", "sphinx-design (<0.7.0)", "sphinx-gallery (<0.20.0)", "sphinx-issues (<6.0.0)", "sphinx-panels", "tabulate"] + [[package]] name = "sktime" version = "0.39.0" @@ -3223,6 +3533,17 @@ webencodings = ">=0.4" doc = ["sphinx", "sphinx_rtd_theme"] test = ["pytest", "ruff"] +[[package]] +name = "toolz" +version = "1.0.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, + {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, +] + [[package]] name = "tornado" version = "6.5.2" @@ -3244,6 +3565,27 @@ files = [ {file = "tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0"}, ] +[[package]] +name = "tqdm" +version = "4.67.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.14.3" @@ -3386,4 +3728,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.14" -content-hash = "aa48a1f57b52ca8a5d01bc984b656d3c87d58d8387fb80e7bc33db660fd7d83d" +content-hash = "143c366406969fc0225ba7a3beeeb91a1a614378592c8683665ce3389b5c88f2" diff --git a/pyproject.toml b/pyproject.toml index 5ad77ec..8cb9d33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,8 @@ seaborn = "^0.13.2" jupyter = "^1.1.1" statsmodels = "^0.14.5" scikit-learn = "^1.7.2" +lightgbm = "^4.6.0" +prophetverse = {version = "^0.10.0", python = "<3.12,>=3.9"} [tool.poetry.group.dev.dependencies] diff --git a/reduction.ipynb b/reduction.ipynb index 54127de..9337ced 100644 --- a/reduction.ipynb +++ b/reduction.ipynb @@ -128,16 +128,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "from tsbook.forecasting.global_reduction import GlobalReductionForecaster\n", + "from tsbook.forecasting.reduction import ReductionForecaster\n", "from sklearn.ensemble import RandomForestRegressor\n", "from sktime.transformations.series.difference import Differencer\n", "\n", "regressor = RandomForestRegressor(n_estimators=100, random_state=42)\n", - "model = Differencer() * GlobalReductionForecaster(\n", + "model = Differencer() * ReductionForecaster(\n", " regressor,\n", " window_length=30,\n", " steps_ahead=1,\n", @@ -188,7 +188,7 @@ "import numpy as np\n", "from typing import Callable, Tuple\n", "\n", - "model = GlobalReductionForecaster(\n", + "model = ReductionForecaster(\n", " regressor,\n", " window_length=30,\n", " steps_ahead=1,\n", @@ -233,15 +233,15 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "from tsbook.forecasting.global_reduction import GlobalReductionForecaster\n", + "from tsbook.forecasting.reduction import ReductionForecaster\n", "from typing import Optional\n", "\n", "\n", - "model = GlobalReductionForecaster(\n", + "model = ReductionForecaster(\n", " regressor,\n", " window_length=30,\n", " steps_ahead=12,\n", @@ -309,4 +309,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc b/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc index 3dc245299b6ed8fe6ea50b643c87b49996621233..eb39054c1628bb08c3523b7e8bcf2dcbe46bd3a0 100644 GIT binary patch literal 64121 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

@b47;yCwf_nEkXD8o;W_aif6>^NMfuU+;fo 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 literal 40157 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 Dr`~w? diff --git a/src/tsbook/forecasting/global_reduction.py b/src/tsbook/forecasting/global_reduction.py deleted file mode 100644 index f0c1a9c..0000000 --- a/src/tsbook/forecasting/global_reduction.py +++ /dev/null @@ -1,1431 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# copyright: (c) 2025, authored for the requesting user -# license: BSD-3-Clause-compatible grant for this file by the author -""" -Global hybrid reduction forecaster for sktime: -K-step direct heads + recursive continuation, with per-row normalization. - -Now supports BOTH: -- pooled multi-series/hierarchical data (y/X with MultiIndex where last level is time) -- a single time series (y/X with a single time index) - -Training (global): -- Builds K supervised datasets (one per step_ahead = 1..K). -- Each row uses a lag window of y (length L = window_length) and optional - *concurrent* exogenous X at the target timestamp. -- A row-wise normalization *strategy* can be supplied to map each (lags, target) - into a normalized space before model fitting. The same strategy is applied - at prediction time (per step), with inverse-transform to the original scale. - -Prediction (for requested horizon H): -- For steps 1..min(K, H): use the corresponding direct model h on the **observed** - lag window (no predicted values fed back yet). -- For steps K+1..H: continue recursively with the trained 1-step model, rolling - the window forward with its own predictions. -- Accepts either: - * An absolute MultiIndex fh (matching y’s id+time), or a simple time Index - if the training data was a single series. - * A relative FH/array of positive ints (applied to every series id). - -Normalization strategy API (efficient & flexible): -- Pass either: - 1) a **strategy**: a callable taking a `lags` vector and returning - `(transform, inverse)` functions; or - 2) a **factory**: a zero-arg callable that returns such a strategy. - 3) a **string** shortcut: one of {"divide_mean", "subtract_mean", - "normalize", "minmax"}. -- `transform(lags, target) -> (lags_n, target_n)`; `inverse(y_n) -> y`. - -Includes `mean_window_normalizer()` factory: divides by the lag-window mean. - -Notes ------ -- Univariate target only (one column series per id). -- If X is used in fit, you must pass **future X rows** at all required timestamps - for prediction (for each id, and each requested timestamp). -- This is a from-scratch implementation; not copied from sktime or other libs. -""" - -from __future__ import annotations - -from functools import partial -from typing import Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Union - -import numpy as np -import pandas as pd -from pandas.api.types import is_integer_dtype -from pandas.tseries.frequencies import to_offset -from sklearn.base import clone, RegressorMixin -from sktime.forecasting.base import BaseForecaster, ForecastingHorizon - - -__all__ = [ - "GlobalReductionForecaster", - "make_reduction", - "mean_window_normalizer", - "subtract_mean_normalizer", - "zscore_normalizer", - "minmax_normalizer", -] - - -# --------------------------------------------------------------------------- -# Normalization strategy helpers -# --------------------------------------------------------------------------- - - -def _mean_window_transform( - lags_in: np.ndarray, target: Optional[float], m: float -) -> Tuple[np.ndarray, Optional[float]]: - lags_arr = np.asarray(lags_in, dtype=float) - lags_n = lags_arr / m - tgt_n = None if target is None else float(target) / m - return lags_n, tgt_n - - -def _mean_window_inverse(y_n: float, m: float) -> float: - return float(y_n) * m - - -class MeanWindowNormalizer: - """Callable strategy that scales by the mean of each lag window.""" - - def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: - lags_arr = np.asarray(lags, dtype=float) - m = float(np.nanmean(lags_arr)) if lags_arr.size else 1.0 - if not np.isfinite(m) or abs(m) < 1e-12: - m = 1.0 - - transform = partial(_mean_window_transform, m=m) - inverse = partial(_mean_window_inverse, m=m) - return transform, inverse - - -def mean_window_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: - """Factory for a simple per-row normalizer: divide by window mean.""" - - return MeanWindowNormalizer() - - -def _subtract_mean_transform( - lags_in: np.ndarray, target: Optional[float], m: float -) -> Tuple[np.ndarray, Optional[float]]: - lags_arr = np.asarray(lags_in, dtype=float) - lags_n = lags_arr - m - tgt_n = None if target is None else float(target) - m - return lags_n, tgt_n - - -def _subtract_mean_inverse(y_n: float, m: float) -> float: - return float(y_n) + m - - -class SubtractMeanNormalizer: - """Center lag windows by subtracting the mean (per row).""" - - def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: - lags_arr = np.asarray(lags, dtype=float) - m = float(np.nanmean(lags_arr)) if lags_arr.size else 0.0 - if not np.isfinite(m): - m = 0.0 - - transform = partial(_subtract_mean_transform, m=m) - inverse = partial(_subtract_mean_inverse, m=m) - return transform, inverse - - -def subtract_mean_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: - """Factory for per-row mean subtraction.""" - - return SubtractMeanNormalizer() - - -def _zscore_transform( - lags_in: np.ndarray, target: Optional[float], m: float, s: float -) -> Tuple[np.ndarray, Optional[float]]: - lags_arr = np.asarray(lags_in, dtype=float) - lags_n = (lags_arr - m) / s - if target is None: - tgt_n = None - else: - tgt_n = (float(target) - m) / s - return lags_n, tgt_n - - -def _zscore_inverse(y_n: float, m: float, s: float) -> float: - return float(y_n) * s + m - - -class ZScoreNormalizer: - """Standardize lag windows using per-row mean and std.""" - - def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: - lags_arr = np.asarray(lags, dtype=float) - m = float(np.nanmean(lags_arr)) if lags_arr.size else 0.0 - if not np.isfinite(m): - m = 0.0 - s = float(np.nanstd(lags_arr, ddof=0)) if lags_arr.size else 1.0 - if not np.isfinite(s) or abs(s) < 1e-12: - s = 1.0 - - transform = partial(_zscore_transform, m=m, s=s) - inverse = partial(_zscore_inverse, m=m, s=s) - return transform, inverse - - -def zscore_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: - """Factory for per-row z-score standardization.""" - - return ZScoreNormalizer() - - -def _minmax_transform( - lags_in: np.ndarray, target: Optional[float], lo: float, hi: float, scale: float -) -> Tuple[np.ndarray, Optional[float]]: - lags_arr = np.asarray(lags_in, dtype=float) - lags_n = (lags_arr - lo) / scale - if target is None: - tgt_n = None - else: - tgt_n = (float(target) - lo) / scale - return lags_n, tgt_n - - -def _minmax_inverse(y_n: float, lo: float, scale: float) -> float: - return float(y_n) * scale + lo - - -class MinMaxNormalizer: - """Scale lag windows to [0, 1] range per row.""" - - def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: - lags_arr = np.asarray(lags, dtype=float) - if lags_arr.size: - lo = float(np.nanmin(lags_arr)) - hi = float(np.nanmax(lags_arr)) - else: - lo = 0.0 - hi = 1.0 - if not np.isfinite(lo): - lo = 0.0 - if not np.isfinite(hi): - hi = lo + 1.0 - - scale = hi - lo - if not np.isfinite(scale) or abs(scale) < 1e-12: - scale = 1.0 - - transform = partial(_minmax_transform, lo=lo, hi=hi, scale=scale) - inverse = partial(_minmax_inverse, lo=lo, scale=scale) - return transform, inverse - - -def minmax_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: - """Factory for per-row min-max scaling.""" - - return MinMaxNormalizer() - - -_NORMALIZATION_STRATEGY_REGISTRY = { - "divide_mean": mean_window_normalizer, - "subtract_mean": subtract_mean_normalizer, - "normalize": zscore_normalizer, - "minmax": minmax_normalizer, -} - - -def _resolve_normalization_strategy(ns): - """Accept either a factory (zero-arg) or a strategy (lags->(transform, inverse)).""" - if ns is None: - return None - if isinstance(ns, str): - key = ns.lower() - if key not in _NORMALIZATION_STRATEGY_REGISTRY: - options = sorted(_NORMALIZATION_STRATEGY_REGISTRY) - raise ValueError( - "Unknown normalization_strategy string. " - f"Expected one of {options}, got '{ns}'." - ) - ns = _NORMALIZATION_STRATEGY_REGISTRY[key] - try: - import inspect - - sig = inspect.signature(ns) - required = [ - p - for p in sig.parameters.values() - if p.kind in (p.POSITIONAL_ONLY, p.POSITIONAL_OR_KEYWORD) - and p.default is p.empty - ] - if len(required) == 0: - # zero-arg factory -> call it once to get the strategy - return ns() - except Exception: - # if introspection fails, just treat as already-a-strategy - pass - return ns - - -# --------------------------------------------------------------------------- -# utils (pure-python; no sktime private imports) -# --------------------------------------------------------------------------- - - -def _check_regressor(estimator: RegressorMixin) -> None: - if not hasattr(estimator, "fit") or not hasattr(estimator, "predict"): - raise TypeError("estimator must implement scikit-learn's fit/predict.") - - -def _as_positive_int_fh( - arr_like: Union[Iterable[int], np.ndarray, List[int]], -) -> np.ndarray: - """Return strictly positive integer steps, sorted and unique.""" - arr = np.asarray(list(arr_like)).reshape(-1) - if arr.size == 0: - raise ValueError("fh must contain at least one step ahead.") - if not np.issubdtype(arr.dtype, np.integer): - if np.issubdtype(arr.dtype, np.floating) and np.all(np.mod(arr, 1) == 0): - arr = arr.astype(int) - else: - raise ValueError("fh must be an iterable of integers.") - if np.any(arr < 1): - raise ValueError("All steps in fh must be >= 1 (strictly out-of-sample).") - return np.unique(np.sort(arr)) - - -def _infer_freq_from_index(idx: pd.Index): - """Best-effort frequency inference (DatetimeIndex/PeriodIndex).""" - if isinstance(idx, (pd.DatetimeIndex, pd.PeriodIndex)): - if idx.freq is not None: - return idx.freq - try: - return pd.infer_freq(idx) - except Exception: - return None - return None - - -def _future_index_like(idx: pd.Index, horizon: int) -> Tuple[pd.Index, bool]: - """ - Build a future index of length `horizon` "like" `idx`. - Returns (index, absolute?), where absolute indicates absolute time (True) or - simple 1..H relative steps (False). - """ - if horizon < 1: - raise ValueError("horizon must be >= 1.") - - if isinstance(idx, pd.DatetimeIndex): - raw_freq = idx.freq or _infer_freq_from_index(idx) - offset = None - if raw_freq is not None: - try: - offset = to_offset(raw_freq) - except (TypeError, ValueError): - offset = None - if offset is None and len(idx) >= 2: - step = idx[-1] - idx[-2] - try: - offset = to_offset(step) - except (TypeError, ValueError): - offset = None - if offset is not None: - start = idx[-1] + offset - return ( - pd.date_range(start=start, periods=horizon, freq=offset, tz=idx.tz), - True, - ) - return pd.RangeIndex(1, horizon + 1), False - - if isinstance(idx, pd.PeriodIndex): - freq = idx.freq - if freq is not None: - start = idx[-1] + 1 - return pd.period_range(start=start, periods=horizon, freq=freq), True - return pd.RangeIndex(1, horizon + 1), False - - if isinstance(idx, (pd.RangeIndex, pd.Index)) and is_integer_dtype(idx.dtype): - start = idx[-1] + 1 - return pd.RangeIndex(start, start + horizon), True - - return pd.RangeIndex(1, horizon + 1), False - - -def _select_future_rows( - X_future: pd.DataFrame, idx: Union[pd.Index, pd.MultiIndex], allow_fill: bool = True -) -> pd.DataFrame: - """Select rows of X_future at index `idx`, optionally imputing missing rows.""" - if not isinstance(idx, (pd.Index, pd.MultiIndex)): - idx = pd.Index(idx) - - if not allow_fill: - missing = idx.difference(X_future.index) - if len(missing) > 0: - sample = list(missing[:3]) - raise ValueError( - "Missing required rows in X for forecast timestamps. " - f"Examples: {sample} (total missing: {len(missing)})." - ) - return X_future.loc[idx] - - X_aligned = X_future.reindex(idx) - if X_aligned.isnull().values.any(): - X_aligned = X_aligned.ffill().bfill() - - if X_aligned.isnull().values.any(): - missing_rows = X_aligned.index[X_aligned.isnull().any(axis=1)] - sample = list(missing_rows[:3]) - raise ValueError( - "Missing required rows in X for forecast timestamps even after fill. " - f"Examples: {sample} (total missing: {len(missing_rows)})." - ) - - return X_aligned - - -def _flatten_multiindex_to_time( - y_or_X: Union[pd.Series, pd.DataFrame], ids -) -> Union[pd.Series, pd.DataFrame]: - """Return object with *time-only* index for a specific ids tuple.""" - if isinstance(ids, tuple): - key = ids - else: - key = (ids,) - return y_or_X.xs(key, level=list(range(y_or_X.index.nlevels - 1))) - - -def _iter_series_groups(y: pd.Series): - """Yield (ids_tuple, y_single_series_with_time_index).""" - nlvls = y.index.nlevels - id_lvls = list(range(nlvls - 1)) - # keep order stable - group_level = id_lvls if len(id_lvls) != 1 else id_lvls[0] - for ids, y_g in y.groupby(level=group_level, sort=False): - if not isinstance(ids, tuple): - ids = (ids,) - y_flat = y_g.droplevel(id_lvls) - yield ids, y_flat - - -def _build_supervised_table_single( - y: pd.Series, - X: Optional[pd.DataFrame], - window_length: int, - steps_ahead: int, - x_mode: str, -) -> Tuple[pd.DataFrame, pd.Series]: - """Turn (y, X) into (Xt, yt) for one series and one horizon.""" - if window_length < 1: - raise ValueError("window_length must be >= 1.") - if not isinstance(steps_ahead, int) or steps_ahead < 1: - raise ValueError("steps_ahead must be a positive integer.") - if x_mode not in ("none", "concurrent", "auto"): - raise ValueError("x_mode must be one of {'none', 'concurrent', 'auto'}.") - - use_X = (X is not None) and (x_mode in ("concurrent", "auto")) - - values = y.to_numpy() - n = len(values) - - # anchors t valid from window_length-1 .. n - steps_ahead - 1 - max_anchor = n - steps_ahead - 1 - if max_anchor < (window_length - 1): - raise ValueError( - "Not enough observations: need at least window_length + steps_ahead. " - f"Got len(y)={n}, window_length={window_length}, steps_ahead={steps_ahead}." - ) - - rows = [] - targets = [] - t_index = [] - - for t in range(window_length - 1, max_anchor + 1): - # lags y[t], y[t-1], ..., y[t-window_length+1] (newest first) - lag_block = values[t : t - window_length : -1] - if lag_block.shape[0] != window_length: - lag_block = np.asarray( - [values[t - i] for i in range(window_length)], dtype=float - ) - - row = {f"y_lag_{i+1}": lag_block[i] for i in range(window_length)} - target_time = y.index[t + steps_ahead] - y_target = values[t + steps_ahead] - - if use_X: - if target_time not in X.index: - # Feature placeholder; user should ensure X completeness - for c in X.columns: - row[f"X_{c}"] = np.nan - else: - xrow = X.loc[target_time] - if isinstance(xrow, pd.DataFrame): - xrow = xrow.iloc[0] - for c in X.columns: - row[f"X_{c}"] = xrow[c] - - rows.append(row) - targets.append(y_target) - t_index.append(target_time) - - Xt = pd.DataFrame(rows, index=pd.Index(t_index, name=y.index.name)) - yt = pd.Series(targets, index=Xt.index, name=y.name) - return Xt, yt - - -def _build_supervised_table_global( - y: pd.Series, - X: Optional[pd.DataFrame], - window_length: int, - steps_ahead: int, - x_mode: str, -) -> Tuple[pd.DataFrame, pd.Series]: - """Supervised table across all ids for one horizon, stacked with MultiIndex index.""" - nlvls = y.index.nlevels - id_lvls = list(range(nlvls - 1)) - id_names = list(y.index.names[:-1]) - time_name = y.index.names[-1] - - Xt_list = [] - yt_list = [] - idx_list = [] - - # iterate ids - for ids, y_flat in _iter_series_groups(y): - X_flat = None - if X is not None: - X_flat = _flatten_multiindex_to_time(X, ids) - if not X_flat.index.is_monotonic_increasing: - X_flat = X_flat.sort_index() - if not y_flat.index.is_monotonic_increasing: - y_flat = y_flat.sort_index() - - Xt_g, yt_g = _build_supervised_table_single( - y=y_flat, - X=X_flat, - window_length=window_length, - steps_ahead=steps_ahead, - x_mode=x_mode, - ) - - # attach ids to index -> MultiIndex (ids..., time) - if len(ids) == 1: - new_index = pd.MultiIndex.from_arrays( - [[ids[0]] * len(Xt_g), Xt_g.index], - names=id_names + [time_name], - ) - else: - arrays = [[ids[j]] * len(Xt_g) for j in range(len(ids))] - arrays.append(list(Xt_g.index)) - new_index = pd.MultiIndex.from_arrays(arrays, names=id_names + [time_name]) - - Xt_g.index = new_index - yt_g.index = new_index - - Xt_list.append(Xt_g) - yt_list.append(yt_g) - - Xt_all = pd.concat(Xt_list, axis=0) - yt_all = pd.concat(yt_list, axis=0) - - return Xt_all.sort_index(), yt_all.sort_index() - - -def _normalize_supervised_rowwise( - Xt: pd.DataFrame, - yt: pd.Series, - L: int, - normalization_strategy: Optional[Callable[[np.ndarray], Tuple[Callable, Callable]]], -) -> Tuple[pd.DataFrame, pd.Series]: - """Apply per-row normalization to (y-lags, target).""" - if normalization_strategy is None: - return Xt, yt - - Xt_out = Xt.copy() - yt_out = yt.astype(float, copy=True) - lag_cols = [f"y_lag_{i+1}" for i in range(L)] - lag_idx = [Xt_out.columns.get_loc(col) for col in lag_cols] - - for i in range(len(Xt_out)): - lags = Xt_out.iloc[i, lag_idx].to_numpy(dtype=float) - target_value = yt_out.iloc[i] - transform, _ = normalization_strategy(lags) # per-window - lags_n, tgt_n = transform(lags, target_value) - Xt_out.iloc[i, lag_idx] = lags_n - if tgt_n is not None: - yt_out.iloc[i] = float(tgt_n) - - return Xt_out, yt_out - - -def _make_group_future_multiindex( - ids: Tuple, future_time_index: pd.Index, id_names: List[str], time_name: str -) -> pd.MultiIndex: - """Build a MultiIndex combining ids (tuple) and per-group future time index.""" - arrays = [[ids[j]] * len(future_time_index) for j in range(len(ids))] - arrays.append(list(future_time_index)) - return pd.MultiIndex.from_arrays(arrays, names=id_names + [time_name]) - - -def _steps_and_full_future_for_group( - train_time_index: pd.Index, - req_times: Optional[pd.Index] = None, - rel_steps: Optional[np.ndarray] = None, -) -> Tuple[pd.Index, Optional[np.ndarray]]: - """Return full future index for the group, and (if req_times) positions for them.""" - if req_times is not None: - last_t = train_time_index[-1] - max_t = pd.Index(req_times).max() - - if isinstance(train_time_index, pd.DatetimeIndex): - raw_freq = train_time_index.freq or _infer_freq_from_index(train_time_index) - offset = None - if raw_freq is not None: - try: - offset = to_offset(raw_freq) - except (TypeError, ValueError): - offset = None - if offset is None: - inferred = pd.infer_freq(train_time_index) - try: - offset = to_offset(inferred) - except (TypeError, ValueError): - offset = None - if offset is None: - if len(train_time_index) >= 2: - step = train_time_index[-1] - train_time_index[-2] - try: - offset = to_offset(step) - except (TypeError, ValueError): - offset = None - if offset is None: - return pd.Index([]), np.array([], dtype=int) - rng = pd.date_range( - start=last_t + offset, - end=max_t, - freq=offset, - tz=train_time_index.tz, - ) - H = len(rng) - full_future = pd.date_range( - start=last_t + offset, - periods=H if H > 0 else 0, - freq=offset, - tz=train_time_index.tz, - ) - elif isinstance(train_time_index, pd.PeriodIndex): - freq = train_time_index.freq - rng = pd.period_range(start=last_t + 1, end=max_t, freq=freq) - H = len(rng) - full_future = pd.period_range( - start=last_t + 1, periods=H if H > 0 else 0, freq=freq - ) - elif is_integer_dtype(train_time_index.dtype): - H = int(max_t - last_t) - full_future = pd.RangeIndex(last_t + 1, last_t + 1 + max(H, 0)) - else: - req_times_sorted = pd.Index(req_times).sort_values() - H = len(req_times_sorted) - full_future = pd.RangeIndex(1, H + 1) - - if H == 0: - return pd.Index([]), np.array([], dtype=int) - - if isinstance(full_future, pd.RangeIndex) and not np.issubdtype( - train_time_index.dtype, np.integer - ): - req_sorted = pd.Index(req_times).sort_values() - pos_map = {req_sorted[i]: i + 1 for i in range(len(req_sorted))} - steps = np.asarray([pos_map[t] for t in req_times], dtype=int) - else: - pos = pd.Index(full_future).get_indexer(pd.Index(req_times)) - if np.any(pos < 0): - bad = list(pd.Index(req_times)[pos < 0][:3]) - raise ValueError( - "Requested times are not aligned with training frequency for a group. " - f"Examples: {bad}" - ) - steps = pos.astype(int) + 1 # 1-based - - return full_future, steps - - # relative steps path - if rel_steps is None or len(rel_steps) == 0: - raise ValueError("Either req_times or rel_steps must be provided.") - H = int(np.max(rel_steps)) - full_future, _ = _future_index_like(train_time_index, H) - return pd.Index(full_future), None - - -def _union_indices(indices: List[pd.Index]) -> pd.Index: - """Safe union for both Index and MultiIndex without relying on union_many.""" - if not indices: - return pd.Index([]) - u = indices[0] - for ix in indices[1:]: - u = u.union(ix) - return u - - -# --------------------------------------------------------------------------- -# The global forecaster -# --------------------------------------------------------------------------- - - -class GlobalReductionForecaster(BaseForecaster): - """Global hybrid reduction forecaster: K-step direct + recursive continuation. - - Trains **steps_ahead = K** separate direct models for horizons 1..K on pooled - (possibly hierarchical) data, using a lag window from ``y`` (and optional - *concurrent* exogenous ``X`` at each target timestamp). For each series id, - requested predictions beyond K steps are produced recursively using the - 1-step model. - - This class works with **either** a single time series (simple time index) **or** - MultiIndex/Hierarchical data (id levels + time). - """ - - _tags = { - # accept single series AND hierarchical / multiindex series - "y_inner_mtype": ["pd.Series", "pd-multiindex", "pd_multiindex_hier"], - "X_inner_mtype": ["pd.DataFrame", "pd-multiindex", "pd_multiindex_hier"], - # univariate target - "scitype:y": "univariate", - # exogenous supported - "capability:exogenous": True, - # does not require fh in fit - "requires-fh-in-fit": False, - # enforce same index between X and y - "X-y-must-have-same-index": True, - # index type unrestricted - "enforce_index_type": None, - # missing values: we don't guarantee generic handling (y can be imputed) - "capability:missing_values": False, - # strictly oos steps - "capability:insample": False, - # no probabilistic output in this implementation - "capability:pred_int": False, - # soft dependency on scikit-learn - "python_dependencies": "scikit-learn", - } - - def __init__( - self, - estimator: RegressorMixin, - window_length: int = 10, - steps_ahead: int = 1, - normalization_strategy: Optional[ - Union[str, Callable[[np.ndarray], Tuple[Callable, Callable]]] - ] = None, - x_mode: str = "auto", - impute_missing: Optional[str] = "bfill", - ): - # hyper-params - self.estimator = estimator - self.window_length = int(window_length) - self.steps_ahead = int(steps_ahead) - self.normalization_strategy = normalization_strategy - self.x_mode = x_mode - self.impute_missing = impute_missing - - super().__init__() - - if self.steps_ahead < 1: - raise ValueError("steps_ahead must be a positive integer.") - - # learned attributes - self._dir_estimators_: Optional[List[RegressorMixin]] = None - self._estimator_: Optional[RegressorMixin] = None # 1-step model shortcut - self._x_used_: bool = False - self._x_columns_: Optional[List[str]] = None - - # per-group rolling state - self._last_windows_: Optional[Dict[Tuple, np.ndarray]] = ( - None # ids -> window (old..new) - ) - self._train_time_index_: Optional[Dict[Tuple, pd.Index]] = ( - None # ids -> time index - ) - self._ids_: Optional[List[Tuple]] = None # list of ids tuples in fit order - - # index naming - self._id_names_: Optional[List[str]] = None - self._time_name_: Optional[str] = None - self._was_single_series_: bool = False - self._single_id_value_: str = "__singleton__" - self._single_id_name_: str = "id" - - # for update/refit bookkeeping - self._y_train_: Optional[pd.Series] = None - self._X_train_: Optional[pd.DataFrame] = None - self._norm_strategy_: Optional[ - Callable[[np.ndarray], Tuple[Callable, Callable]] - ] = None - self._y_name_: Optional[str] = None - self._y_is_dataframe_: bool = False - self._y_column_name_: Optional[str] = None - - # -------------------- fit -------------------- - def _fit( - self, y: pd.Series, X: Optional[pd.DataFrame], fh: Optional[ForecastingHorizon] - ): - """Fit the global forecaster to (possibly hierarchical or single) training data.""" - _check_regressor(self.estimator) - - self._y_is_dataframe_ = isinstance(y, pd.DataFrame) - if isinstance(y, pd.DataFrame): - if y.shape[1] != 1: - raise ValueError( - "GlobalReductionForecaster supports univariate targets only." - ) - col_name = y.columns[0] - y = y.iloc[:, 0].copy() - y.name = col_name - self._y_column_name_ = col_name - else: - self._y_column_name_ = y.name - - # detect single series and coerce to MultiIndex internally - if isinstance(y.index, pd.MultiIndex) and y.index.nlevels >= 2: - self._was_single_series_ = False - y_mi = y.copy() - if X is not None: - if isinstance(X.index, pd.MultiIndex): - X_mi = X.copy() - else: - raise TypeError( - "X must have a MultiIndex to match y's MultiIndex in fit." - ) - else: - X_mi = None - else: - # single series -> wrap to MultiIndex with one id level - self._was_single_series_ = True - time_name = y.index.name if y.index.name is not None else "time" - id_name = self._single_id_name_ - id_val = self._single_id_value_ - y_mi = y.copy() - y_mi.index = pd.MultiIndex.from_arrays( - [[id_val] * len(y_mi), y_mi.index], names=[id_name, time_name] - ) - if X is not None: - if isinstance(X.index, pd.MultiIndex): - raise TypeError( - "For single-series fit, X should have a simple time index." - ) - X_mi = X.copy() - X_mi.index = pd.MultiIndex.from_arrays( - [[id_val] * len(X_mi), X_mi.index], names=[id_name, time_name] - ) - else: - X_mi = None - - y = y_mi - X = X_mi - - # store names - self._id_names_ = list(y.index.names[:-1]) - self._time_name_ = y.index.names[-1] - self._y_name_ = y.name - - # basic imputation on y - if self.impute_missing == "ffill": - y = y.ffill() - elif self.impute_missing == "bfill": - y = y.bfill() - elif self.impute_missing is not None: - raise ValueError("impute_missing must be 'ffill', 'bfill', or None.") - - # resolve x_mode - x_mode = self.x_mode - if x_mode == "auto": - x_mode = "concurrent" if X is not None else "none" - - # resolve normalization strategy (allow factory or strategy) - self._norm_strategy_ = _resolve_normalization_strategy( - self.normalization_strategy - ) - - # fit K direct heads using pooled data - dir_estimators: List[RegressorMixin] = [] - for h in range(1, self.steps_ahead + 1): - Xt_h_all, yt_h_all = _build_supervised_table_global( - y=y, - X=X, - window_length=self.window_length, - steps_ahead=h, - x_mode=x_mode, - ) - # remember X columns (consistency check at predict) - if self._x_columns_ is None and X is not None and X.shape[1] > 0: - self._x_columns_ = list(X.columns) - - # row-wise normalization on lags & target - Xt_h_all_n, yt_h_all_n = _normalize_supervised_rowwise( - Xt_h_all, yt_h_all, self.window_length, self._norm_strategy_ - ) - - est_h = clone(self.estimator) - est_h.fit(Xt_h_all_n.values, yt_h_all_n.values) - dir_estimators.append(est_h) - - # learned state - self._dir_estimators_ = dir_estimators - self._estimator_ = dir_estimators[0] - self._x_used_ = (x_mode == "concurrent") and (X is not None) - - # store per-group last window and time indices - last_windows = {} - time_idx_map = {} - ids_list = [] - for ids, y_flat in _iter_series_groups(y): - ids_list.append(ids) - if not y_flat.index.is_monotonic_increasing: - y_flat = y_flat.sort_index() - time_idx_map[ids] = y_flat.index - last = y_flat.iloc[-self.window_length :].to_numpy() - if len(last) != self.window_length: - raise ValueError( - f"Group {ids}: not enough observations for last window. " - f"Need window_length={self.window_length}, got {len(y_flat)}." - ) - last_windows[ids] = last.astype(float).reshape(-1) - - self._last_windows_ = last_windows - self._train_time_index_ = time_idx_map - self._ids_ = ids_list - - # store training for potential refit in update - self._y_train_ = y.copy() - self._X_train_ = X.copy() if X is not None else None - - return self - - # -------------------- predict -------------------- - def _predict( - self, - fh: Union[ForecastingHorizon, Sequence, pd.Index, pd.MultiIndex], - X: Optional[pd.DataFrame] = None, - ) -> pd.Series: - """Forecast pooled multi-series or a single series at future horizon.""" - if ( - self._estimator_ is None - or self._last_windows_ is None - or self._dir_estimators_ is None - or self._train_time_index_ is None - or self._ids_ is None - ): - raise RuntimeError("Call fit(...) before predict(...).") - - # determine fh mode - mode_abs_multi = isinstance(fh, pd.MultiIndex) - mode_abs_single = isinstance(fh, pd.Index) and not isinstance(fh, pd.MultiIndex) - mode_rel = False - - req_steps_all: Optional[np.ndarray] = None - if not (mode_abs_multi or mode_abs_single): - # FH object or array-like of relative ints - if isinstance(fh, ForecastingHorizon): - rel = fh.to_relative(self.cutoff) - req_steps_all = _as_positive_int_fh(np.asarray(rel, dtype=int)) - else: - # try array-like relative ints - arr = np.asarray(fh) - req_steps_all = _as_positive_int_fh(arr) - mode_rel = True - - if mode_abs_single and not self._was_single_series_: - raise TypeError( - "Absolute fh as a simple Index is only valid when the model was fit " - "on a single series. For multi-series, pass a MultiIndex fh." - ) - - # prepare exogenous usage - if self._x_used_: - if X is None: - raise ValueError( - "This model was fit with exogenous variables. " - "Provide X with rows for all required forecast timestamps." - ) - if self._x_columns_ is not None: - missing = [c for c in self._x_columns_ if c not in X.columns] - if missing: - raise ValueError( - f"X is missing columns seen in training: {missing}" - ) - # shape validation - if self._was_single_series_: - if isinstance(X.index, pd.MultiIndex): - raise TypeError( - "For single-series prediction, X should have a simple time index." - ) - else: - if not isinstance(X.index, pd.MultiIndex): - raise TypeError( - "For multi-series prediction, X must have a MultiIndex index." - ) - # order X columns to match training - if self._x_columns_ is not None: - X = X[self._x_columns_] - - out_series: List[pd.Series] = [] - - K = self.steps_ahead - - for ids in self._ids_: - time_idx_train = self._train_time_index_[ids] - - # determine requested times/steps for this ids - if mode_abs_multi: - try: - req_times = fh.xs(ids, level=list(range(fh.nlevels - 1))) - req_times = pd.Index(req_times) - except Exception: - req_times = pd.Index([]) - full_future, steps_for_req = _steps_and_full_future_for_group( - time_idx_train, req_times=req_times - ) - if len(full_future) == 0 and len(req_times) == 0: - continue - H = len(full_future) - pos_req = steps_for_req # 1-based - elif mode_abs_single: - # single series: use the provided absolute time Index for the lone ids - req_times = pd.Index(fh) - full_future, steps_for_req = _steps_and_full_future_for_group( - time_idx_train, req_times=req_times - ) - if len(full_future) == 0 and len(req_times) == 0: - continue - H = len(full_future) - pos_req = steps_for_req - else: - # relative steps (common to all ids) - assert req_steps_all is not None - H = int(np.max(req_steps_all)) - full_future, _ = _steps_and_full_future_for_group( - time_idx_train, rel_steps=req_steps_all - ) - pos_req = req_steps_all - - # prepare exogenous block for this group's full future horizon - X_block = None - if self._x_used_: - if self._was_single_series_: - X_needed = _select_future_rows(X, full_future) - X_block = X_needed.to_numpy() - else: - group_future_index = _make_group_future_multiindex( - ids, full_future, self._id_names_, self._time_name_ - ) - X_needed = _select_future_rows(X, group_future_index) - X_block = X_needed.to_numpy() - - # predictions for steps 1..H - preds = np.zeros(H, dtype=float) - - # direct part - last_obs = self._last_windows_[ids].copy() # chronological old..new - for i in range(1, min(K, H) + 1): - y_feats = last_obs[::-1] # newest first to match training - if self._norm_strategy_ is not None: - transform, inv = self._norm_strategy_(y_feats) - y_feats_n, _ = transform(y_feats, None) - else: - y_feats_n = y_feats - inv = lambda v: float(v) - - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) - else: - row = y_feats_n - - yhat_n = float( - np.asarray( - self._dir_estimators_[i - 1].predict(row.reshape(1, -1)) - ).ravel()[0] - ) - yhat = inv(yhat_n) - preds[i - 1] = yhat - - # rolling state after K direct preds - last_roll = self._last_windows_[ids].copy() - for i in range(1, min(K, H) + 1): - last_roll = np.roll(last_roll, -1) - last_roll[-1] = preds[i - 1] - - # recursive part - for i in range(K + 1, H + 1): - y_feats = last_roll[::-1] - if self._norm_strategy_ is not None: - transform, inv = self._norm_strategy_(y_feats) - y_feats_n, _ = transform(y_feats, None) - else: - y_feats_n = y_feats - inv = lambda v: float(v) - - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) - else: - row = y_feats_n - - yhat_n = float( - np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] - ) - yhat = inv(yhat_n) - preds[i - 1] = yhat - - # roll forward with *original-scale* prediction - last_roll = np.roll(last_roll, -1) - last_roll[-1] = yhat - - # subset to requested steps for this ids and append to output - steps = np.asarray(pos_req, dtype=int) - sel = preds[steps - 1] - - if mode_abs_multi: - idx = _make_group_future_multiindex( - ids, full_future[steps - 1], self._id_names_, self._time_name_ - ) - elif mode_abs_single or (mode_rel and self._was_single_series_): - idx = pd.Index(full_future[steps - 1], name=self._time_name_) - else: - idx = _make_group_future_multiindex( - ids, full_future[steps - 1], self._id_names_, self._time_name_ - ) - - out_series.append(pd.Series(sel, index=idx, name=self._y_name_)) - - if len(out_series) == 0: - # No requested rows (e.g., fh had no times beyond training) -> empty series - return pd.Series([], dtype=float, name=self._y_name_) - - # Assemble output - y_pred = pd.concat(out_series) - - # preserve the order of the provided absolute fh if given - if mode_abs_multi: - y_pred = y_pred.reindex(fh) - elif mode_abs_single: - y_pred = y_pred.reindex(pd.Index(fh)) - else: - y_pred = y_pred.sort_index() - - if self._y_is_dataframe_: - col_name = self._y_column_name_ or self._y_name_ or "y" - return y_pred.to_frame(name=col_name) - - return y_pred - - # -------------------- update -------------------- - def _update( - self, y: pd.Series, X: Optional[pd.DataFrame] = None, update_params: bool = True - ): - """Update rolling windows; refit on appended data if `update_params=True`.""" - if ( - self._estimator_ is None - or self._last_windows_ is None - or self._dir_estimators_ is None - or self._train_time_index_ is None - or self._ids_ is None - ): - raise RuntimeError("Call fit(...) before update(...).") - - if y is None or len(y) == 0: - return self - - if isinstance(y, pd.DataFrame): - if y.shape[1] != 1: - raise ValueError( - "GlobalReductionForecaster update expects a single target column." - ) - col_name = y.columns[0] - y = y.iloc[:, 0].copy() - y.name = col_name - - # Coerce y (and X) to the internal MultiIndex shape if needed - if self._was_single_series_: - time_name = self._time_name_ or "time" - id_name = self._id_names_[0] if self._id_names_ else self._single_id_name_ - id_val = self._single_id_value_ - if not isinstance(y.index, pd.MultiIndex): - y = y.copy() - y.index = pd.MultiIndex.from_arrays( - [[id_val] * len(y), y.index], names=[id_name, time_name] - ) - if X is not None and not isinstance(X.index, pd.MultiIndex): - X = X.copy() - X.index = pd.MultiIndex.from_arrays( - [[id_val] * len(X), X.index], names=[id_name, time_name] - ) - - # roll last windows for groups present in y - for ids, y_flat in _iter_series_groups(y): - new_vals = y_flat.to_numpy(dtype=float).reshape(-1) - if len(new_vals) == 0: - continue - if len(new_vals) >= self.window_length: - self._last_windows_[ids] = new_vals[-self.window_length :] - else: - rolled = np.roll(self._last_windows_[ids], -len(new_vals)) - rolled[-len(new_vals) :] = new_vals - self._last_windows_[ids] = rolled - # update stored time index for the group - existing_index = self._train_time_index_[ids] - new_index = y_flat.index - if isinstance(existing_index, pd.DatetimeIndex): - combined = existing_index.append(pd.DatetimeIndex(new_index)) - elif isinstance(existing_index, pd.PeriodIndex): - combined = existing_index.append( - pd.PeriodIndex(new_index, freq=existing_index.freq) - ) - else: - combined = existing_index.append(pd.Index(new_index)) - - if not combined.is_monotonic_increasing: - combined = combined.sort_values() - - self._train_time_index_[ids] = combined - - if not update_params: - return self - - # Refit from scratch on concatenated data (simple & robust) - y_full = pd.concat([self._y_train_, y]).sort_index() - X_full = None - if self._X_train_ is not None or X is not None: - if (self._X_train_ is not None) and (X is None): - raise ValueError( - "This model was originally fit with X; update requires matching X." - ) - X_full = pd.concat([self._X_train_, X]).sort_index() - - _check_regressor(self.estimator) - - # impute like in fit - if self.impute_missing == "ffill": - y_imp = y_full.ffill() - elif self.impute_missing == "bfill": - y_imp = y_full.bfill() - else: - y_imp = y_full.copy() - - x_mode = self.x_mode - if x_mode == "auto": - x_mode = "concurrent" if X_full is not None else "none" - - dir_estimators: List[RegressorMixin] = [] - for h in range(1, self.steps_ahead + 1): - Xt_h_all, yt_h_all = _build_supervised_table_global( - y=y_imp, - X=X_full, - window_length=self.window_length, - steps_ahead=h, - x_mode=x_mode, - ) - Xt_h_all_n, yt_h_all_n = _normalize_supervised_rowwise( - Xt_h_all, yt_h_all, self.window_length, self._norm_strategy_ - ) - est_h = clone(self.estimator) - est_h.fit(Xt_h_all_n.values, yt_h_all_n.values) - dir_estimators.append(est_h) - - # update learned state - self._dir_estimators_ = dir_estimators - self._estimator_ = dir_estimators[0] - self._x_used_ = (x_mode == "concurrent") and (X_full is not None) - self._x_columns_ = ( - list(X_full.columns) if (X_full is not None) else self._x_columns_ - ) - - # refresh per-group windows and time index maps from y_imp - last_windows = {} - time_idx_map = {} - ids_list = [] - for ids, y_flat in _iter_series_groups(y_imp): - ids_list.append(ids) - if not y_flat.index.is_monotonic_increasing: - y_flat = y_flat.sort_index() - time_idx_map[ids] = y_flat.index - last = y_flat.iloc[-self.window_length :].to_numpy() - last_windows[ids] = last.astype(float).reshape(-1) - self._last_windows_ = last_windows - self._train_time_index_ = time_idx_map - self._ids_ = ids_list - - # store full data for potential next update - self._y_train_ = y_full.copy() - self._X_train_ = X_full.copy() if X_full is not None else None - - return self - - # -------------------- fitted params -------------------- - def _get_fitted_params(self): - """Expose fitted parameters and learned state.""" - return { - "x_used": self._x_used_, - "x_columns": self._x_columns_, - "direct_estimators": self._dir_estimators_, - "one_step_estimator": self._estimator_, - "last_windows": { - k: v.copy() for k, v in (self._last_windows_ or {}).items() - }, - "id_names": self._id_names_, - "time_name": self._time_name_, - "was_single_series": self._was_single_series_, - "y_was_dataframe": self._y_is_dataframe_, - } - - # -------------------- test params -------------------- - @classmethod - def get_test_params(cls, parameter_set: str = "default"): - """Return parameter settings for the estimator tests.""" - from sklearn.linear_model import LinearRegression, Ridge - - if parameter_set == "fast": - return { - "estimator": LinearRegression(), - "window_length": 4, - "steps_ahead": 2, - "normalization_strategy": mean_window_normalizer, # factory form - } - - return [ - { - "estimator": LinearRegression(), - "window_length": 5, - "steps_ahead": 1, - "normalization_strategy": mean_window_normalizer(), # strategy form - }, - { - "estimator": Ridge(alpha=0.1), - "window_length": 3, - "steps_ahead": 3, - "normalization_strategy": None, - }, - ] - - -# --------------------------------------------------------------------------- -# Convenience factory -# --------------------------------------------------------------------------- - - -def make_reduction( - estimator: RegressorMixin, - strategy: str = "recursive", - window_length: int = 10, - steps_ahead: Optional[int] = None, - normalization_strategy: Optional[ - Union[str, Callable[[np.ndarray], Tuple[Callable, Callable]]] - ] = None, - x_mode: str = "auto", - impute_missing: Optional[str] = "bfill", -) -> GlobalReductionForecaster: - """ - Construct a GlobalReductionForecaster. - - In this unified design: - - If ``strategy='recursive'`` and ``steps_ahead is None``, you'll get K=1. - - If ``strategy='direct'`` and you pass ``steps_ahead=K``, you'll get K direct heads - for 1..K and recursive continuation beyond K. - - Any other combination behaves the same as setting K=max(1, steps_ahead). - """ - strategy = (strategy or "recursive").lower() - if strategy not in ("recursive", "direct"): - raise ValueError("strategy must be 'recursive' or 'direct'.") - - if steps_ahead is None: - K = 1 - else: - K = int(steps_ahead) - if K < 1: - raise ValueError("steps_ahead must be a positive integer.") - - return GlobalReductionForecaster( - estimator=estimator, - window_length=window_length, - steps_ahead=K, - normalization_strategy=normalization_strategy, - x_mode=x_mode, - impute_missing=impute_missing, - ) - - -# --------------------------------------------------------------------------- -# Minimal smoke test (optional) -# --------------------------------------------------------------------------- - -if __name__ == "__main__": - from sklearn.linear_model import LinearRegression - - rng = np.random.default_rng(0) - - # -------- Single series example -------- - n = 50 - t = pd.date_range("2024-01-01", periods=n, freq="D") - y_single = pd.Series( - np.sin(np.linspace(0, 4, n)) + 0.1 * rng.standard_normal(n), - index=t, - name="y", - ) - X_single = pd.DataFrame({"cos": np.cos(np.linspace(0, 4, n))}, index=t) - - f_single = make_reduction( - LinearRegression(), - strategy="direct", - window_length=7, - steps_ahead=3, - normalization_strategy=mean_window_normalizer, # factory OR mean_window_normalizer() - ) - f_single.fit(y_single, X=X_single) - - H = 5 - future_times = pd.date_range(t[-1] + pd.Timedelta(days=1), periods=H, freq="D") - Xf_single = pd.DataFrame( - {"cos": np.cos(np.linspace(4, 4 + 0.05 * H, H))}, index=future_times - ) - print("Single-series forecast:") - print(f_single.predict(fh=future_times, X=Xf_single)) - - # -------- Multi-series example -------- - ids = ["A", "B"] - ys = [] - Xs = [] - for i, s in enumerate(ids): - y = pd.Series( - np.sin(np.linspace(0, 4, n)) + 0.1 * rng.standard_normal(n) + i, - index=t, - name="y", - ) - y.index = pd.MultiIndex.from_product([[s], y.index], names=["id", "time"]) - ys.append(y) - - X = pd.DataFrame({"cos": np.cos(np.linspace(0, 4, n))}, index=t) - X.index = pd.MultiIndex.from_product([[s], X.index], names=["id", "time"]) - Xs.append(X) - - y_all = pd.concat(ys) - X_all = pd.concat(Xs) - - f_multi = make_reduction( - LinearRegression(), - strategy="direct", - window_length=7, - steps_ahead=3, - normalization_strategy=mean_window_normalizer, - ) - f_multi.fit(y_all, X=X_all) - - future_times = pd.date_range(t[-1] + pd.Timedelta(days=1), periods=H, freq="D") - fh_abs = pd.MultiIndex.from_product([ids, future_times], names=["id", "time"]) - Xf = [] - for s in ids: - Xs_f = pd.DataFrame( - {"cos": np.cos(np.linspace(4, 4 + 0.05 * H, H))}, index=future_times - ) - Xs_f.index = pd.MultiIndex.from_product([[s], Xs_f.index], names=["id", "time"]) - Xf.append(Xs_f) - Xf = pd.concat(Xf) - - print("\nMulti-series forecast:") - print(f_multi.predict(fh=fh_abs, X=Xf)) diff --git a/src/tsbook/forecasting/reduction.py b/src/tsbook/forecasting/reduction.py index 2eb0279..333f236 100644 --- a/src/tsbook/forecasting/reduction.py +++ b/src/tsbook/forecasting/reduction.py @@ -3,50 +3,59 @@ # copyright: (c) 2025, authored for the requesting user # license: BSD-3-Clause-compatible grant for this file by the author """ -Hybrid reduction forecaster for sktime: K-step direct + recursive continuation. - -This forecaster inherits from ``sktime.forecasting.base.BaseForecaster`` and can -train *K* inner direct models to forecast 1..K steps ahead from a shared lagged -feature window of ``y`` (and optional *concurrent* exogenous ``X``). When asked -to predict beyond K steps, it *recursively* rolls a 1-step model forward using -its own past predictions. Setting ``steps_ahead=1`` recovers pure recursive -reduction. In that sense, **DirectReduction is a subcase of RecursiveReduction -with steps_ahead=1**; larger ``steps_ahead`` simply adds direct heads for the -first K steps before recursion continues them. - -New: per-window normalization via a lightweight strategy callback ------------------------------------------------------------------ -Pass ``normalization_strategy`` as a **callable** that receives the y-lag window -vector (1D ndarray, ordered as features are fed to the model: [y_t, y_{t-1}, ...]) -and returns a pair of functions ``(transform, inverse_transform)``. These functions -must each accept and return a 1D ndarray. The same transform is applied to the -lag window **and** the scalar target for that row; predictions are immediately -inverse-transformed back to the original scale. Exogenous ``X`` is never normalized. - -Example strategy (provided below): :func:`meanvar_window_normalizer`, which centers -and scales by the window's mean and standard deviation. - -Highlights ----------- -- Works with any scikit-learn style regressor (fit/predict). -- Univariate ``y``; optional *concurrent* exogenous ``X`` (values at the *target* - timestamps). If used in ``fit``, you must provide future ``X`` rows in ``predict``. -- Handles arbitrary forecasting horizons (not necessarily consecutive). Internally - computes predictions for steps 1..H where H=max requested step, then subselects. +Global hybrid reduction forecaster for sktime: +K-step direct heads + recursive continuation, with per-row normalization. + +Now supports BOTH: +- pooled multi-series/hierarchical data (y/X with MultiIndex where last level is time) +- a single time series (y/X with a single time index) + +Training (global): +- Builds K supervised datasets (one per step_ahead = 1..K). +- Each row uses a lag window of y (length L = window_length) and optional + *concurrent* exogenous X at the target timestamp. +- A row-wise normalization *strategy* can be supplied to map each (lags, target) + into a normalized space before model fitting. The same strategy is applied + at prediction time (per step), with inverse-transform to the original scale. + +Prediction (for requested horizon H): +- For steps 1..min(K, H): use the corresponding direct model h on the **observed** + lag window (no predicted values fed back yet). +- For steps K+1..H: continue recursively with the trained 1-step model, rolling + the window forward with its own predictions. +- Accepts either: + * An absolute MultiIndex fh (matching y’s id+time), or a simple time Index + if the training data was a single series. + * A relative FH/array of positive ints (applied to every series id). + +Normalization strategy API (efficient & flexible): +- Pass either: + 1) a **strategy**: a callable taking a `lags` vector and returning + `(transform, inverse)` functions; or + 2) a **factory**: a zero-arg callable that returns such a strategy. + 3) a **string** shortcut: one of {"divide_mean", "subtract_mean", + "normalize", "minmax"}. +- `transform(lags, target) -> (lags_n, target_n)`; `inverse(y_n) -> y`. + +Includes `mean_window_normalizer()` factory: divides by the lag-window mean. Notes ----- -- This is a brand-new implementation authored from scratch and not copied from - sktime or other libraries. It follows the sktime extension template. -- Scope is intentionally minimal: single series (no panel/global), point forecasts. +- Univariate target only (one column series per id). +- If X is used in fit, you must pass **future X rows** at all required timestamps + for prediction (for each id, and each requested timestamp). +- This is a from-scratch implementation; not copied from sktime or other libs. """ from __future__ import annotations -from typing import Callable, Iterable, List, Optional, Sequence, Tuple, Union +from functools import partial +from typing import Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Union import numpy as np import pandas as pd +from pandas.api.types import is_integer_dtype +from pandas.tseries.frequencies import to_offset from sklearn.base import clone, RegressorMixin from sktime.forecasting.base import BaseForecaster, ForecastingHorizon @@ -54,34 +63,213 @@ __all__ = [ "ReductionForecaster", "make_reduction", - "meanvar_window_normalizer", + "mean_window_normalizer", + "subtract_mean_normalizer", + "zscore_normalizer", + "minmax_normalizer", ] # --------------------------------------------------------------------------- -# utils (pure-python; no sktime private imports) +# Normalization strategy helpers # --------------------------------------------------------------------------- -# Type alias for normalization strategy: -# given a 1D window vector (lags), return (transform, inverse_transform) pair -# both functions operate on 1D ndarrays and must be shape-preserving. -NormStrategy = Optional[ - Callable[ - [np.ndarray], - Tuple[Callable[[np.ndarray], np.ndarray], Callable[[np.ndarray], np.ndarray]], - ] -] +def _mean_window_transform( + lags_in: np.ndarray, target: Optional[float], m: float +) -> Tuple[np.ndarray, Optional[float]]: + lags_arr = np.asarray(lags_in, dtype=float) + lags_n = lags_arr / m + tgt_n = None if target is None else float(target) / m + return lags_n, tgt_n + + +def _mean_window_inverse(y_n: float, m: float) -> float: + return float(y_n) * m + + +class MeanWindowNormalizer: + """Callable strategy that scales by the mean of each lag window.""" + + def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: + lags_arr = np.asarray(lags, dtype=float) + m = float(np.nanmean(lags_arr)) if lags_arr.size else 1.0 + if not np.isfinite(m) or abs(m) < 1e-12: + m = 1.0 + + transform = partial(_mean_window_transform, m=m) + inverse = partial(_mean_window_inverse, m=m) + return transform, inverse + + +def mean_window_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: + """Factory for a simple per-row normalizer: divide by window mean.""" + + return MeanWindowNormalizer() + + +def _subtract_mean_transform( + lags_in: np.ndarray, target: Optional[float], m: float +) -> Tuple[np.ndarray, Optional[float]]: + lags_arr = np.asarray(lags_in, dtype=float) + lags_n = lags_arr - m + tgt_n = None if target is None else float(target) - m + return lags_n, tgt_n + + +def _subtract_mean_inverse(y_n: float, m: float) -> float: + return float(y_n) + m + + +class SubtractMeanNormalizer: + """Center lag windows by subtracting the mean (per row).""" + + def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: + lags_arr = np.asarray(lags, dtype=float) + m = float(np.nanmean(lags_arr)) if lags_arr.size else 0.0 + if not np.isfinite(m): + m = 0.0 + + transform = partial(_subtract_mean_transform, m=m) + inverse = partial(_subtract_mean_inverse, m=m) + return transform, inverse + + +def subtract_mean_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: + """Factory for per-row mean subtraction.""" + + return SubtractMeanNormalizer() + + +def _zscore_transform( + lags_in: np.ndarray, target: Optional[float], m: float, s: float +) -> Tuple[np.ndarray, Optional[float]]: + lags_arr = np.asarray(lags_in, dtype=float) + lags_n = (lags_arr - m) / s + if target is None: + tgt_n = None + else: + tgt_n = (float(target) - m) / s + return lags_n, tgt_n + + +def _zscore_inverse(y_n: float, m: float, s: float) -> float: + return float(y_n) * s + m + + +class ZScoreNormalizer: + """Standardize lag windows using per-row mean and std.""" + + def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: + lags_arr = np.asarray(lags, dtype=float) + m = float(np.nanmean(lags_arr)) if lags_arr.size else 0.0 + if not np.isfinite(m): + m = 0.0 + s = float(np.nanstd(lags_arr, ddof=0)) if lags_arr.size else 1.0 + if not np.isfinite(s) or abs(s) < 1e-12: + s = 1.0 + + transform = partial(_zscore_transform, m=m, s=s) + inverse = partial(_zscore_inverse, m=m, s=s) + return transform, inverse + + +def zscore_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: + """Factory for per-row z-score standardization.""" -def _ensure_series(y: Union[pd.Series, pd.DataFrame]) -> pd.Series: - """Coerce y to a univariate Series (first column if DataFrame).""" - if isinstance(y, pd.Series): - return y - if isinstance(y, pd.DataFrame): - if y.shape[1] == 0: - raise ValueError("y DataFrame has no columns.") - return y.iloc[:, 0] - raise TypeError("y must be a pandas Series or DataFrame.") + return ZScoreNormalizer() + + +def _minmax_transform( + lags_in: np.ndarray, target: Optional[float], lo: float, hi: float, scale: float +) -> Tuple[np.ndarray, Optional[float]]: + lags_arr = np.asarray(lags_in, dtype=float) + lags_n = (lags_arr - lo) / scale + if target is None: + tgt_n = None + else: + tgt_n = (float(target) - lo) / scale + return lags_n, tgt_n + + +def _minmax_inverse(y_n: float, lo: float, scale: float) -> float: + return float(y_n) * scale + lo + + +class MinMaxNormalizer: + """Scale lag windows to [0, 1] range per row.""" + + def __call__(self, lags: np.ndarray) -> Tuple[Callable, Callable]: + lags_arr = np.asarray(lags, dtype=float) + if lags_arr.size: + lo = float(np.nanmin(lags_arr)) + hi = float(np.nanmax(lags_arr)) + else: + lo = 0.0 + hi = 1.0 + if not np.isfinite(lo): + lo = 0.0 + if not np.isfinite(hi): + hi = lo + 1.0 + + scale = hi - lo + if not np.isfinite(scale) or abs(scale) < 1e-12: + scale = 1.0 + + transform = partial(_minmax_transform, lo=lo, hi=hi, scale=scale) + inverse = partial(_minmax_inverse, lo=lo, scale=scale) + return transform, inverse + + +def minmax_normalizer() -> Callable[[np.ndarray], Tuple[Callable, Callable]]: + """Factory for per-row min-max scaling.""" + + return MinMaxNormalizer() + + +_NORMALIZATION_STRATEGY_REGISTRY = { + "divide_mean": mean_window_normalizer, + "subtract_mean": subtract_mean_normalizer, + "normalize": zscore_normalizer, + "minmax": minmax_normalizer, +} + + +def _resolve_normalization_strategy(ns): + """Accept either a factory (zero-arg) or a strategy (lags->(transform, inverse)).""" + if ns is None: + return None + if isinstance(ns, str): + key = ns.lower() + if key not in _NORMALIZATION_STRATEGY_REGISTRY: + options = sorted(_NORMALIZATION_STRATEGY_REGISTRY) + raise ValueError( + "Unknown normalization_strategy string. " + f"Expected one of {options}, got '{ns}'." + ) + ns = _NORMALIZATION_STRATEGY_REGISTRY[key] + try: + import inspect + + sig = inspect.signature(ns) + required = [ + p + for p in sig.parameters.values() + if p.kind in (p.POSITIONAL_ONLY, p.POSITIONAL_OR_KEYWORD) + and p.default is p.empty + ] + if len(required) == 0: + # zero-arg factory -> call it once to get the strategy + return ns() + except Exception: + # if introspection fails, just treat as already-a-strategy + pass + return ns + + +# --------------------------------------------------------------------------- +# utils (pure-python; no sktime private imports) +# --------------------------------------------------------------------------- def _check_regressor(estimator: RegressorMixin) -> None: @@ -128,11 +316,23 @@ def _future_index_like(idx: pd.Index, horizon: int) -> Tuple[pd.Index, bool]: raise ValueError("horizon must be >= 1.") if isinstance(idx, pd.DatetimeIndex): - freq = idx.freq or _infer_freq_from_index(idx) - if freq is not None: - start = idx[-1] + freq + raw_freq = idx.freq or _infer_freq_from_index(idx) + offset = None + if raw_freq is not None: + try: + offset = to_offset(raw_freq) + except (TypeError, ValueError): + offset = None + if offset is None and len(idx) >= 2: + step = idx[-1] - idx[-2] + try: + offset = to_offset(step) + except (TypeError, ValueError): + offset = None + if offset is not None: + start = idx[-1] + offset return ( - pd.date_range(start=start, periods=horizon, freq=freq, tz=idx.tz), + pd.date_range(start=start, periods=horizon, freq=offset, tz=idx.tz), True, ) return pd.RangeIndex(1, horizon + 1), False @@ -144,35 +344,77 @@ def _future_index_like(idx: pd.Index, horizon: int) -> Tuple[pd.Index, bool]: return pd.period_range(start=start, periods=horizon, freq=freq), True return pd.RangeIndex(1, horizon + 1), False - if isinstance( - idx, (pd.RangeIndex, pd.Int64Index, pd.UInt64Index, pd.Index) - ) and np.issubdtype(idx.dtype, np.integer): + if isinstance(idx, (pd.RangeIndex, pd.Index)) and is_integer_dtype(idx.dtype): start = idx[-1] + 1 return pd.RangeIndex(start, start + horizon), True return pd.RangeIndex(1, horizon + 1), False -def _build_supervised_table( +def _select_future_rows( + X_future: pd.DataFrame, idx: Union[pd.Index, pd.MultiIndex], allow_fill: bool = True +) -> pd.DataFrame: + """Select rows of X_future at index `idx`, optionally imputing missing rows.""" + if not isinstance(idx, (pd.Index, pd.MultiIndex)): + idx = pd.Index(idx) + + if not allow_fill: + missing = idx.difference(X_future.index) + if len(missing) > 0: + sample = list(missing[:3]) + raise ValueError( + "Missing required rows in X for forecast timestamps. " + f"Examples: {sample} (total missing: {len(missing)})." + ) + return X_future.loc[idx] + + X_aligned = X_future.reindex(idx) + if X_aligned.isnull().values.any(): + X_aligned = X_aligned.ffill().bfill() + + if X_aligned.isnull().values.any(): + missing_rows = X_aligned.index[X_aligned.isnull().any(axis=1)] + sample = list(missing_rows[:3]) + raise ValueError( + "Missing required rows in X for forecast timestamps even after fill. " + f"Examples: {sample} (total missing: {len(missing_rows)})." + ) + + return X_aligned + + +def _flatten_multiindex_to_time( + y_or_X: Union[pd.Series, pd.DataFrame], ids +) -> Union[pd.Series, pd.DataFrame]: + """Return object with *time-only* index for a specific ids tuple.""" + if isinstance(ids, tuple): + key = ids + else: + key = (ids,) + return y_or_X.xs(key, level=list(range(y_or_X.index.nlevels - 1))) + + +def _iter_series_groups(y: pd.Series): + """Yield (ids_tuple, y_single_series_with_time_index).""" + nlvls = y.index.nlevels + id_lvls = list(range(nlvls - 1)) + # keep order stable + group_level = id_lvls if len(id_lvls) != 1 else id_lvls[0] + for ids, y_g in y.groupby(level=group_level, sort=False): + if not isinstance(ids, tuple): + ids = (ids,) + y_flat = y_g.droplevel(id_lvls) + yield ids, y_flat + + +def _build_supervised_table_single( y: pd.Series, X: Optional[pd.DataFrame], window_length: int, steps_ahead: int, x_mode: str, - normalization_strategy: NormStrategy = None, ) -> Tuple[pd.DataFrame, pd.Series]: - """ - Turn (y, X) into (Xt, yt) for supervised learning for a single horizon. - - - Features: y lags [t, t-1, ..., t - window_length + 1] (most recent first) - - Target: y[t + steps_ahead] - - Exogenous concurrent: X at time t + steps_ahead (if used) - - Normalization: if `normalization_strategy` is provided, for each row: - * obtain (transform, inverse_transform) = normalization_strategy(y_lag_vector) - * replace lag features by transform(y_lag_vector) - * replace scalar target by transform([target])[0] - Note: X is *not* normalized. - """ + """Turn (y, X) into (Xt, yt) for one series and one horizon.""" if window_length < 1: raise ValueError("window_length must be >= 1.") if not isinstance(steps_ahead, int) or steps_ahead < 1: @@ -181,13 +423,6 @@ def _build_supervised_table( raise ValueError("x_mode must be one of {'none', 'concurrent', 'auto'}.") use_X = (X is not None) and (x_mode in ("concurrent", "auto")) - if use_X: - if not isinstance(X, pd.DataFrame): - raise TypeError("X must be a pandas DataFrame when provided.") - if not X.index.is_monotonic_increasing: - X = X.sort_index() - if not y.index.is_monotonic_increasing: - y = y.sort_index() values = y.to_numpy() n = len(values) @@ -204,43 +439,28 @@ def _build_supervised_table( targets = [] t_index = [] - x_cols = [] - if use_X: - x_cols = list(X.columns) - for t in range(window_length - 1, max_anchor + 1): - # y lags vector in the same order as features will be fed: [y_t, y_{t-1}, ...] + # lags y[t], y[t-1], ..., y[t-window_length+1] (newest first) lag_block = values[t : t - window_length : -1] if lag_block.shape[0] != window_length: - # safety for very early slices (rarely hit) lag_block = np.asarray( [values[t - i] for i in range(window_length)], dtype=float ) - y_feats = lag_block.astype(float).copy() - # target scalar at t + h + row = {f"y_lag_{i+1}": lag_block[i] for i in range(window_length)} target_time = y.index[t + steps_ahead] - y_target = float(values[t + steps_ahead]) - - # apply per-row normalization if requested - if normalization_strategy is not None: - tr, _inv = normalization_strategy(y_feats.copy()) - y_feats = np.asarray(tr(y_feats), dtype=float) - y_target = float(np.asarray(tr(np.array([y_target], dtype=float)))[0]) + y_target = values[t + steps_ahead] - # build row dict - row = {f"y_lag_{i+1}": y_feats[i] for i in range(window_length)} - - # append X (concurrent at target_time) without normalization if use_X: if target_time not in X.index: - for c in x_cols: + # Feature placeholder; user should ensure X completeness + for c in X.columns: row[f"X_{c}"] = np.nan else: xrow = X.loc[target_time] if isinstance(xrow, pd.DataFrame): xrow = xrow.iloc[0] - for c in x_cols: + for c in X.columns: row[f"X_{c}"] = xrow[c] rows.append(row) @@ -252,167 +472,223 @@ def _build_supervised_table( return Xt, yt -def _select_future_rows(X_future: pd.DataFrame, idx: pd.Index) -> pd.DataFrame: - """Select rows of X_future at index `idx`, raising error if any missing.""" - idx = pd.Index(idx) - missing = idx.difference(X_future.index) - if len(missing) > 0: - sample = list(missing[:3]) - raise ValueError( - "Missing required rows in X for forecast timestamps. " - f"Examples: {sample} (total missing: {len(missing)})." +def _build_supervised_table_global( + y: pd.Series, + X: Optional[pd.DataFrame], + window_length: int, + steps_ahead: int, + x_mode: str, +) -> Tuple[pd.DataFrame, pd.Series]: + """Supervised table across all ids for one horizon, stacked with MultiIndex index.""" + nlvls = y.index.nlevels + id_lvls = list(range(nlvls - 1)) + id_names = list(y.index.names[:-1]) + time_name = y.index.names[-1] + + Xt_list = [] + yt_list = [] + idx_list = [] + + # iterate ids + for ids, y_flat in _iter_series_groups(y): + X_flat = None + if X is not None: + X_flat = _flatten_multiindex_to_time(X, ids) + if not X_flat.index.is_monotonic_increasing: + X_flat = X_flat.sort_index() + if not y_flat.index.is_monotonic_increasing: + y_flat = y_flat.sort_index() + + Xt_g, yt_g = _build_supervised_table_single( + y=y_flat, + X=X_flat, + window_length=window_length, + steps_ahead=steps_ahead, + x_mode=x_mode, ) - return X_future.loc[idx] + # attach ids to index -> MultiIndex (ids..., time) + if len(ids) == 1: + new_index = pd.MultiIndex.from_arrays( + [[ids[0]] * len(Xt_g), Xt_g.index], + names=id_names + [time_name], + ) + else: + arrays = [[ids[j]] * len(Xt_g) for j in range(len(ids))] + arrays.append(list(Xt_g.index)) + new_index = pd.MultiIndex.from_arrays(arrays, names=id_names + [time_name]) -def _fh_to_absolute_index( - fh_like: Union[ForecastingHorizon, Sequence, pd.Index], - cutoff, - y_index: pd.Index, - steps: Optional[Sequence[int]] = None, - H: Optional[int] = None, -) -> pd.Index: - """ - Robustly coerce a forecasting horizon (absolute or relative) to a pandas Index. + Xt_g.index = new_index + yt_g.index = new_index - Tries multiple sktime FH APIs across versions, then falls back to constructing - a "future index like y_index". - """ - # If it's already a pandas Index, return it - if isinstance(fh_like, pd.Index): - return fh_like + Xt_list.append(Xt_g) + yt_list.append(yt_g) - # If it's not an FH, try to coerce directly - if not isinstance(fh_like, ForecastingHorizon): - try: - return pd.Index(fh_like) - except Exception: - pass # fall through to robust fallback + Xt_all = pd.concat(Xt_list, axis=0) + yt_all = pd.concat(yt_list, axis=0) - # From here treat as ForecastingHorizon - fh_obj = ( - fh_like - if isinstance(fh_like, ForecastingHorizon) - else ForecastingHorizon(fh_like) - ) + return Xt_all.sort_index(), yt_all.sort_index() - # 1) Preferred: to_absolute_index(cutoff) - m = getattr(fh_obj, "to_absolute_index", None) - if callable(m): - try: - return m(cutoff) - except Exception: - pass - # 2) Some versions: to_pandas_index() if already absolute - m = getattr(fh_obj, "to_pandas_index", None) - if callable(m): - try: - idx = m() - if isinstance(idx, pd.Index): - return idx - except Exception: - pass +def _normalize_supervised_rowwise( + Xt: pd.DataFrame, + yt: pd.Series, + L: int, + normalization_strategy: Optional[Callable[[np.ndarray], Tuple[Callable, Callable]]], +) -> Tuple[pd.DataFrame, pd.Series]: + """Apply per-row normalization to (y-lags, target).""" + if normalization_strategy is None: + return Xt, yt + + Xt_out = Xt.copy() + yt_out = yt.astype(float, copy=True) + lag_cols = [f"y_lag_{i+1}" for i in range(L)] + lag_idx = [Xt_out.columns.get_loc(col) for col in lag_cols] + + for i in range(len(Xt_out)): + lags = Xt_out.iloc[i, lag_idx].to_numpy(dtype=float) + target_value = yt_out.iloc[i] + transform, _ = normalization_strategy(lags) # per-window + lags_n, tgt_n = transform(lags, target_value) + Xt_out.iloc[i, lag_idx] = lags_n + if tgt_n is not None: + yt_out.iloc[i] = float(tgt_n) + + return Xt_out, yt_out + + +def _make_group_future_multiindex( + ids: Tuple, future_time_index: pd.Index, id_names: List[str], time_name: str +) -> pd.MultiIndex: + """Build a MultiIndex combining ids (tuple) and per-group future time index.""" + arrays = [[ids[j]] * len(future_time_index) for j in range(len(ids))] + arrays.append(list(future_time_index)) + return pd.MultiIndex.from_arrays(arrays, names=id_names + [time_name]) + + +def _steps_and_full_future_for_group( + train_time_index: pd.Index, + req_times: Optional[pd.Index] = None, + rel_steps: Optional[np.ndarray] = None, +) -> Tuple[pd.Index, Optional[np.ndarray]]: + """Return full future index for the group, and (if req_times) positions for them.""" + if req_times is not None: + last_t = train_time_index[-1] + max_t = pd.Index(req_times).max() + + if isinstance(train_time_index, pd.DatetimeIndex): + raw_freq = train_time_index.freq or _infer_freq_from_index(train_time_index) + offset = None + if raw_freq is not None: + try: + offset = to_offset(raw_freq) + except (TypeError, ValueError): + offset = None + if offset is None: + inferred = pd.infer_freq(train_time_index) + try: + offset = to_offset(inferred) + except (TypeError, ValueError): + offset = None + if offset is None: + if len(train_time_index) >= 2: + step = train_time_index[-1] - train_time_index[-2] + try: + offset = to_offset(step) + except (TypeError, ValueError): + offset = None + if offset is None: + return pd.Index([]), np.array([], dtype=int) + rng = pd.date_range( + start=last_t + offset, + end=max_t, + freq=offset, + tz=train_time_index.tz, + ) + H = len(rng) + full_future = pd.date_range( + start=last_t + offset, + periods=H if H > 0 else 0, + freq=offset, + tz=train_time_index.tz, + ) + elif isinstance(train_time_index, pd.PeriodIndex): + freq = train_time_index.freq + rng = pd.period_range(start=last_t + 1, end=max_t, freq=freq) + H = len(rng) + full_future = pd.period_range( + start=last_t + 1, periods=H if H > 0 else 0, freq=freq + ) + elif is_integer_dtype(train_time_index.dtype): + H = int(max_t - last_t) + full_future = pd.RangeIndex(last_t + 1, last_t + 1 + max(H, 0)) + else: + req_times_sorted = pd.Index(req_times).sort_values() + H = len(req_times_sorted) + full_future = pd.RangeIndex(1, H + 1) - # 3) Try going to absolute first, then 1) and 2) - try: - abs_fh = fh_obj.to_absolute(cutoff) - m = getattr(abs_fh, "to_absolute_index", None) - if callable(m): - try: - return m(cutoff) - except Exception: - pass - m = getattr(abs_fh, "to_pandas_index", None) - if callable(m): - try: - idx = m() - if isinstance(idx, pd.Index): - return idx - except Exception: - pass - # If abs_fh itself is index-like - if not isinstance(abs_fh, ForecastingHorizon): - try: - return pd.Index(abs_fh) - except Exception: - pass - except Exception: - pass + if H == 0: + return pd.Index([]), np.array([], dtype=int) + + if isinstance(full_future, pd.RangeIndex) and not np.issubdtype( + train_time_index.dtype, np.integer + ): + req_sorted = pd.Index(req_times).sort_values() + pos_map = {req_sorted[i]: i + 1 for i in range(len(req_sorted))} + steps = np.asarray([pos_map[t] for t in req_times], dtype=int) + else: + pos = pd.Index(full_future).get_indexer(pd.Index(req_times)) + if np.any(pos < 0): + bad = list(pd.Index(req_times)[pos < 0][:3]) + raise ValueError( + "Requested times are not aligned with training frequency for a group. " + f"Examples: {bad}" + ) + steps = pos.astype(int) + 1 # 1-based + + return full_future, steps + + # relative steps path + if rel_steps is None or len(rel_steps) == 0: + raise ValueError("Either req_times or rel_steps must be provided.") + H = int(np.max(rel_steps)) + full_future, _ = _future_index_like(train_time_index, H) + return pd.Index(full_future), None - # 4) Last resort: synthesize using y_index's cadence - if steps is not None: - steps = np.asarray(steps, dtype=int).reshape(-1) - H_ = int(np.max(steps)) - else: - H_ = int(H if H is not None else len(fh_obj)) - steps = np.arange(1, H_ + 1, dtype=int) - full_future, _ = _future_index_like(y_index, H_) - return pd.Index([full_future[h - 1] for h in steps]) +def _union_indices(indices: List[pd.Index]) -> pd.Index: + """Safe union for both Index and MultiIndex without relying on union_many.""" + if not indices: + return pd.Index([]) + u = indices[0] + for ix in indices[1:]: + u = u.union(ix) + return u # --------------------------------------------------------------------------- -# The forecaster +# The global forecaster # --------------------------------------------------------------------------- class ReductionForecaster(BaseForecaster): - """Hybrid reduction forecaster: K-step direct + recursive continuation. - - Trains **steps_ahead = K** separate direct models for horizons 1..K using a - lag window from ``y`` (and optional *concurrent* exogenous ``X`` at each - target timestamp). For a requested forecast horizon H: - - - For steps 1..min(K, H): use the corresponding direct model h to predict y[h] - from the *same observed* lag window (no predicted values fed back here). - - If H > K: continue with **recursive** one-step predictions, starting from the - observed lag window rolled forward by the K *direct* predictions, and use the - trained 1-step model repeatedly. - - Normalization strategy - ---------------------- - The optional ``normalization_strategy`` is a callable that receives the - **current y-lag window** (1D ndarray in feature order: [y_t, y_{t-1}, ...]) and - returns a pair of functions ``(transform, inverse_transform)``, both operating on - 1D ndarrays. In training, for each supervised row, we fit this per-window - normalizer on the y-lag vector, transform the lags **and** the scalar target, - train models in the normalized space, and in prediction we inverse-transform each - predicted scalar immediately back to the original y-scale. - - Parameters - ---------- - estimator : sklearn-style regressor - Any object with `fit(X, y)` and `predict(X)` methods. - window_length : int, default=10 - Number of past observations to use as lags. - steps_ahead : int, default=1 - Number of direct heads (K). K=1 recovers pure recursive reduction. - x_mode : {"auto","none","concurrent"}, default="auto" - - "none": ignore X even if provided - - "concurrent": use X at the **target** timestamps in `fit`, and the - future timestamps in `predict` - - "auto": behaves like "concurrent" if X is provided else "none" - impute_missing : {"ffill","bfill",None}, default="bfill" - Optional imputation applied to `y` **before** windowing. - If None, NaNs are left as-is (your estimator must handle them). - normalization_strategy : callable or None, default=None - Function ``f(window_1d) -> (transform, inverse_transform)``. If None, no - normalization is applied. - - Notes - ----- - - Univariate series only (single variable). - - If X is used in fit, you must pass future X at *all* required forecast - timestamps to `predict`. + """Global hybrid reduction forecaster: K-step direct + recursive continuation. + + Trains **steps_ahead = K** separate direct models for horizons 1..K on pooled + (possibly hierarchical) data, using a lag window from ``y`` (and optional + *concurrent* exogenous ``X`` at each target timestamp). For each series id, + requested predictions beyond K steps are produced recursively using the + 1-step model. + + This class works with **either** a single time series (simple time index) **or** + MultiIndex/Hierarchical data (id levels + time). """ - # -------------------- sktime estimator tags -------------------- _tags = { - # inner mtypes - "y_inner_mtype": "pd.Series", - "X_inner_mtype": "pd.DataFrame", - # univariate only + # accept single series AND hierarchical / multiindex series + "y_inner_mtype": ["pd.Series", "pd-multiindex", "pd_multiindex_hier"], + "X_inner_mtype": ["pd.DataFrame", "pd-multiindex", "pd_multiindex_hier"], + # univariate target "scitype:y": "univariate", # exogenous supported "capability:exogenous": True, @@ -422,66 +698,140 @@ class ReductionForecaster(BaseForecaster): "X-y-must-have-same-index": True, # index type unrestricted "enforce_index_type": None, - # we don't guarantee missing handling in general (y can be imputed) + # missing values: we don't guarantee generic handling (y can be imputed) "capability:missing_values": False, - # only strictly out-of-sample fh supported (positive relative steps) + # strictly oos steps "capability:insample": False, - # no probabilistic output + # no probabilistic output in this implementation "capability:pred_int": False, - # soft dependency on sklearn (sktime tag uses the import name) + # soft dependency on scikit-learn "python_dependencies": "scikit-learn", } - # -------------------- constructor signature -------------------- def __init__( self, estimator: RegressorMixin, window_length: int = 10, steps_ahead: int = 1, + normalization_strategy: Optional[ + Union[str, Callable[[np.ndarray], Tuple[Callable, Callable]]] + ] = None, x_mode: str = "auto", impute_missing: Optional[str] = "bfill", - normalization_strategy: NormStrategy = None, ): - # components / hyper-params + # hyper-params self.estimator = estimator self.window_length = int(window_length) self.steps_ahead = int(steps_ahead) + self.normalization_strategy = normalization_strategy self.x_mode = x_mode self.impute_missing = impute_missing - self.normalization_strategy = normalization_strategy super().__init__() if self.steps_ahead < 1: raise ValueError("steps_ahead must be a positive integer.") - if (self.normalization_strategy is not None) and ( - not callable(self.normalization_strategy) - ): - raise TypeError("normalization_strategy must be a callable or None.") - # learned attributes (set in _fit) + # learned attributes self._dir_estimators_: Optional[List[RegressorMixin]] = None - self._estimator_: Optional[RegressorMixin] = None # alias: 1-step model + self._estimator_: Optional[RegressorMixin] = None # 1-step model shortcut self._x_used_: bool = False self._x_columns_: Optional[List[str]] = None - self._last_window_: Optional[np.ndarray] = None - self._y_train_index_: Optional[pd.Index] = None - self._y_name_: Optional[str] = None + + # per-group rolling state + self._last_windows_: Optional[Dict[Tuple, np.ndarray]] = ( + None # ids -> window (old..new) + ) + self._train_time_index_: Optional[Dict[Tuple, pd.Index]] = ( + None # ids -> time index + ) + self._ids_: Optional[List[Tuple]] = None # list of ids tuples in fit order + + # index naming + self._id_names_: Optional[List[str]] = None + self._time_name_: Optional[str] = None + self._was_single_series_: bool = False + self._single_id_value_: str = "__singleton__" + self._single_id_name_: str = "id" + + # for update/refit bookkeeping self._y_train_: Optional[pd.Series] = None self._X_train_: Optional[pd.DataFrame] = None + self._norm_strategy_: Optional[ + Callable[[np.ndarray], Tuple[Callable, Callable]] + ] = None + self._y_name_: Optional[str] = None + self._y_is_dataframe_: bool = False + self._y_column_name_: Optional[str] = None - # -------------------- fit logic -------------------- + # -------------------- fit -------------------- def _fit( self, y: pd.Series, X: Optional[pd.DataFrame], fh: Optional[ForecastingHorizon] ): - """Fit forecaster to training data (private core, called by BaseForecaster).""" + """Fit the global forecaster to (possibly hierarchical or single) training data.""" _check_regressor(self.estimator) - y = _ensure_series(y).copy() + self._y_is_dataframe_ = isinstance(y, pd.DataFrame) + if isinstance(y, pd.DataFrame): + if y.shape[1] != 1: + raise ValueError( + "ReductionForecaster supports univariate targets only." + ) + col_name = y.columns[0] + y = y.iloc[:, 0].copy() + y.name = col_name + self._y_column_name_ = col_name + else: + self._y_column_name_ = y.name + + # detect single series and coerce to MultiIndex internally + if isinstance(y.index, pd.MultiIndex) and y.index.nlevels >= 2: + self._was_single_series_ = False + y_mi = y.copy() + if X is not None: + if isinstance(X.index, pd.MultiIndex): + X_mi = X.copy() + else: + raise TypeError( + "X must have a MultiIndex to match y's MultiIndex in fit." + ) + else: + X_mi = None + else: + # single series -> wrap to MultiIndex with one id level + self._was_single_series_ = True + time_name = y.index.name if y.index.name is not None else "time" + id_name = self._single_id_name_ + id_val = self._single_id_value_ + y_mi = y.copy() + y_mi.index = pd.MultiIndex.from_arrays( + [[id_val] * len(y_mi), y_mi.index], names=[id_name, time_name] + ) + if X is not None: + if isinstance(X.index, pd.MultiIndex): + raise TypeError( + "For single-series fit, X should have a simple time index." + ) + X_mi = X.copy() + X_mi.index = pd.MultiIndex.from_arrays( + [[id_val] * len(X_mi), X_mi.index], names=[id_name, time_name] + ) + else: + X_mi = None + + y = y_mi + X = X_mi + + # store names + self._id_names_ = list(y.index.names[:-1]) + self._time_name_ = y.index.names[-1] + self._y_name_ = y.name # basic imputation on y - if self.impute_missing in ("ffill", "bfill"): - y = y.fillna(method=self.impute_missing) + if self.impute_missing == "ffill": + y = y.ffill() + elif self.impute_missing == "bfill": + y = y.bfill() elif self.impute_missing is not None: raise ValueError("impute_missing must be 'ffill', 'bfill', or None.") @@ -490,275 +840,445 @@ def _fit( if x_mode == "auto": x_mode = "concurrent" if X is not None else "none" - # fit K direct heads (1..steps_ahead) + # resolve normalization strategy (allow factory or strategy) + self._norm_strategy_ = _resolve_normalization_strategy( + self.normalization_strategy + ) + + # fit K direct heads using pooled data dir_estimators: List[RegressorMixin] = [] for h in range(1, self.steps_ahead + 1): - Xt_h, yt_h = _build_supervised_table( + Xt_h_all, yt_h_all = _build_supervised_table_global( y=y, X=X, window_length=self.window_length, steps_ahead=h, x_mode=x_mode, - normalization_strategy=self.normalization_strategy, ) + # remember X columns (consistency check at predict) + if self._x_columns_ is None and X is not None and X.shape[1] > 0: + self._x_columns_ = list(X.columns) + + # row-wise normalization on lags & target + Xt_h_all_n, yt_h_all_n = _normalize_supervised_rowwise( + Xt_h_all, yt_h_all, self.window_length, self._norm_strategy_ + ) + est_h = clone(self.estimator) - est_h.fit(Xt_h.values, yt_h.values) + est_h.fit(Xt_h_all_n.values, yt_h_all_n.values) dir_estimators.append(est_h) # learned state self._dir_estimators_ = dir_estimators - self._estimator_ = dir_estimators[0] # 1-step model + self._estimator_ = dir_estimators[0] self._x_used_ = (x_mode == "concurrent") and (X is not None) - self._x_columns_ = list(X.columns) if (X is not None) else None - self._y_train_index_ = y.index - self._y_name_ = y.name - # bootstrap last window for recursion (stored oldest->newest, as y.iloc preserves) - last = y.iloc[-self.window_length :].to_numpy() - if len(last) != self.window_length: - raise ValueError( - "Not enough observations to form last window. " - f"Need window_length={self.window_length}, got {len(y)}." - ) - self._last_window_ = last.astype(float).reshape(-1) + # store per-group last window and time indices + last_windows = {} + time_idx_map = {} + ids_list = [] + for ids, y_flat in _iter_series_groups(y): + ids_list.append(ids) + if not y_flat.index.is_monotonic_increasing: + y_flat = y_flat.sort_index() + time_idx_map[ids] = y_flat.index + last = y_flat.iloc[-self.window_length :].to_numpy() + if len(last) != self.window_length: + raise ValueError( + f"Group {ids}: not enough observations for last window. " + f"Need window_length={self.window_length}, got {len(y_flat)}." + ) + last_windows[ids] = last.astype(float).reshape(-1) - # store training series for optional updates + self._last_windows_ = last_windows + self._train_time_index_ = time_idx_map + self._ids_ = ids_list + + # store training for potential refit in update self._y_train_ = y.copy() self._X_train_ = X.copy() if X is not None else None return self - # -------------------- predict logic -------------------- + # -------------------- predict -------------------- def _predict( - self, fh: ForecastingHorizon, X: Optional[pd.DataFrame] = None + self, + fh: Union[ForecastingHorizon, Sequence, pd.Index, pd.MultiIndex], + X: Optional[pd.DataFrame] = None, ) -> pd.Series: - """Forecast time series at future horizon (private core, called by BaseForecaster).""" + """Forecast pooled multi-series or a single series at future horizon.""" if ( self._estimator_ is None - or self._last_window_ is None + or self._last_windows_ is None or self._dir_estimators_ is None + or self._train_time_index_ is None + or self._ids_ is None ): raise RuntimeError("Call fit(...) before predict(...).") - # relative steps (strictly positive due to tag capability:insample=False) - rel = fh.to_relative(self.cutoff) - rel_steps = np.asarray(rel, dtype=int).reshape(-1) - pos_steps = _as_positive_int_fh(rel_steps) - H = int(pos_steps.max()) - - # build absolute indexes robustly (supports various sktime versions) - all_rel = ForecastingHorizon(np.arange(1, H + 1, dtype=int), is_relative=True) - abs_all_like = all_rel.to_absolute(self.cutoff) - abs_all_idx = _fh_to_absolute_index( - abs_all_like, cutoff=self.cutoff, y_index=self._y_train_index_, H=H - ) - - abs_req_like = fh.to_absolute(self.cutoff) - abs_req_idx = _fh_to_absolute_index( - abs_req_like, - cutoff=self.cutoff, - y_index=self._y_train_index_, - steps=rel_steps, - H=H, - ) + # determine fh mode + mode_abs_multi = isinstance(fh, pd.MultiIndex) + mode_abs_single = isinstance(fh, pd.Index) and not isinstance(fh, pd.MultiIndex) + mode_rel = False + + req_steps_all: Optional[np.ndarray] = None + if not (mode_abs_multi or mode_abs_single): + # FH object or array-like of relative ints + if isinstance(fh, ForecastingHorizon): + rel = fh.to_relative(self.cutoff) + req_steps_all = _as_positive_int_fh(np.asarray(rel, dtype=int)) + else: + # try array-like relative ints + arr = np.asarray(fh) + req_steps_all = _as_positive_int_fh(arr) + mode_rel = True + + if mode_abs_single and not self._was_single_series_: + raise TypeError( + "Absolute fh as a simple Index is only valid when the model was fit " + "on a single series. For multi-series, pass a MultiIndex fh." + ) - # if X was used in fit, we need concurrent X for *all* 1..H steps + # prepare exogenous usage if self._x_used_: if X is None: raise ValueError( "This model was fit with exogenous variables. " "Provide X with rows for all required forecast timestamps." ) - if not isinstance(X, pd.DataFrame): - raise TypeError( - "X must be a pandas DataFrame when provided to predict." - ) - if not X.index.is_monotonic_increasing: - X = X.sort_index() - - X_all = _select_future_rows(X, abs_all_idx) if self._x_columns_ is not None: - missing_cols = [c for c in self._x_columns_ if c not in X_all.columns] - if missing_cols: + missing = [c for c in self._x_columns_ if c not in X.columns] + if missing: raise ValueError( - f"X is missing columns seen in training: {missing_cols}" + f"X is missing columns seen in training: {missing}" ) - X_all = X_all[self._x_columns_] - X_block = X_all.to_numpy() - else: - X_block = None + # shape validation + if self._was_single_series_: + if isinstance(X.index, pd.MultiIndex): + raise TypeError( + "For single-series prediction, X should have a simple time index." + ) + else: + if not isinstance(X.index, pd.MultiIndex): + raise TypeError( + "For multi-series prediction, X must have a MultiIndex index." + ) + # order X columns to match training + if self._x_columns_ is not None: + X = X[self._x_columns_] - preds = np.zeros(H, dtype=float) + out_series: List[pd.Series] = [] - # ----- Direct part (1..min(K, H)) using *observed* window only ----- - K = min(self.steps_ahead, H) - last_obs = self._last_window_.copy() # oldest -> newest - for i in range(1, K + 1): - # features in model order: most recent first - y_feats = last_obs[::-1] # y_lag_1 := most recent true observation + K = self.steps_ahead - # per-step normalization (fit on current window) - if self.normalization_strategy is not None: - tr, inv = self.normalization_strategy(y_feats.copy()) - y_feats_n = np.asarray(tr(y_feats), dtype=float) - else: - # identity mapping - y_feats_n = y_feats - inv = lambda a: a # noqa: E731 + for ids in self._ids_: + time_idx_train = self._train_time_index_[ids] - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) + # determine requested times/steps for this ids + if mode_abs_multi: + try: + req_times = fh.xs(ids, level=list(range(fh.nlevels - 1))) + req_times = pd.Index(req_times) + except Exception: + req_times = pd.Index([]) + full_future, steps_for_req = _steps_and_full_future_for_group( + time_idx_train, req_times=req_times + ) + if len(full_future) == 0 and len(req_times) == 0: + continue + H = len(full_future) + pos_req = steps_for_req # 1-based + elif mode_abs_single: + # single series: use the provided absolute time Index for the lone ids + req_times = pd.Index(fh) + full_future, steps_for_req = _steps_and_full_future_for_group( + time_idx_train, req_times=req_times + ) + if len(full_future) == 0 and len(req_times) == 0: + continue + H = len(full_future) + pos_req = steps_for_req else: - row = y_feats_n + # relative steps (common to all ids) + assert req_steps_all is not None + H = int(np.max(req_steps_all)) + full_future, _ = _steps_and_full_future_for_group( + time_idx_train, rel_steps=req_steps_all + ) + pos_req = req_steps_all - yhat_norm = float( - np.asarray( - self._dir_estimators_[i - 1].predict(row.reshape(1, -1)) - ).ravel()[0] - ) - # map back to original scale - yhat = float(np.asarray(inv(np.array([yhat_norm], dtype=float)))[0]) - preds[i - 1] = yhat - - # ----- Prepare rolling state after K direct steps ----- - last_roll = self._last_window_.copy() - for i in range(1, K + 1): - last_roll = np.roll(last_roll, -1) - last_roll[-1] = preds[i - 1] - - # ----- Recursive continuation (K+1..H) using 1-step model ----- - for i in range(K + 1, H + 1): - y_feats = last_roll[::-1] - - if self.normalization_strategy is not None: - tr, inv = self.normalization_strategy(y_feats.copy()) - y_feats_n = np.asarray(tr(y_feats), dtype=float) - else: - y_feats_n = y_feats - inv = lambda a: a # noqa: E731 + # prepare exogenous block for this group's full future horizon + X_block = None + if self._x_used_: + if self._was_single_series_: + X_needed = _select_future_rows(X, full_future) + X_block = X_needed.to_numpy() + else: + group_future_index = _make_group_future_multiindex( + ids, full_future, self._id_names_, self._time_name_ + ) + X_needed = _select_future_rows(X, group_future_index) + X_block = X_needed.to_numpy() + + # predictions for steps 1..H + preds = np.zeros(H, dtype=float) + + # direct part + last_obs = self._last_windows_[ids].copy() # chronological old..new + for i in range(1, min(K, H) + 1): + y_feats = last_obs[::-1] # newest first to match training + if self._norm_strategy_ is not None: + transform, inv = self._norm_strategy_(y_feats) + y_feats_n, _ = transform(y_feats, None) + else: + y_feats_n = y_feats + inv = lambda v: float(v) + + if X_block is not None: + row = np.concatenate([y_feats_n, X_block[i - 1]]) + else: + row = y_feats_n + + yhat_n = float( + np.asarray( + self._dir_estimators_[i - 1].predict(row.reshape(1, -1)) + ).ravel()[0] + ) + yhat = inv(yhat_n) + preds[i - 1] = yhat + + # rolling state after K direct preds + last_roll = self._last_windows_[ids].copy() + for i in range(1, min(K, H) + 1): + last_roll = np.roll(last_roll, -1) + last_roll[-1] = preds[i - 1] + + # recursive part + for i in range(K + 1, H + 1): + y_feats = last_roll[::-1] + if self._norm_strategy_ is not None: + transform, inv = self._norm_strategy_(y_feats) + y_feats_n, _ = transform(y_feats, None) + else: + y_feats_n = y_feats + inv = lambda v: float(v) + + if X_block is not None: + row = np.concatenate([y_feats_n, X_block[i - 1]]) + else: + row = y_feats_n + + yhat_n = float( + np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] + ) + yhat = inv(yhat_n) + preds[i - 1] = yhat + + # roll forward with *original-scale* prediction + last_roll = np.roll(last_roll, -1) + last_roll[-1] = yhat - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) + # subset to requested steps for this ids and append to output + steps = np.asarray(pos_req, dtype=int) + sel = preds[steps - 1] + + if mode_abs_multi: + idx = _make_group_future_multiindex( + ids, full_future[steps - 1], self._id_names_, self._time_name_ + ) + elif mode_abs_single or (mode_rel and self._was_single_series_): + idx = pd.Index(full_future[steps - 1], name=self._time_name_) else: - row = y_feats_n + idx = _make_group_future_multiindex( + ids, full_future[steps - 1], self._id_names_, self._time_name_ + ) - yhat_norm = float( - np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] - ) - yhat = float(np.asarray(inv(np.array([yhat_norm], dtype=float)))[0]) + out_series.append(pd.Series(sel, index=idx, name=self._y_name_)) - preds[i - 1] = yhat - last_roll = np.roll(last_roll, -1) - last_roll[-1] = yhat + if len(out_series) == 0: + # No requested rows (e.g., fh had no times beyond training) -> empty series + return pd.Series([], dtype=float, name=self._y_name_) - # assemble Series for all 1..H steps, then subset to requested fh - y_all = pd.Series( - preds, - index=abs_all_idx, - name=self._y_name_ if self._y_name_ is not None else "y", - ) - y_req = y_all.reindex(abs_req_idx) - return y_req + # Assemble output + y_pred = pd.concat(out_series) + + # preserve the order of the provided absolute fh if given + if mode_abs_multi: + y_pred = y_pred.reindex(fh) + elif mode_abs_single: + y_pred = y_pred.reindex(pd.Index(fh)) + else: + y_pred = y_pred.sort_index() + + if self._y_is_dataframe_: + col_name = self._y_column_name_ or self._y_name_ or "y" + return y_pred.to_frame(name=col_name) - # -------------------- optional: update logic -------------------- + return y_pred + + # -------------------- update -------------------- def _update( self, y: pd.Series, X: Optional[pd.DataFrame] = None, update_params: bool = True ): - """Update forecaster with new data. If update_params=True, refit; else only roll window.""" + """Update rolling windows; refit on appended data if `update_params=True`.""" if ( self._estimator_ is None - or self._last_window_ is None + or self._last_windows_ is None or self._dir_estimators_ is None + or self._train_time_index_ is None + or self._ids_ is None ): raise RuntimeError("Call fit(...) before update(...).") - y = _ensure_series(y) - if len(y) == 0: + if y is None or len(y) == 0: return self - # roll last window with the new y values - new_vals = y.to_numpy().astype(float).reshape(-1) - if len(new_vals) >= self.window_length: - self._last_window_ = new_vals[-self.window_length :] - else: - rolled = np.roll(self._last_window_, -len(new_vals)) - rolled[-len(new_vals) :] = new_vals - self._last_window_ = rolled - - # refit if requested - if update_params: - # append to stored training data and refit from scratch (simple & robust) - y_full = pd.concat([self._y_train_, y]) - X_full = None - if self._X_train_ is not None: - if X is None: - raise ValueError( - "This model was originally fit with X; update with matching X." - ) - X_full = pd.concat([self._X_train_, X]).sort_index() - - _check_regressor(self.estimator) + if isinstance(y, pd.DataFrame): + if y.shape[1] != 1: + raise ValueError( + "ReductionForecaster update expects a single target column." + ) + col_name = y.columns[0] + y = y.iloc[:, 0].copy() + y.name = col_name + + # Coerce y (and X) to the internal MultiIndex shape if needed + if self._was_single_series_: + time_name = self._time_name_ or "time" + id_name = self._id_names_[0] if self._id_names_ else self._single_id_name_ + id_val = self._single_id_value_ + if not isinstance(y.index, pd.MultiIndex): + y = y.copy() + y.index = pd.MultiIndex.from_arrays( + [[id_val] * len(y), y.index], names=[id_name, time_name] + ) + if X is not None and not isinstance(X.index, pd.MultiIndex): + X = X.copy() + X.index = pd.MultiIndex.from_arrays( + [[id_val] * len(X), X.index], names=[id_name, time_name] + ) - # impute like in fit - if self.impute_missing in ("ffill", "bfill"): - y_imp = y_full.fillna(method=self.impute_missing) + # roll last windows for groups present in y + for ids, y_flat in _iter_series_groups(y): + new_vals = y_flat.to_numpy(dtype=float).reshape(-1) + if len(new_vals) == 0: + continue + if len(new_vals) >= self.window_length: + self._last_windows_[ids] = new_vals[-self.window_length :] + else: + rolled = np.roll(self._last_windows_[ids], -len(new_vals)) + rolled[-len(new_vals) :] = new_vals + self._last_windows_[ids] = rolled + # update stored time index for the group + existing_index = self._train_time_index_[ids] + new_index = y_flat.index + if isinstance(existing_index, pd.DatetimeIndex): + combined = existing_index.append(pd.DatetimeIndex(new_index)) + elif isinstance(existing_index, pd.PeriodIndex): + combined = existing_index.append( + pd.PeriodIndex(new_index, freq=existing_index.freq) + ) else: - y_imp = y_full.copy() - - x_mode = self.x_mode - if x_mode == "auto": - x_mode = "concurrent" if X_full is not None else "none" - - # refit K heads - dir_estimators: List[RegressorMixin] = [] - for h in range(1, self.steps_ahead + 1): - Xt_h, yt_h = _build_supervised_table( - y=y_imp, - X=X_full, - window_length=self.window_length, - steps_ahead=h, - x_mode=x_mode, - normalization_strategy=self.normalization_strategy, + combined = existing_index.append(pd.Index(new_index)) + + if not combined.is_monotonic_increasing: + combined = combined.sort_values() + + self._train_time_index_[ids] = combined + + if not update_params: + return self + + # Refit from scratch on concatenated data (simple & robust) + y_full = pd.concat([self._y_train_, y]).sort_index() + X_full = None + if self._X_train_ is not None or X is not None: + if (self._X_train_ is not None) and (X is None): + raise ValueError( + "This model was originally fit with X; update requires matching X." ) - est_h = clone(self.estimator) - est_h.fit(Xt_h.values, yt_h.values) - dir_estimators.append(est_h) - - # update learned state - self._dir_estimators_ = dir_estimators - self._estimator_ = dir_estimators[0] - self._x_used_ = (x_mode == "concurrent") and (X_full is not None) - self._x_columns_ = list(X_full.columns) if (X_full is not None) else None - self._y_train_index_ = y_full.index - self._y_name_ = y_full.name - self._y_train_ = y_full.copy() - self._X_train_ = X_full.copy() if X_full is not None else None - - # refresh last window from y_full - last = y_imp.iloc[-self.window_length :].to_numpy() - self._last_window_ = last.astype(float).reshape(-1) + X_full = pd.concat([self._X_train_, X]).sort_index() + + _check_regressor(self.estimator) + + # impute like in fit + if self.impute_missing == "ffill": + y_imp = y_full.ffill() + elif self.impute_missing == "bfill": + y_imp = y_full.bfill() + else: + y_imp = y_full.copy() + + x_mode = self.x_mode + if x_mode == "auto": + x_mode = "concurrent" if X_full is not None else "none" + + dir_estimators: List[RegressorMixin] = [] + for h in range(1, self.steps_ahead + 1): + Xt_h_all, yt_h_all = _build_supervised_table_global( + y=y_imp, + X=X_full, + window_length=self.window_length, + steps_ahead=h, + x_mode=x_mode, + ) + Xt_h_all_n, yt_h_all_n = _normalize_supervised_rowwise( + Xt_h_all, yt_h_all, self.window_length, self._norm_strategy_ + ) + est_h = clone(self.estimator) + est_h.fit(Xt_h_all_n.values, yt_h_all_n.values) + dir_estimators.append(est_h) + + # update learned state + self._dir_estimators_ = dir_estimators + self._estimator_ = dir_estimators[0] + self._x_used_ = (x_mode == "concurrent") and (X_full is not None) + self._x_columns_ = ( + list(X_full.columns) if (X_full is not None) else self._x_columns_ + ) + + # refresh per-group windows and time index maps from y_imp + last_windows = {} + time_idx_map = {} + ids_list = [] + for ids, y_flat in _iter_series_groups(y_imp): + ids_list.append(ids) + if not y_flat.index.is_monotonic_increasing: + y_flat = y_flat.sort_index() + time_idx_map[ids] = y_flat.index + last = y_flat.iloc[-self.window_length :].to_numpy() + last_windows[ids] = last.astype(float).reshape(-1) + self._last_windows_ = last_windows + self._train_time_index_ = time_idx_map + self._ids_ = ids_list + + # store full data for potential next update + self._y_train_ = y_full.copy() + self._X_train_ = X_full.copy() if X_full is not None else None return self - # -------------------- fitted params exposure (optional) -------------------- + # -------------------- fitted params -------------------- def _get_fitted_params(self): - """Return fitted parameters.""" + """Expose fitted parameters and learned state.""" return { "x_used": self._x_used_, "x_columns": self._x_columns_, - "last_window": ( - None if self._last_window_ is None else self._last_window_.copy() - ), - "one_step_estimator": self._estimator_, "direct_estimators": self._dir_estimators_, - "y_train_index": self._y_train_index_, + "one_step_estimator": self._estimator_, + "last_windows": { + k: v.copy() for k, v in (self._last_windows_ or {}).items() + }, + "id_names": self._id_names_, + "time_name": self._time_name_, + "was_single_series": self._was_single_series_, + "y_was_dataframe": self._y_is_dataframe_, } - # -------------------- test params for sktime test suite -------------------- + # -------------------- test params -------------------- @classmethod def get_test_params(cls, parameter_set: str = "default"): """Return parameter settings for the estimator tests.""" - # import inside to keep soft deps contained in tests from sklearn.linear_model import LinearRegression, Ridge if parameter_set == "fast": @@ -766,7 +1286,7 @@ def get_test_params(cls, parameter_set: str = "default"): "estimator": LinearRegression(), "window_length": 4, "steps_ahead": 2, - "normalization_strategy": meanvar_window_normalizer, + "normalization_strategy": mean_window_normalizer, # factory form } return [ @@ -774,19 +1294,19 @@ def get_test_params(cls, parameter_set: str = "default"): "estimator": LinearRegression(), "window_length": 5, "steps_ahead": 1, - "normalization_strategy": None, + "normalization_strategy": mean_window_normalizer(), # strategy form }, { "estimator": Ridge(alpha=0.1), "window_length": 3, "steps_ahead": 3, - "normalization_strategy": meanvar_window_normalizer, + "normalization_strategy": None, }, ] # --------------------------------------------------------------------------- -# Convenience factory (matching the earlier API idea; optional) +# Convenience factory # --------------------------------------------------------------------------- @@ -795,35 +1315,20 @@ def make_reduction( strategy: str = "recursive", window_length: int = 10, steps_ahead: Optional[int] = None, + normalization_strategy: Optional[ + Union[str, Callable[[np.ndarray], Tuple[Callable, Callable]]] + ] = None, x_mode: str = "auto", impute_missing: Optional[str] = "bfill", - normalization_strategy: NormStrategy = None, ) -> ReductionForecaster: """ Construct a ReductionForecaster. In this unified design: - - If ``strategy='recursive'`` and ``steps_ahead is None``, you'll get K=1 (pure recursive). + - If ``strategy='recursive'`` and ``steps_ahead is None``, you'll get K=1. - If ``strategy='direct'`` and you pass ``steps_ahead=K``, you'll get K direct heads for 1..K and recursive continuation beyond K. - Any other combination behaves the same as setting K=max(1, steps_ahead). - - ``normalization_strategy`` may be provided either way and is applied per-window. - - Parameters - ---------- - estimator : sklearn-style regressor - strategy : {"recursive", "direct"}, default="recursive" - window_length : int, default=10 - steps_ahead : int or None, default=None - Number of direct heads (K). If None, K=1 for "recursive" and K=1 for "direct" - unless explicitly provided. - x_mode : {"auto","none","concurrent"}, default="auto" - impute_missing : {"ffill","bfill",None}, default="bfill" - normalization_strategy : callable or None, default=None - - Returns - ------- - ReductionForecaster """ strategy = (strategy or "recursive").lower() if strategy not in ("recursive", "direct"): @@ -840,85 +1345,87 @@ def make_reduction( estimator=estimator, window_length=window_length, steps_ahead=K, + normalization_strategy=normalization_strategy, x_mode=x_mode, impute_missing=impute_missing, - normalization_strategy=normalization_strategy, ) # --------------------------------------------------------------------------- -# Example normalization strategy -# --------------------------------------------------------------------------- - - -def meanvar_window_normalizer( - window: np.ndarray, -) -> Tuple[Callable[[np.ndarray], np.ndarray], Callable[[np.ndarray], np.ndarray]]: - """ - Return (transform, inverse_transform) based on the window's mean and std. - - Parameters - ---------- - window : 1D ndarray - The y-lag window in feature order (most recent first). Only its statistics - are used; it is NOT modified in-place. - - Returns - ------- - transform : f(arr_1d) -> arr_1d - Applies (arr - mean) / max(std, eps) - inverse_transform : f(arr_1d) -> arr_1d - Applies arr * max(std, eps) + mean - """ - w = np.asarray(window, dtype=float).ravel() - mu = float(np.mean(w)) if w.size else 0.0 - sigma = float(np.std(w)) if w.size else 1.0 - # avoid division by zero - scale = sigma if sigma > 0.0 else 1.0 - - def transform(arr: np.ndarray) -> np.ndarray: - a = np.asarray(arr, dtype=float).ravel() - return (a - mu) / scale - - def inverse_transform(arr: np.ndarray) -> np.ndarray: - a = np.asarray(arr, dtype=float).ravel() - return a * scale + mu - - return transform, inverse_transform - - -# --------------------------------------------------------------------------- -# Minimal self-check (optional) +# Minimal smoke test (optional) # --------------------------------------------------------------------------- if __name__ == "__main__": - # tiny smoke test if run directly from sklearn.linear_model import LinearRegression rng = np.random.default_rng(0) - n = 80 - t = pd.date_range("2023-01-01", periods=n, freq="D") - y = pd.Series( - np.sin(np.linspace(0, 6, n)) + 0.1 * rng.standard_normal(n), index=t, name="y" + + # -------- Single series example -------- + n = 50 + t = pd.date_range("2024-01-01", periods=n, freq="D") + y_single = pd.Series( + np.sin(np.linspace(0, 4, n)) + 0.1 * rng.standard_normal(n), + index=t, + name="y", ) - X = pd.DataFrame({"cos": np.cos(np.linspace(0, 6, n))}, index=t) + X_single = pd.DataFrame({"cos": np.cos(np.linspace(0, 4, n))}, index=t) - f = make_reduction( + f_single = make_reduction( LinearRegression(), strategy="direct", window_length=7, steps_ahead=3, - normalization_strategy=meanvar_window_normalizer, + normalization_strategy=mean_window_normalizer, # factory OR mean_window_normalizer() + ) + f_single.fit(y_single, X=X_single) + + H = 5 + future_times = pd.date_range(t[-1] + pd.Timedelta(days=1), periods=H, freq="D") + Xf_single = pd.DataFrame( + {"cos": np.cos(np.linspace(4, 4 + 0.05 * H, H))}, index=future_times ) - f.fit(y, X=X) - - # make a future X for next H days - H = 10 - fh = ForecastingHorizon(np.arange(1, H + 1), is_relative=True) - # construct X rows for absolute fh timestamps - abs_idx = _fh_to_absolute_index( - fh.to_absolute(f.cutoff), cutoff=f.cutoff, y_index=y.index, H=H + print("Single-series forecast:") + print(f_single.predict(fh=future_times, X=Xf_single)) + + # -------- Multi-series example -------- + ids = ["A", "B"] + ys = [] + Xs = [] + for i, s in enumerate(ids): + y = pd.Series( + np.sin(np.linspace(0, 4, n)) + 0.1 * rng.standard_normal(n) + i, + index=t, + name="y", + ) + y.index = pd.MultiIndex.from_product([[s], y.index], names=["id", "time"]) + ys.append(y) + + X = pd.DataFrame({"cos": np.cos(np.linspace(0, 4, n))}, index=t) + X.index = pd.MultiIndex.from_product([[s], X.index], names=["id", "time"]) + Xs.append(X) + + y_all = pd.concat(ys) + X_all = pd.concat(Xs) + + f_multi = make_reduction( + LinearRegression(), + strategy="direct", + window_length=7, + steps_ahead=3, + normalization_strategy=mean_window_normalizer, ) - Xf = pd.DataFrame({"cos": np.cos(np.linspace(6, 6 + 0.1 * H, H))}, index=abs_idx) + f_multi.fit(y_all, X=X_all) + + future_times = pd.date_range(t[-1] + pd.Timedelta(days=1), periods=H, freq="D") + fh_abs = pd.MultiIndex.from_product([ids, future_times], names=["id", "time"]) + Xf = [] + for s in ids: + Xs_f = pd.DataFrame( + {"cos": np.cos(np.linspace(4, 4 + 0.05 * H, H))}, index=future_times + ) + Xs_f.index = pd.MultiIndex.from_product([[s], Xs_f.index], names=["id", "time"]) + Xf.append(Xs_f) + Xf = pd.concat(Xf) - print(f.predict(fh, X=Xf)) + print("\nMulti-series forecast:") + print(f_multi.predict(fh=fh_abs, X=Xf)) diff --git a/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc b/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc index b2db9b7dce0eeeddde46cd4c2dfe62a1a8f53f12..e9893377d41d73cb53845ee54d98632a190dfcc1 100644 GIT binary patch delta 143 zcmeC>_{Gkqwr)&#wbR^i3?;mPiO396p<+@PRh^E)=SGT zN=;5IF3HSG*PCq5T<>plfdK`5U}IpCyuc`NK}z?6q~1kF{VR<6ADEaJJs3YQfXI)` P3`_=SVi1`kUZ4vAe03=X delta 163 zcmeyx-pj$eoR^o20SF32K4g5{$ji#eF6o|=pOlz0S(q`3(R|_pSvClNb2nozqqK5K zaZ-MMwq9C(QEGBxaY<%gx?Vb1ef(q{=6Zk63k)de0~-UA Date: Fri, 17 Oct 2025 08:40:53 -0300 Subject: [PATCH 02/10] Remove __pycache__ from repo and ignore it --- .gitignore | 1 + .../datasets/__pycache__/retail.cpython-311.pyc | Bin 20156 -> 0 bytes .../datasets/__pycache__/simple.cpython-311.pyc | Bin 2334 -> 0 bytes .../global_reduction.cpython-311.pyc | Bin 64212 -> 0 bytes .../__pycache__/reduction.cpython-311.pyc | Bin 64121 -> 0 bytes .../test_reduction.cpython-311-pytest-8.4.2.pyc | Bin 1018 -> 0 bytes 6 files changed, 1 insertion(+) create mode 100644 .gitignore delete mode 100644 src/tsbook/datasets/__pycache__/retail.cpython-311.pyc delete mode 100644 src/tsbook/datasets/__pycache__/simple.cpython-311.pyc delete mode 100644 src/tsbook/forecasting/__pycache__/global_reduction.cpython-311.pyc delete mode 100644 src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc delete mode 100644 tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c18dd8d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/ diff --git a/src/tsbook/datasets/__pycache__/retail.cpython-311.pyc b/src/tsbook/datasets/__pycache__/retail.cpython-311.pyc deleted file mode 100644 index bf957bf69ff2099c0d6bee3c3ef43d3689027d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20156 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 z 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 diff --git a/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc b/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc deleted file mode 100644 index eb39054c1628bb08c3523b7e8bcf2dcbe46bd3a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64121 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

@b47;yCwf_nEkXD8o;W_aif6>^NMfuU+;fo zaC(sR)uw<7jW=OW{zl*RzBdM@2cSFF>tBH*Y!Iq9Ga%tnoToOot_l`(5m*o;2^K5> z#Pf^6f}iKC3I7Ma&#xH&w}18&)Gj}=j{ty6)l}!-+7rp2E>m%Rb0KLb0aHnHS0Qm% zRzL(Vi-Ap20H9hcK?Fhme;|VKVAWcXd-2tgd%>JzT!7i zI$vdk?is{v=o}bt?%Zdya2Qc{*gIpflRt24ZzH<%nh^I2p~|p?$)Ahd8B;V<`KA9h z?lx2LR7e9Wp!|W`rgPH?Jo~_3l{pNVZ)RbCnlaX}_ck`@u_N=sS<8p!11BK=?$#TfT zW8=s?;Zpl0M3P2NszV9)sN1sv_`7i2z(H=ve9m+peek^bY6f1AIrW%050D76vHy{3 zX1zA9koBhJ5LBYB2xkk~^>(yUQb8=l$p~fPxDk&)JLV2$&yvHKeppT{K4VVP=OnUWMd-p;F-|r;e_QBWSu_6 zgEBFVDX_Bm+vH|1FYLvFbZ&e~&U>$xXXYNL2jfa2%^l*WFSA z{ha#RJIDg#(`w4<2#u~gb9ls3w$E#u`C@pZwE>vzL?K^}&- zOdw$7GnF;13?WQta9c^3}zycV53ypC?^O|xh{~~Mg7y2?3%C! zd6gQ0UbqKk9WV4+SLa+^^KT6IWfdqdP)zm$_%iviH^T||)meEGj7-r=$<&kZZ&92! z%EBspe2+Xnr{F&!vQCLuXC6GfN+kFP7cF5&T-^4179{H?Utu< zEF9221M&`ra=0CLe>#E3F8?i?9hr707Xc|T6%TSk(EzS^(W3&pmi*;Q!K$UQ%B8B> zrLu~p>iVU1RqSe9Zpe38Nw&f|v3L0qQ&|vtDA1K$UcBwZYnzvIAIZc<_o0O6_L?*E zmQ5?@QH!a%ZrOGuBNHk?R-wGrbcFjVx17<((pZH)VadrPyA2AdFj>9J<|6uOAonwH z(E-mp_< zqIsXP46}rT42aO$)YQicrIr$heh{)Axhxx2SJc@nh3Oo*5`7-(L{%2@*OgHqEu*wx1t5aG|Q=_Gpt%ek6)g)U0 z=EG>7<$nf(sV&V4C(owTqp<>hox;9KgiX0LNT7k4#rkiANLd`UsQjPfu3qIvS3^fkmp;(qJ6=$| z?6Ntn_e~%Vh>&@2E1L~S`Sy9zlTDK@EzY0Paxvy;YiZlq*wTtC!R^5__z_iyonQVt zwZ;P?E)Xp35MOuFPf`s3DUB+&J3y1BX*XoTR-ex(0`0%pGs3>Y5*oS^J}qxF-rF@+ za0ok`b5PGe%tKke3W3>%l4z3aTxWvo;=fKwsVC551rCPSSQ*pK7g2u2L;^%gh?Ej3 zBf{3gAYAAyEvj$IeF}*(u&`etx8n;^{hFGRmcBi0`Y9nozfL+sZO#dspVt_DQTT|3xV| z_;TthtRxlW`X|b1JGodK+Vt`}iRj~eLV>c04A3pAHqTzl2I(i6nP;XHl3fBnv6UJ` ztq-Z850mQ%k)uQ&C&F?#1{Z2QLLL`X-(7;wN&D$YCN!iIBh<{{)ezh@2o&K;$fub3{gn6cTxb$aNxb5qY1;pAxxCytbk?Ab_o$837gs21zasog7ZMaSnr~=V9;Q0)Kw!T*7`OX}f^;Q5?L5V#jwZ z>6fsdQtti^CCflLS%=ZOc&i&7N;s2tE2+K1iL7Hv=mao0*dodxB^odZ^ObPId<Y%Jg7J!*S_I=2H#G_AuDGd3NOvt; zZP{k5?MX6WTQ0M5ML1bC5Ff`uLfA;`*&Iw8t|a%#?}2usB!j{kiPM-o%k7uU13-fe zPEVX!R0Sg`vWKjHDuq^HB5X zNnt(LvTQPvC%EM6W+~^VyjGCioSo}Mt}AH1gF20o6z}AquG2`m%$vE5%O)ckf&IA4Zt~`@J z7%vLobdpYxT*QK@YFN%)&tZ?8hG4$1I48#zGK$2EqPS&~V7!(b&Z)XZ$GQc_x+o_) zDkMk6L^maz4dZck|D<`!6*(8{ob49uTSWU7$-V{t?!rla>Pp<6gWJ~0=keotfIx<# zUeR4Cxhq9`m1M7qhGT~o8+R`>?w0E%V#6+}VV797TdLYElyu(p3hqA9-6y&G zCiVe2G5JE=UMMIgT;krMcz%KWE&=tGlnn^fSF&t!a1{1h|I7W6!kJ?e{i0>PWFh;8 zOZF^OEH@Zwo8A%iM%!-rVBs*w?hIg-!XsbZdk}YB<3EHat}@P$2}zx z^RzRbl@qbTVU0W=;isREwgM(o1v8(uZ=aj(lwnGuXS3wlj5eHi;-uJ%B7xwf*lV5G zkJip~OzagLm7=9evQ!C{s<BnT4>Az;dn^7VSH+8=lN@YNIPKt(%d zE)i-<%&h?!O4g(qYoEf2KN`ANAeJk7dWqx3gzE>5+@I+ojs=XmP20hfuV0en@cc6P^1c z=RUkfl10 zzDVYbf1*#ctdlJ31k1XmFWZG&?x`miT{R1?npke^oKV}5Y&Tbp=sGC54o>vQPZmSQ zlt~60LC^;70F9Nn%LjYDUDG`?9W!k=JEE6hDmFCx*n7{sw_%Qx4f=|C9a0{&rf#2y z#Dm#`CkKL_=Yeuq^daz}pIr1eFZi2h%V%?ELwC*!EuD9(gh!9wEff6BqW_rWKL*~Q zLwR;p*W6R?N&LmLe3QPZqDb4d(y7vkt|jWSf}={bR7;j>!BQ>v;hJwWzur7^G|Epl ci;jB9Q7>8=Buj&!T+4^d0J8}hMQkVZznXif>i_@% diff --git a/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc b/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc deleted file mode 100644 index e9893377d41d73cb53845ee54d98632a190dfcc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmaJ=E%p@winKH#9VU*kzbX%G(Eh2QA zWY^b3(C0=b@v}q;&a@GVTT^HNWz=(K&hMi*05h!vU=Q|4Kt5ZC=s%jU2gpGQtFd<< z{8(W(DHi84jrHWkyGm>;X+&0=nzHJ|R>zMEh)iXb zk(%8Z!FBsahT5I>!}#?J9+i!7vfD;?lBDPUMgb-pH-^evps4W^sAjIuqPUn@jFO-q ziYKat*SszCI~2nbA>CA}eGFx%^QAYyL0W$Wvhc1(ZoIegFUf From 7ef888eb3cb019ff595a4c6e570bed2f93a4d453 Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 08:41:29 -0300 Subject: [PATCH 03/10] Remove pycache --- .gitignore | 1 - book/content/pt/part3/panel_data.qmd | 29 ++++++++++++------ .../__pycache__/retail.cpython-311.pyc | Bin 0 -> 20156 bytes .../__pycache__/simple.cpython-311.pyc | Bin 0 -> 2334 bytes .../global_reduction.cpython-311.pyc | Bin 0 -> 64212 bytes .../__pycache__/reduction.cpython-311.pyc | Bin 0 -> 64121 bytes ...est_reduction.cpython-311-pytest-8.4.2.pyc | Bin 0 -> 1018 bytes 7 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 src/tsbook/datasets/__pycache__/retail.cpython-311.pyc create mode 100644 src/tsbook/datasets/__pycache__/simple.cpython-311.pyc create mode 100644 src/tsbook/forecasting/__pycache__/global_reduction.cpython-311.pyc create mode 100644 src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc create mode 100644 tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc diff --git a/.gitignore b/.gitignore index c18dd8d..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -__pycache__/ diff --git a/book/content/pt/part3/panel_data.qmd b/book/content/pt/part3/panel_data.qmd index 9e465b4..079fb14 100644 --- a/book/content/pt/part3/panel_data.qmd +++ b/book/content/pt/part3/panel_data.qmd @@ -291,32 +291,43 @@ global_forecaster3 = global_forecaster1.clone().set_params( ) global_forecaster3.fit(y_train, X_train) +``` +```{python} # Predict y_pred_global3 = global_forecaster3.predict(fh=fh, X=X_test) # Métrica -metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train) +metric_global3 = metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train) + +errors["Global 3 (window norm)"] = metric_global3 + +display(errors) ``` Vemos que resultados são ainda melhores! -### Pipelines exógenos também para dados em painel! +### Pipelines de features exógenas + +Podemos ajudar o modelo a capturar sazonalidades adicionando features de Fourier como features exógenas. + +Usamos `**` para criar um pipeline aplicado sobre as features exógenas: ```{python} from sktime.transformations.series.fourier import FourierFeatures -fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq="D") +fourier_features = FourierFeatures( + sp_list=[365.25, 365.25 / 12], fourier_terms_list=[1, 1], freq="D" +) -global_forecaster4 = fourier_features ** global_forecaster3 +global_forecaster4 = fourier_features**global_forecaster3 global_forecaster4.fit(y_train, X_train) ``` ```{python} y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test) -metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) -``` +metric_global4 = metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) -```{python} -metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) -``` +errors["Global 4 (fourier)"] = metric_global4 +errors +``` \ No newline at end of file diff --git a/src/tsbook/datasets/__pycache__/retail.cpython-311.pyc b/src/tsbook/datasets/__pycache__/retail.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf957bf69ff2099c0d6bee3c3ef43d3689027d26 GIT binary patch literal 20156 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 z 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 literal 0 HcmV?d00001 diff --git a/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc b/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb39054c1628bb08c3523b7e8bcf2dcbe46bd3a0 GIT binary patch literal 64121 zcmdSC33OXmdL{^f009siv2foW_eESpYOzEuHYJJ@MN6_4+cI4$nBoH|$|NX1KnrQm zMO8ahkiv994joe!xdT_r6*?t%D;-x_m2pi}Nu}fI(>a63^J;{~9Cqt;kCRm9oF3J< zYTB(c)0ywT4|sSFq+~f&>6|_@4wyObvO!iINtu~!I=Ypq0{|my2%`N z`9lBMUt4v$cXYgNSjX#m!=!%7Fl^A%b>3v&lyTU|u8otXsr=#mDf6&-$}()3vJP9P z3Wf`&Y{RxG`>=h=G3;RROq0%G7t)$03y0k}=TCa3yu)7h&OGUxDjF_g*OtlRsgmK6 zsnX$6c5j_5n<^hJpQ;$H(Cfx^e8G40!mRC5u-i81sVb^fp)&*hHER!OHn6$~hS*|85@I z55IK#?W7c$KmG&$_xKA)xht@nzxXO^v031>|@-7F#m2KfEAzNXD{c!-th*-UzVo|WoQ=APYsiBe7I z0|U1%=Zu%b$YmFP&wLlzelL@?j{iFUPxvm2rLG z)Y(@u&&CaWjK4N+xb>E{l>(>yN}RyS_(&$c`W!f=Z6($h?z2xiBEE1AuRB{#KVcnD zKS3Q&tLpgDBkFiMw~jIWf|-qg(M($ePHN)}^EvNd%6T8a`!6%&#{y%InDKlduy)3? zuPe~@S2f$8pxs{#9Dme!8Xm{oIum%YUw3LYJ%gTfoc!{TW8w+QPV-{o3C7HXYRsH@ z#F&}T_P1WQ@OsXOIHQd*dG$wcmBVbb-IH6 zlhdb1Cb=^+r-ccg69WAC(eT7{kQZ^PV~ zzz84WHXzyPc_B1$A;67J2g4J=^COf;J9lv+e1QX!m}T!e3knY7 zS?K(^bJIdN#O*n9;y`af2X}6IdNROsQ|Bkc6CI&|FcAoKotX#-Bf{vJiBS}k9|@0e zEi+vw<;)LJ#K9mRxWrvN6A%L2B+AT91}+39xrq=*g>FT*BV1@AI6fI*4>&nrRW91s z6O>(RLBR=OWFm-UT+29Xq*f~6p7RrvsPhmNJs@0|2%)r8rceO2XqgTMsJPP1~hoMsc9aaFg6j!fEe%OPM}z!ktqb}uTlSuoI6L~L1rlUIgGvu zdGt}ixt2^zwx&nYMDRjD2n9NjK`?}GOi}r$y3@kM_yk&p3t@-^Ft(n{X4OK&R|vdz z9xZ_)o2Q42N9k z<85uzr!k@~1o*Z#R7BOOEy3wbrSRnoBa>WkdlePI^?K>K8`@UQRoK0Xls#m?;s4Qiu(U z(b2#;yb55h283Q@fZ@gU1-X&aq3Ox<;Q*(aV`CTwQzK!_MKs6Ef11A@;wJbFY?ig7 z7uYm4py3B9kRg&k*!s#2?v-@i zTV`-iv1VRDZw&@VC(rYkA+Jzb{AmEFd{tXkxH+ zf^TO-hTUX=m6DhNiW6s07y_Eym@qxn5gG;5MyF5Egqy-hW{7nM;Bgobr!nz=N~CJ5K4lvTA^}Sp!mat-h!CC_nQXPBEPK;qJZ0<$SWa06K@8BC zPZ^(`2;u%n8Xu)B#|gX!M*}I-iSsB-%7pfw4jx8+g%cq^rfOh3Ao%(4%((!bS;N!* z>9H|j%vM9nG&+f)m~tKqj04h!riDWjmnMRE;oJk93fP#YLQM)c~tLVLGWB> zkY_+Dl`oI@t-vPuhodthHXwCT{0)5}g{&%Pc8yHsXhS z{bv_&@s2L6uvB!qv&wZu7p8dW| z!boUh(%-YOXG>Q|80`v&PESw2+J#xg1_=g6m(uB-=VnsH42WeQi2|jB4t)7AexL0{ zFt7VXzOK--FuTCAzvKSJ(W3q@!p_f8{Il14&~OR{+W(N?h4O}Nl@S45|!>mz#Nf}nZzXkNJ? z4Z=nwV{I6sTscl?$0_C0R4NTgg)MmXB7UEF5X|dVZG|!KmEMJ3RAG0*SSEDg@hE=E zkuIqIvvNFoM;Fiy>%sUn@cQ9A-oodDO=#rJSSDCgzC-Ad7a4HPAk=^`yDI}76qEx% z4B*EoFa<8t#3MAr;2OF=O_+41j5HPm`nFJm;9;3O6*8H&bD67CnkJ=@%9?aH#=Evj zRWm^U*co7m7|v4HutTU-kABUJQf5)apzSQ}T@bADxjaouWj;mnv~dM**pc}%=335M zKJQhzOa_*tD;qOhn7xkV-7@CPX=7L&mqtMPSSPMBlUq%Pg?hyMD>?3ir~k_RHyxL+ zzw_EIj6j;Xtpx%NT%nl)n%gO3Xks>yG6zS3)UPSaL}(1eTsV-*1Fa}fd$Fm-2IB|$ zh#r_66SmXiRtgw6uqx9qWlj%X6(o>{xW(@u1@7_tXRFp5d!3or#Mlb`1_BItZ_#4! z68~Xi!n;xQZj`(mqn6}`O}BO>?0vtn@9nz9wxyGzr%CcOiS}m6-kh*E-x-bSS6%Lf z*O$7lys_}c1D)RLd*2&B`d;zP;^oHgRL856h2Ci2r@o4xRQB8+N%*#jzHO3kThzMh zDf>xz=k3~rXS3+pEO|CZ%}H13Qggypo3PZfxpw#iqg-=khzq?a=m(}0Di_2u$nQ@T z`28T>&ri~|-S2et0y!(ns^+GT7z>B3_~tTPgS@a7*#=^m2pdxeB{%*$aA>XjKJeFqD#M z6<~Ts_A~Ut*aV=yTRYdAahm2)&<8|~Ib-%81NsQbh(U!y!cKHR`T(%cTZ0(XakWS! zH?A@`Ta6mTfDYb`FSJ^7uz~P2o(j)U&_{uh0vetIjSgWig4}VtpheoM)GY4I>626HGE#z0tqQ@^oj95?@W&sorGsB?GH>h%!YrLDMosGMy2PlBi*<==1rf=4 z%jYZW63Wq?DT7WI)~q!m##?5s2!GC`iS5g#1Q%j$Y-K{XT4WR?oJ0zNAR^dCMxLJ@ z6L!**UG&7j78Gotx7r?$oKpE%vtTd@dnh%*FM;N_Kr;X!qo1y|>l7Jo?4uV02-biM z8I_ggj&KEu{c}q67YKf}NG#dY`%y>2et<1$T9*zicPBg@qNhVbXz!Hloe6vA-Q!Qb zuIae#&RyBO+qHc3@k^UWqr_KGVS$1;err%7SS7n27;UsVc|^dV4a;B@87Rk>Ly7I{ zp~P9RO96`jQ8EBX7DECvzJl-M;&y_F0tLU1-)Gr%MJ1r3lm(0_!{l_zaAqQ9Vr-95 zWr86UjWPz7-o%9#pg%E|Gy%iOSklO_WPTb;nx6M z0b8kOQKbdX7@}0rh})lLgl2K&Sw#BR_*fsgPycaWFx&XcA(s zmp8U^-KRK6K*wcKGgdxd0!RM*SA`?@J`zXKz-Pzf`DWmmsiw;#@YG{DZ*#_=kvL_1 zUJjniV#yp1TY3S7Hpm=jvvG5`t^6GPt4#h@vl^pjk!YTvo&Uh9%9L0it1?`Q*&&}t zF3GFEEMg^KAkcJawd5jJ?Wcq+c3lHy(&#mJPAKU0-y;9ee?jmF^lI}i?0TRxS<P z#cvCXGx1Wfq)jSm6Wtpm_lD@6M?8-1x$pKx_arHhS%W=SzP9i+Vht9p_pm(a_Qpo9 zl_FiCCwAymcD;{x#+#&o5QyoR~ny6G(MH|l|=V3u42dSx;vh` zTN1uO(Kjgh2HA=f`1kZ3Q^K=b^z4>AyT8c_c$ber&2eFs_xJG;ip&1bw=|js! z5l%#Oan;*QES>JVxcr`SJExE6!}-ds?t)%u3tO}I>UUajF=q(dvhjEbD1KYV=S6e~ zjqm0FkFRUK5z%M0cIR}^^)~VP$$S#>#i`b7j@+f>oDrfPUBq~nW*|G_suE|O<<_)6 zx8|lW@nF+OB&Wo@N!A<}3JhSCXxr?#E?8Kv3lk3_eKhEVJiYEEUC?+@cPZ~B-9>!_ zi`-W8?BPD9sFK!G;UEN0bCg>$nh~vO4HOV2q|GGj9(3$pPwAqy^YH9b&j()(l0r;o z^e~FhpV6QoxfYF7Zr`PI(CL6QJ*_e^Yi{SpA!BczH8gj!#ffIL5mNJ#ke1di@4$i~ zqC3@0V}k&reBfFcpSV`W)|lafPAJ3^j8-M4F>`%h_b(eG`fG-T7A*Q{-n5!hMkt@~ zDc5sHjt`y~JaV}2S^ts4&%Tr@Qa?E6AKLfQi${+2r_6j{Yy=8(DN|tTTzCdTc0=dJ zl>VHW=lif==Om>2qtjF8cF%5t5FJWD7qWtIZ5ws&oSX)c655T6OrpO<$wEU2=5>I; zzJhFUztEj@6)s#@s+Gz&EFYCR`V(dQ5-$2r7P=R$OGj_Km?&(({{yqm;e3#Mtnb9W{V(~C?b|{Hvc^^_4@!6` z>%L2*Ck3?zXdM`Wp;X?hfti$9*2xPA-$aE`q>1sAC8PS0%l%B%d_ijpZy}TaLe0lv zc+BhWo2~P+NtZVoUNyU8b#IS~=5ongPO_a%NoV1=&Rjinn4zmh26C^0T}=uk+_R1P^q14(Bf{ zI%ntdsO0F08Xg#2CP&gz9Cgy)eP_`+G)Rr7OD@b}jX-U>#+vy6-KD^<3M$xH&rXz@)QR ze-3H9z373?U~*)G`xblD_`rl`pMU;2#)aKEKN!L!)BUKcuXL|f_ovo^y~TNdTBJvq zvO>{s0!nI7-J^wD%6J$PS2IOvN->1M<3hVMi@@9|2mBYRX+FF+Xy1oiVP(4N0JgQD z{p*mb1AG||r}Cga1oavyC_tHJcC%7QS(`{v;sJ)7cy%J&F&P*Ug3VADoCtTN6Ln(3 zn$JMnB8-u5JppAJHjaTxe-rfx5lBh1`U?G{X9A6e7M({V=aGcv2*wPe$*scJPKYesXEB@S2WP4+GV*L4Q`kwBbyaIA<|x&TyIelKCk3SeuV9 zpveb|6Zz0QRj7)Hp3hMl$kbZfenLe=AGc@nQlG=+**k5TIek#uayj@P6pMoG&@RqQ zK2)Yx*^M?oL7Q8?_H9mX3fofi4Vw4t$dw;x^I~*G?=hyP$-_28;$RfOYzs7FnOYzzz(d8A^Z+r1p(jXG1LeRmb@0xgQd`W{ zXQD&d8X7Xtp2V1S^Z?k9sp+LGOi2x-57as) zCsTRQQAp*ZCV)4oJVe6d;7lrCZUZQJ0I_1#_}i369sq)xm`Hj3BO!mLK}iwNKXyj= z5K&108+w2Xh*m5*n`5Ev?GsBa*S@;=Rk5H!DrmS@(7sa8zI;q9*eDfjoZp)?7rc2X z*8TOl`MFhRX`*be=qOD7^bv@7-P5pZHiy_grQL=3W zcC+^Dzklqb7k;?s7nHu-^o;@H4u^LM+Oo92p3w2s9mLG=|=V1B}+Sw zbv7uJE+mvStZfaA0m*EJq*#pcmx+Uj(^I&Ip@;B?EIQ&&;9_3)DQKzS6uOmFN)yzsstv z!ZKbzERuC`GUKG3gTCXWRwGV9pr2sSyaTBqua|);z^DrBf@;Ct_mn39qbgLX)fvqW zp&XQxQV*GPPBpsB9VT;-PhlBqxZH+;rBXu3md=-omJ2{Bx#tcS-u}{Ar`(SwSwGvEG~H_4c7J-Z)Is7-OtK2)}|BotNVE_ zKazjBL0cR7Yv5ffU;>C;>19@%{96TDUgY0P4U{%eYkX!&j5Q!|d$=Yuwn%T|tU@Sg zXNS=E1oc(EjryYhh*PX>$G>}xTWzyHV3rrm+KdCQL$)$t0E>u(w4vB5X=w2ZS4U)c z9V{#OOR%LNiH%Iwz($58f_XvOoabq>redaYnJ0kASd#!0!?Yk{^FvUXYdImD4-i*{ zWti64BNHW7QIWb&kC089Xo9xR^lJ7|g7qIA(@swhpgbRPaGF*}5RhTy0F9mLZI zMu^U!Fi$HZ2K__AM|hVqglA6-e2^#nkYfMO6wqT(HblEHydaQdPWV@uR}6{^1V)7G z6#P1ZQ~`{PUvQ91{m2QoUIOXxn{U#$Cwo(#4LCh@x!=W;?1Xv_?oy8S%fBp6O*BJq^ zQFL}o&hCVzo8h6i1*xQ2G`C3RmIpeYX){AS32*ODYPQ@S6>EB>nqKI+x{IRuNt+jl z2^h&yy;@cm-zJu|OJ(h`{8;|ytG=ptXA|BwU?oR&Hb|CL(d$?~@RFmN;U#x;_q(I< z`s-(IoLR2@_SDi8z84b~pISN|_uP0<^fpBMl`m|*UUQ@7%jS;-KiJ<(hQ<9$W1_DC zeDFfgq9eZV_EUF@KiT{51`>tG#lquK;c=+ZJTT??6n+F0^yik2#?8yM@7Y9GyX0zL z4kTQg5|&Nrc3ONxG&f1+Ca{~(OfJvDrKmA!b0usQnGcR!8;b5DZ2k0d(H-+$KH(h_ zy+e|B=#vu(@6m+)D6#Gz_mOuEHyrN^H!mehHj3tM$=pp0iXA`MI&e4i;~8=5QEBT@ z_5|u?u|13CrP^yYSspOA^n85Z^8WXZh_20&Yx8YB;p$CTdOu~9t9xmGeB?R^)E3Fs zvfP-kbtQ~lp#}_-AK6@e6}lf)c>B8ZezZ}K@J}jSdp79)WP^9FKJQO;dW0uZmXqmG z_RtPG0ff@X0CBJ$R?AEBEbV}+tR>&6Q~`+lX^iLz(D+88D>O>7#197I(0_IsVGb3l z*U+0Zq1mB%svwJpixb^_(R#1-?bVIDDAR^K()4m09 z#PSn*H3~0zJjj(_Gh|5vZ7QwO3lDK1IP<2*eFyLJ*K+Pr>MY7vaqf=;6~z_QudeNy zRspJsD~LxO^SikDp7P+Vg4*M%)=*yOaN&g}S z*2GC*C|pMFFtbgY-GNmBuHkvIuI8q&nx``vA<8m|!#|}dIJ^5$=1s;Rk)j|&?j%#i z&)80>>=a4j!B`2QUT)USwS-|FIGOnZ9vPr$O(-6AV8)S46QS9|U;Z0ptqUH>80mNu z1X6#qwNQoNe~b^M3bJquIDKL)y?#uYSi3M>FT@d%Q3qhxPmdDEgS|}UPlST!Cntrg z^!@|N%>>I|z&z7wIswK1FZ71t`F}^R&FQv;$bhv%%6ifdw*})cxlY;B@BGw=Yw^9; z4~rM{VFv9}Ea5*O)6<0Te~5r_JM6`=(RcUUIPm`In^TF3&7y6KWZObagvwQC;li0% z=*rZ>R5b6t4Qz0Wsg}4Aoo{uuziii<+dOrszPL`M+PEtf~i&ckd_WEyC5U+wV00{^UoK>WA{H96`VXi>|PA zA+oera&ZX@cfYXoULm(q$YHr#*eDe?&JQNdh4;)QE9Mf>Tqe;!chB6gVs6MFW4);} z>8pC@$XiE5U!&w}yyx4n;@cqlIwW65)O!C5QsujQ7O*;yqGvljv@i+|AK^5LFO>I1cEOWi>?S z9H2HpxZ1Pj_N3UeSL)fTek{L4E4U!CKtTMUf(HeVNFZS$QKBk^?q0wQ_+NkSD|-JMM!6`dwadrSTMF&<}t`{hz4`h(!e3Dkr{FIsV2eicxG;VG-02w^ z3H={wVW3r> zT&FZTwhCPRu~Db{rstd9Z~8F5pxyH-azclG85U@snuVkt!9qUf!uomUtS`QTULz61oX$V5pT^AK%@@cpP`AG1QcKle^{Hq16`vMr6QfR6Q`srGB0IwB@Ph}fa!qol=nslvT2 zlNX?@Z_cTPsM+;g#KyZL&fnI(YuJhC3q`?aky3%g5xeU98pVW&D_oh$AIw^1ouh3D z!4Yv~nWDU^SLR$fB`lnCMqCkR_Io)cb4M(3l5wm#A~tPL>2(q7BVsz%#4LD3OnYuj z_~hFYCX4g*k*#sWqIs^U+(ru2{dtzuOW1MCqiv&GUhVx{p(a0HCSAlDDa`gU^3LYy z)3V0r+>yeFo0#>jMYG#az-bVCleKdvTR~Jo<-6r1`JD;3vIQFxCo^=%B++!6=CsNr z)@+3a&}!MQ51UnBS9vwEM&#YunwK&Lk$0*f>u3zCz4PJe*)1}#R#H<5uv~q;nc_FM zbIsWlbVq5L=OE5A2>%@|Bm6Cb*&~OcKSwUh#^FVaInR6!M$x`}>ls?SXm?2;y9mmbj%l7*7xSQ?qpC+$y zFs25(nYoPfhslvnntWMLi|&t!4yZ-q&*ycC!d>!zygOFBq+ja0Zd$BT9x}|!JUM6x zPa^3s;Pjt$;^J-nJFt+4BBFZ^`bZgR5djgZVzzp}X;|=(j~60bV0!Im>wLMQd90!W z{6T{rqIajU%ziaZip!OS>LBSh$*O}-US}oEpHQ7!({*+pOtAmk`sf>|bM5uK=o`42 zS$5xu$ZrtJREOcDpLh}EJK+O8BkVpf$n>2JIkpz5ga*sVJ!Qe_Ab5W2+>FdQAkq&~ z2&NxFV?b!8pqc_A5>sZ`K@>FpU_>VTgr1Y^A!SwQlaz6Scn5=)K`&IAxd#3uY97lxcPHz$6u2$c1u_XP$XRHV>_S z{2&$Tkgqi-?tLH@LQOS8UVL5u=;f(Ro zQwjT?cyVGwU!t~eejlEFYxwH$m9H$oHP5QW79F@^Td>XdK`YSXjlF!WCf+T&8|Dut zA;v!yKMG#Rin%#qZcZ}-UeYJaD`>_45@Q75wxd^bd+>SnE%5_h(yzl0aL)Hb1#^Bs z3qEytV!QBNZ$td-?e6!2qGOBX07s|X)bKM3qWb&3@}=&j*W$axnvJ)65*1q{-`1!# zY4a^Sz0?hZvUt^stutZkTrDlXQIO2ccX^J(?a-9ivQui=iF>hdmsGgx&rnE1ne%5l z1V5)BItW&cYe=umjPE~xXP3BTP}(wxN22qfws?N&WvQe!W?c1FE%8vuc~{^zN2qMa_-v@uN3(#`=?) zT-)hQd#o?n(6a2lxnG+vv_8LOyK0N=6)mNbr8HqFOu$CzKXu3bammM(iMj!?Za}IVNLcra*8P%o|NNd+L@SFu z6-Tt&?vIKS)@`D7n`GTKzb9#PM1|o4dv(s9j#9!mOO z#DW1UTD2(GunY*nu;UBZ)1=^&iK}2i#XP21!$K$NN;~cdixWlw}%yy3(PQk#1Szt zyJO>b(Y9Il>8w^>5Zo#whTO#!mVc~XLciKrAxoC8FKoEtQ){1$>os5SYDreI>A&L5 z)_2^1<(p-k=@r1POWU%p;Q912$c#mc(z0OxJ*E!Y@8vF#<_aT)>kEO@BT-#KZGPH2 zy~e2Hi`og~?_=s3ab5BHGlNP;iw@PDb^S75$!T3IG78p@8FA*897~6b;S%M8s>M>o z%9|iQ()NY>5pfIFiR+2DpJe1lJWmpfEf}n`M~*9GC7fH5PtuW5VH(aUA>d^USmMd5 z)(J!y!~ZPkY{tXQ%2s3+uDpym%&6rLOphd77$Hrr0Ez4hX-Lm}G#w*7_uxXIs4Iw~ zRuh|;4j?Bo$CVr|AWa8Q+m&f*8-yKk=UOxL_Suy2WY|B>cx_*b&rro5GD?*tXBa9xgKGf`i}*JGUMR0+Ic zPEEt#=5%mk6eQiK02N`K*yP?en!C+8@Qt{q*ZI|(Os)W8{sQquUNEAD%utu0O_>2Q}R9q`o+-!+0wnT zww1EBjM7cgRkRS1T$}LL+L|n?xCbhNyeelMh z=x&UMZ_XwPdy>V~@z!{SSPb(UU0Ki1ba_N0B8U!xN-WS7@6#*e7Z=~(_rv--qd#c* zxaIecd~^g4#G-zws2?@7d%kt(>Y;ZVmcln?#qu_(yiK%kkn9^0_6@3%+-|yS`DE~u z9pW=DBucx*(if%D7o&ssi>jl>g@UAfx}PT7!lI>8vQ#E4l^L=v`vk8(b+{H@id~E! zO*ooGN3-N;28F-Qv->vpJzM394bB*CW+gWux&~hH^~#Tmd0Zp zf|UN*RPp*|eh+sj4C^oL5AT%5EfUdd5VPn%`@iwUZ#uz<&YL$zu-Ya#4F)e>uRXLB z&s8TBUXXh2p=M6=hP95qc;lNoH64(vXS)X5o1#vzJWX#}BBnL(^3^$MSk5`PQj0mk zww#$WUva7wHDG@}rV=*A2{o)a)O7=;gZh6@X@fZnj8my)*%2{kc@=Y3n3Lv3a+Eok zaH?R=hIa)KOT?unTBIfc4N}Euq6Yqy;u~b<6)?KslG(OWoJKF=x!F zJeF5UN}nN(QiFcn5ci3h!B&C7*h8g!Q z4;&hXj9>|);Yj^m>t087S2$5mC!F-Z9Ex68c;lX{amCdb9~E6~lB-RAgHQ%Iko1y2 zp+4%9-^I1eMfyv+BI-pT3p~Mzpw%TPz)9FiPj?|;h!k~TK9l{Z6gWS`Y6Dtkj5p?^ zC}mHxf0%VDbE1&a`voFgn0GT_06B$-zt3roG@GaDu>(PP7Kw|f_I6wlkH@LAR42@h zK$Wqc=!K}`zQgsc7q7l}<)wv};Kc#hd?RX4mUJXaI+l5{WRp~~>54sS zjddqWYnQC?hGn~0xWtNkC~EnEz$f1TdXg3F?LY2)Ff?%30viARb6}w$x@>O z3q$and>E!0B=b}}C^O%QVViYI=%#yzM(t9AFbEhj zgh2!3o4Rjennd+c9b{X2Eb5RrbEq{YujDMuwcv6MD2J}%`o0U)ApS~@({F8_SjrL8 zBYk9n@%q4={Q5=m(#zKM^hgFXI_;{32Uy0Z~a z(ZEb<%wP4QLuf@Oq?a5*8?J>z6fg>xxG*_v{%$|>J1?sOq=!dVCuKbtOXO{+13A%> z!!aoT-|mZsV%-ZDqG#UqLY^;{bxCDiqO(hhAj6s_Dw{d0xWJYLvND6RZV);tl1U!6 ztn4&K*}xRG;VMLM`juAzCuAOQ)njWQ97B?gROCr2GC>CziXYS~1;fP;i+&ioyXgm) zKECvWnvZMnKy(aBjzK^LW5G8Mef`ke4T+K#(bFnI%4AN&gcF9ziUQaK=-tC;aJoP=oAYSa@rtLBr7 z-PWI+-$na=4?p>U`mu_`16!@k3!JkCeOgKc8bq|BMJ2Z z6SLM*M8k-eqqqR~oMf$4m@R->tgcvVAuo-!R{s2MO=}cn(yu9p8P-_p@8_r^{GGpl zSk0r!{VM#fvvy+EVk&ACJ!;I-o6K6wl2g7M>htehzAjDsV4BItcuqfsv&B)_TaD|~ zqJ4Ob!W7MNVTm@?Z{E z4UqzPr6iwJ>aSUHzGjQ*gO10Hcz33CwDlB@tH=ACT~n&8kUx*Nrt56awNU#~^<10d z+Ire=*>VK^wqQKmoGCxe!?TLIfVNeIr`1XY8UJJ2I8ew@MhYN-!uf@=l3d61S+k-+ zDYfmk)^2Ui7CfZMS^3Hu=%sSpldV+_^m1rMPtJcvXm4w7IMIA}R#Hek*v*SRwzn^zWOV~b+vV~mUn)zT{76)7bB z3~foEUg(MwQ((=ZZewj4c@{xg%NB7mPL$!YSKa%$oFZj*xisY|)aDBNag}nFrajr* zqypyVtjz&4|LJTsz$Yuv&H=`&vCX+3(cU?ugJ)c}R`=}Tw3_-Dj6O1J2DUt7+EcVQ z9;46Y?Y3I5E1g0@wx-pfurFRF?o_8N2NC`VB^CZB3fL0g$gDn7d8F;}5k3853aH}3 z#}xby0x&0-_3ALjh#cuIo@&-C3YVk>ZxkIJCvi#Cf)eQKugH5a;Zi&yXF7o*I-zxzgeI>kXKm$D}Ck2G4fl1MMQclH*N%8glUVl zv`vsKL}M!xGQi5ZxsWX(? zoUy>+=4D(x+Vc4u^!ED{FqTsjB{MOB4f81>{D@w$@%jgJ^`{ij(tue!3x9$uC})#2 zO7?yxe23osa|-^F0-|10He$fBSrrhNQI)*z{9TIh34&Iia2&lSoS@(Z1hn^8DC~#l zIZ|>83x7s2{|#kjVNN;V6-)SYy3G?H4bvZhz$-gOWs~qiWum4BIa!WlX_v~w5J}~o z9^r){`rKD3_zHp$kycpR<{TLr6!%3FLYP7(+iARr7|Cq83uA4!Xs%4UYvXm2yAkF^ zFkiMTm5GJ*QepkQ!seC2X0fnUDs06L0Jfq;anpwesb!mJ+b-F*|4i3y?Maq2OC{}z zl9NB#IFQ)?qPX#-wDDy0K(eR|5*JrV!c`9gYj@phRa5+uShZ2A+87&%4Sc>@TKj%) zqNJ15W#GOu6C|r@>2+*?RB-CZgxggVePgwv>c*}_>vplCSE}fZS$+jMdW#dVL-)2w z-j?OQ6>mqv+mWo;u)IgA=t}hLx!WW442Ts2F|rOXYFe#rTi*O$&CQyn{3TeQS2n&s zo2ckPsf%Epoe7e)jr4kntj~*@l%kiEEnbQnu0<9j?;pE)a{2TR^Ae3a#m1ddPeT3)iNTzA^~cl4K9j^uTKJLLmwPe9d{C(Y^3B=k~?+Ub8G(qJ697 zl{b`BRn>9#x1V2n9%_a9WxYCw3d*5^a;R`dhpr4E4>%i=J;8{M?UG~r1Dyk%NMCG; z_ETB9mh*4BKPb3ky4#=d42qsX$uk(;y9yI<)u+3tz^`39yZqYi?%zAVe15rhx%N)& z-3DlJ(I*i=i;F%P9fCO0S)Hivl&Uvp)X4I!J(S{zqj$E)zE&6w8OCa%2`A`n0C@#-(MeSkoib^xUi2y;8GVta(PNc_v}6M5YN} zgKWu{$x*-Dz5Ln-Tg38isk}Qnbl+x=>91~$ZY8_adCSPfmpL!s@eT#qY2+Z(RWbt9gOaSrvY?U%hC?f(=2(K?|C+@cs6~1 z&qoLDyd-YkFKym0dJagQ1L!$80k{wwUFv&lTz36ya(GsY%iry}u`NC*R&+`goy(!y zM}P04RPodu!yWe>gH*9YEZ!*xXX~ULIMg>`GL2 zG37|;@(oGOp@d}!x{trHXJH_=U9?w8_A1d*Em^AP`&NsZ6D`~B)QUwrrJ|je56=(9 z+{9qp7K4icPO@?FhJ>vtVQdO*1$g{Xo2#!^_oH6#p2EC8ap@^+bM5KX{YkHPZ(-h_ zy7UzGy7~)rKQ8e0b9q0m(IX^ZVW1HLp@&Y!?N&H$8tR77e;&z02_uo&8%+NJQ8P!D zcFyH;khGLnX(huI0C;O!1AWLEOJEYIU!Q-LOL@-e7fK`Kl*%}}|MJhH&!?p>`x-$v}<-XJjL5Mu{B;rN=m~3`3h(96So5t||Tb zlwsmhns`YwS)G14n{*or)F{76Xoe^tn0(nVPRJG*1M$+5;Yws7lCV@jU=FpUg89Cr z6O#Yf>DcLoS1B5KnKG3|4N1G>Tl=r>kL|fKv@irIf<9@p&mWL!vP_H9Iqerf|JfpL zzKL#8Z~QopX8sN=e)zoaz&9U!3FqTyMo51a-g?6}40lPHKYjz>4rzs+FMHE5Y~nk3 z4x2{i!v}FE-^JIzX&MGIkKf35^G&$6@Xc@PhOL1DzK7q$x4milF20{-aSq#}x=Z?D zJGyAI0Gd%Z(uNlK;=Sp6Iqin@kJ^eJ8v+v=*Gyr?857ExZ0rLEc{ejh+ ze9H@gw0#BJBYcR4fxJmQ%drK-M+kdI&v5Ep>RZ{C@a@<+m&WOUiSOS6c;B7a``qMNHuWW}R@6=4b(?V|sJw z69b25?P>?Ct+te729$0P#+p;i1ES-k`gYce*z~-2X4W@4a&F}G#3b%}1DB@9$-X5t z>!CitPSBx_u`?ZTf)0PKv!y3HW>8Ex$2&7}AwZ5B19%0IMamNhV%;zrkcn$Q< zzamc|9=1O}^G+?Z&;qt6(c^?}sxIquPi1IIfG~Zm_1_0O9-Uv2q_8`i5*tR{e#He0 zd#6Z$*qu{}Nx3Kz0rpOj1F$=V+s^J3t~a@-_bcUtOB|h_mRs!LsihPSDNCpDiP@dP zdt`SC50u?0>@xNRg}cb!DI7rNQ#t>zJa+$Id~_h?@TaY*pj(OkR1Mg}y;2^`YzY5X zM9Pk1dH8*eX1|FUWznvzw3RKkTqSBHRp|{)KV^b82VNE6B&%dn9s~;IU18xd^&(uRYVF!n?#u%u zVpHFb5~ky%^YN#wewYHW@8R-f=F-LVJru9@RCerB4TwWo0JMetJX}VNk;^E5%7rI# zZR9AKEj$=dcw`e=u^%rX0rY?cjh9|;&&vjIzlKJhtvr_5iyfFMy`eky@{n8n&x!V_ zMKrKv9+c|J>!CU5T!mSCl~~m!Rdq#;lBImLqI&6dv0{T%v4QSOlTFb4fWZeAR)}s( zR=3k_#itg>74w4mo~3lfQYu=?kuqT^hr>JK3J>|Do|}7(4T@QURQqMh5Y5Kz1jp)l?)n0Vt>c>|?->9Csutp0<`>3pEf0 z`hmBr*@og#QfR;dCC!&lE%;$_tiV|HiU2T@L1~!TE3gZ`*Vl5(^;xrVjoph8Ig|4M zc7W71{uJ37&J}k9d zap632RbYA6s2Q7Vu$BhCC(NY4aIBD?q$b#A>~g=RT!!pdo~T^K5yKOGDIe0^s&IX_ zRUwbW-2Wba@&S+e#yN^rz+1F6$(AVFu9vBmv+bd@H{{G#I6%;yRWKGbNmVA;bJizq zne}TQSFl~C+;omuVbri8`y^L?g6-RB%9a;4K9-1i+yF^5fM8Z;A2IorI-zI&$uHG2 zE=_Ca$W0(odcuDDrP?7!tCzJy{u8uAezqNg1{xO;6J}jL+}(7jT3I~;vb2Q}4kuLF z9NJNak)_Zbnh}&uuX3e;*a}^eGpiK}1*0oVpE%MI>LQG?%4|uqSGkZRxK)$hsYyAFxomHfWa|Mv77pA|LkI`n}-IzU|T>0EtF7tJ5ZfKj@%o}D! zxG!@Dh)iEn=KA`MLQeevx*CJoG@$9>>gsG`<_YZf3gB`9&`oQxH|Ky%Q+Kv06K}qq zyiH>t)%7t(URnpGOfzx}S^Ti3R!Yv{BbjethC3qk)okf>XO-G(^;nqv(go)bM^&jG ziCy6W!W}1#<245ya#fdAx(VH!2R|=*-51U-!$2EozX)F4e_*XqG*=w)J))FF z+BB$7aTY$D-I)0%Y)6aZ-I+V}IcG){tJ6okk)oZ5jAshgSNEa~nqF#H5${pwoVm{V zLWu^_muSnc&OJ@5Y|zjuzDN-q?i8ux;l5atXR$U9s z-;#Zkz2b9Rs6;$+n=SlDT;Ku4m`tfA+V<54K1Dh8jf1p*+~+O#n?Kt z-C8b-B4%!8&M?VQ3v-8w3w)6_OzLEwT4bLs{~u-3NCnE@PpSgk>~45!S>J^VQ=On? zaM~eDCwG`!y5x9g$(OfK6LiS5bqCv>NM5X8rcW_$x(Ba>-=e@p!8hmyS%1hz6n%7M zqu?D1Bzn6-!Cz7EEqZpHuCCEli~>@HmPO)mdciC+$=jOnPbqkt0%8aVN}I_{g10C# z@xFvb3jUIAKc|3f6lEUS6}lqB34s#3<`vwKyq##Pc&*?=wU3F04q=3oI z2_Xybv9$E;*C|+_;4KP%6G3aKyrJgbP^4c_a2-!m7OdFWavg@6;G)4W79rE|X8!4D ztq(7#jBy~l9C2!S8!7!6IFSzf&oEm~3v4;%tAflkKYWv9p5odBwut{s%C6>hz$k@S z7-T;RWeu`74atV2e@(^w3;}kc!JuH<=cXA1YfiEbx)Cm^!6IE}3U<;PTDXR$K@Bi( zj@Ggz-;HX~(jr+}5|)-vxwhr*4^Q8k6uBJ|w}UOX$rH)QyPg}c7HpDikU$q$+h`lQ zi?P=hW|xj${aW;E5ZfhvLl94roDKoJctcLd99qo8-HQ>(=V3vbAA61dmTF_+Mf<(N z+LglEj5Ib`R2A)87)aJ{i1tf%E@9{H*EihU%5EU$gu~a7#qoEA8*`$qL$Z;TskQQU z?MKZYb=^I>(le0g8Avv_Q|yMM*Z0oWx3*r}hW$nQQOxKZxzZT9F%HM$bE0>Pt z^DTR#<(Vb@4f75AlKt*jbTC<5E){Qx?uQnFRJ4JNTUCWvEvvXub+4>vrK~6EDP7Ov z^v+Xv2NS)A!5}H$1YveL3A4+c(f);l_;8_n-74g{i&v@4$8*a}t^Ur1w=P_}w0H@A zM5=0ToVr)Fb){-6I6bkG@8`w)-?QGdibbuEt$<(xY#nzgzwPHBDV}8qg&AMof_C@=W4!7js;`>(|8xoEU z>%L4l+8N*JIni@e@{qTAzty!I(i^>2EKd>eUhst;c8y)TRwDW?+&CB{**7u&i`E<-E6>=z9(_VeDuym;<-Y+$5ycBcS!af3Hy$uz5JfNcEw&BZxrn< zlD#Ft{?SCWjQv-YtY}@XRl23DCcbl}tSeF4e|zLk`1Vw~i%QGM0;~*yw83sU?2;Fvc8a+pZj`v5 zL=FBo;~#VKo_F_(cem($M)E!by%3itw)x7;!pu^?RN1-W>P)yg)2ac-^-ISgvMoAJ z?uQV9T`0BfBxQljlhywHpXC2&=*L6qhjQe#ngq3tzia!B?ZbT{*Mkz><9b)P-a9=a zw_DXYF@j4+#05!#t=rY@v=zlYj$WCS2=qM zXwxVQ3T>L{@-P1#JN)Wmt0UPMColB1h%q#mlZ%S&r2U?-7pw+_{gtT)ozYSXQ&PJS zm@|hJmIV}>Rg8u#V=-b5bJ^T-{Q>9XmmjQuL@qf?!a0lj%eh9}bI?10PgJ8oObtZ< zg^f0qWj9z0IV>f{)KCOc!oR*^z&KDXsMoR?k+&kGy4)N!K$F1&^>x+LTt#*;4XuJl zlPjLAtER0gH_Q|iW*(I74QCZ$*prMsu(;K=F3`64*Y&~9UncjQHeJgcRJF!s2lRGT z_X|Lc6$99 zQ-dbv`t{fm$)7hIgxB|QZMKXWs6=Rp9g!RuqMchX zJdu4EJTeN-zLDs$uxg6-A2Ts`6&z<}jUn z!DqtzvTwm0b>TbpnJ2hz$XsjLk#og4B`E&8mO#^%3T%qF!_Q{EtkdPQ)N|!1nSv)S zx4==0a+fU+uxPngFmVzRR4Z?G#pS zq$=Wzl*#Zb3suK+D3`hFpdnHR@8SyUSe=KqH+fgKj@s07HE7MsNKMXDF2Y4hGW8%f?!sUFQlqK%S1_6y=gKr~ zuQ0_UwYlvzSDP(;w&oO%)ul;Y8nEKo=#97^F^c~yMse*w&?xr)4*7e``huY~ z)Ldh5H)y|>N5$8CGuxv%E4thg1bxVFbEXZ|XDv2BS#@U>?2eu2bY~S&(>Yp=DgAIx z&zHuG7-_947(z&xDDY4HVVoJR3PtA)RfaQ7HC?_){%;9 z{ll|$=!w}k`ZBwyV$b#wC|E;;LtC?_%?zM3 zP4XfRihR&!##XFBCcmN`P$oGj|ItTC%RHx4vX-~H=-{uA>a|9?G(Em$YL=THkXU3(Mo(XlJl}(+)+ zK~z8l>gTZaEI%aw$K5cz>i+TeMDMfsU+R|62pNNGw)rGSZI|9OFRj@L;{bFL1aui; zA$GxgX02#0t7HEp61v%)l!LlIGouNL)sz7#h-U z(DgsVwWfQ}5?NE+T#dinX(JF|5lE;E?{xYLsy);nT6Rv3Or7ROcF%S`X>Z8!ZD0m` zMr^2g-TV7sH+|8;3 zN|rW~?5%a1EYG`2F}^{8BCJcB@ruF8rtcuq%RR zzzY!0jbe|Cu`%I8dQJ03-hp75uCkI$CO!NHJ!A4lCh=r~$WQ56oPxikfC)es=!)!D zWr?SsuKoi(WAaAw<0L4u&y;C40Dr- z(*_$1+NA(HD>5l(5oO7Qs9kjRzfn{s;QTGRB^fQ-c7f>`w>HaiOp;!*$)0i&u<~Q` zY1vvMiod#S{f|s9w2M%}%zkd*F*((ze zNxHm}t1jV!)D#yD2^V$|2JCcRi zsM>0+j62PAxZhPUvt_Qj@YYWL}XVSu*=O|*1t!G-Qwjr58 zKtMxrUTWHkvsiveDnAr6C%yPGlZZAXONZ_@CrXF#pDP)~UYwB7!KT#eC|*Y>oRO#w z=cdcUn_m>@O6zD>hYx#h?Gj72OC_*m&ZKxDH--Eq$O1QD1GyNF?KCA{b4-7~sU=zf zVJe0NcC_%8EcQOo&FZa(^gokN*fXxGR;t>3`?yrKJ$e|@JL<)1N6Q0)(cO{c>VDVs z9aDVt`@Zi7?(F&a;3w`M92U0@Nn3}+?q{X$XX7T3J0x+3VuPz(-A&7Kne5OvHW(ZH ze6@sw2+R%1c_xtKc;2($v{Q`OAjD@4U9s@l2xQnWV3B6}yz%utT}zYlvaX zkmi^f-Q-3g+>Vw{E30oDh#$ND?2Tt**41DBbN_z*&!PQF8xtiP<$n|i`;X@@&55NQ zQfY_i>y&(*G5u<7AJujWwXLJt)=_QiJlCA4EQy#aT4H9LFuwQGWSyhY1N-$7$%_p= zEbgAwnx5O;w_g=&_DD5*Vh57dP4}w1R;s(i>TapJJGMWz|I^liWNF3H%gYV7y6$Y2 zcF?$NBQ1lr;)JgW?a6Jr-JRHaK&%;*Y6jQI0#S-e77r{PeLs-!wTr%X$=4p;N42Yz zO4^p;sk7@|$>x=k&0@(`sbp*Pz$(PX-Pnh|Hh%Q_#EpsN+UrwdQM*)x%|d*R1{P4C z)WtXB?^t~EjZT_Es8Vyny9ss{_ZqjaG-8Wev2l;oxaZp8*x*tqS>GPtzWm~CUaa4N z>3!{4JbZ2GwfkIiY%p2go+xjR?Y-|UPk5WiRY2!*>+Kis9KGxQ!Sf$|HPPBHmhY3w z_r>-iPI-N7@26$e%qT;_Qu6QeOZJah@`MJqZRQt0$V>vnvK`bAF{n83JoZouw^~Kj? z#$-)>%oH2JM)HAc_Lv<_R#qj!S@~Y6bmP6!Ei0v4#L}mv(x;+>k7+W41G5GJ#tO#m z{`lasAXfHBl|3@;!Uc zcWlLXO!S?Qd?ymmzaaTuL_bh#BS33o2tKN{F=(NBlG9oZs#d~~KDc!8L--iz5q&+9 zuLt@Ko{}X~Tz}mvdFrBj@4K+Std*PxY)S%{RK%ZOKKkBEaOHX1_fgH=hX22}D-Ukt zI`3Ez1V9iV4idaTQs5fDjhwQz+AuRthW)1__n7W-c7_OM+_HbDwWk+V%W2w4oBqDH*b4+@I%x_n zKRmpB_r7c2_x-+4>LPKSq`*-mBa(sA_{t&Mv32I)yO(D--q|7Kc8a;3Qf{Z<>_k&RwL;O% zHqpCY@~)qxc6DMw%VetWZ#;GVsc4tzuaW#UlRc0va+P4^QEx#n#JWXnza{gdW)3vrx_lAhp2Nop@_jzc|22XcH1m=i05(J1XISZ(>VjXr zR07QD{jZ2=}R{PIF!bf1As)QauMixLHq_MorE6+lQ%%jk zR83R(U96_MlCD})vsTkl^|X+lr}1EenXvjJ#+kE|Bu7+Z#wZPi?@`^EB~1O`eM>u6 zO|OD5v{E6eOG_~IY*rn|+|)k9b51$KML#W3Qb|JlikO8`)fb=zj5Mthh=J0|pK<$k zIH1N;$HCShKgN(+3J)t!b_z$86mgDcKRgDNkIF%Clhm@ohYqFKXWXup0a7AaTJOB- zGW1)gp?|4-eB-#pNwzZ@OeSsk8ue;F&#JLgjXW5iIb=UBKBNrgN{T6EXkJqp)Yy;& zah|PE(n^H`t|(E>no_S+()*$sj^}7n0|40ML{+Z7k^+6F%-1;#2&H?5^rRu9@xgdT zSYD&_t-W4J3C~^S_>Xg`Jnm?%5>Ee}lCvAK79OOd^64jF*Z!rwdY_lP<0Sv3n_)vM zWSb1VL0>*K-Es3TR6ft>5v}wnl?ux;K1ZhZVS^Gf#beyI3d0~h_OcVr{d*5YfB zLw8i=Mk}e)cSKX~2Jgl8v6$#q*Dote`qK!mZBZMmZQZ z{})^>9DP<7d(~$IZhKKwvEiH~m~RUXSz4xC*eo zV*Cg2OiK)FY6_STay8#nSJaYKYMQc&qD^!&ykX|aTGRN)+O4e+kiKDS9sJZ)SKkv- zSIP9Ne#+P=9WRaQR!*h$jJpG4Tdr+yFkUQ|cIqZvCOVdvKd6OX@eCxNb&6-!G)fUe zn^(~TRx{>ktSLq=K{~Y=k3e<4vEC!>{U}IB(WJpDsnMhZ3_*oC$xIys*hR3pAk^rd zFuYRjILu!jKG8HdR-Tq^Duc7_iQ_t+%W&?G03tO~`ARE10hn zw)6u77TAb0@Bkg~1$+^1nvT8+fcEa!X1P1IANoEl6{~xt>fXt#|7SUXvr^Km0gZ~X zPy&!7(5RsF#*5cqeE&$~McE|PVnN43LC0K|Sg=bf*oC8RAceMEyE=6>$}K?or@I`W zD$S2jMhosX!QB>bXrDbSZR!;^;@Xc(YB)eptjcJ&=&2PvwfBJ1D~RSv<-~m{-}=Mu zdHW9rJ{*|aDHa`&iVj4qNFicHN7?tL>!vI60@V4EMqf{DyrES~Xi3k%i5HgLbmC|k zytk(JE2R2uqPs(KgEMAx^>6@WEe2W^0xf^ylUh6H>tq&=7#NTO0}*?~{;@YOGx&bj z?LpDoA$bugQy+;=&j+JhXLm~NJwjfunAa=i^`a-1(330iQ35!tEU8zrxKlWX9QH`9 zd&IzADX=$UU&;+gx$R&FftwMiTnscX1e#^A7w$E*6PA+N##xJN$&DjNE~}6Y4CS

@b47;yCwf_nEkXD8o;W_aif6>^NMfuU+;fo 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 literal 0 HcmV?d00001 diff --git a/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc b/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9893377d41d73cb53845ee54d98632a190dfcc1 GIT binary patch literal 1018 zcmaJ=E%p@winKH#9VU*kzbX%G(Eh2QA zWY^b3(C0=b@v}q;&a@GVTT^HNWz=(K&hMi*05h!vU=Q|4Kt5ZC=s%jU2gpGQtFd<< z{8(W(DHi84jrHWkyGm>;X+&0=nzHJ|R>zMEh)iXb zk(%8Z!FBsahT5I>!}#?J9+i!7vfD;?lBDPUMgb-pH-^evps4W^sAjIuqPUn@jFO-q ziYKat*SszCI~2nbA>CA}eGFx%^QAYyL0W$Wvhc1(ZoIegFUf literal 0 HcmV?d00001 From f36630e79e0de06a60dc1c1252ee9ad286e0dffd Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 08:41:41 -0300 Subject: [PATCH 04/10] Add gitignore --- .gitignore | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/.gitignore b/.gitignore index e69de29..3e3b04c 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,146 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# IPython / Jupyter Notebook +.ipynb_checkpoints +*.ipynb_export + +# PEP 582; used by e.g. python-pdm +__pypackages__/ + +# pyenv +.python-version + +# pipenv +Pipfile.lock + +# poetry +poetry.lock + +# pdm +pdm.lock +__pypackages__/ + +# celery beat schedule file +celerybeat-schedule +celerybeat.pid + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# pyre type checker +.pyre/ + +# pytype +.pytype/ + +# Cython debug symbols +cython_debug/ + +# VS Code +.vscode/ + +# PyCharm +.idea/ + +# macOS +.DS_Store + +# Others +*.log +*.tmp \ No newline at end of file From c4f79b3d25d29a54bc3e212f16a0deeb7d35339f Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 19:56:43 -0300 Subject: [PATCH 05/10] Update --- .../pt/part3/hierarchical_forecasting.qmd | 248 ++++++++- .../hierarchical_forecasting.quarto_ipynb | 439 +++++++++++++++ book/content/pt/part3/panel_data.qmd | 162 +++++- book/content/pt/part3/panel_data.quarto_ipynb | 525 ------------------ book/references.bib | 11 + 5 files changed, 856 insertions(+), 529 deletions(-) create mode 100644 book/content/pt/part3/hierarchical_forecasting.quarto_ipynb delete mode 100644 book/content/pt/part3/panel_data.quarto_ipynb diff --git a/book/content/pt/part3/hierarchical_forecasting.qmd b/book/content/pt/part3/hierarchical_forecasting.qmd index 84b37d6..20b264c 100644 --- a/book/content/pt/part3/hierarchical_forecasting.qmd +++ b/book/content/pt/part3/hierarchical_forecasting.qmd @@ -1 +1,247 @@ -# Séries hierarquicas \ No newline at end of file +# Forecasting Hierárquico + +Muitas vezes, não apenas temos múltiplas séries temporais, mas essas séries também estão organizadas em uma hierarquia. Por exemplo, vendas de produtos podem ser organizadas por SKU, categoria, departamento e total da loja. + +Vamos usar o mesmo dataset sintético, mas agora com uma hierarquia de produtos. + +```{mermaid} + +graph TD + root["__total"] + + %% group -1 + root --> g_minus1["-1"] + g_minus1 --> sku20["20"] + g_minus1 --> sku21["21"] + g_minus1 --> sku22["22"] + g_minus1 --> sku23["23"] + g_minus1 --> sku24["24"] + + %% group 0 + root --> g0["0"] + g0 --> sku0["0"] + g0 --> sku1["1"] + g0 --> sku2["2"] + g0 --> sku3["3"] + g0 --> sku4["4"] + + %% group 1 + root --> g1["..."] + + + %% group 3 + root --> g3["3"] + g3 --> sku15["15"] + g3 --> sku16["16"] + g3 --> sku17["17"] + g3 --> sku18["18"] + g3 --> sku19["19"] +``` + + +Ao mesmo tempo que dados hierarárquicos são interessantes pois nos trazem mais informação, eles também trazem desafios adicionais. Imagine que queremos prever as vendas futuras de cada produto. Se fizermos previsões independetes para cada produto, não há garantia que a soma das previsões dos produtos será igual à previsão do total da loja. Isso é chamado de incoerência nas previsões hierárquicas. O processo de ajustar as previsões para garantir coerência é chamado de **reconciliação**. + +## Carregando dados + +Vamos usar os dados sintéticos, agora com sua versao hierárquica. +```{python} +# | echo: false + +import warnings +import pandas as pd +import matplotlib.pyplot as plt + +warnings.filterwarnings("ignore") +``` + +```{python} +from tsbook.datasets.retail import SyntheticRetail + +dataset = SyntheticRetail("hierarchical") +y_train, X_train, y_test, X_test = dataset.load("y_train", "X_train", "y_test", "X_test") +``` + +## Uso de pandas e dados hierárquicos + +Agora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia. + +```{python} +y_train +``` + +Para obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte: + +```{python} +y_train.index.droplevel(-1).nunique() +``` + +Note que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, "__total")`, isso representa o total do grupo -1. + +```{python} +y_train.loc[(-1, "__total")].head() +``` + +O total de todas as séries é representado por `("__total", "__total")`. + +```{python} +y_train.loc[("__total", "__total")] +``` + +Para contabilizar o número de séries temporais individuais, podemos fazer o seguinte: +```{python} +y_train.index.droplevel(-1).nunique() +``` + +## Previsão sem reconciliação + +Vamos fazer uma previsão e entender o problema da incoerência. + +```{python} +fh = y_test.index.get_level_values(-1).unique() +``` + +```{python} +from tsbook.forecasting.reduction import ReductionForecaster +from lightgbm import LGBMRegressor + +forecaster = ReductionForecaster( + LGBMRegressor(n_estimators=100, verbose=-1), + window_length=30, + normalization_strategy="divide_mean", +) +forecaster.fit(y_train, X=X_train) +y_pred = forecaster.predict(fh, X=X_test) + +``` + +Para somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que, +quando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total. + +```{python} +from sktime.transformations.hierarchical.aggregate import Aggregator + +Aggregator().fit_transform(y_pred) - y_pred +``` + +Imagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa? +A raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde: + +$$ +C(t) = A(t) + B(t) +$$ + +Aqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completamente determinado por $A$ e $B$. Se fizermos previsões independentes para $A$, $B$ e $C$, não há garantia de que a relação acima será mantida nas previsões. + +## Reconciliação de previsões hierárquicas + +![](imgs/hierarchical_reconciled_vs_not.png) + +### Methods + +There are different methods to reconcile forecasts in hierarchical time series. +There is no silver bullet, and the best method depends on the data and the context. + +#### Bottom-up + +Hierarchical Bottom-up + +#### Top-down (forecast proportions) + +Topdown Forecast + +#### Optimal reconciliation + +The coherence can be translated as linear constraints on the forecasts: + +$$ +y_{total} = \sum_{i=1}^{n} y_i +$$ + +This is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints. + +![](imgs/coherent_plane.png) + +* **OLS** : project the base forecasts into the reconciliation space. +* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights. +* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called "optimal". + + +```{python} +from sktime.transformations.hierarchical.reconcile import ( + BottomUpReconciler, + TopdownReconciler, + OptimalReconciler +) + +bottom_up = BottomUpReconciler() * forecaster +top_down_fcst = TopdownReconciler() * forecaster +optimal = OptimalReconciler("ols") * forecaster +``` + +```{python} +bottom_up.fit(y_train) +top_down_fcst.fit(y_train) +optimal.fit(y_train) +``` + +```{python} +y_pred_bottomup = bottom_up.predict(fh=fh) +y_pred_topdown = top_down_fcst.predict(fh=fh) +y_pred_optimal = optimal.predict(fh=fh) +``` + +```{python} +Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup +``` + +In this case, there's not a lot of difference between the reconciliation outputs. +But we will see that the bottom-up approach is the most accurate one. + +```{python} +from sktime.utils.plotting import plot_series +import matplotlib.pyplot as plt +import pandas as pd + + +idx = y_train.index.droplevel(-1).unique()[10] + +plot_series( + y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,], + labels=["Train", "Test", "Predicted", "Predicted Optimal"], +) +plt.xlim(pd.to_datetime("2024-05-01"), None) +plt.show() +``` + +```{python} +from sktime.forecasting.reconcile import ReconcilerForecaster + + +mint_forecaster = ReconcilerForecaster( + forecaster=forecaster, + method="mint_shrink") + +mint_forecaster.fit(y_train) +``` + +```{python} +y_pred_mint = mint_forecaster.predict(fh=fh) +``` + +```{python} +from sktime.performance_metrics.forecasting import MeanSquaredScaledError + +metric = MeanSquaredScaledError(multilevel="uniform_average_time") + +pd.DataFrame( + { + "Baseline": metric(y_test, y_pred, y_train=y_train), + "BottomUpReconciler": metric(y_test, y_pred_bottomup, y_train=y_train), + "TopDownReconciler": metric(y_test, y_pred_topdown, y_train=y_train), + "OptimalReconciler (ols)": metric(y_test, y_pred_optimal, y_train=y_train), + "Mint Reconciler": metric(y_test, y_pred_mint, y_train=y_train), + }, + index=["Mean Absolute Scaled Error"] +) +``` + diff --git a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb new file mode 100644 index 0000000..eeb154a --- /dev/null +++ b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb @@ -0,0 +1,439 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasting Hierárquico\n", + "\n", + "Muitas vezes, não apenas temos múltiplas séries temporais, mas essas séries também estão organizadas em uma hierarquia. Por exemplo, vendas de produtos podem ser organizadas por SKU, categoria, departamento e total da loja.\n", + "\n", + "Vamos usar o mesmo dataset sintético, mas agora com uma hierarquia de produtos.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "```{mermaid}\n", + "\n", + "graph TD\n", + " root[\"__total\"]\n", + "\n", + " %% group -1\n", + " root --> g_minus1[\"-1\"]\n", + " g_minus1 --> sku20[\"20\"]\n", + " g_minus1 --> sku21[\"21\"]\n", + " g_minus1 --> sku22[\"22\"]\n", + " g_minus1 --> sku23[\"23\"]\n", + " g_minus1 --> sku24[\"24\"]\n", + "\n", + " %% group 0\n", + " root --> g0[\"0\"]\n", + " g0 --> sku0[\"0\"]\n", + " g0 --> sku1[\"1\"]\n", + " g0 --> sku2[\"2\"]\n", + " g0 --> sku3[\"3\"]\n", + " g0 --> sku4[\"4\"]\n", + "\n", + " %% group 1\n", + " root --> g1[\"...\"]\n", + "\n", + " \n", + " %% group 3\n", + " root --> g3[\"3\"]\n", + " g3 --> sku15[\"15\"]\n", + " g3 --> sku16[\"16\"]\n", + " g3 --> sku17[\"17\"]\n", + " g3 --> sku18[\"18\"]\n", + " g3 --> sku19[\"19\"]\n", + "```\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Ao mesmo tempo que dados hierarárquicos são interessantes pois nos trazem mais informação, eles também trazem desafios adicionais. Imagine que queremos prever as vendas futuras de cada produto. Se fizermos previsões independetes para cada produto, não há garantia que a soma das previsões dos produtos será igual à previsão do total da loja. Isso é chamado de incoerência nas previsões hierárquicas. O processo de ajustar as previsões para garantir coerência é chamado de **reconciliação**.\n", + "\n", + "## Carregando dados\n", + "\n", + "Vamos usar os dados sintéticos, agora com sua versao hierárquica.\n" + ], + "id": "a56f6588" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# | echo: false\n", + "\n", + "import warnings\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ], + "id": "a93e790c", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from tsbook.datasets.retail import SyntheticRetail\n", + "\n", + "dataset = SyntheticRetail(\"hierarchical\")\n", + "y_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")" + ], + "id": "ca69738e", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uso de pandas e dados hierárquicos\n", + "\n", + "Agora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n" + ], + "id": "2f0209cc" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train" + ], + "id": "cf0e8f33", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n" + ], + "id": "95fdfe18" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.index.droplevel(-1).nunique()" + ], + "id": "4485399d", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n" + ], + "id": "b5f9cd08" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.loc[(-1, \"__total\")].head()" + ], + "id": "d6238e8b", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "O total de todas as séries é representado por `(\"__total\", \"__total\")`.\n" + ], + "id": "cb327a09" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.loc[(\"__total\", \"__total\")]" + ], + "id": "f67a021c", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n" + ], + "id": "c9b4bcef" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_train.index.droplevel(-1).nunique()" + ], + "id": "13f08f44", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Previsão sem reconciliação\n", + "\n", + "Vamos fazer uma previsão e entender o problema da incoerência.\n" + ], + "id": "153d992b" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "fh = y_test.index.get_level_values(-1).unique()" + ], + "id": "cb35740e", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from tsbook.forecasting.reduction import ReductionForecaster\n", + "from lightgbm import LGBMRegressor\n", + "\n", + "forecaster = ReductionForecaster(\n", + " LGBMRegressor(n_estimators=100, verbose=-1),\n", + " window_length=30,\n", + " normalization_strategy=\"divide_mean\",\n", + ")\n", + "forecaster.fit(y_train, X=X_train)\n", + "y_pred = forecaster.predict(fh, X=X_test)" + ], + "id": "1113b227", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\n", + "quando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n" + ], + "id": "6f7994b3" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.transformations.hierarchical.aggregate import Aggregator\n", + "\n", + "Aggregator().fit_transform(y_pred) - y_pred" + ], + "id": "eaf3fda7", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa?\n", + "A raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde:\n", + "\n", + "$$\n", + "C(t) = A(t) + B(t)\n", + "$$\n", + "\n", + "Aqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completamente determinado por $A$ e $B$. Se fizermos previsões independentes para $A$, $B$ e $C$, não há garantia de que a relação acima será mantida nas previsões.\n", + "\n", + "## Reconciliação de previsões hierárquicas\n", + "\n", + "![](imgs/hierarchical_reconciled_vs_not.png)\n", + "\n", + "### Methods\n", + "\n", + "There are different methods to reconcile forecasts in hierarchical time series.\n", + "There is no silver bullet, and the best method depends on the data and the context.\n", + "\n", + "#### Bottom-up\n", + "\n", + "\"Hierarchical\n", + "\n", + "#### Top-down (forecast proportions)\n", + "\n", + "\"Topdown\n", + "\n", + "#### Optimal reconciliation\n", + "\n", + "The coherence can be translated as linear constraints on the forecasts:\n", + "\n", + "$$\n", + "y_{total} = \\sum_{i=1}^{n} y_i\n", + "$$\n", + "\n", + "This is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints.\n", + "\n", + "![](imgs/coherent_plane.png)\n", + "\n", + "* **OLS** : project the base forecasts into the reconciliation space.\n", + "* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights.\n", + "* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called \"optimal\".\n" + ], + "id": "a1f585b1" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.transformations.hierarchical.reconcile import (\n", + " BottomUpReconciler,\n", + " TopdownReconciler,\n", + " OptimalReconciler\n", + ")\n", + "\n", + "bottom_up = BottomUpReconciler() * forecaster\n", + "top_down_fcst = TopdownReconciler() * forecaster\n", + "optimal = OptimalReconciler(\"ols\") * forecaster" + ], + "id": "551e8242", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "bottom_up.fit(y_train)\n", + "top_down_fcst.fit(y_train)\n", + "optimal.fit(y_train)" + ], + "id": "9d46dae7", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_bottomup = bottom_up.predict(fh=fh)\n", + "y_pred_topdown = top_down_fcst.predict(fh=fh)\n", + "y_pred_optimal = optimal.predict(fh=fh)" + ], + "id": "9371d870", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup" + ], + "id": "10aa0778", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, there's not a lot of difference between the reconciliation outputs.\n", + "But we will see that the bottom-up approach is the most accurate one.\n" + ], + "id": "63dd147b" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.utils.plotting import plot_series\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "\n", + "idx = y_train.index.droplevel(-1).unique()[10]\n", + "\n", + "plot_series(\n", + " y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,],\n", + " labels=[\"Train\", \"Test\", \"Predicted\", \"Predicted Optimal\"],\n", + ")\n", + "plt.xlim(pd.to_datetime(\"2024-05-01\"), None)\n", + "plt.show()" + ], + "id": "4557f36e", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.forecasting.reconcile import ReconcilerForecaster\n", + "\n", + "\n", + "mint_forecaster = ReconcilerForecaster(\n", + " forecaster=forecaster,\n", + " method=\"mint_shrink\")\n", + "\n", + "mint_forecaster.fit(y_train)" + ], + "id": "6516c46a", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred_mint = mint_forecaster.predict(fh=fh)" + ], + "id": "fa2a17d7", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.performance_metrics.forecasting import MeanSquaredScaledError\n", + "\n", + "metric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")\n", + "\n", + "pd.DataFrame(\n", + " { \n", + " \"Baseline\": metric(y_test, y_pred, y_train=y_train),\n", + " \"BottomUpReconciler\": metric(y_test, y_pred_bottomup, y_train=y_train),\n", + " \"TopDownReconciler\": metric(y_test, y_pred_topdown, y_train=y_train),\n", + " \"OptimalReconciler (ols)\": metric(y_test, y_pred_optimal, y_train=y_train),\n", + " \"Mint Reconciler\": metric(y_test, y_pred_mint, y_train=y_train),\n", + " },\n", + " index=[\"Mean Absolute Scaled Error\"]\n", + ")" + ], + "id": "a500c8ef", + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)", + "path": "/Users/felipeangelim/Workspace/python_brasil_2025/.venv/share/jupyter/kernels/python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/book/content/pt/part3/panel_data.qmd b/book/content/pt/part3/panel_data.qmd index 079fb14..b7d2f5c 100644 --- a/book/content/pt/part3/panel_data.qmd +++ b/book/content/pt/part3/panel_data.qmd @@ -165,7 +165,7 @@ from tsbook.forecasting.reduction import ReductionForecaster from lightgbm import LGBMRegressor global_forecaster1 = ReductionForecaster( - LGBMRegressor(n_estimators=100), + LGBMRegressor(n_estimators=100, verbose=-1), window_length=30, ) @@ -220,7 +220,7 @@ Sabemos como preprocessar séries temporais univariadas para melhorar o desempen from sktime.transformations.series.difference import Differencer -global_forecaster2 = Differencer() global_forecaster1 +global_forecaster2 = Differencer() * global_forecaster1 global_forecaster2.fit(y_train, X_train) ``` @@ -330,4 +330,160 @@ metric_global4 = metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) errors["Global 4 (fourier)"] = metric_global4 errors -``` \ No newline at end of file +``` + +## Agrupamento + Modelos globais + +Uma técnica muito adotada é fazer modelos globais por clusters de séries temporais similares. + +Uma maneira de categorizar é usando ADI (Average Demand Interval) e CV² (squared Coefficient of Variation). O componente ADI é calculado como o percentual de períodos com demanda (y>0), e $CV^2$ é o quadrado do coeficiente de variação das demandas positivas. + +| **Categoria** | **ADI** | **CV²** | **Padrão típico** | **Exemplos** | +|:--------------|:--------|:--------|:------------------|:-------------| +| **Suave (Smooth)** | ≤ 1,32 | ≤ 0,49 | Demanda contínua e estável | Itens de consumo diário, alimentos | +| **Errática (Erratic)** | ≤ 1,32 | > 0,49 | Demanda contínua, porém muito variável | Moda, eletrônicos | +| **Intermitente (Intermittent)** | > 1,32 | ≤ 0,49 | Muitos períodos sem venda, mas valores estáveis quando ocorre | Peças de reposição, ferramentas | +| **Irregular (Lumpy)** | > 1,32 | > 0,49 | Muitos períodos com zero e valores muito variáveis quando há demanda | Equipamentos caros, sobressalentes grandes | + + + +```{python} +# | echo: false +import numpy as np +import matplotlib.pyplot as plt + +rng = np.random.default_rng(42) + + +def compute_adi(y): + nnz = np.count_nonzero(y > 0) + return len(y) / nnz if nnz > 0 else np.inf + + +def compute_cv2(y): + pos = y[y > 0] + if len(pos) <= 1: + return np.inf + m = pos.mean() + s = pos.std(ddof=1) + return (s / m) ** 2 if m > 0 else np.inf + + +def plot_category(ax, series_list, title): + x = np.arange(len(series_list[0])) + for y in series_list: + ax.plot(x, y, linewidth=2) + adis = [compute_adi(y) for y in series_list] + cv2s = [compute_cv2(y) for y in series_list] + ax.text( + 0.02, + 0.98, + f"avg ADI={np.mean(adis):.2f}\navg CV²={np.mean(cv2s):.2f}", + transform=ax.transAxes, + va="top", + ha="left", + bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="0.5", alpha=0.9), + ) + ax.set_title(title, fontsize=12) + ax.set_xlabel("time") + ax.set_ylabel("demand") + ax.grid(True, alpha=0.3) + + +N = 60 + + +def gen_smooth(n=3): + out = [] + for _ in range(n): + base = 20 + 2 * np.sin(np.linspace(0, 3 * np.pi, N)) + noise = rng.normal(0, 2, N) + out.append(np.clip(base + noise, 0, None)) + return out + + +def gen_erratic(n=3): + out = [] + for _ in range(n): + base = 20 + 2 * np.sin(np.linspace(0, 2 * np.pi, N)) + noise = rng.normal(0, 9, N) + out.append(np.clip(base + noise, 0, None)) + return out + + +def gen_intermittent(n=3): + out = [] + for _ in range(n): + mask = rng.binomial(1, 0.35, N) + values = 18 + rng.normal(0, 2, N) + out.append(np.clip(mask * values, 0, None)) + return out + + +def gen_lumpy(n=3): + out = [] + for _ in range(n): + mask = rng.binomial(1, 0.25, N) + values = rng.gamma(shape=2.0, scale=10.0, size=N) + out.append(np.clip(mask * values, 0, None)) + return out + + +cats = [ + ("Smooth (low ADI, low CV²)", gen_smooth()), + ("Erratic (low ADI, high CV²)", gen_erratic()), + ("Intermittent (high ADI, low CV²)", gen_intermittent()), + ("Lumpy (high ADI, high CV²)", gen_lumpy()), +] + +fig, axes = plt.subplots(2, 2, figsize=(10, 6)) +for ax, (title, series) in zip(axes.ravel(), cats): + plot_category(ax, series, title) + +plt.tight_layout() +plt.show() +``` + + +```{python} + + +from sktime.forecasting.compose import GroupbyCategoryForecaster +from sktime.transformations.series.adi_cv import ADICVTransformer + +# TODO: customize yours! +group_forecaster = GroupbyCategoryForecaster( + forecasters = + {"smooth": global_forecaster3.clone(), + "erratic": global_forecaster3.clone(), + "intermittent": global_forecaster3.clone(), + "lumpy": global_forecaster3.clone(), + }, + transformer=ADICVTransformer(features=["class"],)) + + +group_forecaster.fit(y_train, X_train) + +``` + + +```{python} + +y_pred_group = group_forecaster.predict(fh=fh, X=X_test) +metric_group = metric(y_true=y_test, y_pred=y_pred_group, y_train=y_train) + +metric_group +``` + +Although it did not perform better than the best global model in this synthetic example, in real-world scenarios this approach can be very effective, particularly when there are large samples for each category, allowing the model to learn specific patterns for each group of series. + +In addition, this can be useful when there are computation constraints, as training multiple smaller models for each cluster can be more efficient than training a single large global model. + + +## Resumo + +Aqui, vimos como trabalhar com dados em painel (multi-series) usando o sktime. Vimos, especialmente, como criar modelos globais de Machine Learning que aproveitam as similaridades entre as séries para melhorar o desempenho das previsões. Também destacamos a importância do preprocessamento e da engenharia de features para obter bons resultados com esses modelos. + +Para uma análise mais aprofundada, recomendo o artigo de [@montero2021principles], que discute princípios para forecasting em dados em painel usando modelos globais de Machine Learning. + + diff --git a/book/content/pt/part3/panel_data.quarto_ipynb b/book/content/pt/part3/panel_data.quarto_ipynb deleted file mode 100644 index 01a1ae6..0000000 --- a/book/content/pt/part3/panel_data.quarto_ipynb +++ /dev/null @@ -1,525 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Dados em painel (multi-series)\n", - "\n", - "Em muitas aplicações, não temos acesso a uma única série temporal, mas sim a um conjunto de séries temporais relacionadas. Isso é comum em cenários como vendas de produtos em diferentes lojas, consumo de energia em diferentes regiões, etc. Esses dados são chamados de dados em painel.\n", - "\n", - "Uma ideia poderosa é aproveitar a similaridade entre as séries para melhorar as previsões. Chamamos de **modelos globais** os modelos capazes de aprender padrões comuns entre as séries, ao contrário dos **modelos locais** que aprendem apenas com uma única série.\n", - "\n", - "A maioria dos modelos clássicos de séries temporais são locais. Modelos globais são, em geral, baseados em modelos tabulares de ML ou deep learning. Segundo competições de séries temporais, como a M5, em forecasts de painel os modelos globais são os que apresentam melhor desempenho [@makridakis2022m5].\n", - "\n", - "\n", - "## Acessando os dados\n", - "\n", - "Aqui, vamos usar o dataset sintético que vimos antes, mas agora teremos acesso às várias séries temporais que compõe o total.\n", - "\n", - "Esse dataset é feito para simular um caso de varejo, onde temos vendas diárias de vários produtos:\n" - ], - "id": "e137e756" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# | echo: false\n", - "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ], - "id": "0c5f7df4", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# | code-fold: true\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from sktime.utils.plotting import plot_series" - ], - "id": "2270a18e", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from tsbook.datasets.retail import SyntheticRetail\n", - "dataset = SyntheticRetail(\"panel\")\n", - "y_train, X_train, y_test, X_test = dataset.load(\n", - " \"y_train\", \"X_train\", \"y_test\", \"X_test\"\n", - ")" - ], - "id": "f493045c", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note que, para dados em painel, os dataframes possuem mais um nível de índice, que identifica a série temporal a que cada observação pertence:\n" - ], - "id": "fa5fb010" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "display(X_train)" - ], - "id": "3622dc30", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Podemos visualizar algumas séries. Vemos que há mais zeros nesse dataset, em comparação\n", - "ao que usamos antes.\n" - ], - "id": "95a04b79" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.utils.plotting import plot_series\n", - "\n", - "fig, ax = plt.subplots(figsize=(10, 4))\n", - "y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, [0,10]].plot(ax=ax, alpha=0.7)\n", - "plt.show()" - ], - "id": "22e2243c", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pandas e multi-índices\n", - "\n", - "Para trabalhar com essas estruturas de dados, é importante revisar algumas operações do pandas.\n" - ], - "id": "c01307ab" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.index.get_level_values(-1)" - ], - "id": "5532c93b", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As seguintes operações são bem úteis para trabalhar com multi-índices:\n" - ], - "id": "862d2e83" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.index" - ], - "id": "68266066", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Acessar valores únicos no primeiro nivel (nível 0, mais à esquerda):\n" - ], - "id": "1a649a81" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.index.get_level_values(0).unique()" - ], - "id": "59f4c74a", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Selecionar uma série específica (nível 0 igual a 0):\n" - ], - "id": "19701269" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.loc[0]" - ], - "id": "854f8d35", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Aqui, podemos usar `pd.IndexSlice` para selecionar várias séries ao mesmo tempo.\n", - "Note que pd.IndexSlice é passado diretamente para `.loc`:\n" - ], - "id": "b786bfe5" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.loc[pd.IndexSlice[[0,2], :]]" - ], - "id": "0c12cef0", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Agora, para selecionar o horizonte de forecasting, temos que chamar `unique`:\n" - ], - "id": "39f713b9" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "fh = y_test.index.get_level_values(1).unique()\n", - "\n", - "fh" - ], - "id": "301d79e1", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Upcasting automático\n", - "\n", - "Nem todos modelos suportam nativamente dados em painel. Por exemplo, exponential smoothing.\n", - "Aqui, temos uma boa notícia: sem linhas extras necessárias. O sktime faz *upcasting* automático para dados em painel ao usar estimadores do `sktime`.\n" - ], - "id": "7b1a4122" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.forecasting.naive import NaiveForecaster\n", - "\n", - "\n", - "naive_forecaster = NaiveForecaster(strategy=\"last\", window_length=1)\n", - "naive_forecaster.fit(y_train)\n", - "y_pred_naive = naive_forecaster.predict(fh=fh)\n", - "\n", - "y_pred_naive" - ], - "id": "6798f87d", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Internamente, o `sktime` cria um clone do estimador para cada série nos dados em painel.\n", - "Em seguida, cada clone é treinado com a série correspondente. Isso é feito de\n", - "forma transparente para usuário, mas sem exigir esforço.\n", - "\n", - "O atributo `forecasters_` armazena um DataFrame com os estimatores de cada série.\n" - ], - "id": "62a55f55" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "naive_forecaster.forecasters_.head()" - ], - "id": "46c3b021", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "É dificil explicar o quanto isso é extremamente útil para código limpo e prototipagem rápida.\n", - "Foi um dos motivos que me levaram a usar o `sktime`.\n", - "\n", - "\n", - "## Métricas\n", - "\n", - "Agora que temos várias séries, precisamos explicar como calcular métricas de avaliação.\n", - "O sktime oferece duas opções para isso, como argumentos na criação da métrica:\n", - "\n", - "* `multilevel=\"uniform_average_time\"` para calcular a média das séries temporais no painel.\n", - "* `multilevel=\"raw_values\"` para obter o erro por série.\n" - ], - "id": "af733bd6" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.performance_metrics.forecasting import MeanSquaredScaledError\n", - "\n", - "metric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")" - ], - "id": "03f8f93f", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "metric(y_true=y_test, y_pred=y_pred_naive, y_train=y_train)" - ], - "id": "a630f862", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Na prática, as métricas que a sua aplicação exige podem ser diferentes. Por exemplo,\n", - "as séries temporais podem ter diferentes importâncias, e você pode querer ponderar\n", - "as métricas de acordo. \n", - "\n", - "Para isso, é possível criar uma métrica customizada no sktime, mas não entraremos\n", - "nesse mérito aqui.\n", - "\n", - "## Modelos globais de Machine Learning\n", - "\n", - "Quando vimos como usar modelos de Machine Learning para forecasting, já mencionamos\n", - "como é necessário traduzir o problema de séries temporais para um problema de regressão tradicional.\n", - "\n", - "No caso de dados em painel, também podemos usar essa abordagem, mas agora aproveitando\n", - "todas as séries temporais para treinar um único modelo global.\n", - " \n", - "![](img/global_reduction.png)\n", - "\n", - "Abaixo, vamos comparar um LightGBM global com um local, e ver como o global\n", - "aproveita melhor os dados.\n" - ], - "id": "5c5885a4" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from tsbook.forecasting.reduction import ReductionForecaster\n", - "from lightgbm import LGBMRegressor\n", - "\n", - "global_forecaster1 = ReductionForecaster(\n", - " LGBMRegressor(n_estimators=100),\n", - " window_length=30,\n", - ")\n", - "\n", - "global_forecaster1.fit(y_train, X_train)" - ], - "id": "45eacc63", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_pred_global1 = global_forecaster1.predict(fh=fh, X=X_test)" - ], - "id": "6c0581f9", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "fig, ax = plt.subplots(figsize=(10, 4))\n", - "y_train.loc[10, \"sales\"].plot(ax=ax, label=\"Treino\")\n", - "y_test.loc[10, \"sales\"].plot(ax=ax, label=\"Teste\")\n", - "y_pred_global1.loc[10, \"sales\"].plot(ax=ax, label=\"Global 1\")\n", - "plt.legend()\n", - "plt.show()" - ], - "id": "3cb544c1", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Para forçar que um modelo global funcione como um modelo local, podemos usar `ForecastByLevel`, que cria um modelo separado para cada série temporal, mesmo quando o estimador suporta dados em painel.\n" - ], - "id": "f12c3123" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.forecasting.compose import ForecastByLevel\n", - "\n", - "local_forecaster = ForecastByLevel(global_forecaster1, groupby=\"local\")\n", - "\n", - "local_forecaster.fit(y_train, X=X_train)" - ], - "id": "cff929c3", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_pred_local = local_forecaster.predict(fh=fh, X=X_test)\n", - "\n", - "err_global = metric(y_true=y_test, y_pred=y_pred_global1, y_train=y_train)\n", - "err_local = metric(y_true=y_test, y_pred=y_pred_local, y_train=y_train)\n", - "\n", - "pd.DataFrame(\n", - " {\n", - " \"Global\": [err_global],\n", - " \"Local\": [err_local],\n", - " },\n", - " index=[\"MSE\"],\n", - ")" - ], - "id": "c17ed417", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preprocessamento e engenharia de features\n", - "\n", - "Sabemos como preprocessar séries temporais univariadas para melhorar o desempenho dos modelos de ML. Aplicamos da mesma maneira que fizemos anteriormente o `Differencer`, com objetivo de remover tendências.\n" - ], - "id": "f85129f1" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.series.difference import Differencer\n", - "from sktime.transformations.series.boxcox import LogTransformer\n", - "\n", - "global_forecaster2 = Differencer() * global_forecaster1\n", - "global_forecaster2.fit(y_train, X_train)" - ], - "id": "4921f2fe", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_pred_global2 = global_forecaster2.predict(fh=fh, X=X_test)\n", - "metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train)" - ], - "id": "81461eef", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "fig, ax = plt.subplots(figsize=(10, 4))\n", - "y_train.loc[0].plot(ax=ax, label=\"Treino\")\n", - "y_test.loc[0].plot(ax=ax, label=\"Teste\")\n", - "y_pred_global3.loc[0].plot(ax=ax, label=\"Global 4\")\n", - "fig.show()" - ], - "id": "37de385b", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pipelines exógenos também para dados em painel!\n" - ], - "id": "7e61973c" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.series.fourier import FourierFeatures\n", - "\n", - "fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq=\"D\")\n", - "\n", - "global_forecaster4 = fourier_features ** global_forecaster3\n", - "global_forecaster4.fit(y_train, X_train)" - ], - "id": "3b4a59d7", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test)\n", - "metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train)" - ], - "id": "88e8b975", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train)" - ], - "id": "091e328c", - "execution_count": null, - "outputs": [] - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "language": "python", - "display_name": "Python 3 (ipykernel)", - "path": "/Users/felipeangelim/Workspace/python_brasil_2025/.venv/share/jupyter/kernels/python3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/book/references.bib b/book/references.bib index af4a1ac..ce2ab93 100644 --- a/book/references.bib +++ b/book/references.bib @@ -14,4 +14,15 @@ @article{makridakis2022m5 pages = {1346--1364}, year = {2022}, publisher = {Elsevier} +} + +@article{montero2021principles, + title = {Principles and algorithms for forecasting groups of time series: Locality and globality}, + author = {Montero-Manso, Pablo and Hyndman, Rob J}, + journal = {International Journal of Forecasting}, + volume = {37}, + number = {4}, + pages = {1632--1653}, + year = {2021}, + publisher = {Elsevier} } \ No newline at end of file From ef3ccea6aa373c1c26bd2a1751ddb6f122d03e3b Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 21:14:20 -0300 Subject: [PATCH 06/10] Update --- book/.gitignore | 4 +- book/content/pt/part3/deep_learning.qmd | 142 +- .../pt/part3/hierarchical_forecasting.qmd | 138 +- .../hierarchical_forecasting.quarto_ipynb | 209 ++- book/content/pt/part3/img/coherent_plane.png | Bin 0 -> 73996 bytes .../pt/part3/img/hierarchical_bottomup.png | Bin 0 -> 71541 bytes .../img/hierarchical_reconciled_vs_not.png | Bin 0 -> 215254 bytes .../pt/part3/img/hierarchical_td_fcst.png | Bin 0 -> 242685 bytes .../pt/part3/img/hierarchical_topdown.png | Bin 0 -> 76105 bytes .../pt/part3/img/nbeats_simplified.png | Bin 0 -> 187315 bytes book/content/pt/part3/panel_data.qmd | 29 +- poetry.lock | 1282 ++++++++++++++++- pyproject.toml | 1 + .../global_reduction.cpython-311.pyc | Bin 64212 -> 0 bytes .../__pycache__/reduction.cpython-311.pyc | Bin 64121 -> 0 bytes src/tsbook/forecasting/reduction.py | 472 ++++-- ...est_reduction.cpython-311-pytest-8.4.2.pyc | Bin 1018 -> 0 bytes tests/forecasting/test_reduction.py | 35 +- 18 files changed, 2042 insertions(+), 270 deletions(-) create mode 100644 book/content/pt/part3/img/coherent_plane.png create mode 100644 book/content/pt/part3/img/hierarchical_bottomup.png create mode 100644 book/content/pt/part3/img/hierarchical_reconciled_vs_not.png create mode 100644 book/content/pt/part3/img/hierarchical_td_fcst.png create mode 100644 book/content/pt/part3/img/hierarchical_topdown.png create mode 100644 book/content/pt/part3/img/nbeats_simplified.png delete mode 100644 src/tsbook/forecasting/__pycache__/global_reduction.cpython-311.pyc delete mode 100644 src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc delete mode 100644 tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc diff --git a/book/.gitignore b/book/.gitignore index 4f0c017..8aec4bf 100644 --- a/book/.gitignore +++ b/book/.gitignore @@ -1,3 +1,5 @@ /.quarto/ -_book/ \ No newline at end of file +_book/ + +**/lightning_logs/** \ No newline at end of file diff --git a/book/content/pt/part3/deep_learning.qmd b/book/content/pt/part3/deep_learning.qmd index 4afeca8..94f7aa6 100644 --- a/book/content/pt/part3/deep_learning.qmd +++ b/book/content/pt/part3/deep_learning.qmd @@ -1 +1,141 @@ -# Deep learning \ No newline at end of file +## Modelos de deep learning e zero-shot forecasting + +Além de modelos de ML simples, também podemos usar modelos de deep learning para forecasting. Podemos com certeza usar uma rede neural simples como um regressor, assim como fizemos com os modelos de ML tradicionais. No entanto, existem alguns modelos com arquiteturas específicas para forecasting de séries temporais. Por exemplo, o N-BEATS é um modelo de deep learning que pode ser usado para forecasting. + +::: {.callout-tip} + +Importante notar que esse livro/tutorial tem o objetivo de ser curto e prático, então não entraremos em muitos detalhes sobre deep learning ou sobre todos métodos +existentes. + +::: + + +```{python} +# | echo: false +import warnings + +warnings.filterwarnings("ignore") +``` + +```{python} +# | code-fold: true +import pandas as pd +import matplotlib.pyplot as plt + +from sktime.utils.plotting import plot_series + +``` + +```{python} +# | code-fold: true + +from tsbook.datasets.retail import SyntheticRetail + +dataset = SyntheticRetail("panel") +y_train, X_train, y_test, X_test = dataset.load( + "y_train", "X_train", "y_test", "X_test" +) + +fh = y_test.index.get_level_values(-1).unique() +``` + +## N-Beats + + N-BEATS é um modelo de séries temporais totalmente baseado em camadas densas (MLP)—nada de RNN/LSTM nem convolução. Ele pega uma janela do passado e entrega diretamente a previsão do futuro, aprendendo padrões como tendência e sazonalidade de forma pura, só com perceptrons. + + +O N-BEATS usa bases para construir sinais interpretáveis: + +* Base de tendência: combina funções polinomiais (captura subidas/descidas suaves). +* Base sazonal: combina senos/cossenos (captura repetições periódicas). +* Base genérica: aprende formas livres (sem pressupor forma analítica). + +Assim, internamente, ele determina os coeficientes das funções base para modelar a série temporal, baseado no histórico observado, fazendo uma espécie de meta-aprendizado interno. + +Os blocos são empilhados e executados de forma sucessiva. Pense numa fila de especialistas olhando a mesma janela do passado: + +* Cada um explica a sua parte do que viu (remove do passado o que já foi entendido = backcast), e propõe um pedaço da previsão (seu forecast). +* O que não foi explicado segue para o próximo especialista. No final, a previsão é a soma do que cada um sugeriu. + +![](img/nbeats_simplified.png) + + +### Pytorch Forecasting + +O Sktime nao é uma biblioteca especializada em deep learning, mas sim uma API +uniforme que provê acesso aos mais diversos algoritmos. + +Logo, também provemos acesso a bibliotecas especializadas em deep learning, como o +Pytorch Forecasting, que implementa o N-BEATS. + +Aqui, temos que definir os hiperparâmetros do modelo, como o número de blocos, o tamanho do contexto (janela de entrada), e o número de coeficientes para as funcões de base. + +```{python} +from sktime.forecasting.pytorchforecasting import PytorchForecastingNBeats +from pytorch_forecasting.data.encoders import EncoderNormalizer + +CONTEXT_LENGTH = 365 +nbeats = PytorchForecastingNBeats( + train_to_dataloader_params={"batch_size": 256}, + trainer_params={"max_epochs": 1}, + model_params={ + "stack_types": ["trend", "seasonality"], # One of the following values: “generic”, “seasonality” or “trend”. + "num_blocks" : [2,2], # The number of blocks per stack. + "context_length": CONTEXT_LENGTH, # lookback period + "expansion_coefficient_lengths" : [2, 5], + "learning_rate": 1e-3, + }, + dataset_params={ + + "max_encoder_length": CONTEXT_LENGTH, + "target_normalizer": EncoderNormalizer() + }, +) + +nbeats.fit(y_train.astype(float), fh=fh) +``` + +```{python} +y_pred_nbeats = nbeats.predict(fh=fh, X=X_test) +``` + +```{python} + +from sktime.performance_metrics.forecasting import MeanSquaredScaledError + +metric = MeanSquaredScaledError(multilevel="uniform_average_time") +metric(y_true=y_test, y_pred=y_pred_nbeats, y_train=y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +y_train.loc[10].plot(ax=ax, label="Train") +y_test.loc[10].plot(ax=ax, label="Test") +y_pred_nbeats.loc[10].plot(ax=ax, label="N-BEATS") +fig.show() +``` + +```{python} +new_y_train = (y_train.loc[0]**2 + y_train.loc[20]).astype(float) +new_y_test = (y_test.loc[0]**2 + y_test.loc[20]).astype(float) + +# Plotting the new series +fig, ax = plt.subplots(figsize=(10, 4)) +new_y_train["sales"].plot.line(ax=ax, label="New Train") +new_y_test["sales"].plot.line(ax=ax, label="New Test") +fig.show() +``` + +```{python} +y_pred_zeroshot = nbeats.predict(fh=fh, y=new_y_train) +``` + +```{python} +fig, ax = plt.subplots(figsize=(10, 4)) +new_y_train["sales"].plot.line(ax=ax, label="New Train") +new_y_test["sales"].plot.line(ax=ax, label="New Test") +y_pred_zeroshot["sales"].plot.line(ax=ax, label="N-BEATS Zero-shot") +plt.legend() +plt.show() +``` + diff --git a/book/content/pt/part3/hierarchical_forecasting.qmd b/book/content/pt/part3/hierarchical_forecasting.qmd index 20b264c..53c34a4 100644 --- a/book/content/pt/part3/hierarchical_forecasting.qmd +++ b/book/content/pt/part3/hierarchical_forecasting.qmd @@ -105,7 +105,7 @@ from tsbook.forecasting.reduction import ReductionForecaster from lightgbm import LGBMRegressor forecaster = ReductionForecaster( - LGBMRegressor(n_estimators=100, verbose=-1), + LGBMRegressor(n_estimators=50, verbose=-1), window_length=30, normalization_strategy="divide_mean", ) @@ -123,6 +123,7 @@ from sktime.transformations.hierarchical.aggregate import Aggregator Aggregator().fit_transform(y_pred) - y_pred ``` +Existe uma diferença... ou seja, os valores não batem. Imagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa? A raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde: @@ -134,70 +135,121 @@ Aqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completament ## Reconciliação de previsões hierárquicas -![](imgs/hierarchical_reconciled_vs_not.png) +![](img/hierarchical_reconciled_vs_not.png) -### Methods +Existem diferentes métodos para reconciliar previsões em séries temporais hierárquicas. Não existe uma solução única, e o melhor método depende dos dados e do contexto. -There are different methods to reconcile forecasts in hierarchical time series. -There is no silver bullet, and the best method depends on the data and the context. +## Bottom-up -#### Bottom-up +A maneira mais simples de reconcialiar previsões hierárquicas é a abordagem **bottom-up**. Nessa abordagem, fazemos previsões apenas para as séries mais baixas na hierarquia (as séries filhas) e depois somamos essas previsões para obter as previsões das séries superiores (as séries pais). -Hierarchical Bottom-up +Hierarchical Bottom-up -#### Top-down (forecast proportions) +Lados positivos: -Topdown Forecast +* Simplicidade: fácil de entender e implementar. +* Coerência garantida: a soma das previsões das séries filhas sempre será igual à previsão da série pai. +* Sérias filhas podem capturar detalhes específicos que podem ser perdidos em níveis superiores. -#### Optimal reconciliation +No entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados. -The coherence can be translated as linear constraints on the forecasts: +```{python} +from sktime.transformations.hierarchical.reconcile import BottomUpReconciler + +bottom_up = BottomUpReconciler() * forecaster +bottom_up.fit(y_train) + +y_pred_bottomup = bottom_up.predict(fh=fh) +``` + + +Agora vemos que as previsões são coerentes: + +```{python} +Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup +``` + +## Top-down (forecast proportions) + +Outra abordagem é a **top-down**. Nessa abordagem, fazemos previsões apenas para as séries superiores na hierarquia (as séries pais) e depois distribuímos essas previsões para as séries filhas com base em proporções previstas. + +Suponha que temos a seguinte hierarquia $C(t) = A(t) + B(t)$. Considere $\hat{C}(t)$, $\hat{A}(t)$ e $\hat{B}(t)$ como as previsões para $C$, $A$ e $B$, respectivamente. Na abordagem top-down, faríamos o seguinte: +1. Prever $\hat{C}(t)$, $\hat{A}(t)$ e $\hat{B}(t)$ independentemente. +2. Calcular as proporções previstas para os níveis mais baixos: $$ -y_{total} = \sum_{i=1}^{n} y_i +p_A(t) = \frac{\hat{A}(t)}{\hat{A}(t) + \hat{B}(t)} $$ -This is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints. +$$ +p_B(t) = \frac{\hat{B}(t)}{\hat{A}(t) + \hat{B}(t)} +$$ -![](imgs/coherent_plane.png) +3. Distribuir a previsão de $C$ para $A$ e $B$ usando essas proporções: +$$ +\tilde{A}(t) = p_A(t) \cdot \hat{C}(t) +$$ -* **OLS** : project the base forecasts into the reconciliation space. -* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights. -* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called "optimal". +$$ +\tilde{B}(t) = p_B(t) \cdot \hat{C}(t) +$$ +Essa abordagem é capaz de usufruir da qualidade do forecast total, e ainda consegue distribuir para as séries filhas baseadas no histórico. -```{python} -from sktime.transformations.hierarchical.reconcile import ( - BottomUpReconciler, - TopdownReconciler, - OptimalReconciler -) +Topdown Forecast -bottom_up = BottomUpReconciler() * forecaster -top_down_fcst = TopdownReconciler() * forecaster -optimal = OptimalReconciler("ols") * forecaster -``` + +O que chamam de "Proporções históricas" é equivalente a esse método, mas com um modelo Naive para prever as proporções. + +Esse método pode ser bom quando o forecast total é de boa qualidade. No entanto, +dependemos profundamente da qualidade do forecast total e das proporções. ```{python} -bottom_up.fit(y_train) +from sktime.transformations.hierarchical.reconcile import TopdownReconciler + +top_down_fcst = TopdownReconciler() * forecaster top_down_fcst.fit(y_train) -optimal.fit(y_train) -``` -```{python} -y_pred_bottomup = bottom_up.predict(fh=fh) y_pred_topdown = top_down_fcst.predict(fh=fh) -y_pred_optimal = optimal.predict(fh=fh) ``` +## Reconciliação ótima + +Existe uma abordagem mais sofisticada, com uma intuição geométrica interessante. +A ideia é ajustar as previsões iniciais para que elas satisfaçam as restrições de soma da hierarquia. Por exemplo, para a hierarquia $C(t) = A(t) + B(t)$, queremos garantir que: + +$$ +\hat{C}(t) = \hat{A}(t) + \hat{B}(t) +$$ + +Se consideramos nosso espaço 3D de observações $(\hat{A}, \hat{B}, \hat{C})$, a +condição acima é satisfeita para um plano 2D nesse universo. + + +![](img/coherent_plane.png) + + +Podemos então projetar nossas previsões iniciais nesse plano para obter previsões coerentes. Essa projeção pode ser feita de várias maneiras, levando a diferentes métodos de reconciliação ótima. Os métodos levam o nome "OLS" pois a projeção é feita minimizando o erro quadrático (Ordinary Least Squares). + +* **OLS** : projetar ortogonalmente todas as previsões base na espaço de reconciliação, tratando todas as séries igualmente. +* **Weighted OLS**: projetar obliquamente, ou seja, considerando pesos diferentes para cada série, permitindo dar mais importância a certas séries na reconciliação. A projeção não faz mais uma perpendicular, mas sim uma oblíqua. +* **Minimum trace (MinT)**: use a matriz de covariância do erro para encontrar as previsões reconciliadas ótimas. Chamado de "ótimo". + + +Para a reconciliação ótima com OLS, podemos usar o `OptimalReconciler` do sktime: + ```{python} -Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup +from sktime.transformations.hierarchical.reconcile import ( + OptimalReconciler +) + +optimal = OptimalReconciler("ols") * forecaster +y_pred_optimal = optimal.predict(fh=fh) ``` -In this case, there's not a lot of difference between the reconciliation outputs. -But we will see that the bottom-up approach is the most accurate one. ```{python} +# | code-fold: true from sktime.utils.plotting import plot_series import matplotlib.pyplot as plt import pandas as pd @@ -206,13 +258,18 @@ import pandas as pd idx = y_train.index.droplevel(-1).unique()[10] plot_series( - y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,], - labels=["Train", "Test", "Predicted", "Predicted Optimal"], + y_train.loc[idx,], + y_test.loc[idx,], + y_pred.loc[idx,], + y_pred_optimal.loc[idx,], + labels=["Train", "Test", "Predicted (sem reconciliação)", "Predicted (ótimo)"], ) plt.xlim(pd.to_datetime("2024-05-01"), None) plt.show() ``` +Para reconciliações ótimas (que usam a covariância do erro), podemos usar o `ReconcilerForecaster` do sktime, que internamente já faz o cálculo da covariância do erro: + ```{python} from sktime.forecasting.reconcile import ReconcilerForecaster @@ -222,12 +279,11 @@ mint_forecaster = ReconcilerForecaster( method="mint_shrink") mint_forecaster.fit(y_train) -``` - -```{python} y_pred_mint = mint_forecaster.predict(fh=fh) ``` +## Comparando resultados + ```{python} from sktime.performance_metrics.forecasting import MeanSquaredScaledError diff --git a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb index eeb154a..cfe4cea 100644 --- a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb +++ b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb @@ -61,7 +61,7 @@ "\n", "Vamos usar os dados sintéticos, agora com sua versao hierárquica.\n" ], - "id": "a56f6588" + "id": "27e87536" }, { "cell_type": "code", @@ -75,7 +75,7 @@ "\n", "warnings.filterwarnings(\"ignore\")" ], - "id": "a93e790c", + "id": "29aab82e", "execution_count": null, "outputs": [] }, @@ -88,7 +88,7 @@ "dataset = SyntheticRetail(\"hierarchical\")\n", "y_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")" ], - "id": "ca69738e", + "id": "ba69a95f", "execution_count": null, "outputs": [] }, @@ -100,7 +100,7 @@ "\n", "Agora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n" ], - "id": "2f0209cc" + "id": "44c0e139" }, { "cell_type": "code", @@ -108,7 +108,7 @@ "source": [ "y_train" ], - "id": "cf0e8f33", + "id": "72d9f5ba", "execution_count": null, "outputs": [] }, @@ -118,7 +118,7 @@ "source": [ "Para obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n" ], - "id": "95fdfe18" + "id": "ac4b6e5d" }, { "cell_type": "code", @@ -126,7 +126,7 @@ "source": [ "y_train.index.droplevel(-1).nunique()" ], - "id": "4485399d", + "id": "0500b976", "execution_count": null, "outputs": [] }, @@ -136,7 +136,7 @@ "source": [ "Note que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n" ], - "id": "b5f9cd08" + "id": "14700f01" }, { "cell_type": "code", @@ -144,7 +144,7 @@ "source": [ "y_train.loc[(-1, \"__total\")].head()" ], - "id": "d6238e8b", + "id": "7922cf8c", "execution_count": null, "outputs": [] }, @@ -154,7 +154,7 @@ "source": [ "O total de todas as séries é representado por `(\"__total\", \"__total\")`.\n" ], - "id": "cb327a09" + "id": "ef5bfb5e" }, { "cell_type": "code", @@ -162,7 +162,7 @@ "source": [ "y_train.loc[(\"__total\", \"__total\")]" ], - "id": "f67a021c", + "id": "e2eaf63b", "execution_count": null, "outputs": [] }, @@ -172,7 +172,7 @@ "source": [ "Para contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n" ], - "id": "c9b4bcef" + "id": "e0afe3ae" }, { "cell_type": "code", @@ -180,7 +180,7 @@ "source": [ "y_train.index.droplevel(-1).nunique()" ], - "id": "13f08f44", + "id": "0f87a4dd", "execution_count": null, "outputs": [] }, @@ -192,7 +192,7 @@ "\n", "Vamos fazer uma previsão e entender o problema da incoerência.\n" ], - "id": "153d992b" + "id": "e841678e" }, { "cell_type": "code", @@ -200,7 +200,7 @@ "source": [ "fh = y_test.index.get_level_values(-1).unique()" ], - "id": "cb35740e", + "id": "0ad04cf5", "execution_count": null, "outputs": [] }, @@ -212,14 +212,14 @@ "from lightgbm import LGBMRegressor\n", "\n", "forecaster = ReductionForecaster(\n", - " LGBMRegressor(n_estimators=100, verbose=-1),\n", + " LGBMRegressor(n_estimators=50, verbose=-1),\n", " window_length=30,\n", " normalization_strategy=\"divide_mean\",\n", ")\n", "forecaster.fit(y_train, X=X_train)\n", "y_pred = forecaster.predict(fh, X=X_test)" ], - "id": "1113b227", + "id": "a8696897", "execution_count": null, "outputs": [] }, @@ -230,7 +230,7 @@ "Para somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\n", "quando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n" ], - "id": "6f7994b3" + "id": "8137ba42" }, { "cell_type": "code", @@ -240,7 +240,7 @@ "\n", "Aggregator().fit_transform(y_pred) - y_pred" ], - "id": "eaf3fda7", + "id": "a3fde02b", "execution_count": null, "outputs": [] }, @@ -248,6 +248,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Existe uma diferença... ou seja, os valores não batem.\n", "Imagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa?\n", "A raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde:\n", "\n", @@ -259,88 +260,112 @@ "\n", "## Reconciliação de previsões hierárquicas\n", "\n", - "![](imgs/hierarchical_reconciled_vs_not.png)\n", + "![](img/hierarchical_reconciled_vs_not.png)\n", "\n", - "### Methods\n", + "Existem diferentes métodos para reconciliar previsões em séries temporais hierárquicas. Não existe uma solução única, e o melhor método depende dos dados e do contexto.\n", "\n", - "There are different methods to reconcile forecasts in hierarchical time series.\n", - "There is no silver bullet, and the best method depends on the data and the context.\n", + "## Bottom-up\n", "\n", - "#### Bottom-up\n", + "A maneira mais simples de reconcialiar previsões hierárquicas é a abordagem **bottom-up**. Nessa abordagem, fazemos previsões apenas para as séries mais baixas na hierarquia (as séries filhas) e depois somamos essas previsões para obter as previsões das séries superiores (as séries pais).\n", "\n", - "\"Hierarchical\n", + "\"Hierarchical\n", "\n", - "#### Top-down (forecast proportions)\n", - "\n", - "\"Topdown\n", - "\n", - "#### Optimal reconciliation\n", - "\n", - "The coherence can be translated as linear constraints on the forecasts:\n", - "\n", - "$$\n", - "y_{total} = \\sum_{i=1}^{n} y_i\n", - "$$\n", - "\n", - "This is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints.\n", + "Lados positivos:\n", "\n", - "![](imgs/coherent_plane.png)\n", + "* Simplicidade: fácil de entender e implementar.\n", + "* Coerência garantida: a soma das previsões das séries filhas sempre será igual à previsão da série pai.\n", + "* Sérias filhas podem capturar detalhes específicos que podem ser perdidos em níveis superiores.\n", "\n", - "* **OLS** : project the base forecasts into the reconciliation space.\n", - "* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights.\n", - "* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called \"optimal\".\n" + "No entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados.\n" ], - "id": "a1f585b1" + "id": "85e3fc0a" }, { "cell_type": "code", "metadata": {}, "source": [ - "from sktime.transformations.hierarchical.reconcile import (\n", - " BottomUpReconciler,\n", - " TopdownReconciler,\n", - " OptimalReconciler\n", - ")\n", + "from sktime.transformations.hierarchical.reconcile import BottomUpReconciler\n", "\n", "bottom_up = BottomUpReconciler() * forecaster\n", - "top_down_fcst = TopdownReconciler() * forecaster\n", - "optimal = OptimalReconciler(\"ols\") * forecaster" + "bottom_up.fit(y_train)\n", + "\n", + "y_pred_bottomup = bottom_up.predict(fh=fh)" ], - "id": "551e8242", + "id": "c5a81d47", "execution_count": null, "outputs": [] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": {}, "source": [ - "bottom_up.fit(y_train)\n", - "top_down_fcst.fit(y_train)\n", - "optimal.fit(y_train)" + "Agora vemos que as previsões são coerentes:\n" ], - "id": "9d46dae7", - "execution_count": null, - "outputs": [] + "id": "861b8606" }, { "cell_type": "code", "metadata": {}, "source": [ - "y_pred_bottomup = bottom_up.predict(fh=fh)\n", - "y_pred_topdown = top_down_fcst.predict(fh=fh)\n", - "y_pred_optimal = optimal.predict(fh=fh)" + "Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup" ], - "id": "9371d870", + "id": "81e049eb", "execution_count": null, "outputs": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Top-down (forecast proportions)\n", + "\n", + "Outra abordagem é a **top-down**. Nessa abordagem, fazemos previsões apenas para as séries superiores na hierarquia (as séries pais) e depois distribuímos essas previsões para as séries filhas com base em proporções previstas.\n", + "\n", + "Suponha que temos a seguinte hierarquia $C(t) = A(t) + B(t)$. Considere $\\hat{C}(t)$, $\\hat{A}(t)$ e $\\hat{B}(t)$ como as previsões para $C$, $A$ e $B$, respectivamente. Na abordagem top-down, faríamos o seguinte:\n", + "\n", + "1. Prever $\\hat{C}(t)$, $\\hat{A}(t)$ e $\\hat{B}(t)$ independentemente.\n", + "2. Calcular as proporções previstas para os níveis mais baixos:\n", + "$$\n", + "p_A(t) = \\frac{\\hat{A}(t)}{\\hat{A}(t) + \\hat{B}(t)}\n", + "$$\n", + "\n", + "$$\n", + "p_B(t) = \\frac{\\hat{B}(t)}{\\hat{A}(t) + \\hat{B}(t)}\n", + "$$\n", + "\n", + "3. Distribuir a previsão de $C$ para $A$ e $B$ usando essas proporções:\n", + "$$\n", + "\\tilde{A}(t) = p_A(t) \\cdot \\hat{C}(t)\n", + "$$\n", + "\n", + "$$\n", + "\\tilde{B}(t) = p_B(t) \\cdot \\hat{C}(t)\n", + "$$\n", + "\n", + "Essa abordagem é capaz de usufruir da qualidade do forecast total, e ainda consegue distribuir para as séries filhas baseadas no histórico.\n", + "\n", + "\"Topdown\n", + "\n", + "\n", + "O que chamam de \"Proporções históricas\" é equivalente a esse método, mas com um modelo Naive para prever as proporções.\n", + "\n", + "Esse método pode ser bom quando o forecast total é de boa qualidade. No entanto,\n", + "dependemos profundamente da qualidade do forecast total e das proporções.\n" + ], + "id": "6bd8bf8f" + }, { "cell_type": "code", "metadata": {}, "source": [ - "Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup" + "from sktime.transformations.hierarchical.reconcile import TopdownReconciler\n", + "\n", + "top_down_fcst = TopdownReconciler() * forecaster\n", + "top_down_fcst.fit(y_train)\n", + "\n", + "y_pred_topdown = top_down_fcst.predict(fh=fh)" ], - "id": "10aa0778", + "id": "b44ec948", "execution_count": null, "outputs": [] }, @@ -348,15 +373,50 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this case, there's not a lot of difference between the reconciliation outputs.\n", - "But we will see that the bottom-up approach is the most accurate one.\n" + "#### Reconciliação ótima\n", + "\n", + "Existe uma abordagem mais sofisticada, com uma intuição geométrica interessante.\n", + "A ideia é ajustar as previsões iniciais para que elas satisfaçam as restrições de soma da hierarquia. Por exemplo, para a hierarquia $C(t) = A(t) + B(t)$, queremos garantir que:\n", + "\n", + "$$\n", + "\\hat{C}(t) = \\hat{A}(t) + \\hat{B}(t)\n", + "$$\n", + "\n", + "Se consideramos nosso espaço 3D de observações $(\\hat{A}, \\hat{B}, \\hat{C})$, a \n", + "condição acima é satisfeita para um plano 2D nesse universo.\n", + "\n", + "\n", + "![](img/coherent_plane.png)\n", + "\n", + "\n", + "Podemos então projetar nossas previsões iniciais nesse plano para obter previsões coerentes. Essa projeção pode ser feita de várias maneiras, levando a diferentes métodos de reconciliação ótima. Os métodos levam o nome \"OLS\" pois a projeção é feita minimizando o erro quadrático (Ordinary Least Squares).\n", + "\n", + "* **OLS** : projetar ortogonalmente todas as previsões base na espaço de reconciliação, tratando todas as séries igualmente.\n", + "* **Weighted OLS**: projetar obliquamente, ou seja, considerando pesos diferentes para cada série, permitindo dar mais importância a certas séries na reconciliação. A projeção não faz mais uma perpendicular, mas sim uma oblíqua.\n", + "* **Minimum trace (MinT)**: use a matriz de covariância do erro para encontrar as previsões reconciliadas ótimas. Chamado de \"ótimo\".\n" + ], + "id": "1fa2b89a" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.transformations.hierarchical.reconcile import (\n", + " OptimalReconciler\n", + ")\n", + "\n", + "optimal = OptimalReconciler(\"ols\") * forecaster\n", + "y_pred_optimal = optimal.predict(fh=fh)" ], - "id": "63dd147b" + "id": "9da2146b", + "execution_count": null, + "outputs": [] }, { "cell_type": "code", "metadata": {}, "source": [ + "# | code-fold: true\n", "from sktime.utils.plotting import plot_series\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", @@ -365,13 +425,16 @@ "idx = y_train.index.droplevel(-1).unique()[10]\n", "\n", "plot_series(\n", - " y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,],\n", - " labels=[\"Train\", \"Test\", \"Predicted\", \"Predicted Optimal\"],\n", + " y_train.loc[idx,],\n", + " y_test.loc[idx,],\n", + " y_pred.loc[idx,],\n", + " y_pred_optimal.loc[idx,],\n", + " labels=[\"Train\", \"Test\", \"Predicted (sem reconciliação)\", \"Predicted (ótimo)\"],\n", ")\n", "plt.xlim(pd.to_datetime(\"2024-05-01\"), None)\n", "plt.show()" ], - "id": "4557f36e", + "id": "215b42d8", "execution_count": null, "outputs": [] }, @@ -388,7 +451,7 @@ "\n", "mint_forecaster.fit(y_train)" ], - "id": "6516c46a", + "id": "a0a619e3", "execution_count": null, "outputs": [] }, @@ -398,7 +461,7 @@ "source": [ "y_pred_mint = mint_forecaster.predict(fh=fh)" ], - "id": "fa2a17d7", + "id": "c31dd1bc", "execution_count": null, "outputs": [] }, @@ -421,7 +484,7 @@ " index=[\"Mean Absolute Scaled Error\"]\n", ")" ], - "id": "a500c8ef", + "id": "a65a4c8f", "execution_count": null, "outputs": [] } diff --git a/book/content/pt/part3/img/coherent_plane.png b/book/content/pt/part3/img/coherent_plane.png new file mode 100644 index 0000000000000000000000000000000000000000..836d394a6d9e1e968014b0c9584f324544c6c68b GIT binary patch literal 73996 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 literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/img/hierarchical_bottomup.png b/book/content/pt/part3/img/hierarchical_bottomup.png new file mode 100644 index 0000000000000000000000000000000000000000..472dc40abfb42856407b408106a81c87ecea32ec GIT binary patch literal 71541 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Π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 Vvr{+K@dtpH(QVUPl{cKC{|}k)HGBX7 literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/img/hierarchical_reconciled_vs_not.png b/book/content/pt/part3/img/hierarchical_reconciled_vs_not.png new file mode 100644 index 0000000000000000000000000000000000000000..47236760760f3cb99dca9ad50fc2f169a383f8a5 GIT binary patch literal 215254 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�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 literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/img/hierarchical_td_fcst.png b/book/content/pt/part3/img/hierarchical_td_fcst.png new file mode 100644 index 0000000000000000000000000000000000000000..60f44fb19b32f33232a1948df09c602f635d8569 GIT binary patch literal 242685 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

k9NnrvOe;^Gj&G*ugvnZE35UkQbzhJ7FyoyRD7 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 literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/img/hierarchical_topdown.png b/book/content/pt/part3/img/hierarchical_topdown.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0348de9cd9353d6f3f3375b55fad6418ee0405 GIT binary patch literal 76105 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 v+W2qZ@IT-6pWps{=l_4Z8{eD)j#YHmFD^ literal 0 HcmV?d00001 diff --git a/book/content/pt/part3/img/nbeats_simplified.png b/book/content/pt/part3/img/nbeats_simplified.png new file mode 100644 index 0000000000000000000000000000000000000000..aeac0a4b486f981cb7d21f5a43c07d0585eb3cf7 GIT binary patch literal 187315 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

$M=D21mPk!O+ljD0r??gcT}T&ebx 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 z

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.3.0)", "backports.zstd", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.4.0" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +files = [ + {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, + {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" +typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} + [[package]] name = "anyio" version = "4.11.0" @@ -675,6 +842,17 @@ files = [ [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "filelock" +version = "3.20.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.10" +files = [ + {file = "filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2"}, + {file = "filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4"}, +] + [[package]] name = "fonttools" version = "4.60.1" @@ -766,6 +944,187 @@ files = [ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +[[package]] +name = "frozenlist" +version = "1.8.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.9" +files = [ + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"}, + {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"}, + {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, + {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"}, + {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"}, + {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"}, + {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"}, + {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, + {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, +] + +[[package]] +name = "fsspec" +version = "2025.9.0" +description = "File-system specification" +optional = false +python-versions = ">=3.9" +files = [ + {file = "fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7"}, + {file = "fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19"}, +] + +[package.dependencies] +aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff (>=0.5)"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + [[package]] name = "graphviz" version = "0.21" @@ -1572,6 +1931,69 @@ dask = ["dask[array,dataframe,distributed] (>=2.0.0)", "pandas (>=0.24.0)"] pandas = ["pandas (>=0.24.0)"] scikit-learn = ["scikit-learn (>=0.24.2)"] +[[package]] +name = "lightning" +version = "2.5.5" +description = "The Deep Learning framework to train, deploy, and ship AI products Lightning fast." +optional = false +python-versions = ">=3.9" +files = [ + {file = "lightning-2.5.5-py3-none-any.whl", hash = "sha256:69eb248beadd7b600bf48eff00a0ec8af171ec7a678d23787c4aedf12e225e8f"}, + {file = "lightning-2.5.5.tar.gz", hash = "sha256:4d3d66c5b1481364a7e6a1ce8ddde1777a04fa740a3145ec218a9941aed7dd30"}, +] + +[package.dependencies] +fsspec = {version = ">=2022.5.0,<2027.0", extras = ["http"]} +lightning-utilities = ">=0.10.0,<2.0" +packaging = ">=20.0,<27.0" +pytorch-lightning = "*" +PyYAML = ">5.4,<8.0" +torch = ">=2.1.0,<4.0" +torchmetrics = ">0.7.0,<3.0" +tqdm = ">=4.57.0,<6.0" +typing-extensions = ">4.5.0,<6.0" + +[package.extras] +all = ["bitsandbytes (>=0.45.2,<1.0)", "deepspeed (>=0.14.1,<=0.15.0)", "hydra-core (>=1.2.0,<2.0)", "ipython[all] (>=8.0.0,<10.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "omegaconf (>=2.2.3,<3.0)", "requests (<3.0)", "rich (>=12.3.0,<15.0)", "tensorboardX (>=2.2,<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +data = ["litdata (>=0.2.0rc,<1.0)"] +dev = ["bitsandbytes (>=0.45.2,<1.0)", "click (==8.1.8)", "click (==8.2.1)", "cloudpickle (>=1.3,<4.0)", "coverage (==7.10.6)", "deepspeed (>=0.14.1,<=0.15.0)", "fastapi", "hydra-core (>=1.2.0,<2.0)", "ipython[all] (>=8.0.0,<10.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "numpy (>1.20.0,<2.0)", "numpy (>=1.21.0,<2.0)", "omegaconf (>=2.2.3,<3.0)", "onnx (>1.12.0,<2.0)", "onnxruntime (>=1.12.0,<2.0)", "onnxscript (>=0.1.0,<1.0)", "pandas (>2.0,<3.0)", "psutil (<8.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "requests (<3.0)", "rich (>=12.3.0,<15.0)", "scikit-learn (>0.22.1,<2.0)", "tensorboard (>=2.11,<3.0)", "tensorboardX (>=2.2,<3.0)", "tensorboardX (>=2.6,<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)", "uvicorn"] +examples = ["ipython[all] (>=8.0.0,<10.0)", "requests (<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +extra = ["bitsandbytes (>=0.45.2,<1.0)", "hydra-core (>=1.2.0,<2.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "omegaconf (>=2.2.3,<3.0)", "rich (>=12.3.0,<15.0)", "tensorboardX (>=2.2,<3.0)"] +fabric-all = ["bitsandbytes (>=0.45.2,<1.0)", "deepspeed (>=0.14.1,<=0.15.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +fabric-dev = ["bitsandbytes (>=0.45.2,<1.0)", "click (==8.1.8)", "click (==8.2.1)", "coverage (==7.10.6)", "deepspeed (>=0.14.1,<=0.15.0)", "numpy (>=1.21.0,<2.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "tensorboardX (>=2.6,<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +fabric-examples = ["torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +fabric-strategies = ["bitsandbytes (>=0.45.2,<1.0)", "deepspeed (>=0.14.1,<=0.15.0)"] +fabric-test = ["click (==8.1.8)", "click (==8.2.1)", "coverage (==7.10.6)", "numpy (>=1.21.0,<2.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "tensorboardX (>=2.6,<3.0)"] +pytorch-all = ["bitsandbytes (>=0.45.2,<1.0)", "deepspeed (>=0.14.1,<=0.15.0)", "hydra-core (>=1.2.0,<2.0)", "ipython[all] (>=8.0.0,<10.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "omegaconf (>=2.2.3,<3.0)", "requests (<3.0)", "rich (>=12.3.0,<15.0)", "tensorboardX (>=2.2,<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +pytorch-dev = ["bitsandbytes (>=0.45.2,<1.0)", "cloudpickle (>=1.3,<4.0)", "coverage (==7.10.6)", "deepspeed (>=0.14.1,<=0.15.0)", "fastapi", "hydra-core (>=1.2.0,<2.0)", "ipython[all] (>=8.0.0,<10.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "numpy (>1.20.0,<2.0)", "omegaconf (>=2.2.3,<3.0)", "onnx (>1.12.0,<2.0)", "onnxruntime (>=1.12.0,<2.0)", "onnxscript (>=0.1.0,<1.0)", "pandas (>2.0,<3.0)", "psutil (<8.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "requests (<3.0)", "rich (>=12.3.0,<15.0)", "scikit-learn (>0.22.1,<2.0)", "tensorboard (>=2.11,<3.0)", "tensorboardX (>=2.2,<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)", "uvicorn"] +pytorch-examples = ["ipython[all] (>=8.0.0,<10.0)", "requests (<3.0)", "torchmetrics (>=0.10.0,<2.0)", "torchvision (>=0.16.0,<1.0)"] +pytorch-extra = ["bitsandbytes (>=0.45.2,<1.0)", "hydra-core (>=1.2.0,<2.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0,<5.0)", "matplotlib (>3.1,<4.0)", "omegaconf (>=2.2.3,<3.0)", "rich (>=12.3.0,<15.0)", "tensorboardX (>=2.2,<3.0)"] +pytorch-strategies = ["deepspeed (>=0.14.1,<=0.15.0)"] +pytorch-test = ["cloudpickle (>=1.3,<4.0)", "coverage (==7.10.6)", "fastapi", "numpy (>1.20.0,<2.0)", "onnx (>1.12.0,<2.0)", "onnxruntime (>=1.12.0,<2.0)", "onnxscript (>=0.1.0,<1.0)", "pandas (>2.0,<3.0)", "psutil (<8.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "scikit-learn (>0.22.1,<2.0)", "tensorboard (>=2.11,<3.0)", "uvicorn"] +strategies = ["bitsandbytes (>=0.45.2,<1.0)", "deepspeed (>=0.14.1,<=0.15.0)"] +test = ["click (==8.1.8)", "click (==8.2.1)", "cloudpickle (>=1.3,<4.0)", "coverage (==7.10.6)", "fastapi", "numpy (>1.20.0,<2.0)", "numpy (>=1.21.0,<2.0)", "onnx (>1.12.0,<2.0)", "onnxruntime (>=1.12.0,<2.0)", "onnxscript (>=0.1.0,<1.0)", "pandas (>2.0,<3.0)", "psutil (<8.0)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "scikit-learn (>0.22.1,<2.0)", "tensorboard (>=2.11,<3.0)", "tensorboardX (>=2.6,<3.0)", "uvicorn"] + +[[package]] +name = "lightning-utilities" +version = "0.15.2" +description = "Lightning toolbox for across the our ecosystem." +optional = false +python-versions = ">=3.9" +files = [ + {file = "lightning_utilities-0.15.2-py3-none-any.whl", hash = "sha256:ad3ab1703775044bbf880dbf7ddaaac899396c96315f3aa1779cec9d618a9841"}, + {file = "lightning_utilities-0.15.2.tar.gz", hash = "sha256:cdf12f530214a63dacefd713f180d1ecf5d165338101617b4742e8f22c032e24"}, +] + +[package.dependencies] +packaging = ">=17.1" +setuptools = "*" +typing_extensions = "*" + +[package.extras] +cli = ["jsonargparse[signatures] (>=4.38.0)", "tomlkit"] +docs = ["requests (>=2.0.0)"] +typing = ["mypy (>=1.0.0)", "types-setuptools"] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1823,6 +2245,178 @@ numpy = {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_ [package.extras] dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "multidict" +version = "6.7.0" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +files = [ + {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349"}, + {file = "multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e"}, + {file = "multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62"}, + {file = "multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111"}, + {file = "multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36"}, + {file = "multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85"}, + {file = "multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7"}, + {file = "multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721"}, + {file = "multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8"}, + {file = "multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b"}, + {file = "multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34"}, + {file = "multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff"}, + {file = "multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81"}, + {file = "multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45"}, + {file = "multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1"}, + {file = "multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a"}, + {file = "multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8"}, + {file = "multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4"}, + {file = "multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b"}, + {file = "multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159"}, + {file = "multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf"}, + {file = "multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd"}, + {file = "multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288"}, + {file = "multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17"}, + {file = "multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390"}, + {file = "multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb"}, + {file = "multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad"}, + {file = "multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762"}, + {file = "multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6"}, + {file = "multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d"}, + {file = "multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6"}, + {file = "multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b"}, + {file = "multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1"}, + {file = "multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f"}, + {file = "multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f"}, + {file = "multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885"}, + {file = "multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c"}, + {file = "multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718"}, + {file = "multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a"}, + {file = "multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9"}, + {file = "multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0"}, + {file = "multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13"}, + {file = "multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd"}, + {file = "multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40"}, + {file = "multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e"}, + {file = "multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e"}, + {file = "multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4"}, + {file = "multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91"}, + {file = "multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f"}, + {file = "multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546"}, + {file = "multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3"}, + {file = "multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5"}, +] + [[package]] name = "multipledispatch" version = "1.0.0" @@ -1924,6 +2518,26 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +[[package]] +name = "networkx" +version = "3.5" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.11" +files = [ + {file = "networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec"}, + {file = "networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037"}, +] + +[package.extras] +default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] +developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] +test-extras = ["pytest-mpl", "pytest-randomly"] + [[package]] name = "notebook" version = "7.4.7" @@ -2074,6 +2688,197 @@ examples = ["arviz", "jupyter", "matplotlib", "pandas", "scikit-learn", "seaborn test = ["importlib-metadata (<5.0)", "mypy (>=1.13)", "pyro-api (>=0.1.1)", "pytest (>=4.1)", "ruff (>=0.1.8)", "scikit-learn", "scipy (>=1.9)"] tpu = ["jax[tpu] (>=0.4.25)"] +[[package]] +name = "nvidia-cublas-cu12" +version = "12.8.4.1" +description = "CUBLAS native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b86f6dd8935884615a0683b663891d43781b819ac4f2ba2b0c9604676af346d0"}, + {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142"}, + {file = "nvidia_cublas_cu12-12.8.4.1-py3-none-win_amd64.whl", hash = "sha256:47e9b82132fa8d2b4944e708049229601448aaad7e6f296f630f2d1a32de35af"}, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" +description = "CUDA profiling tools runtime libs." +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4412396548808ddfed3f17a467b104ba7751e6b58678a4b840675c56d21cf7ed"}, + {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182"}, + {file = "nvidia_cuda_cupti_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:bb479dcdf7e6d4f8b0b01b115260399bf34154a1a2e9fe11c85c517d87efd98e"}, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" +description = "NVRTC native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994"}, + {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc1fec1e1637854b4c0a65fb9a8346b51dd9ee69e61ebaccc82058441f15bce8"}, + {file = "nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:7a4b6b2904850fe78e0bd179c4b655c404d4bb799ef03ddc60804247099ae909"}, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" +description = "CUDA Runtime native Libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:52bf7bbee900262ffefe5e9d5a2a69a30d97e2bc5bb6cc866688caa976966e3d"}, + {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90"}, + {file = "nvidia_cuda_runtime_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:c0c6027f01505bfed6c3b21ec546f69c687689aad5f1a377554bc6ca4aa993a8"}, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" +description = "cuDNN runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8"}, + {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8"}, + {file = "nvidia_cudnn_cu12-9.10.2.21-py3-none-win_amd64.whl", hash = "sha256:c6288de7d63e6cf62988f0923f96dc339cea362decb1bf5b3141883392a7d65e"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.3.3.83" +description = "CUFFT native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:848ef7224d6305cdb2a4df928759dca7b1201874787083b6e7550dd6765ce69a"}, + {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74"}, + {file = "nvidia_cufft_cu12-11.3.3.83-py3-none-win_amd64.whl", hash = "sha256:7a64a98ef2a7c47f905aaf8931b69a3a43f27c55530c698bb2ed7c75c0b42cb7"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.1.3" +description = "cuFile GPUDirect libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc"}, + {file = "nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:4beb6d4cce47c1a0f1013d72e02b0994730359e17801d395bdcbf20cfb3bb00a"}, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.9.90" +description = "CURAND native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:dfab99248034673b779bc6decafdc3404a8a6f502462201f2f31f11354204acd"}, + {file = "nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9"}, + {file = "nvidia_curand_cu12-10.3.9.90-py3-none-win_amd64.whl", hash = "sha256:f149a8ca457277da854f89cf282d6ef43176861926c7ac85b2a0fbd237c587ec"}, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" +description = "CUDA solver native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:db9ed69dbef9715071232caa9b69c52ac7de3a95773c2db65bdba85916e4e5c0"}, + {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450"}, + {file = "nvidia_cusolver_cu12-11.7.3.90-py3-none-win_amd64.whl", hash = "sha256:4a550db115fcabc4d495eb7d39ac8b58d4ab5d8e63274d3754df1c0ad6a22d34"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" +nvidia-cusparse-cu12 = "*" +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" +description = "CUSPARSE native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b6c161cb130be1a07a27ea6923df8141f3c295852f4b260c65f18f3e0a091dc"}, + {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b"}, + {file = "nvidia_cusparse_cu12-12.5.8.93-py3-none-win_amd64.whl", hash = "sha256:9a33604331cb2cac199f2e7f5104dfbb8a5a898c367a53dfda9ff2acb6b6b4dd"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.7.1" +description = "NVIDIA cuSPARSELt" +optional = false +python-versions = "*" +files = [ + {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8878dce784d0fac90131b6817b607e803c36e629ba34dc5b433471382196b6a5"}, + {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623"}, + {file = "nvidia_cusparselt_cu12-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f67fbb5831940ec829c9117b7f33807db9f9678dc2a617fbe781cac17b4e1075"}, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.27.5" +description = "NVIDIA Collective Communication Library (NCCL) Runtime" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:31432ad4d1fb1004eb0c56203dc9bc2178a1ba69d1d9e02d64a6938ab5e40e7a"}, + {file = "nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457"}, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +description = "Nvidia JIT LTO Library" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88"}, + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:adccd7161ace7261e01bb91e44e88da350895c270d23f744f0820c818b7229e7"}, + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:bd93fbeeee850917903583587f4fc3a4eafa022e34572251368238ab5e6bd67f"}, +] + +[[package]] +name = "nvidia-nvshmem-cu12" +version = "3.3.20" +description = "NVSHMEM creates a global address space that provides efficient and scalable communication for NVIDIA GPU clusters." +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b0b960da3842212758e4fa4696b94f129090b30e5122fea3c5345916545cff0"}, + {file = "nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d00f26d3f9b2e3c3065be895e3059d6479ea5c638a3f38c9fec49b1b9dd7c1e5"}, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.8.90" +description = "NVIDIA Tools Extension" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7ad891da111ebafbf7e015d34879f7112832fc239ff0d7d776b6cb685274615"}, + {file = "nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f"}, + {file = "nvidia_nvtx_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:619c8304aedc69f02ea82dd244541a83c3d9d40993381b3b590f1adaed3db41e"}, +] + [[package]] name = "opt-einsum" version = "3.4.0" @@ -2451,6 +3256,137 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "propcache" +version = "0.4.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +files = [ + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c"}, + {file = "propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb"}, + {file = "propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37"}, + {file = "propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f"}, + {file = "propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1"}, + {file = "propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6"}, + {file = "propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75"}, + {file = "propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8"}, + {file = "propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db"}, + {file = "propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66"}, + {file = "propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81"}, + {file = "propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e"}, + {file = "propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1"}, + {file = "propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717"}, + {file = "propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37"}, + {file = "propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144"}, + {file = "propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f"}, + {file = "propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153"}, + {file = "propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455"}, + {file = "propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85"}, + {file = "propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1"}, + {file = "propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183"}, + {file = "propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19"}, + {file = "propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f"}, + {file = "propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938"}, + {file = "propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237"}, + {file = "propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"}, +] + [[package]] name = "prophetverse" version = "0.10.0" @@ -2608,6 +3544,64 @@ files = [ [package.extras] dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] +[[package]] +name = "pytorch-forecasting" +version = "1.5.0" +description = "Forecasting timeseries with PyTorch - dataloaders, normalizers, metrics and models" +optional = false +python-versions = "<3.14,>=3.10" +files = [ + {file = "pytorch_forecasting-1.5.0-py3-none-any.whl", hash = "sha256:ff805102840d61037aa58cc7f3c889121221feb6228ba0e21fe73471f41ff904"}, + {file = "pytorch_forecasting-1.5.0.tar.gz", hash = "sha256:b65c46eef684ffcef6388dfc241c902cdca9233701dfa59b2e3ac79f6431286d"}, +] + +[package.dependencies] +lightning = ">=2.0.0,<3.0.0" +numpy = "<=3.0.0" +pandas = ">=1.3.0,<3.0.0" +scikit-learn = ">=1.2,<2.0" +scipy = ">=1.8,<2.0" +torch = ">=2.0.0,<2.0.1 || >2.0.1,<3.0.0" + +[package.extras] +all-extras = ["cpflows", "matplotlib", "optuna (>=3.1.0,<5.0.0)", "optuna-integration", "pytorch_optimizer (>=2.5.1,<4.0.0)", "statsmodels"] +dev = ["black[jupyter]", "coverage", "invoke", "ipykernel", "ipywidgets (>=8.0.1,<9.0.0)", "mypy", "nbconvert", "nbsphinx", "pandoc (>=2.3,<3.0.0)", "pre-commit (>=3.2.0,<5.0.0)", "pyarrow", "pydata-sphinx-theme", "pydocstyle (>=6.1.1,<7.0.0)", "pylint", "pytest", "pytest-cov", "pytest-dotenv (>=0.5.2,<1.0.0)", "pytest-sugar", "pytest-xdist", "recommonmark", "ruff", "scikit-base", "sphinx", "tensorboard (>=2.12.1,<3.0.0)"] +docs = ["docutils", "nbconvert", "nbsphinx", "pandoc", "pydata-sphinx-theme", "recommonmark", "sphinx (>3.2,<8.2.4)"] +github-actions = ["pytest-github-actions-annotate-failures"] +graph = ["networkx"] +mqf2 = ["cpflows"] +tuning = ["optuna (>=3.1.0,<5.0.0)", "optuna-integration", "statsmodels"] + +[[package]] +name = "pytorch-lightning" +version = "2.5.5" +description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pytorch_lightning-2.5.5-py3-none-any.whl", hash = "sha256:0b533991df2353c0c6ea9ca10a7d0728b73631fd61f5a15511b19bee2aef8af0"}, + {file = "pytorch_lightning-2.5.5.tar.gz", hash = "sha256:d6fc8173d1d6e49abfd16855ea05d2eb2415e68593f33d43e59028ecb4e64087"}, +] + +[package.dependencies] +fsspec = {version = ">=2022.5.0", extras = ["http"]} +lightning-utilities = ">=0.10.0" +packaging = ">=20.0" +PyYAML = ">5.4" +torch = ">=2.1.0" +torchmetrics = ">0.7.0" +tqdm = ">=4.57.0" +typing-extensions = ">4.5.0" + +[package.extras] +all = ["bitsandbytes (>=0.45.2)", "deepspeed (>=0.14.1,<=0.15.0)", "hydra-core (>=1.2.0)", "ipython[all] (>=8.0.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "requests (<2.33.0)", "rich (>=12.3.0)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)"] +deepspeed = ["deepspeed (>=0.14.1,<=0.15.0)"] +dev = ["bitsandbytes (>=0.45.2)", "cloudpickle (>=1.3)", "coverage (==7.10.6)", "deepspeed (>=0.14.1,<=0.15.0)", "fastapi", "hydra-core (>=1.2.0)", "ipython[all] (>=8.0.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0)", "matplotlib (>3.1)", "numpy (>1.20.0)", "omegaconf (>=2.2.3)", "onnx (>1.12.0)", "onnxruntime (>=1.12.0)", "onnxscript (>=0.1.0)", "pandas (>2.0)", "psutil (<7.0.1)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "requests (<2.33.0)", "rich (>=12.3.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.11)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)", "uvicorn"] +examples = ["ipython[all] (>=8.0.0)", "requests (<2.33.0)", "torchmetrics (>=0.10.0)", "torchvision (>=0.16.0)"] +extra = ["bitsandbytes (>=0.45.2)", "hydra-core (>=1.2.0)", "jsonargparse[jsonnet,signatures] (>=4.39.0)", "matplotlib (>3.1)", "omegaconf (>=2.2.3)", "rich (>=12.3.0)", "tensorboardX (>=2.2)"] +strategies = ["deepspeed (>=0.14.1,<=0.15.0)"] +test = ["cloudpickle (>=1.3)", "coverage (==7.10.6)", "fastapi", "numpy (>1.20.0)", "onnx (>1.12.0)", "onnxruntime (>=1.12.0)", "onnxscript (>=0.1.0)", "pandas (>2.0)", "psutil (<7.0.1)", "pytest (==8.4.1)", "pytest-cov (==6.2.1)", "pytest-random-order (==1.2.0)", "pytest-rerunfailures (==16.0)", "pytest-timeout (==2.4.0)", "scikit-learn (>0.22.1)", "tensorboard (>=2.11)", "uvicorn"] + [[package]] name = "pytz" version = "2025.2" @@ -3483,6 +4477,23 @@ build = ["cython (>=3.0.10)"] develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "jinja2", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools_scm[toml] (>=8.0,<9.0)"] docs = ["ipykernel", "jupyter_client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] +[[package]] +name = "sympy" +version = "1.14.0" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, + {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] + [[package]] name = "terminado" version = "0.18.1" @@ -3544,6 +4555,103 @@ files = [ {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, ] +[[package]] +name = "torch" +version = "2.9.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.10" +files = [ + {file = "torch-2.9.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:030bbfe367379ae6a4ae4042b6c44da25383343b8b3c68abaa9c7231efbaf2dd"}, + {file = "torch-2.9.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:51cb63902182a78e90886e8068befd8ea102af4b00e420263591a3d70c7d3c6c"}, + {file = "torch-2.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:3f6aad4d2f0ee2248bac25339d74858ff846c3969b27d14ac235821f055af83d"}, + {file = "torch-2.9.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:413e1654c9203733138858780e184d9fc59442f0b3b209e16f39354eb893db9b"}, + {file = "torch-2.9.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c596708b5105d0b199215acf0c9be7c1db5f1680d88eddadf4b75a299259a677"}, + {file = "torch-2.9.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51de31219c97c51cf4bf2be94d622e3deb5dcc526c6dc00e97c17eaec0fc1d67"}, + {file = "torch-2.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd515c70059afd95f48b8192733764c08ca37a1d19803af6401b5ecad7c8676e"}, + {file = "torch-2.9.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:614a185e4986326d526a91210c8fc1397e76e8cfafa78baf6296a790e53a9eec"}, + {file = "torch-2.9.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e5f7af1dc4c0a7c4a260c2534f41ddaf209714f7c89145e644c44712fbd6b642"}, + {file = "torch-2.9.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:01cff95ecd9a212ea2f141db28acccdceb6a4c54f64e6c51091146f5e2a772c6"}, + {file = "torch-2.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4582b162f541651f0cb184d3e291c05c2f556c7117c64a9873e2ee158d40062b"}, + {file = "torch-2.9.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:33f58e9a102a91259af289d50525c30323b5c9ae1d31322b6447c0814da68695"}, + {file = "torch-2.9.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c30a17fc83eeab346913e237c64b15b5ba6407fff812f6c541e322e19bc9ea0e"}, + {file = "torch-2.9.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8f25033b8667b57857dfd01458fbf2a9e6a6df1f8def23aef0dc46292f6aa642"}, + {file = "torch-2.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:d037f1b4ffd25013be4a7bf3651a0a910c68554956c7b2c92ebe87c76475dece"}, + {file = "torch-2.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e4e5b5cba837a2a8d1a497ba9a58dae46fa392593eaa13b871c42f71847503a5"}, + {file = "torch-2.9.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:64693568f5dc4dbd5f880a478b1cea0201cc6b510d91d1bc54fea86ac5d1a637"}, + {file = "torch-2.9.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:f8ed31ddd7d10bfb3fbe0b9fe01b1243577f13d75e6f4a0839a283915ce3791e"}, + {file = "torch-2.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:eff527d4e4846e6f70d2afd8058b73825761203d66576a7e04ea2ecfebcb4ab8"}, + {file = "torch-2.9.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:f8877779cf56d1ce431a7636703bdb13307f5960bb1af49716d8b179225e0e6a"}, + {file = "torch-2.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7e614fae699838038d888729f82b687c03413c5989ce2a9481f9a7e7a396e0bb"}, + {file = "torch-2.9.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:dfb5b8cd310ba3436c7e14e8b7833ef658cf3045e50d2bdaed23c8fc517065eb"}, + {file = "torch-2.9.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b3d29524993a478e46f5d598b249cd824b7ed98d7fba538bd9c4cde6c803948f"}, + {file = "torch-2.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:71c7578984f5ec0eb645eb4816ac8435fcf3e3e2ae1901bcd2f519a9cafb5125"}, + {file = "torch-2.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:71d9309aee457bbe0b164bce2111cd911c4ed4e847e65d5077dbbcd3aba6befc"}, + {file = "torch-2.9.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c08fb654d783899e204a32cca758a7ce8a45b2d78eeb89517cc937088316f78e"}, + {file = "torch-2.9.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:ec8feb0099b2daa5728fbc7abb0b05730fd97e0f359ff8bda09865aaa7bd7d4b"}, + {file = "torch-2.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:695ba920f234ad4170c9c50e28d56c848432f8f530e6bc7f88fcb15ddf338e75"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=0.8.5" +jinja2 = "*" +networkx = ">=2.5.1" +nvidia-cublas-cu12 = {version = "12.8.4.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.8.90", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.8.93", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.8.90", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "9.10.2.21", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.3.3.83", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufile-cu12 = {version = "1.13.1.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.9.90", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.7.3.90", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.5.8.93", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparselt-cu12 = {version = "0.7.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.27.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvjitlink-cu12 = {version = "12.8.93", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvshmem-cu12 = {version = "3.3.20", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.8.90", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} +sympy = ">=1.13.3" +triton = {version = "3.5.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +typing-extensions = ">=4.10.0" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] +optree = ["optree (>=0.13.0)"] +pyyaml = ["pyyaml"] + +[[package]] +name = "torchmetrics" +version = "1.8.2" +description = "PyTorch native Metrics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "torchmetrics-1.8.2-py3-none-any.whl", hash = "sha256:08382fd96b923e39e904c4d570f3d49e2cc71ccabd2a94e0f895d1f0dac86242"}, + {file = "torchmetrics-1.8.2.tar.gz", hash = "sha256:cf64a901036bf107f17a524009eea7781c9c5315d130713aeca5747a686fe7a5"}, +] + +[package.dependencies] +lightning-utilities = ">=0.8.0" +numpy = ">1.20.0" +packaging = ">17.1" +torch = ">=2.0.0" + +[package.extras] +all = ["SciencePlots (>=2.0.0)", "einops (>=0.7.0)", "einops (>=0.7.0)", "gammatone (>=1.0.0)", "ipadic (>=1.0.0)", "librosa (>=0.10.0)", "matplotlib (>=3.6.0)", "mecab-python3 (>=1.0.6)", "mypy (==1.17.1)", "nltk (>3.8.1)", "onnxruntime (>=1.12.0)", "pesq (>=0.0.4)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.4.0)", "regex (>=2021.9.24)", "requests (>=2.19.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "timm (>=0.9.0)", "torch (==2.8.0)", "torch-fidelity (<=0.4.0)", "torch_linear_assignment (>=0.0.2)", "torchaudio (>=2.0.1)", "torchvision (>=0.15.1)", "torchvision (>=0.15.1)", "tqdm (<4.68.0)", "transformers (>=4.43.0)", "transformers (>=4.43.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate", "vmaf-torch (>=1.1.0)"] +audio = ["gammatone (>=1.0.0)", "librosa (>=0.10.0)", "onnxruntime (>=1.12.0)", "pesq (>=0.0.4)", "pystoi (>=0.4.0)", "requests (>=2.19.0)", "torchaudio (>=2.0.1)"] +clustering = ["torch_linear_assignment (>=0.0.2)"] +detection = ["pycocotools (>2.0.0)", "torchvision (>=0.15.1)"] +dev = ["PyTDC (==0.4.1)", "SciencePlots (>=2.0.0)", "aeon (>=1.0.0)", "bert_score (==0.3.13)", "dists-pytorch (==0.1)", "dython (==0.7.9)", "einops (>=0.7.0)", "einops (>=0.7.0)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.6.3)", "gammatone (>=1.0.0)", "huggingface-hub (<0.35)", "ipadic (>=1.0.0)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "librosa (>=0.10.0)", "lpips (<=0.1.4)", "matplotlib (>=3.6.0)", "mecab-ko (>=1.0.0,<1.1.0)", "mecab-ko-dic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "mir-eval (>=0.6)", "monai (==1.4.0)", "mypy (==1.17.1)", "netcal (>1.0.0)", "nltk (>3.8.1)", "numpy (<2.4.0)", "onnxruntime (>=1.12.0)", "pandas (>1.4.0)", "permetrics (==2.0.0)", "pesq (>=0.0.4)", "piq (<=0.8.0)", "properscoring (==0.1)", "pycocotools (>2.0.0)", "pystoi (>=0.4.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (>=2.19.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.3.0)", "scikit-image (>=0.19.0)", "scipy (>1.0.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "timm (>=0.9.0)", "torch (==2.8.0)", "torch-fidelity (<=0.4.0)", "torch_complex (<0.5.0)", "torch_linear_assignment (>=0.0.2)", "torchaudio (>=2.0.1)", "torchvision (>=0.15.1)", "torchvision (>=0.15.1)", "tqdm (<4.68.0)", "transformers (>=4.43.0)", "transformers (>=4.43.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate", "vmaf-torch (>=1.1.0)"] +image = ["scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchvision (>=0.15.1)"] +multimodal = ["einops (>=0.7.0)", "piq (<=0.8.0)", "timm (>=0.9.0)", "transformers (>=4.43.0)"] +text = ["ipadic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "nltk (>3.8.1)", "regex (>=2021.9.24)", "sentencepiece (>=0.2.0)", "tqdm (<4.68.0)", "transformers (>=4.43.0)"] +typing = ["mypy (==1.17.1)", "torch (==2.8.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +video = ["einops (>=0.7.0)", "vmaf-torch (>=1.1.0)"] +visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.6.0)"] + [[package]] name = "tornado" version = "6.5.2" @@ -3601,6 +4709,34 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "triton" +version = "3.5.0" +description = "A language and compiler for custom Deep Learning operations" +optional = false +python-versions = "<3.15,>=3.10" +files = [ + {file = "triton-3.5.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f90de6a6566bb619b4c0adc9855729e1b1b5e26533fca1bf6206e96b6d277a3"}, + {file = "triton-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5d3b3d480debf24eaa739623c9a42446b0b77f95593d30eb1f64cd2278cc1f0"}, + {file = "triton-3.5.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8457b22148defefdcb7fa8144b05ce211b9faefad650a1ce85b23df488d5549c"}, + {file = "triton-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f34bfa21c5b3a203c0f0eab28dcc1e49bd1f67d22724e77fb6665a659200a4ec"}, + {file = "triton-3.5.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7da21fccceafc163e3a5e857abe34351ef76345af06cabf9637a914742671f0b"}, + {file = "triton-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9e71db82261c4ffa3921cd050cd5faa18322d2d405c30eb56084afaff3b0833"}, + {file = "triton-3.5.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:188da5b81fa2f8322c27fec1627703eac24cb9bb7ab0dfbe9925973bc1b070d3"}, + {file = "triton-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e6bb9aa5519c084a333acdba443789e50012a4b851cd486c54f0b8dc2a8d3a12"}, + {file = "triton-3.5.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03127d9b33aaf979c856676b394bc059ec1d68cb6da68ae03f62dd8ad77a04ae"}, + {file = "triton-3.5.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c83f2343e1a220a716c7b3ab9fccfcbe3ad4020d189549200e2d2e8d5868bed9"}, + {file = "triton-3.5.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468936651d383f4a6d10068d34a627505e13af55be5d002b9f27b987e7a5f0ac"}, + {file = "triton-3.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da0fa67ccd76c3dcfb0bffe1b1c57c685136a6bd33d141c24d9655d4185b1289"}, + {file = "triton-3.5.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7ceef21410229ac23173a28eee5cfc0e37c1dfdb8b4bc11ecda2e3ecec7c686"}, + {file = "triton-3.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:317fe477ea8fd4524a6a8c499fb0a36984a56d0b75bf9c9cb6133a1c56d5a6e7"}, +] + +[package.extras] +build = ["cmake (>=3.20,<4.0)", "lit"] +tests = ["autopep8", "isort", "llnl-hatchet", "numpy", "pytest", "pytest-forked", "pytest-xdist", "scipy (>=1.7.1)"] +tutorials = ["matplotlib", "pandas", "tabulate"] + [[package]] name = "types-python-dateutil" version = "2.9.0.20251008" @@ -3725,7 +4861,151 @@ files = [ {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, ] +[[package]] +name = "yarl" +version = "1.22.0" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +files = [ + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467"}, + {file = "yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea"}, + {file = "yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca"}, + {file = "yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e"}, + {file = "yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca"}, + {file = "yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b"}, + {file = "yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520"}, + {file = "yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8"}, + {file = "yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c"}, + {file = "yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67"}, + {file = "yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95"}, + {file = "yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d"}, + {file = "yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62"}, + {file = "yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03"}, + {file = "yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249"}, + {file = "yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da"}, + {file = "yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2"}, + {file = "yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79"}, + {file = "yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c"}, + {file = "yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e"}, + {file = "yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27"}, + {file = "yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8"}, + {file = "yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b"}, + {file = "yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed"}, + {file = "yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2"}, + {file = "yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff"}, + {file = "yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.1" + [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.14" -content-hash = "143c366406969fc0225ba7a3beeeb91a1a614378592c8683665ce3389b5c88f2" +content-hash = "c75bc898212f8e4dc92569b94b8c35c084bccaed12d83bd1287403f9bc3f5b3d" diff --git a/pyproject.toml b/pyproject.toml index 8cb9d33..1b40694 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ statsmodels = "^0.14.5" scikit-learn = "^1.7.2" lightgbm = "^4.6.0" prophetverse = {version = "^0.10.0", python = "<3.12,>=3.9"} +pytorch-forecasting = "^1.5.0" [tool.poetry.group.dev.dependencies] diff --git a/src/tsbook/forecasting/__pycache__/global_reduction.cpython-311.pyc b/src/tsbook/forecasting/__pycache__/global_reduction.cpython-311.pyc deleted file mode 100644 index bf3859dcf747d100cfefb709cc725e1cc28aeffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64212 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 diff --git a/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc b/src/tsbook/forecasting/__pycache__/reduction.cpython-311.pyc deleted file mode 100644 index eb39054c1628bb08c3523b7e8bcf2dcbe46bd3a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64121 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

@b47;yCwf_nEkXD8o;W_aif6>^NMfuU+;fo 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 diff --git a/src/tsbook/forecasting/reduction.py b/src/tsbook/forecasting/reduction.py index 333f236..8b9762c 100644 --- a/src/tsbook/forecasting/reduction.py +++ b/src/tsbook/forecasting/reduction.py @@ -50,7 +50,7 @@ from __future__ import annotations from functools import partial -from typing import Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Union +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Union import numpy as np import pandas as pd @@ -294,6 +294,19 @@ def _as_positive_int_fh( return np.unique(np.sort(arr)) +def _as_int_fh(arr_like: Union[Iterable[int], np.ndarray, List[int]]) -> np.ndarray: + """Return integer steps (can include non-positive values).""" + arr = np.asarray(list(arr_like)).reshape(-1) + if arr.size == 0: + raise ValueError("fh must contain at least one step.") + if not np.issubdtype(arr.dtype, np.integer): + if np.issubdtype(arr.dtype, np.floating) and np.all(np.mod(arr, 1) == 0): + arr = arr.astype(int) + else: + raise ValueError("fh must be an iterable of integers.") + return arr.astype(int) + + def _infer_freq_from_index(idx: pd.Index): """Best-effort frequency inference (DatetimeIndex/PeriodIndex).""" if isinstance(idx, (pd.DatetimeIndex, pd.PeriodIndex)): @@ -700,8 +713,8 @@ class ReductionForecaster(BaseForecaster): "enforce_index_type": None, # missing values: we don't guarantee generic handling (y can be imputed) "capability:missing_values": False, - # strictly oos steps - "capability:insample": False, + # supports both out-of-sample and in-sample forecasts + "capability:insample": True, # no probabilistic output in this implementation "capability:pred_int": False, # soft dependency on scikit-learn @@ -916,21 +929,17 @@ def _predict( ): raise RuntimeError("Call fit(...) before predict(...).") - # determine fh mode mode_abs_multi = isinstance(fh, pd.MultiIndex) mode_abs_single = isinstance(fh, pd.Index) and not isinstance(fh, pd.MultiIndex) mode_rel = False - req_steps_all: Optional[np.ndarray] = None + if not (mode_abs_multi or mode_abs_single): - # FH object or array-like of relative ints if isinstance(fh, ForecastingHorizon): rel = fh.to_relative(self.cutoff) - req_steps_all = _as_positive_int_fh(np.asarray(rel, dtype=int)) + req_steps_all = _as_int_fh(np.asarray(rel, dtype=int)) else: - # try array-like relative ints - arr = np.asarray(fh) - req_steps_all = _as_positive_int_fh(arr) + req_steps_all = _as_int_fh(np.asarray(fh)) mode_rel = True if mode_abs_single and not self._was_single_series_: @@ -939,7 +948,6 @@ def _predict( "on a single series. For multi-series, pass a MultiIndex fh." ) - # prepare exogenous usage if self._x_used_: if X is None: raise ValueError( @@ -952,7 +960,6 @@ def _predict( raise ValueError( f"X is missing columns seen in training: {missing}" ) - # shape validation if self._was_single_series_: if isinstance(X.index, pd.MultiIndex): raise TypeError( @@ -963,146 +970,172 @@ def _predict( raise TypeError( "For multi-series prediction, X must have a MultiIndex index." ) - # order X columns to match training if self._x_columns_ is not None: X = X[self._x_columns_] out_series: List[pd.Series] = [] - K = self.steps_ahead - for ids in self._ids_: time_idx_train = self._train_time_index_[ids] + y_group_train, X_group_train = self._prepare_group_training_views(ids) - # determine requested times/steps for this ids if mode_abs_multi: try: - req_times = fh.xs(ids, level=list(range(fh.nlevels - 1))) - req_times = pd.Index(req_times) + req_times_all = pd.Index( + fh.xs(ids, level=list(range(fh.nlevels - 1))) + ) except Exception: - req_times = pd.Index([]) - full_future, steps_for_req = _steps_and_full_future_for_group( - time_idx_train, req_times=req_times - ) - if len(full_future) == 0 and len(req_times) == 0: - continue - H = len(full_future) - pos_req = steps_for_req # 1-based - elif mode_abs_single: - # single series: use the provided absolute time Index for the lone ids - req_times = pd.Index(fh) - full_future, steps_for_req = _steps_and_full_future_for_group( - time_idx_train, req_times=req_times - ) - if len(full_future) == 0 and len(req_times) == 0: + req_times_all = pd.Index([]) + if len(req_times_all) == 0: continue - H = len(full_future) - pos_req = steps_for_req - else: - # relative steps (common to all ids) - assert req_steps_all is not None - H = int(np.max(req_steps_all)) - full_future, _ = _steps_and_full_future_for_group( - time_idx_train, rel_steps=req_steps_all - ) - pos_req = req_steps_all - - # prepare exogenous block for this group's full future horizon - X_block = None - if self._x_used_: - if self._was_single_series_: - X_needed = _select_future_rows(X, full_future) - X_block = X_needed.to_numpy() - else: - group_future_index = _make_group_future_multiindex( - ids, full_future, self._id_names_, self._time_name_ + + mask_in = req_times_all.isin(time_idx_train) + ins_times_req = req_times_all[mask_in] + fut_times_req = req_times_all[~mask_in] + + series_parts: List[pd.Series] = [] + + if len(ins_times_req) > 0: + ins_vals = self._predict_insample_sequence( + ids, y_group_train, X_group_train, ins_times_req + ) + series_parts.append( + self._build_output_series(ids, ins_times_req, ins_vals) ) - X_needed = _select_future_rows(X, group_future_index) - X_block = X_needed.to_numpy() - - # predictions for steps 1..H - preds = np.zeros(H, dtype=float) - - # direct part - last_obs = self._last_windows_[ids].copy() # chronological old..new - for i in range(1, min(K, H) + 1): - y_feats = last_obs[::-1] # newest first to match training - if self._norm_strategy_ is not None: - transform, inv = self._norm_strategy_(y_feats) - y_feats_n, _ = transform(y_feats, None) - else: - y_feats_n = y_feats - inv = lambda v: float(v) - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) - else: - row = y_feats_n + if len(fut_times_req) > 0: + full_future, steps_for_req = _steps_and_full_future_for_group( + time_idx_train, req_times=fut_times_req + ) + if len(full_future) > 0: + if steps_for_req is None: + raise RuntimeError( + "Internal error: expected absolute-step mapping." + ) + preds_full = self._forecast_future_for_group( + ids, full_future, X + ) + fut_vals = preds_full[steps_for_req - 1] + series_parts.append( + self._build_output_series(ids, fut_times_req, fut_vals) + ) + + if not series_parts: + continue - yhat_n = float( - np.asarray( - self._dir_estimators_[i - 1].predict(row.reshape(1, -1)) - ).ravel()[0] - ) - yhat = inv(yhat_n) - preds[i - 1] = yhat - - # rolling state after K direct preds - last_roll = self._last_windows_[ids].copy() - for i in range(1, min(K, H) + 1): - last_roll = np.roll(last_roll, -1) - last_roll[-1] = preds[i - 1] - - # recursive part - for i in range(K + 1, H + 1): - y_feats = last_roll[::-1] - if self._norm_strategy_ is not None: - transform, inv = self._norm_strategy_(y_feats) - y_feats_n, _ = transform(y_feats, None) - else: - y_feats_n = y_feats - inv = lambda v: float(v) + combined = pd.concat(series_parts) + target_index = self._build_output_index(ids, req_times_all) + combined = combined.reindex(target_index) + out_series.append(combined) - if X_block is not None: - row = np.concatenate([y_feats_n, X_block[i - 1]]) - else: - row = y_feats_n + elif mode_abs_single: + req_times_all = pd.Index(fh) + if len(req_times_all) == 0: + continue - yhat_n = float( - np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] - ) - yhat = inv(yhat_n) - preds[i - 1] = yhat + mask_in = req_times_all.isin(time_idx_train) + ins_times_req = req_times_all[mask_in] + fut_times_req = req_times_all[~mask_in] - # roll forward with *original-scale* prediction - last_roll = np.roll(last_roll, -1) - last_roll[-1] = yhat + series_parts = [] - # subset to requested steps for this ids and append to output - steps = np.asarray(pos_req, dtype=int) - sel = preds[steps - 1] + if len(ins_times_req) > 0: + ins_vals = self._predict_insample_sequence( + ids, y_group_train, X_group_train, ins_times_req + ) + series_parts.append( + self._build_output_series(ids, ins_times_req, ins_vals) + ) + + if len(fut_times_req) > 0: + full_future, steps_for_req = _steps_and_full_future_for_group( + time_idx_train, req_times=fut_times_req + ) + if len(full_future) > 0: + if steps_for_req is None: + raise RuntimeError( + "Internal error: expected absolute-step mapping." + ) + preds_full = self._forecast_future_for_group( + ids, full_future, X + ) + fut_vals = preds_full[steps_for_req - 1] + series_parts.append( + self._build_output_series(ids, fut_times_req, fut_vals) + ) + + if not series_parts: + continue + + combined = pd.concat(series_parts) + target_index = self._build_output_index(ids, req_times_all) + combined = combined.reindex(target_index) + out_series.append(combined) - if mode_abs_multi: - idx = _make_group_future_multiindex( - ids, full_future[steps - 1], self._id_names_, self._time_name_ - ) - elif mode_abs_single or (mode_rel and self._was_single_series_): - idx = pd.Index(full_future[steps - 1], name=self._time_name_) else: - idx = _make_group_future_multiindex( - ids, full_future[steps - 1], self._id_names_, self._time_name_ - ) + assert req_steps_all is not None + if req_steps_all.size == 0: + continue - out_series.append(pd.Series(sel, index=idx, name=self._y_name_)) + pos_steps = sorted({int(s) for s in req_steps_all if s > 0}) + ins_steps = [int(s) for s in req_steps_all if s <= 0] + + ins_step_to_time: Dict[int, Any] = {} + insample_times_order: List[Any] = [] + n_train = len(time_idx_train) + for step in ins_steps: + pos = n_train - 1 + step + if pos < 0: + raise ValueError( + "Requested in-sample step extends before available data." + ) + target_time = time_idx_train[pos] + ins_step_to_time[step] = target_time + if target_time not in insample_times_order: + insample_times_order.append(target_time) + + insample_pred_map: Dict[Any, float] = {} + if insample_times_order: + ins_vals_unique = self._predict_insample_sequence( + ids, y_group_train, X_group_train, insample_times_order + ) + insample_pred_map = dict(zip(insample_times_order, ins_vals_unique)) + + full_future = pd.Index([]) + preds_full = np.array([], dtype=float) + if pos_steps: + full_future, _ = _steps_and_full_future_for_group( + time_idx_train, rel_steps=np.asarray(pos_steps, dtype=int) + ) + if len(full_future) > 0: + preds_full = self._forecast_future_for_group( + ids, full_future, X + ) + + out_times: List[Any] = [] + out_values: List[float] = [] + for step in req_steps_all: + if step > 0: + if step - 1 >= len(preds_full): + raise ValueError( + "Requested relative step exceeds computed horizon." + ) + target_time = full_future[step - 1] + value = preds_full[step - 1] + else: + target_time = ins_step_to_time[step] + value = insample_pred_map.get(target_time, np.nan) + out_times.append(target_time) + out_values.append(float(value)) + + series_rel = self._build_output_series(ids, out_times, out_values) + out_series.append(series_rel) if len(out_series) == 0: - # No requested rows (e.g., fh had no times beyond training) -> empty series return pd.Series([], dtype=float, name=self._y_name_) - # Assemble output y_pred = pd.concat(out_series) - # preserve the order of the provided absolute fh if given if mode_abs_multi: y_pred = y_pred.reindex(fh) elif mode_abs_single: @@ -1116,6 +1149,197 @@ def _predict( return y_pred + def _prepare_group_training_views( + self, ids: Tuple + ) -> Tuple[pd.Series, Optional[pd.DataFrame]]: + """Return training y/X slices for the given group ids.""" + if self._y_train_ is None: + raise RuntimeError( + "Training data is not available for in-sample prediction." + ) + + y_group = _flatten_multiindex_to_time(self._y_train_, ids) + if not y_group.index.is_monotonic_increasing: + y_group = y_group.sort_index() + + X_group = None + if self._x_used_ and self._X_train_ is not None: + X_group = _flatten_multiindex_to_time(self._X_train_, ids) + if not X_group.index.is_monotonic_increasing: + X_group = X_group.sort_index() + + return y_group, X_group + + def _predict_insample_single( + self, + ids: Tuple, + y_group: pd.Series, + X_group: Optional[pd.DataFrame], + target_time, + ) -> float: + """Predict a single in-sample timestamp for a specific group.""" + positions = y_group.index.get_indexer([target_time]) + if positions.size == 0 or positions[0] == -1: + raise ValueError( + f"Timestamp {target_time} not found in training data for group {ids}." + ) + pos = int(positions[0]) + + if pos < self.window_length: + return float("nan") + + history = y_group.iloc[pos - self.window_length : pos] + if len(history) != self.window_length: + return float("nan") + + lag_feats = history.to_numpy(dtype=float)[::-1] + + if self._norm_strategy_ is not None: + transform, inv = self._norm_strategy_(lag_feats) + lag_feats_n, _ = transform(lag_feats, None) + else: + lag_feats_n = lag_feats + inv = lambda v: float(v) + + if self._x_used_: + if X_group is None: + raise ValueError( + "Stored exogenous features are required for in-sample prediction." + ) + if target_time not in X_group.index: + raise ValueError( + "Missing exogenous data for in-sample timestamp " + f"{target_time} in group {ids}." + ) + xrow = X_group.loc[target_time] + if isinstance(xrow, pd.DataFrame): + xrow = xrow.iloc[0] + if self._x_columns_ is not None: + x_values = xrow[self._x_columns_].to_numpy(dtype=float) + else: + x_values = xrow.to_numpy(dtype=float) + row = np.concatenate([lag_feats_n, x_values]) + else: + row = lag_feats_n + + yhat_n = float( + np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] + ) + return float(inv(yhat_n)) + + def _predict_insample_sequence( + self, + ids: Tuple, + y_group: pd.Series, + X_group: Optional[pd.DataFrame], + target_times: Sequence, + ) -> np.ndarray: + """Predict multiple in-sample timestamps for a specific group.""" + times = list(target_times) + preds = [self._predict_insample_single(ids, y_group, X_group, t) for t in times] + return np.asarray(preds, dtype=float) + + def _build_output_index(self, ids: Tuple, times: Sequence) -> pd.Index: + """Construct the output index for a group's predictions.""" + times_index = pd.Index(times) + if self._was_single_series_: + return pd.Index(times_index, name=self._time_name_) + return _make_group_future_multiindex( + ids, times_index, self._id_names_, self._time_name_ + ) + + def _build_output_series( + self, ids: Tuple, times: Sequence, values: Sequence[float] + ) -> pd.Series: + """Helper to build a Series with the correct index for a group's output.""" + idx = self._build_output_index(ids, times) + values_arr = np.asarray(values, dtype=float) + if len(idx) != len(values_arr): + raise ValueError("Mismatched lengths for forecast times and values.") + return pd.Series(values_arr, index=idx, name=self._y_name_) + + def _forecast_future_for_group( + self, + ids: Tuple, + full_future: pd.Index, + X: Optional[pd.DataFrame], + ) -> np.ndarray: + """Produce out-of-sample predictions for a group over a horizon.""" + H = len(full_future) + if H == 0: + return np.array([], dtype=float) + + X_block = None + if self._x_used_: + if X is None: + raise ValueError( + "Exogenous data X must be provided for out-of-sample forecasts." + ) + if self._was_single_series_: + X_needed = _select_future_rows(X, full_future) + X_block = X_needed.to_numpy() + else: + group_future_index = _make_group_future_multiindex( + ids, full_future, self._id_names_, self._time_name_ + ) + X_needed = _select_future_rows(X, group_future_index) + X_block = X_needed.to_numpy() + + preds = np.zeros(H, dtype=float) + K = self.steps_ahead + + last_obs = self._last_windows_[ids].copy() + for i in range(1, min(K, H) + 1): + y_feats = last_obs[::-1] + if self._norm_strategy_ is not None: + transform, inv = self._norm_strategy_(y_feats) + y_feats_n, _ = transform(y_feats, None) + else: + y_feats_n = y_feats + inv = lambda v: float(v) + + if X_block is not None: + row = np.concatenate([y_feats_n, X_block[i - 1]]) + else: + row = y_feats_n + + yhat_n = float( + np.asarray( + self._dir_estimators_[i - 1].predict(row.reshape(1, -1)) + ).ravel()[0] + ) + preds[i - 1] = inv(yhat_n) + + last_roll = self._last_windows_[ids].copy() + for i in range(1, min(K, H) + 1): + last_roll = np.roll(last_roll, -1) + last_roll[-1] = preds[i - 1] + + for i in range(K + 1, H + 1): + y_feats = last_roll[::-1] + if self._norm_strategy_ is not None: + transform, inv = self._norm_strategy_(y_feats) + y_feats_n, _ = transform(y_feats, None) + else: + y_feats_n = y_feats + inv = lambda v: float(v) + + if X_block is not None: + row = np.concatenate([y_feats_n, X_block[i - 1]]) + else: + row = y_feats_n + + yhat_n = float( + np.asarray(self._estimator_.predict(row.reshape(1, -1))).ravel()[0] + ) + yhat = inv(yhat_n) + preds[i - 1] = yhat + + last_roll = np.roll(last_roll, -1) + last_roll[-1] = yhat + + return preds + # -------------------- update -------------------- def _update( self, y: pd.Series, X: Optional[pd.DataFrame] = None, update_params: bool = True diff --git a/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc b/tests/forecasting/__pycache__/test_reduction.cpython-311-pytest-8.4.2.pyc deleted file mode 100644 index e9893377d41d73cb53845ee54d98632a190dfcc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmaJ=E%p@winKH#9VU*kzbX%G(Eh2QA zWY^b3(C0=b@v}q;&a@GVTT^HNWz=(K&hMi*05h!vU=Q|4Kt5ZC=s%jU2gpGQtFd<< z{8(W(DHi84jrHWkyGm>;X+&0=nzHJ|R>zMEh)iXb zk(%8Z!FBsahT5I>!}#?J9+i!7vfD;?lBDPUMgb-pH-^evps4W^sAjIuqPUn@jFO-q ziYKat*SszCI~2nbA>CA}eGFx%^QAYyL0W$Wvhc1(ZoIegFUf diff --git a/tests/forecasting/test_reduction.py b/tests/forecasting/test_reduction.py index c7a4166..136bd42 100644 --- a/tests/forecasting/test_reduction.py +++ b/tests/forecasting/test_reduction.py @@ -1,6 +1,10 @@ -"""Test the sktime contract for Prophet and HierarchicalProphet.""" +"""Test suite for the ReductionForecaster implementation.""" +import numpy as np +import pandas as pd import pytest # noqa: F401 +from sklearn.linear_model import LinearRegression +from sktime.forecasting.base import ForecastingHorizon from sktime.utils.estimator_checks import check_estimator, parametrize_with_checks from tsbook.forecasting.reduction import ReductionForecaster @@ -10,3 +14,32 @@ def test_sktime_api_compliance(obj, test_name): """Test the sktime contract for ReductionForecaster.""" check_estimator(obj, tests_to_run=test_name, raise_exceptions=True) + + +def test_reduction_insample_predictions_cover_training(): + """Ensure in-sample predictions return finite values for recent history.""" + + n = 30 + idx = pd.RangeIndex(n, name="time") + y = pd.Series(np.arange(n, dtype=float), index=idx, name="y") + + forecaster = ReductionForecaster( + estimator=LinearRegression(), + window_length=5, + steps_ahead=3, + ) + forecaster.fit(y) + + fh = ForecastingHorizon([-5, -1, 0, 1, 2], is_relative=True) + y_pred = forecaster.predict(fh) + + insample_steps = [-5, -1, 0] + insample_times = [len(idx) - 1 + step for step in insample_steps] + + insample_forecasts = y_pred.loc[insample_times] + assert not insample_forecasts.isna().any() + + observed_values = y.loc[insample_times] + assert np.allclose(insample_forecasts.values, observed_values.values, atol=1e-6) + + assert len(y_pred) == len(fh) From d62a13450a2c0a362010d1ff649fd6bff4ea309c Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Fri, 17 Oct 2025 21:27:03 -0300 Subject: [PATCH 07/10] Fixes --- .gitignore | 3 + book/content/pt/part3/deep_learning.qmd | 15 ++- .../pt/part3/hierarchical_forecasting.qmd | 7 +- .../hierarchical_forecasting.quarto_ipynb | 93 ++++++++++-------- .../execute-results/html.json | 16 +++ .../figure-html/cell-16-output-1.png | Bin 0 -> 80589 bytes 6 files changed, 86 insertions(+), 48 deletions(-) create mode 100644 book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json create mode 100644 book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png diff --git a/.gitignore b/.gitignore index 3e3b04c..485d8bd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ __pycache__/ *.py[cod] *$py.class + +**/lightning_logs/** + # C extensions *.so diff --git a/book/content/pt/part3/deep_learning.qmd b/book/content/pt/part3/deep_learning.qmd index 94f7aa6..2dd690f 100644 --- a/book/content/pt/part3/deep_learning.qmd +++ b/book/content/pt/part3/deep_learning.qmd @@ -74,7 +74,7 @@ Aqui, temos que definir os hiperparâmetros do modelo, como o número de blocos, from sktime.forecasting.pytorchforecasting import PytorchForecastingNBeats from pytorch_forecasting.data.encoders import EncoderNormalizer -CONTEXT_LENGTH = 365 +CONTEXT_LENGTH = 120 nbeats = PytorchForecastingNBeats( train_to_dataloader_params={"batch_size": 256}, trainer_params={"max_epochs": 1}, @@ -107,6 +107,9 @@ metric = MeanSquaredScaledError(multilevel="uniform_average_time") metric(y_true=y_test, y_pred=y_pred_nbeats, y_train=y_train) ``` +Agora, podemos visualizar o forecast para uma das séries. Vemos que, mesmo +com poucas épocas de treinamento ou tuning, o N-BEATS já consegue capturar a tendência. + ```{python} fig, ax = plt.subplots(figsize=(10, 4)) y_train.loc[10].plot(ax=ax, label="Train") @@ -115,6 +118,13 @@ y_pred_nbeats.loc[10].plot(ax=ax, label="N-BEATS") fig.show() ``` +## Zero-shot forecasting com N-BEATS + +Zero-shot forecasting se refere ao fato de fazer previsão para uma série jamais +vista pelo modeo, sem utilizar a série para treinar ou ajustar parâmetros dele. + +Aqui, para simular esse cenário, vamos criar uma nova série temporal combinando duas séries do conjunto de treino. + ```{python} new_y_train = (y_train.loc[0]**2 + y_train.loc[20]).astype(float) new_y_test = (y_test.loc[0]**2 + y_test.loc[20]).astype(float) @@ -126,6 +136,8 @@ new_y_test["sales"].plot.line(ax=ax, label="New Test") fig.show() ``` +Na interface atual do sktime, usamos o argumento `y` do método `predict` para passar a nova série temporal para o modelo: + ```{python} y_pred_zeroshot = nbeats.predict(fh=fh, y=new_y_train) ``` @@ -138,4 +150,3 @@ y_pred_zeroshot["sales"].plot.line(ax=ax, label="N-BEATS Zero-shot") plt.legend() plt.show() ``` - diff --git a/book/content/pt/part3/hierarchical_forecasting.qmd b/book/content/pt/part3/hierarchical_forecasting.qmd index 53c34a4..5b88a19 100644 --- a/book/content/pt/part3/hierarchical_forecasting.qmd +++ b/book/content/pt/part3/hierarchical_forecasting.qmd @@ -105,7 +105,7 @@ from tsbook.forecasting.reduction import ReductionForecaster from lightgbm import LGBMRegressor forecaster = ReductionForecaster( - LGBMRegressor(n_estimators=50, verbose=-1), + LGBMRegressor(n_estimators=50, verbose=-1, normalization_strategy="divide_mean"), window_length=30, normalization_strategy="divide_mean", ) @@ -239,11 +239,10 @@ Podemos então projetar nossas previsões iniciais nesse plano para obter previs Para a reconciliação ótima com OLS, podemos usar o `OptimalReconciler` do sktime: ```{python} -from sktime.transformations.hierarchical.reconcile import ( - OptimalReconciler -) +from sktime.transformations.hierarchical.reconcile import OptimalReconciler optimal = OptimalReconciler("ols") * forecaster +optimal.fit(y_train) y_pred_optimal = optimal.predict(fh=fh) ``` diff --git a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb index cfe4cea..9812fe5 100644 --- a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb +++ b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb @@ -61,7 +61,7 @@ "\n", "Vamos usar os dados sintéticos, agora com sua versao hierárquica.\n" ], - "id": "27e87536" + "id": "954450c9" }, { "cell_type": "code", @@ -75,7 +75,7 @@ "\n", "warnings.filterwarnings(\"ignore\")" ], - "id": "29aab82e", + "id": "0fd4b2dc", "execution_count": null, "outputs": [] }, @@ -88,7 +88,7 @@ "dataset = SyntheticRetail(\"hierarchical\")\n", "y_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")" ], - "id": "ba69a95f", + "id": "87b5df73", "execution_count": null, "outputs": [] }, @@ -100,7 +100,7 @@ "\n", "Agora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n" ], - "id": "44c0e139" + "id": "b3735e56" }, { "cell_type": "code", @@ -108,7 +108,7 @@ "source": [ "y_train" ], - "id": "72d9f5ba", + "id": "701329e9", "execution_count": null, "outputs": [] }, @@ -118,7 +118,7 @@ "source": [ "Para obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n" ], - "id": "ac4b6e5d" + "id": "d105ecea" }, { "cell_type": "code", @@ -126,7 +126,7 @@ "source": [ "y_train.index.droplevel(-1).nunique()" ], - "id": "0500b976", + "id": "086fd6be", "execution_count": null, "outputs": [] }, @@ -136,7 +136,7 @@ "source": [ "Note que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n" ], - "id": "14700f01" + "id": "ceec492a" }, { "cell_type": "code", @@ -144,7 +144,7 @@ "source": [ "y_train.loc[(-1, \"__total\")].head()" ], - "id": "7922cf8c", + "id": "43a8b75f", "execution_count": null, "outputs": [] }, @@ -154,7 +154,7 @@ "source": [ "O total de todas as séries é representado por `(\"__total\", \"__total\")`.\n" ], - "id": "ef5bfb5e" + "id": "1eb50ed5" }, { "cell_type": "code", @@ -162,7 +162,7 @@ "source": [ "y_train.loc[(\"__total\", \"__total\")]" ], - "id": "e2eaf63b", + "id": "4f349170", "execution_count": null, "outputs": [] }, @@ -172,7 +172,7 @@ "source": [ "Para contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n" ], - "id": "e0afe3ae" + "id": "74ede870" }, { "cell_type": "code", @@ -180,7 +180,7 @@ "source": [ "y_train.index.droplevel(-1).nunique()" ], - "id": "0f87a4dd", + "id": "5182c916", "execution_count": null, "outputs": [] }, @@ -192,7 +192,7 @@ "\n", "Vamos fazer uma previsão e entender o problema da incoerência.\n" ], - "id": "e841678e" + "id": "e6c66a31" }, { "cell_type": "code", @@ -200,7 +200,7 @@ "source": [ "fh = y_test.index.get_level_values(-1).unique()" ], - "id": "0ad04cf5", + "id": "3b54ec2a", "execution_count": null, "outputs": [] }, @@ -212,14 +212,14 @@ "from lightgbm import LGBMRegressor\n", "\n", "forecaster = ReductionForecaster(\n", - " LGBMRegressor(n_estimators=50, verbose=-1),\n", + " LGBMRegressor(n_estimators=50, verbose=-1, normalization_strategy=\"divide_mean\"),\n", " window_length=30,\n", " normalization_strategy=\"divide_mean\",\n", ")\n", "forecaster.fit(y_train, X=X_train)\n", "y_pred = forecaster.predict(fh, X=X_test)" ], - "id": "a8696897", + "id": "417c18e4", "execution_count": null, "outputs": [] }, @@ -230,7 +230,7 @@ "Para somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\n", "quando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n" ], - "id": "8137ba42" + "id": "ec9435c1" }, { "cell_type": "code", @@ -240,7 +240,7 @@ "\n", "Aggregator().fit_transform(y_pred) - y_pred" ], - "id": "a3fde02b", + "id": "b590118b", "execution_count": null, "outputs": [] }, @@ -278,7 +278,7 @@ "\n", "No entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados.\n" ], - "id": "85e3fc0a" + "id": "a34ee9c0" }, { "cell_type": "code", @@ -291,7 +291,7 @@ "\n", "y_pred_bottomup = bottom_up.predict(fh=fh)" ], - "id": "c5a81d47", + "id": "eb678a15", "execution_count": null, "outputs": [] }, @@ -301,7 +301,7 @@ "source": [ "Agora vemos que as previsões são coerentes:\n" ], - "id": "861b8606" + "id": "d2f672c9" }, { "cell_type": "code", @@ -309,7 +309,7 @@ "source": [ "Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup" ], - "id": "81e049eb", + "id": "8f7e93e3", "execution_count": null, "outputs": [] }, @@ -317,7 +317,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Top-down (forecast proportions)\n", + "## Top-down (forecast proportions)\n", "\n", "Outra abordagem é a **top-down**. Nessa abordagem, fazemos previsões apenas para as séries superiores na hierarquia (as séries pais) e depois distribuímos essas previsões para as séries filhas com base em proporções previstas.\n", "\n", @@ -352,7 +352,7 @@ "Esse método pode ser bom quando o forecast total é de boa qualidade. No entanto,\n", "dependemos profundamente da qualidade do forecast total e das proporções.\n" ], - "id": "6bd8bf8f" + "id": "499d5377" }, { "cell_type": "code", @@ -365,7 +365,7 @@ "\n", "y_pred_topdown = top_down_fcst.predict(fh=fh)" ], - "id": "b44ec948", + "id": "276029a1", "execution_count": null, "outputs": [] }, @@ -373,7 +373,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Reconciliação ótima\n", + "## Reconciliação ótima\n", "\n", "Existe uma abordagem mais sofisticada, com uma intuição geométrica interessante.\n", "A ideia é ajustar as previsões iniciais para que elas satisfaçam as restrições de soma da hierarquia. Por exemplo, para a hierarquia $C(t) = A(t) + B(t)$, queremos garantir que:\n", @@ -393,22 +393,24 @@ "\n", "* **OLS** : projetar ortogonalmente todas as previsões base na espaço de reconciliação, tratando todas as séries igualmente.\n", "* **Weighted OLS**: projetar obliquamente, ou seja, considerando pesos diferentes para cada série, permitindo dar mais importância a certas séries na reconciliação. A projeção não faz mais uma perpendicular, mas sim uma oblíqua.\n", - "* **Minimum trace (MinT)**: use a matriz de covariância do erro para encontrar as previsões reconciliadas ótimas. Chamado de \"ótimo\".\n" + "* **Minimum trace (MinT)**: use a matriz de covariância do erro para encontrar as previsões reconciliadas ótimas. Chamado de \"ótimo\".\n", + "\n", + "\n", + "Para a reconciliação ótima com OLS, podemos usar o `OptimalReconciler` do sktime:\n" ], - "id": "1fa2b89a" + "id": "9ddcb9d2" }, { "cell_type": "code", "metadata": {}, "source": [ - "from sktime.transformations.hierarchical.reconcile import (\n", - " OptimalReconciler\n", - ")\n", + "from sktime.transformations.hierarchical.reconcile import OptimalReconciler\n", "\n", "optimal = OptimalReconciler(\"ols\") * forecaster\n", + "optimal.fit(y_train)\n", "y_pred_optimal = optimal.predict(fh=fh)" ], - "id": "9da2146b", + "id": "d973b7f8", "execution_count": null, "outputs": [] }, @@ -434,10 +436,18 @@ "plt.xlim(pd.to_datetime(\"2024-05-01\"), None)\n", "plt.show()" ], - "id": "215b42d8", + "id": "5394d70c", "execution_count": null, "outputs": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para reconciliações ótimas (que usam a covariância do erro), podemos usar o `ReconcilerForecaster` do sktime, que internamente já faz o cálculo da covariância do erro:\n" + ], + "id": "c0a417ac" + }, { "cell_type": "code", "metadata": {}, @@ -449,21 +459,20 @@ " forecaster=forecaster,\n", " method=\"mint_shrink\")\n", "\n", - "mint_forecaster.fit(y_train)" + "mint_forecaster.fit(y_train)\n", + "y_pred_mint = mint_forecaster.predict(fh=fh)" ], - "id": "a0a619e3", + "id": "a23a1515", "execution_count": null, "outputs": [] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": {}, "source": [ - "y_pred_mint = mint_forecaster.predict(fh=fh)" + "## Comparando resultados\n" ], - "id": "c31dd1bc", - "execution_count": null, - "outputs": [] + "id": "cdff48a6" }, { "cell_type": "code", @@ -484,7 +493,7 @@ " index=[\"Mean Absolute Scaled Error\"]\n", ")" ], - "id": "a65a4c8f", + "id": "8bc6da84", "execution_count": null, "outputs": [] } diff --git a/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json b/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json new file mode 100644 index 0000000..7ccc2e2 --- /dev/null +++ b/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json @@ -0,0 +1,16 @@ +{ + "hash": "00369b8f9f3f95617cc57077c327824d", + "result": { + "engine": "jupyter", + "markdown": "# Forecasting Hierárquico\n\nMuitas vezes, não apenas temos múltiplas séries temporais, mas essas séries também estão organizadas em uma hierarquia. Por exemplo, vendas de produtos podem ser organizadas por SKU, categoria, departamento e total da loja.\n\nVamos usar o mesmo dataset sintético, mas agora com uma hierarquia de produtos.\n\n\n\n\n\n\n```{mermaid}\n\ngraph TD\n root[\"__total\"]\n\n %% group -1\n root --> g_minus1[\"-1\"]\n g_minus1 --> sku20[\"20\"]\n g_minus1 --> sku21[\"21\"]\n g_minus1 --> sku22[\"22\"]\n g_minus1 --> sku23[\"23\"]\n g_minus1 --> sku24[\"24\"]\n\n %% group 0\n root --> g0[\"0\"]\n g0 --> sku0[\"0\"]\n g0 --> sku1[\"1\"]\n g0 --> sku2[\"2\"]\n g0 --> sku3[\"3\"]\n g0 --> sku4[\"4\"]\n\n %% group 1\n root --> g1[\"...\"]\n\n \n %% group 3\n root --> g3[\"3\"]\n g3 --> sku15[\"15\"]\n g3 --> sku16[\"16\"]\n g3 --> sku17[\"17\"]\n g3 --> sku18[\"18\"]\n g3 --> sku19[\"19\"]\n```\n\n\n\n\n\n\n\nAo mesmo tempo que dados hierarárquicos são interessantes pois nos trazem mais informação, eles também trazem desafios adicionais. Imagine que queremos prever as vendas futuras de cada produto. Se fizermos previsões independetes para cada produto, não há garantia que a soma das previsões dos produtos será igual à previsão do total da loja. Isso é chamado de incoerência nas previsões hierárquicas. O processo de ajustar as previsões para garantir coerência é chamado de **reconciliação**.\n\n## Carregando dados\n\nVamos usar os dados sintéticos, agora com sua versao hierárquica.\n\n\n\n::: {#1bfea3a6 .cell execution_count=2}\n``` {.python .cell-code}\nfrom tsbook.datasets.retail import SyntheticRetail\n\ndataset = SyntheticRetail(\"hierarchical\")\ny_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")\n```\n:::\n\n\n## Uso de pandas e dados hierárquicos\n\nAgora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n\n::: {#bb1952a3 .cell execution_count=3}\n``` {.python .cell-code}\ny_train\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```{=html}\n

\n```\n:::\n:::\n\n\nPara obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n\n::: {#bf5859f4 .cell execution_count=4}\n``` {.python .cell-code}\ny_train.index.droplevel(-1).nunique()\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\n31\n```\n:::\n:::\n\n\nNote que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n\n::: {#0305cb20 .cell execution_count=5}\n``` {.python .cell-code}\ny_train.loc[(-1, \"__total\")].head()\n```\n\n::: {.cell-output .cell-output-display execution_count=5}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
date
2020-01-014
2020-01-022
2020-01-033
2020-01-0414
2020-01-0516
\n
\n```\n:::\n:::\n\n\nO total de todas as séries é representado por `(\"__total\", \"__total\")`.\n\n::: {#78019572 .cell execution_count=6}\n``` {.python .cell-code}\ny_train.loc[(\"__total\", \"__total\")]\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
date
2020-01-0124
2020-01-0219
2020-01-0314
2020-01-0423
2020-01-0523
......
2024-07-012000
2024-07-021616
2024-07-031917
2024-07-042384
2024-07-052462
\n

1648 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nPara contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n\n::: {#34680d4b .cell execution_count=7}\n``` {.python .cell-code}\ny_train.index.droplevel(-1).nunique()\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n```\n31\n```\n:::\n:::\n\n\n## Previsão sem reconciliação\n\nVamos fazer uma previsão e entender o problema da incoerência.\n\n::: {#ae451738 .cell execution_count=8}\n``` {.python .cell-code}\nfh = y_test.index.get_level_values(-1).unique()\n```\n:::\n\n\n::: {#248068cf .cell execution_count=9}\n``` {.python .cell-code}\nfrom tsbook.forecasting.reduction import ReductionForecaster\nfrom lightgbm import LGBMRegressor\n\nforecaster = ReductionForecaster(\n LGBMRegressor(n_estimators=50, verbose=-1),\n window_length=30,\n normalization_strategy=\"divide_mean\",\n)\nforecaster.fit(y_train, X=X_train)\ny_pred = forecaster.predict(fh, X=X_test)\n```\n:::\n\n\nPara somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\nquando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n\n::: {#14408f79 .cell execution_count=10}\n``` {.python .cell-code}\nfrom sktime.transformations.hierarchical.aggregate import Aggregator\n\nAggregator().fit_transform(y_pred) - y_pred\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
group_idsku_iddate
-1202024-07-060.000000
2024-07-070.000000
2024-07-080.000000
2024-07-090.000000
2024-07-100.000000
............
__total__total2024-12-28236.811238
2024-12-29408.247548
2024-12-30222.472056
2024-12-3198.131539
2025-01-019.309276
\n

5580 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nExiste uma diferença... ou seja, os valores não batem.\nImagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa?\nA raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde:\n\n$$\nC(t) = A(t) + B(t)\n$$\n\nAqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completamente determinado por $A$ e $B$. Se fizermos previsões independentes para $A$, $B$ e $C$, não há garantia de que a relação acima será mantida nas previsões.\n\n## Reconciliação de previsões hierárquicas\n\n![](img/hierarchical_reconciled_vs_not.png)\n\nExistem diferentes métodos para reconciliar previsões em séries temporais hierárquicas. Não existe uma solução única, e o melhor método depende dos dados e do contexto.\n\n## Bottom-up\n\nA maneira mais simples de reconcialiar previsões hierárquicas é a abordagem **bottom-up**. Nessa abordagem, fazemos previsões apenas para as séries mais baixas na hierarquia (as séries filhas) e depois somamos essas previsões para obter as previsões das séries superiores (as séries pais).\n\n\"Hierarchical\n\nLados positivos:\n\n* Simplicidade: fácil de entender e implementar.\n* Coerência garantida: a soma das previsões das séries filhas sempre será igual à previsão da série pai.\n* Sérias filhas podem capturar detalhes específicos que podem ser perdidos em níveis superiores.\n\nNo entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados.\n\n#### Top-down (forecast proportions)\n\n\"Topdown\n\n#### Optimal reconciliation\n\nThe coherence can be translated as linear constraints on the forecasts:\n\n$$\ny_{total} = \\sum_{i=1}^{n} y_i\n$$\n\nThis is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints.\n\n![](img/coherent_plane.png)\n\n* **OLS** : project the base forecasts into the reconciliation space.\n* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights.\n* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called \"optimal\".\n\n::: {#2e0c8cbf .cell execution_count=11}\n``` {.python .cell-code}\nfrom sktime.transformations.hierarchical.reconcile import (\n BottomUpReconciler,\n TopdownReconciler,\n OptimalReconciler\n)\n\nbottom_up = BottomUpReconciler() * forecaster\ntop_down_fcst = TopdownReconciler() * forecaster\noptimal = OptimalReconciler(\"ols\") * forecaster\n```\n:::\n\n\n::: {#88777ac3 .cell execution_count=12}\n``` {.python .cell-code}\nbottom_up.fit(y_train)\ntop_down_fcst.fit(y_train)\noptimal.fit(y_train)\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```{=html}\n
TransformedTargetForecaster(steps=[OptimalReconciler(error_covariance_matrix='ols'),\n                                   ReductionForecaster(estimator=LGBMRegressor(n_estimators=50, verbose=-1),\n                                                       normalization_strategy='divide_mean',\n                                                       window_length=30)])
Please rerun this cell to show the HTML repr or trust the notebook.
\n```\n:::\n:::\n\n\n::: {#a0fce950 .cell execution_count=13}\n``` {.python .cell-code}\ny_pred_bottomup = bottom_up.predict(fh=fh)\ny_pred_topdown = top_down_fcst.predict(fh=fh)\ny_pred_optimal = optimal.predict(fh=fh)\n```\n:::\n\n\n::: {#acd00d64 .cell execution_count=14}\n``` {.python .cell-code}\nAggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup\n```\n\n::: {.cell-output .cell-output-display execution_count=14}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
group_idsku_iddate
-1202024-07-060.0
2024-07-070.0
2024-07-080.0
2024-07-090.0
2024-07-100.0
............
__total__total2024-12-280.0
2024-12-290.0
2024-12-300.0
2024-12-310.0
2025-01-010.0
\n

5580 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nIn this case, there's not a lot of difference between the reconciliation outputs.\nBut we will see that the bottom-up approach is the most accurate one.\n\n::: {#1954362c .cell execution_count=15}\n``` {.python .cell-code}\nfrom sktime.utils.plotting import plot_series\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n\nidx = y_train.index.droplevel(-1).unique()[10]\n\nplot_series(\n y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,],\n labels=[\"Train\", \"Test\", \"Predicted\", \"Predicted Optimal\"],\n)\nplt.xlim(pd.to_datetime(\"2024-05-01\"), None)\nplt.show()\n```\n\n::: {.cell-output .cell-output-display}\n![](hierarchical_forecasting_files/figure-html/cell-16-output-1.png){}\n:::\n:::\n\n\n::: {#54e9116e .cell execution_count=16}\n``` {.python .cell-code}\nfrom sktime.forecasting.reconcile import ReconcilerForecaster\n\n\nmint_forecaster = ReconcilerForecaster(\n forecaster=forecaster,\n method=\"mint_shrink\")\n\nmint_forecaster.fit(y_train)\n```\n\n::: {.cell-output .cell-output-display execution_count=16}\n```{=html}\n
ReconcilerForecaster(forecaster=ReductionForecaster(estimator=LGBMRegressor(n_estimators=50, verbose=-1),\n                                                    normalization_strategy='divide_mean',\n                                                    window_length=30))
Please rerun this cell to show the HTML repr or trust the notebook.
\n```\n:::\n:::\n\n\n::: {#32d65af9 .cell execution_count=17}\n``` {.python .cell-code}\ny_pred_mint = mint_forecaster.predict(fh=fh)\n```\n:::\n\n\n::: {#c66d6cee .cell execution_count=18}\n``` {.python .cell-code}\nfrom sktime.performance_metrics.forecasting import MeanSquaredScaledError\n\nmetric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")\n\npd.DataFrame(\n { \n \"Baseline\": metric(y_test, y_pred, y_train=y_train),\n \"BottomUpReconciler\": metric(y_test, y_pred_bottomup, y_train=y_train),\n \"TopDownReconciler\": metric(y_test, y_pred_topdown, y_train=y_train),\n \"OptimalReconciler (ols)\": metric(y_test, y_pred_optimal, y_train=y_train),\n \"Mint Reconciler\": metric(y_test, y_pred_mint, y_train=y_train),\n },\n index=[\"Mean Absolute Scaled Error\"]\n)\n```\n\n::: {.cell-output .cell-output-display execution_count=18}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
BaselineBottomUpReconcilerTopDownReconcilerOptimalReconciler (ols)Mint Reconciler
Mean Absolute Scaled Error27.46679686.1302832.83304133.4823234.572241
\n
\n```\n:::\n:::\n\n\n", + "supporting": [ + "hierarchical_forecasting_files" + ], + "filters": [], + "includes": { + "include-in-header": [ + "\n\n\n" + ] + } + } +} \ No newline at end of file diff --git a/book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png b/book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7c49399a66a325350ad707bc2acad4e4aea564e6 GIT binary patch literal 80589 zcmZU4WmsHE*DVBh*WeC81BAxiA$V|ykOX&km*CRDgS#fU)4034I|TQynRhaix%YXR z=1+BTGn+H;KOP5h4F?tL zj}Fd;cBT;Wh7L9s)(#e*jmVr#?d(5WTd^~L*?Db_t7(m5?eC zdq5*HAvqTEfOMhV0IC4=SoD50gl1<}*a_r!vp((bj+^^px5}1(dhU21bMa=+(Uc}r zYhHVzSF<bww<+s(c45KvWD@BCOT z9Gg={g8FBJ3E5~<0@PrrzP>(I{D$G$8S_A4OqhxB@dh{i{|+ZNE9+HZVWDo#quv|j zSQSN2NFyVo1~PngCYx`f9WC&nc3N5>GUZPfX0Js;Vju z?qDU)$;+c)XRjU*m7r+<&qVR#s$mcI_lsCqSk&Se0GDYsxZb_X%E=KMoVcAM{?AZ= zB-#QcVSbx~M!@5Mp^sQ9m~iZG-!_*sXu^{b5k zS@S$B+r(1IA(p7nLQZ3%*vJNLIf9@)K%ED0uS{yG=||eXYY%+y2Wo>lk%#jj5xVM7 zQ3(j@7#Y2e&1FP=*)O`NNto=vXU+k06I)eW*!K|9LvOO=ftJ)h$dD)CwN)MDjIJ{= zseGP%#h*hU_D`lOpm1Mh(C+C;1@FMKv$J{2qyd=nnQ$Nw-*Qe}-!pI{lDAClz~i`n zhsPm8?!=Gy-(^Y**rlcm)N^v(N6Weh=MJ;!WtB^+eiA}q_Oj;;61++Sj(eCX>g$(3 zE;-KVia<}YOoaPU5xtc&>-=}_Us6U+hhst@@*7S+BI<3wkwaJmm{MBDlJ`N=Zqz`9MP13^3JZ zR#qyxFRQ8R1`aSc%B7G3Y{;JOW?I(=*+;NP2;Q2&Zx5w7Yg`BJaofvz)M$i$L*UW|ntxbEd9o%YdYz}udI zzd;G=dZFLg%_!K|Dn+~dh`9e;7c2-A?%!^*S&{E){?Q>krxbcx0`lt{z;fUHhx@qlm%3 z$3~8J-JW49Bo72>!(EJ%pBZN2M=eT^XM&&SzieOXaH6Cj%s@($lo{4Xw)Vj0dAht6 zhk7s&o09SdT8Mu{@VV*c4Ks64&xY^9k%X3(R`tPmWs`)uIshBBZM31E;eQ@P$rjB# z9IOk0AJH(tDm_RmUmqSN*y%uiJw$|byPLDS&Htv!_{OL15K#`;qVI zW&_}`i~i-ym(yO#D51m@F}a}6Xn#aU2MPhRQlQp&Pu2;wtl^P!gdH1h-1k8hJMd!a zcGtB?Yj_&&3Zfx#Uo?I$L%e}*eA;?P+qF7yHejN#mNKwBQ^x9@Ulr{`=Jv&N33p%vv zv;#?(pJN+dIM%)JdD5yjTp}I&j2J7M1M1`N@W1!zs#$>WxQKYy`IbjxTteikq4NHl zn9vpZ^)?~C+&h6?#MQKbLtBw69teMg zSo#mzR_{q@@{ae@JPyGr1jy|FXT<5)`PB%+Bppp94Q_VE3tK$L_L6xVi2qmyqP!!G5#7#bMVcL%h8BYW!onXSjPLa9@2#$%f)34h)KFmn!!;?+`rfy zFCl)fo?+wziU0QwGPr0~x$Ab#8WPS{KAODg2wN$heJi%3Px}W4KNryWP9YMRb;GD- z6CG}x@M*MW|C+1667|GfE+~<;!vK*Mi(Ssy=dU;}DcVkZs(OO`vNwaVf;)Zhj~mfM zgOG(~WDp|-pIl0G8$UF9pRIQR`CQ+|#>Pe`CI%TtffJOP+RgpSb7bv`*Xxtk=ay~0 z#cHz=Lt@?u`#;YeUOZ+sILPw^XVEepX@gTi6A6)vyUe5lfkR`l=K{1%CkmIrN{i>s z)BQX03S2IG|M2nG2uGL22zg zKWd(Hd*nZ`1o*yVCqhTYBH{$D?~{LdrK&ydTjUAe!h(XfgYwo$vkXt%$NTHxK9i0i zt`){b-wf}kdKctSpGK#n4qqrZ&=L3`5!%|?>he3}1$X|@FEctUbsvOEzhd10S11Ig z`Lvi9F@7G@r&9NFaHh%f&;Y>vcpArtUD8mTm@yI=wql3~RcIPg)K5LX

*ZfMjQgwosBhj0&MGwxnZb6&=%ohj9(?T_fwy-8Vl zfQ5y^3wUekKSK0R=fh6OT9}>7<;>+8c8xYn#K#p-L55`G!S{MqssQLA`c6>%HZNrY z0JFZn9&plhZZjdz^}Vi6gR!`{xbr3V`op0i?yMGQ!Vu(qqgCc>z zy;;vo`rC&;K#W{|5@s+DtTc4VN?x6}M`S;=;pA`5d3n zm6N7Ed(hqIG30TiALjmF#V^MiKqkt4#@z&H7QeD|O| zhQDlO4J2c;A>hDL1B6Clqzk}7QSKz@&tTWKQ)Kx8A6vQrk7a7xI5^#THcs&+pe@VS zqQjbvq@zg3R(u+xu$+sfmSweF7aI$)9nBQJS$TfK8*hp+YNEFd9(VgVlpNUXe(lu0 z`wt*bwnq-4!7SEb?-8z|3RxhaeU1`;IXZdH2>#YhXF*a1V=6j25!J&yNHcowOhv`T zXY=OeYw7OC?M<%dKYAY4(7fBC1fN2tiq(yupB|;;<-53dQlTLMT7i+DSc!(S)l^_T5qviM zQ&pCu?%6l?bKQ)Q6w|D_OG-?froZp{=T+#C-<{yA%7&V%^OFMpnkjhyN%m+^J2;vM zY_`nLYf;g{JryO!#!@5}UtN;Zpd04!BGYOLwFO# z0qwetPN8pCll0u^4P z=`LBlDj`u(c-whn*^(PuN&3f=mR8G61nPROrjr}lHP&(`nX&=x;mi&2fq{WpNtt(& ze9sT(H$8$+0NDO+)f#ElM{XtnH7|OFSke<}< zkmxusIcijyNY9d~1#zzj2qQl4uC#i$kqQsDPfn`Fa6EvAy&j0CC#0;5`GQs-9#6b` zZg(=uOZ}BYq@k&T4Kf5g1B_3rM+E%aM{|V-{#mzI8L~LA+PiGMU}!dx8x8MrVWwcL zcP4RIzyt zga~T-UiU|}kO#Ljtxwc`y7b|`ViIpP_rAyKdGgkRvGIDU{jji;Q;o*XkIxeo&L?_{ z;N;kmdO70#qyiw^QwVfOE>y`6^9VNV3|iaE&p@5+p3(RI3XcCFJE;!i(ng+g*F6DN zuV7-Jwbd!9k+D7$!t{(c#`Z*Rqm^B!(Cq5{!(Z2)2towOMq6i-so_ZJfifd#dOov_FR zZ=u1NB9c|b^Q;Tch`7AvuBf1{>0(^A)2ccr2fByYIrY=l)wH%X0;JtgGG~_Qg8c|T zEdwB5AtUmI70lb?vgk!{+i$~vx9g4|n5{BJ8U}12lYbg_3JVJZ0iRBupA=MGln-jb zzf&(s*;}q?j{N6PV4ZTCYbVGIzATRW&2{TD)1v3*toyG%+CZT5!&y)Gz1Q>oO8AG* znM9I+q0K)=J|ZiN&iF>lXSNStE)| z0M!fyLfDrlQNSnU*88OsR{L!^HrV}esbi7(cf#vbOxczb_@5Znb!^3hNx8P+o&MEJ zh`vR(Cn|?xHFz>q8jrZedtW&Nu1frw%=pGfTF`1z!2p9XXb=6G)llOE3JH`llJeT!C?#cS4UXKO;QK& zL5rSLZ)<|mc%6;LvcxHnL;__}3q3T6MNi+QyoQ?aH27EQ$n%eBw(3on5PB=}mP=oT zwvZoo$#LleHsjrZYOesx>Uo=*R!9S9hS8|#8!aZ(s2fj^sGEQ)D9G7WnmMQ`<$NW%o$%UMBNx~BO(M6lPYY$Xu#I1i`KK|f*BPX z=N218SmVCo&e5J4=SiDydO;I=Vups_(erwBdsz9mh<-X_>4yDQV49&ZNo87r{>|lI zF;$Yy@bjwuC9|B7omA=B61HQ3k|IR%3))4p!j#dkScs|pG4`sDEvMY*eo(paQ?bt5 z(f%;^c)>yozs0RQJTfBb6ZwDXi5ZyE^VG)!2n|OUZF50sV?9x?Brx;!va~4-SD|FJ ziTNm?CHP@gQlKSXa`ndVh0DWJJRdNY(Px=kSqRS)VEOXlsk%708@hdXczMQHQP~~Y zNr=JL?DEV$3HJt0R+!-}m4D&XLB$m*iocq)!Ml7k?A%^U>31(AnkRDFJNa*Yiyw6j zIo|QH9exf{8BJsE?+$`MJT9nZ;OLoYM5^P8Cf^?WE8U~~gyX)q$%9JtK#DG(87=jPtHA;$_$D{X-c?{CHm zH!VKde`X8ytLlLzlzHQ=Zj-$;O18%8c&5RI|Z#HDJ*iD?19hIGc!G(9v4dIIRYD zBlE-7q#_Vg{1ptBpnl5%Zjgx=Y|(PI^B#wz_Vs)}8+mxCjaNmSoUWvNYYk`e*PR}( z&?tf)cKt<68eg}3A#f+nSSrgzmvtgpWf9Md)$LoEV1dZUSL;ak%%?!^M&*@|MbC>h z9UEYk;rnT7bEpT?XECJ{{4zf?zvVnRmNu1Uq^f+q6a~RE>0`|q-Ly0?L*eCZL@8>F za=RSkNcG9T3cZ*<#yBq<=fuEj6ZI46otYWVj1C$Khlqlz@r`3WTxpDEJ(jaYg)w0L z{7PT;o_4^_$9Oaz2&wYLJC~y#L@I>|bNRXz)`Xz)mbT5{tL6C<8+aJRNWYbiW(c#s zeIM8I>Z*b64vrIiIo`8AAJf7f{%#5@E}@fS^D^~}Xd6Tr;wZUY;7oM$_djix6&msM#A_@;bBbo=;vxFF?<;bPtQ(Peeq-7uj&h zW9WMW_JQ+oV51xY|L58JFpc+no&F?RkSbb{RYQ>d9yScNA?{uFN90yxq=MmhfR}ogTO+DObRLI7i>K+bL(`I0`p#KWFi2% zuC#{-Um~OCc;Ny*z$SBcCjF0LC#|s2eKP`0nwRgcW3a`X-ia^FwyVDSB4IqHetI*Y z{H;vX_S#kZa4P>Ibdvibc@OKG$HPzgVG*1;IQRBnA-Vl)=*;5fuUp($Rw1e0kZGC> zazW3gGcj)q|%7zqi zhsx*i`Kwne{7}o`K8DaRT85vPXM3H<=()X&LsBLsT|ES}-m7o-L_QGw}GRw+P zy&pD6*<4NyKp+s=n>R==2;b>weyZrQ>1y8m1(){zy1R3$6qIxMO%1s_$Y-LeRWVpB z9wV_-oRFRLCuh3jQ{fhT2t*X;o`;pPrZ$SXv1ULk8QD#_W)>jAo(3s zh}PtSZ$> zxnU<1+&+9`n@8ueaGHg-!R#$+Rqr3Zd)mg)xPwiY7pGH04d%8bYx*kSGJvB_vUJ7S z?=w=G##Plveh2MVgw~-;xZm+zFW@u@5iU{` z;Yr)YgtVy&?e@}?6^55W`&-B$>r!FxCo=;MLh(LpEiJ+iX+~<|4}QOH*$n}kRiAg;V2MtfH$5De3A0w(Blq@t#hVmdq5zBcU2|p`U-$RF z@ZGHX?@r{SjZaK;IjIt%!g*a5>wnj8^#YeMguJ{2(mki2xxJy$@8Zz^$MWsPV52mu zX*$s37_8ihi3G-V&$#1BY=@x+#KVeVFH6sbIY3+sjvH1Qo2sVA%)qCaN0BHZ8obQJeTi>6Ll#Sg;m=911@Pxz zkzrEmqdBfi`1kxng4Uu{T%T@t&cMnn5_xn$VKAu|eul@d&>KqOW3VEDleHX#@|xA8 z7rp6xnD;L|l%?fHq$D`tXNpyWbo^#e_Wx)QQCaJgThryVwup~T^~bMtTb|$&R)C82 z-NoL`!b-eAHfX&ooXu>Qh+K6T$OiRNtsyW=B^Q&QM@8`9$a}tTeeRr6*Jn!g1`DKR z8qQP#&ky#4$(*tww(W{@=U=&&>8@5jR)?BCgSl-N8<}nF9rgItr;;Bm999h8%e5@0 zaN#ziwiM*k;JUzL&gGKb0Fy|s&d)Ci8cyJywgCpHxWl{bBYark@n_LJKJ6Em+kju( zcz5(W;ONK1=)`YPcMv18SZojK<4`Jewmb%GeSFMXk5GG=rY`|;?It+4y_W+}~)x@s~4_s_!Y!shc0k6Yur)#krkiS{mNpE zj!G#eb4TBPh|}oXoCU7m%50@ErPVW76vkelVT%DV+wI3>;=j*S`Ofxm?A+Qp_>H{_ zzqeA7ng74c?>kklWL8Ou9N?@&`0vZur3?HX7+>$*AH2&|aXB5~cs zSbG{690X~arBNp?d7KX!HE*U;315NJ2*$wPP28w-Io=T$f4W$wb;~WR~-L?0=4MUj!eiw*S4gtt^KB7QyMsaO+q!3JR9tJAHd5p&f`b!Od1+dYPd6; zmPK{#{d}KM69J~T7wUi0+nAUb-^Y8$V-w;Z0+{>CDk_v^QQO)K>ZouD$i?6w4Kr9g zK!*)ZNNIJ?PxoxzPabDl(HaZ0vmq}MiLpbzX>1I{Sj;6*vIuZQoX_qnwPd-3j+td{&ka*?g2pL90bMC(` zP~iG-4?lkwg_+x$==Eq2B9C!REeB|vQ#Q>q>r8YP&E(c123`ObJWM zEPR(ye!QwNk&BLv&L^lElBZ21`!kXv`Wy@Djb&PwWi3>^(O_bnael@ z&Ya4E!apMbi+7*&JLZCLbou%6U<^l-`NaVzs+ z?_+29oM(YMARSF~F^aebtTNdNr5~F3C56y^+7MG^$+oQdi29VoOT=F6)Co^8y++%C zpF$NdTPoF2%9g(#e=}fPd}LxFZl^(>XoyNXly33PXVece^FCqOvx+PZ1%uw{%#dY01HW~sr^h-ecc=dIy> zhE!H6iPlP$=>X_X-~EX5rCxWCEoGc{rmpI6=$x9IOn62Z-8i;$z6O>`_>B5P5Pq|= z$W=_~dp+t(#Vd|5R|Vrx;0_pCZEqP5eo0@ls5*5?<~GYn0waP^V!HVe z7bcr%Ui(gg=uv-EM`T*JCR4`bL z#<8Hu^C!~Ejlwy69cRTwu6nJ{)2$4Jq)(N4w~J&-0sVBr0yVmFYB2$eYE|v<P3OK5RUYu8*UkaxB5N4c4B= z$$NeTX_ss}BRllijgv7+Qk*Ribf_^E(fH#eZL}Eoz9@bu*zQ2Ss{{d;u%YY&A84&O z3TF#eHVwc!9EB&aMl#iT*|nqV8tnX#zSzzdlo9;U1#0()GhS|T%`&6l-)Xr&#^Ogv z@gMi6R|4K)jJteJ9}g{5P3n*Z*SK&_T`;8zOOmD)=m&rBBkGg)>Pl@*#=n!hRvGDx zWVk0`HGr_Qw;!vu)+dh`uLLMZZ&G&M&&o*Y=4*W6nJb8)`U{Z_#y}$wqQGPXT;zun zd*Bi}dm{G5hWK(Z=x=^I_Gi4WxTn9fVlZAU{Tls1p?q7*m2I_wB*p)fA(ianu8vl{ zAlm#;V39=RM%7&yT5kw*QJWu|isyiqu-d=QFM8Z~)9##g=r2flRuDe=oOf-znwq@e_NlWMaP8Y>NqR#7CkVhuEa}_5KFAR5R=e4u@6gO=QKvGCB_9rWw0`fy?FhKj zuY^>S)$3?i_olpih1zs-A8mW$zV)f@ntQcajd^EK)S~xx=@*3L-mIaC07)MN3zZK46Gc zy9>qr%H}5g*qN{O>aCH%@0(ujw73$t*wKFRqYz%;8`uUlagRtWl5}#wU3$M^WW>(G zu5SQR;$e!?I|4zylxzQwx>YDvWfTt25v}_(TFusP@7+x*r${u#+6NpM1lhY!Y>o+U zw$kNHCVkNMop*SCP?E86;e)Bp_9{CyN>F>^cB>@nF1JRlmUPn(lw^uLHYi&91w<^N zENV=+1dQ;Voe0ri7sVjUeaZqB^&Dj*ThzM!E)LuME}uCXKM|*8HmLy0f_ufYA$}XH zpXOPavsT}sa8{tNM5|3Agwt#H;CxoF%YB4*kl1dQJZo{712wM(&FyotDxR&vn-Y02C)xZTp{-{Lo0O#&@u8?3|WJQvq1p+o$jhpahGIUD(3 zG_>>I8rn9zSY1%>QI6!>_GE4n*y44PU$+zBRH-guanUNlu+5Ph->+6#DBC?1_X+Xl zl!JQv4obk!mPAKFhKO;`m~D06l03IHIa9AFey$rCTpCQ#$4AB!T0et}3c!LzP!Aoi zE?%+LL!ncjOv1!Et`cd>=0I~uIzdGT9LzisX|%pcho3CJr#Fb9HYN&kO(DG7nMrEL zz7R_uF{i_-ouRo7R(iXdZp%JKw26Ol2h)vbpO0v(fCJaZD^=^^gjw$^76s+Za>wPw zH%EF~=IQ&n`-i7=M?l23itI~mb@;d41V|a3lYNXkEQI1MO+`Jge8SUl051<=(tw*G zieZlOE;mD^!gy4-QXHch7{Y;fiV@)%H7{$O_g;|;Ho^Jznz;>REVTBq*w$t5a5%nD z77wg^pKmD02;YkKu<=940-Ngu)G_-_pm0Xx`?>?E)f~(HYhfIK=hf*_=4R&B_7Aq3 z>9-n-0u20cUDBQ%4fpF!VG!K8m6!uG!=O4`BL5BL1PCl6Ne`NBxn%!90&rB57A~X~ zsMyJD)v3#>Biv{Tes$GHMPLvg!GstC7NWkqvQ>CPd5rM8Tx}06@=CJ*BDl-44?Dch zuv)x>iOE`q=ELG=u%~1P&sy@VQ1 zbKMCn*YBVXU%@`+HBF~A;PhGBfWi}X{-Fb3vK)oqyn#P8t{gpr}f%xY5 z;&sJi0XO8a03rF3vO6?t={(dxoLMkaPZB2Sw>7vjnTfJ@L^!%U z0yNm=iBd$n_*9HvxNW(Uu(;r0zCzcTK8onwm9#y%>q+A1X68|&>syAUs zdS5xj0SeyGS~0f+4m!MHnUkobXppLyJs1tnklf>|wvp0O44e`-UISk(dYW#}LO5sm ziuJ*p&bUph9pg=W5B(g%rTHqL?dXhvyi6=vKWP-tT;4N!(|#4|1QWyR*Kx#vCbkJr zgkExS{{_URm6ui3-!4@9fOUoyy1c{-A!oEC%xfRzb+R4NZ=75Zvd!^5*Y?5PBWL$?nLy2is z9bAprPL-kHvt6^LK3yUK_KKg^jygCy@Bm%aq-9koA^~sYdZ!mXQE1FV8Wr@NMnE>(u$TtVm~j%=16K7DU3N^kU^3#94i|MU1@+({*K_)?&n8LHCsg2jU7x(s7~h0jM22 z?bGrr>%(2v>&v$6Z11>Vd&*+R*#6YVSM6$d^a5isqH;bp04!|?Xnow(TjDWUL2S(W zm_NL$vQYD>?AHx6f+)#Sz*m&Z4p%7(%F?LC5C*D;C2VKhUsq+_%^PLi5By;jj3js& zp^#VmK0=t77rhBm6lA3nN9P@I1c8n?>-8*ht>|5sYP)zT0mjv^9b^Pz+^nG~KS;CT zBK@s995hRET}6b0vhOrne9$lrup%um4N<@U&F{C?$$e1cD858{TM!qnjupZ#C45>dFMbe)X* z`cV8$*HMH$33i9UMopIycfvxEAPvXiohn~sb}q(7i|5QMTTCOOmiBH;%)`#7=E} z=ERxOlzcueCLCCE3X;cL75O$KZj$KLK**>QULV(Vkj_*m@Amm;S~C&|ARXY$bBc$TbuUE_$@WW?9ebB(_LB&=?;Lj5&0Gfrcal0LGJoZ75#^uLI=r3z;IN5HX z4=I|IT+;erblPzR|C3murOmHORF+WNSV)#Fl3au@;a)CSW)K>2lY*<25`CGuzlw4} zRoZ)KMVNxy4&=zw);c}`2xi%~3sFY(mYL(uv5TH-V#1buv5+aLE$A2uMCJ6=pfhGB zjmR$8*EOV$2ztE)!Iy9F0!ma)BvPZNH{Fn*>ko0-X~A~!QqgImSmX(%Xi-+M*bX+; z+BEtv*CI~@0*AJ(4zN}Kt|kIWkhoQn#oFO}N$UEizt>*jf#V(CWKv-fLY*8JGHGQ{ zP!zr#8!IguMn`6`-J6nc8}3bw3ewA$Vu!XfxP(YvxD&I6G9uRC3SA)UY{lMdvOGns z(&U;Ql-n~Ow_D9BxOS!b>^<9f!o!m@Nk5t+@3z^#Lb(|)Jr>0EahsJ8_V{0#5dH_K zhQIP|*RL|W5hFg)bxzkIui-wpPBUpi1h>R%C@juSC|&hsD7CJ=0V@J+DvnYXZ$1`` z*IEnd*a_X*uu9AYW28Tx*1tAn?SWmCEGG`FIBq~(yd2Axy6$z+OJpMxSmc=^GA3w! z+=GgcKYEQxlJ%@Zvc}X&BC6~IC~%f~D<>)XDq_m*#+$5EFKnYFy)FKWtySetyrD5O6;RU15(d4ntr+W^5FKWq zu4k^~|8|?nRh+;&10$K0?pXhdIg(x;R9X{PITgKp7zI}~19c5a{c|Bc5d~b*!_3#o z49(PH4M`@H%lbYBeLyCDI&UpIF4o?3r`%M1N1Vg^1?1u7NwBPW&YY)I-+Cw-#woF2 zWkX*nGnm=O+MVC7`yrsHYvfIeT(rTE;_}M7?6;9Nx>Hgi>@shyY)U#>xVkf6?f|&p zf!c0VO=i~>k1d3hJgG~bX2iAgrKVJOs9c&z_%6CcXYc0=d>k1v2Kr66Pg08w0u!n9`RCe=1>ya56K(wUNs}$~8vg>R@RB^s8gg&_-I~f}TYzaDmQk zSr^?~DGq>tvEgeYA>e`BG=(Dq7f!&5FG{+=tm9b39-Bvn8LLqc7W8Q43RS^?+GzU| z?oovBG-Vw}1Yd=k6Y(zdcI8N$dYdceenbJx9(ZVq+BDBDv5dY%B#Bihe#<67LZch* zX1|LP(ldg6f0Poea=#V2uw#nWws?oe+M$kWy`;y1?LpCB=s!Zt(8b3^~geI&oa2N{Bzod!4dDPVNZGK0d8j| z3&+pDvJYBuLYp@G2kfS@r%k%bfY=yS!r5uW8NO_e!K~I>2eSl8sM3iTI|YFg+ky4v z()VXVZ<4M62{;2nOJKLR*DoH>W+a-nUoqNZ^dLzu4cX9Ah*zW*SuR@8OcG4a6K3p4 zcsnOt*U^w#u+20Cwe7qCg1(HLV!0R_Rnk&x8=V_@OVh1norhj3rvdbKhKFVExs;IA z>An~Ar@ZU^$qOBiO6NCEO;@im`0VtCKMkh2;tac9Dl^uU-vygM-{KMBZP;#kYi%X$G9lW*5Q)G z1VFf29J4mR7HBb(AnWe$hh&mzvHXZ3nXR7It9mH1)AWW*$a8 zV~xC$EdEJ5gKYnmcHdK6f;Gq?U(f;UawZ`=sBx>F=z38{5nCjb7;8vbD z7ysmc>17xXl32f{@Aio`NFIMc8CD}d$PoyNM_1SaJ(e%h1#~RmaD!d;6Dof*RUpYp z61}4;^dUJgQFd)nz-T+COh;)oSau0XZe9fNTa~C-=C;C1?5zaa(@L;n1 zSy^uAn<&{g%XO#z!rDN`>oJYKLfl1fW|OoOJcLU2ch)?Z`42LhHOJu}qQ1(goFB;A z+K(w12@EKO$DnLcY_89*Z$U;S_}y*y34p8lV|qX5`;e~pCJue0TYE%)U^$&gqNw#4#TWZWmq#CECM_{j9ssCLL-9*G@YJloo~tUnj_ zIF|rfx^W`L&qrpBPSo6vNk7m*(lcc~UFV+yD6rCOO;+kmm+E5oMF-N)1Gut?tIw6}WOC1pl zUu&b__D*6lDLDR@#D3hT3TT?EqTT{zbimZO=^bSgYe*}trOKJ>FPlmW1J48(%aZ$q zOki^j6?RvSfuRJ+3;W%Af?hA>%sssk7c7kj6!aL>Jw^Udpb9D))hKY_@nHF|+%HI-E#P&MoB5vTBq>8h;~VUT*l`fbpd%Td z;dSLq&Y#^AvIjA94GS7L&xxa&vYHf!`0}!%CrGl)Ky1qOrr_=HD;Ee z>`ypGL3FuYV+OZZnsttlq!PUykTDk<0{~zeoVlx#iLK(>5P?tuN&ZC~_ms%e{o!~B zl_0Ln{A{g;lHjXLI2C5OPyrY6c7tmQ!^0uq?VRTN)4gP>ucP$i4~OORiMw_tcO@PD zK)-oJWQF0$1WY&t|GC>!;(3A!v`xOnZ3O|`^D2e-_rXV9ZfD9wF3!ob`LpfS(R@cw z(Z7~$?sN3>8|@l_A4i^$rw0*4s7h~+-vQ8`7>DN$k#IvCr%Uc?tCkr5;^S_=YhBwR z=qeZVWw7ST<&MbXU2b5z2iO%-_8 zKu-9xSRm+N6qPO4Rf~k_&hdsY{#tV*GS{fyenq10&2@8EV*{t7m7$RHD_5?300qgPX#*wo-X0gY9@oIBYex9Gjt z!Dx2b#DWH*!Vt66Hee`J?x0t|y2XZaJc@N2dSUR|WwlgZGnaW98ci`BD&$u=o` zAf2C>amQz*ca)2VLViGIl1oaugqK;dH{Ch~B#G9$2cwdw3dAjh^_s&@Yv(u3&tC6| z3t$34QT*(g8HQATfeP6R7{Bl{OaeH~`1H&z&~qCTI?Y0qmmT{&4Wu~QW7FVN_94z@ zp;&bN$I(u(YE|AhU_4s8kyggRwej>8g!l>b6Q2;WQ#L)1u1v&rD1h*B1(@>YdUONN z;UdMs0O!R@YihQ_5KuQpKc|%;j0vfrQ;)5m5}c)2V+b~HkM%?+dPBv{!ZCyC&NC67!gEV%Q70g*)y4#5&(gtA`C5^P~|Fb5Z13?cC8 zLzWzqIegeq1Ry86|~2v8T2A4v=)R9KWvY@ zLBY2fbIuZT8xd5%D3eTxb@qyyHSB>On^IB9X^Qf5~jKbZW{m`-6T_ifIrHjZCNPioZqBSkc|I`iYGSbuGIVR+k zbuSaX`rgWfTbT%0+oyz#0(DCPF|jcwRq_G+{@-_E4Wt(+V?MMF_YVz#j7vQ81Nm6q zU1I~TSpq$;MWkp50eme)xBrP8HpQFuw1&ZMg3 z+AMa#odux{F@e_h4a(C5KJ8R)dobCsz7fEC4WV0xOKN24>dSJ`MLda{?_1ZTj*!R= z_h8#cNV>b56i9_QAbVftM<%*@-}|=W)Xw8^T@2aG&d@{(%UN7Fdnb~X5fWd0g$GWO zQbp+2YI_OtK1_cB8YrDu1nNHHu3!7qEMX-6kjCe{qzR*_^WK+U(g%AtdfzD`pS&i| zX5HGC0Gynfb!4Gn90*{0khfdTdf z(O){iUfVDJFLK9)%k+6M{nz+GdpV~u5Qd75s`S)9n_;MbPNS=Rv5c$BArj0xP;}oS z_PF%|g!7$F^Db=R$M-o-qdR1npiB3FeYhwZaz@w*#maO0k@HnPztrsZVJ4AY%gyub z3dE!mQK8N|mkTc%v!A-HVUkB{nsVt4rV#=J)IbyUa7+;6ULKnCN)n2pRXu@Ol95(`JgKb5jL7a5ye+(!@0C8v-isDcH+CY2O_b9)*~GQsW7mD>A)QK(ta+M9 zSgOqpam|VB=y|%-d#iz=WvxK-U4=d=Z~U`pbQ@k_1g{{QX#4^0WI{L_tbXbk8^zAD z`qa-XIqt5R5aDHp)MMtqm`sV*-VPp$d}RA+E+__Uwyl%-5Wet*ppnE5PI*OEL6?oN zrnQ_e@_)04-ynwnFrfeBM=lyfMo*8h2fh_{^kbsJN_UlI?)5v1Hn8U>3VfIN;%EWS z`{_KRD~SlF;c-+HE%bhu?P69w<(*^uGWf1g!It}So*kvGzg>_as>%&KFDy=Q+|xmt zNf=P87*>NrJ+j|H;7-qVdEf4)$W(REyLv7f-CyvNBoqI1c{r##t@au(w=R~Gq^4a4 z5ZI0zC5%=IPv7V1@K}4=FHmZckjJ60l@kOM6X%Gd0Ur5$|Cb-S9>c z2$OAHQm>3S3S0-F%$t6f3%;vb!MPh}bBS70gZXZ?GauSROvL@jA*)Q!;6n9HZd=uY zuYfuqlCchhhm+k%(Dp9FR&h(kRXbD8*rjdkCVo%V+$?{LkPX5sgc zN?AHYaS_(+=c^4z>}&#pEu~>~JrH8`4wqJy+2$Ub|7DAVq+z|%6u}Rf;SX>b5 zdGALxP{*}xV!@fi_2y2pV^$=pT?&ADbC0ClD+N7RNSXW*8TTgDv2-5xhzMSCGjWIc0NN8v~_)h96_yQQl2;X@`P2`I?>&5cZ z^|B%*16v(UuKj|O?R865vqx7x;JbXlNRj&8$g;ne<~@SSm$}9cN%%e~@oz%?Kj6ey zrE(_c^Hjm=fP}0Krd7_9b1At+TkxUzJ1Q!jsP>9ils;kQPhY`)K+M_|kLQ+X0l!T* zc4&m4cnMy5HsUG4CdO@*kIUF^gH|y&>tfTQJD?+aoe1zIErqIjd=c%D14ghMrUw2WOK1HMW%smkK~j3@X6X*; zmhJ}W?i8eBL0Gy$N29RE8{XUJ`~Cs@%g%k~%$d2a&zR5o)Aix19Wk@@ zVOAw}wYGlzh9F3OT`B7>y6=@`A%d;l`yIM3I?~^Uu#FhT!cC*MP~W2NGW1R3A|FJ2 z-S0BkX*hJaFX}&&h^E5pA7Xkg2U8WpEO*xRW!Egu_TyDtFhg7R9^t+tAJW2vj)#)rAm-)^_8Z`hP)INioZd@lI*@FduDb))OcirSKUjQfQ z?ZChQ=B=9UIbifNdCv_2r@gm)_YMU`4bWO;h64JZJ~bJJLM%AplfdZmRUTR5EAS`&kJE56pWl}TcwWSnrC$aL*lNxjOd z%2y}!h=Jq}Z>3g57Y+lMwZwuCvn%Q}CIZHWmX$+*bcQ%#*|iSH|3Uz{t)`~tI&iu4 zPss4n7$n@u&IVDB9DwujqAq9nb|@qXQ~s?_!`GQ5yTuzOf=ctc~Zw5$qG{sk21yfUon zKJuXYCVwOl@g=Q%c>2>3I0_SFR?P%hZe;7!r^5EhbYVwyr5&6Lqb&8GAqcjY z19vFrYnQJPEz+Z1M6V(d=0A7z4Mg_53`91}nyAgctlNBvo^TI~-*d@Zl*}u`QHO<` zHhrTUm%v4|mA~Ze*90pyP%Y5s_HB27eGPw>j&yF)wX$}GJAOQxSq@5k1+)$EvyqPZ;2zAtuR}lSEEt~=mc;F0WpO%HJlixjz0+O>|M$0BPi>d>0GObr_#q5n@TT3TD&pz3p&tU*nnnlwc3pi2iGRkWV5om_vh^ z`iv=;1Lb1SYaE#P5ulR4yZm2X+>yyrk@#}2 z%!4GkNSIT%D7Sux%pKats*?p7|`_ zYR=C7rJxZRss;17mS`StU@c?T>~4Ma7Duirw}`{b9=*Yin3^x4qbPA(v+L4dPHWkq z@~wRPuM{IePp#(KIHujmX(M>#ox0^O7c=%zsbN`%Y;zZ;Pz{uBTN5 z4pgy0aoj}4x56HKd0UxO-U$#;|6LKV;_>J!irCeG7^#6Ww2kp7QOhV-d)%Z53^Z!k zj%sq|dKWHV(mZqb!^EGNEFxr-JYV!E8whp-aP3)09cqd;7HoAd!D8XkNERnJR@_)U2 zlfl@j75F=+F1VUc$DXKoo;t4<38BiuxLPjNXr1)`T7hiX2-!Xd3`t2z;Y*g5mQCk< z#HKYmlC|tEfYv+eLt+@2k8E(T!(yFW0p^;UhQ^k;4?0W!zj{~aGyK?h;gS7`ne*a{4ti$Qyu(NCHd|Q(w(`+ynvUM+#k#)P42$qBn_W zj?%H3nqdVZ(KIA(zj3q+myf41mMB?0Ekr-y79xJ9j7&>>>`JP*vY$d)lr8{ifjq7f z7t?-0&3^qleFGL!x2-Myh_%^e%HI3oz21h%da&YSv8Ov>bU2{^OO9W14#7x$tA|oTqZ~Rl7$OT{xe>XL4moDx4HoF=#=8kiThTtABqVK$X1MMMt4^94 zyElV~8;`@=f&50*~e8MY0EIZr;jzuq<&NtGmy3^kZfSBOGE>oTyE^(wg^a9oF~dEoQ^ z@d#QK2@IN?!F{o$QUCBp!T^y7k3}z71o9C6hz$ar0X~r}z?*;x1_LJT_m#~%L|CeM z;t@UChVIEtab%ZUaiV6OLGXZ+|MZ{5z6d|hz-GKRjbz+G|GwAY#GREU6j_G5Rpoaj z?S}Y`n~jFgOqP9JNF;LW1cxjbVIl?ewTV`e<{{UkGnw?@?-7a1{nw8X!=y79?Cbli zh?$SP5lc|=g*Q+Z))8ouBV6&#fr92IV)x7&HkrhwSOZ^f5(MnAYMick8@yp+9u@}= z=D+cUJ;vK>xgE!!R<0bsVCtr%5Q9)RXCffeTd_SHpD|eF$??u)eaNoS{TLbJr*{4;(&+V#Yb2!zseU~%ClN-(((IMP2pJ#G2URMy3Ka*+hd$c8 zv14Gi4DTRq`O0mfdxa}Bp%ILB4iUeB4#eCddzw(w89K{V5Phg!aq9naH*S=f1SdpG zL;UGPk7Xxrkc7Su;*m#qc_7;HNEp)ABU|CgoLj&Lo91eX|DbTQQD0 z#l<1`Td4+$#*ks)K=v)7F63HHi=V1kml>wVECi4zOE}S8Kq%cv#YQR6F#z_AcT^m> zGrp%yR@Hp1{pGr96Cf}YF@;Y%5F`A|!xCVGRaYl0;%()X(j%b%@bFfY4C!5^ zYO!YCL%EnzVVb!e?#9S+0JZdh{)U1==+7e5Yhrwg{WJwB-S^Gpa(e~GYW$r1F#As_ z4!&T)w`<1KnU3K~*y4Ymgfq@BEA-E*j%vKz`s4D9v;N|Phwdmc;W0k%)I|N;u!UKAco3d}2oT`Qq6l_$u>|YFqha96F*wv{pg5(1j)}YWEJ?aee zvw$fpb3Z*%E7JRTDu?j#XzQUCBA?7~=u3m&T2K7(+B6@D%^2a}Y9MU9w8 zCqaKmA9Bzga|ul-tFwr$htuKwmmWGv>#?q#7r2G)##f~f#%}! zX0GZFW-98xn#RM|G^kH_X{FI$4)M!_5m#FdP?{h{nTx#S#+g2(tAYobVAzj@W)mjW zW-j2O19X6<@%*LGF^Mlgf}fEt;D8PyzxA@*zLziYkFGa9?qEx1;eYI~<4$ zzeyBuNA>?A<=eS@#jYx*(b%^(^%3{^uaGQ1B6%u)Oe__aR1qc6^YeYxlqBap3J4)z0CXwKxlH2l{;hc(MlyU zCLc5X`%M&0&Sbx^?;R+0nYeXQC6N4abouOI)r6YMmtRoQW67QC+3)x~-sH$(QcLMH z&9EsF8QtXbBtsPp`Gx14_-a2p`go)?Koq(NRK zvi#l9sZk@!N{YgHAsNYbOtldb{l5LfFMb|04Go#Rjg#JRa*t@|ep@h+U3h=2li4(p3`Gx&O_l9cP4b;cuoVlLM-jEh*p?VSKEU-G-dPAmtg3cY`~)fGviC(Eok^!D}VS5 z$9%ci-LfZ_bPa!+#~kHS$;1}Q4BtW-=r~Jak$DrD)`$UP^e5AMjDf!W&cJ^H>a-ib@P~lWIC7WLSqJ@Nrji>Gb07)@pvU=6>vw9Z9y4~W zuL3-N)S2ehx7P&G4M|O<7HYS8^__!+o0!Mz&V*fw0_yuK2mNW|q7_XfiQ*NkuTN@6 z#9Ug-A~nAmnmXy_C=F8yK(xr(N^4p*_%E;v$6xASZPJ1!?J|1Uq4W^F5+XbR+iWOMT}BNLcG>o70HkBM=m+bBvFonA~?fb;K0fGE$8`Z{q;gP~o zi7mU1Lz8z;4U15@+&XA*NQ_}Mc#iD?m*!f+1%mtTU?{;hsvmg)nhZg`a7tM`>`pZ} zHGsYS-f?jnYTWSdoF{EZJy7PGP}d;AiF*X89}j8+R})jC>FKaUx_h}g#)pG;+vw9U zH12IIh2L6p`9yi3-%2iRh$P!ZkgI7Nw^;g0HkR1SVQibzJ9{| zNvC-PYTfQ(f8PHkna9sw(o0X+lkL;q)^6g^HfhWb{QafVS|Q>hveUoXZNMUBzA8we zm*_Yf?fP5VYy4n<62%Qvx8l(F9Y(BHxGFvy~8}wIn8&($K`xoz}{(`}A zKHJxEN}x?^zQFQQUbAYxl5itWhgSq||3<27++_p9yyi#hEUpqyFak*w8#%@dkEK)r zS`k0^MEcZq`FM& zoy?T17)3T2b07RUey($ecl?OU+4NCRqZn4%6%xLIb6|xin2+t1?}!+F?1F176^HoNYDte zhvS&&z7KB;=xJ|zV7q}lnU=u-3WP#!E?vLO%mYBj&(L!03c|PIx z>SN<;6M8nAVEXjJFxN#**!|8xsTGUuiv`-TxlG;;&}9f;YB^-$)~0w)Aec88{49ene%-Sa*0J-b>=jeiOsK z-rg2?*IvQke54QC-?<%5?BmoSu+{%PaM4&~e8`X?YtDo{GI%}i)}gBpXj1#V68%n2 ziPh(nUe8}4K3j7X1rIt%#t8OecY&dR?y|X`LVg|MjP`G$3rOT)2!%Bdew{lfO2SeSwfnss@T>Fm4QU zc4S%x|LmKxP~=PtZuvC+Ec#A6&oGIJm;W7u?oEDbW%nwW4%}%WmOUT*CQ#w(pj?Q8 z#D&_w)U0@sxMuytFTsn1*#`Yq5TW!o53Uzi_D|uQym2J4!DpqksmFf>!e95sD-_%` z${1IjQG_HfQi4=|*wd`1439#s7Dk+nxkQn&-mN?gHDup5eE%XzgRsNG#lVQetOy3v z4^f3ZCkLdPcj<{?T_%y4^rOH9eC7AQGZg<~Wos%Q(cDil^_YVRz(@34mJ&I@>mnL{ z#x4_z_$RRtQ3{V7N}LA7dJE&zMKn2@6QvER7YKL5xVb9EH3pSwe9zak<*)kn!k^hD z4v!cOX?7f+W2Fv|;~Mwu-eJ93WYZh2oKHI#=zk2)H`6!=9NckC9;7JC358zD76$M7y5bvl#BO==w z^+<5Qg+2mg=PvVAMRmES6E04J+K}zOwTZ=-#7yKaGtXN^NiF9CzF68633R%umT-e@ zank5BjQ~dFmtz0y0PB&yoB8cwCBzQ6L}; z0PSxd;zf+!Va<1_A4d#old?%i2$pVSys;2@}YG*N8pTO;2xDVV(TYqb_D4QgXU1fq6@2&!?ule;x z1ko#zWGO54x$zVG86=yTt%XlWxKaMO()70`op*TIHa~Q}Uv9hP%VIE)YN&S`;eod!pTBC?4ySi0BQ3F?Y>Hhel&b%DHlpA$$xK(CA7$)!6qCc3IM!w!ja&rRs6wT*dSLm86zBPG<(Gq_$XG#FLJ(2(zo5%y>k@$}H3(p=by!_t3 zV_k3k+o-lW(Y-72R$yYd!eta=sl7uSZdD{XoYm3ucww z&-+y$k3F!PN8Uy~N?IcGUXS9N8HMjryl@OFEKj{?qfo5!UxM1gYl zwqIlLlht!)&>~JoFf3yAY+4NRs)SA^7o4^BrwJeYGP7kSewmGf9HR)F6v}Xg?!}(A zG*#a>k9M2!w&fvngnJ;(Ss4Y3-aFWnQDBk7mI8p7WY! zJ=hU)pcwp60C{RTU6b=FQv(1r{z+5QGo-(#Yj_=7*PVy2FAAF!=X;ItUZ)pwhJt*d z{6Q3rkw;}3Lv3y+BoQRY2-p^$P}%FRinFYwblq+d=Iqg~w2LT{A6vE@7_fSoL8z@{ zEzW2}K7gshr=NoVdyESNfN;}yA&tmEDMdcAtl+W=Gfpt81+y%bP|NQ0l}yc}9O4Gj zuUd$$%}aVc(fsz2{j&5e9;V6yl^&-4=35aG6fu?I`CR@T?86ECZ9mojGhaTC6j(c; zP?adDkOX=1GWY9I!PitsSQ)l91?U?fIEcj2_D#&~NgTF^$lTa%5BP|ja7rUV8=hm% z?n{_*(cj@DQ1`^}A)j1OI>gHL3ESQ`QQTneIO>p01|(4AIyuOb`)TTj0)sC*y;LMb zwctJ=#po&M`<|705hqXEm^(;+DHkE?&)Fl@QL^l5E0GZXM|*)=8+@hW&b z6dnhcw?DdfIiEb&VG_ho({7J2^eq-{$D~xfydfxsu%2yW0)7J)O+^KdI0qn!LcDT1hNq^+E-sLeg@2!q} zW8Rq~z}Y37n6`HQwih>tv$ix%{%N%udqR{4S^CwQ6aL$tg0t4`+MI5rP67UOEU}Ow zv%dWhLV=`W1b`S@}^`g2OzW^;H8|JTtwgUW8 z!sbHKyVYoRn|;GUAR~_x(E3?GR2RzIB6Jx$+dSiYc56^GY4Nyo~mEi{c)3VCwBf* z=yOzSX`Lq8M_cAQO*s_W#*(8DusJ)Ptkv&yU#_Gfo02(yTeMFJM#&3O>0!?)sO(}M|p|C=BdocUGW+jKLt*Mutt_2EsueD-EZ_qqW8n0W80o)uQw#_&j6svG$tr`zXJJV z6dlxZ*_*VZzvQY`$D1?e{t^%WEZ`}`O-z^U(3zhh())y4wf@bWe0{(EH1{S~j<3!F zCUjaGNiCiN%x3V5CHbUmzuu?fIZ4FgL48wZE`V4abePgAj-#m&9z)y~bYzDEyEyQm zF2sAsS0OtFlSL|Vgxl0vqb_t?oY+-#d$0Wh(q4#qK+6tahqHf8(D6Gari}0!KiikB z?+c~gizVa6rdxSrk$(2Ye=vCdts|A!s#ib}xA+qwh3*ete^i@z%w-A^Ots&S+E-%> zjDETA;v3`nY`PeHDU_a%3e~!?$E)GP=0Zg+#6*_7knVk;1b?F_w zI@=uSfu2F&S^rNbybba{dLAahRYC`#lkPywFw5-CBHr}3q)@e&4Ep;&HPhy=cv>Zh z&5I>Hna(7t%O!Th7@pV4y`|sEf_vGOav5ypuRB0N(HesPzV6G5HjkT9jrcd2{sb61(*z3CjTGf1#VL{ElCH{P%06#CDu0 zJd);yyqOj~O&TaX=H&r_2&xN9#=I0t!;j7W!w2I;=u9}#+>&}g`N;K6%gs}CaLgY# z>avG}q@_?k!c%;PuB%=sZQVRmmCs<5e{pVrA9a~}>D6u=rTrLHn$Az+)Z=@?(iz{4 zB-DY_As72CqNh0l!q*y7Xh@M5fyOW5;lCo`9O*80?LrPeSbIC}aB4V1EL&8uiQg`$ zp~)HBIk0!85bIc}^zUnjAckNvD1eTPdK0|WvvcQl^<#z6w9Fi0{INd!DiQK%l4>Sq zJ=1KhI=T7tUgJA3`ttM@Ai{an2S50u;WOeO>$mU!_Xut)3?~-Qe`-;^-hyn_Co8&$ zQ~V9UfQ=Y_#AR%2e|xiHj8bf=VOHZa_E6We*#IZ`Pe?BO)&r<$O9H7Rt$rs19Qpl% zTDc(ktROYR;3EPdAsc*7J5Kimk8*<%00F1X8PU_(b0w;#Na~wf=k05^P}Z5gxJ3#D zw?5LlEFAVN%BXa85p$kxNNCjfZ*|c_WfHq9HPBYs_j~wezS2qxEYM9lbr&v`wZhU> z7<^f=mFJ7Fh?@Ag&dPwk&mr5TRsA(KGw5~kiO?$Lcv?~ncW}2?QU>>hYo29b$L>>zPWNg!+EN?Hk9(|qpqQjUM(?CKJxD0y39OA`8=qULVL!i zW46R@aHsgL@Vrp4cP!dzR1*Ydqo>H`!JA)xDD_7ymVmG>>$UANhs>9~m8{W-?W?^?#J z`aT40oIR)?yVwzgEi#>LZKBba&O`kz;m>42=wuKa=H|#fErDA$X9th&HruL?u#m%& zeV9q(|3pO3=*p~1$gc79C8*0tX{6Ps_aOD(wFAwgP{9V)PKLsz_?JuG61`@8!JD4^ zfp5Vee)Q*qaw+x!t-<0Cq0wCS%z@hCX#PH#vTpW&haG&E_8!zN@ImT}+&Gg&Ano5-2i9=O z=uv?4CAHy1gL*&;ZQv0==)M|?4(5KO?=T51cMvX1eI0!@Pw+XS2ZsePzms`7Gmf&I zscrAlC=TBs#l`%$9^eXOdIkU&djXQ-8b`jVKr~~Ey3>1#1%%@Muxw9PeyVOau5^6{ z#Q;uj8t!yB>7r+P+eWe1g7e-HQwjIoffFB&)A>h8)Cq~kCItcZ=N{i4t%h8sC9M^i z(a^Xn%>EqAvYr(>-kW&`qbNaoE?PcV|24o*akcRyCD? zqTz}HhnMpL{WijQc^Nj~ zklFPcEZ&VgV<2E=x8BKHL;KXpGl_a=Vn1K&EYR0iG{5<#k## z1t@ZD3yeryey{r-NtwB-ORzMwljKl^EM-FH4mb&UJxP4krPmR2gkIJ-5##^v6*e3M z72#`5X5GA`XCXk$l*Vn3Hzstc_>Y&F#nDEUc#UZ1e4bIx@lO?m@?h@Yf4>Qu8BILU+fjp5NH5IxrIS^lX! z`t1~IWRB>$NPalh2=_)t+636B_Hv%&i!C6 zzg677MiqTE7LFvu2_(xdLe$K>xR zOd6l--W!lpd%1}lQp@I0-5PZjEG)V{u07P~7?I(VQ%^DE*=kvdG^GFBKm#4v_&e@b z7G2D2eo7Mbb0YBy5CE`kz1E=Sb$V2)G~fQwV6~4oa!1(~*(1*vX-NuJS zPiZ6#`?=B^0hI~Z6C+cL=@^(fNA@{Wb#;Xoa$|AQ)$T>(Me&jry zm?y*c`k#XVR*zJq*5g=@#C3#Y^JbW>JsKVb@1F=C-_Q-qspYs~j9?239yws@yV1KU z6+Flr&m?Y}TilOaW-mJuz&@=jk88LJcb^X|2-p?0nH)mcD$hE>pFERbtYi0bTKQ^? z;@SiBDT>@i7$%y9`@ioSa?#|4GSGZ{WT-JetA+~!R$oQzT-55<5b6R>+dAy*b?M8n z`lO|$gEmb~WrOx>B`kt?uJeY5RL~N7z#S6*W=R-%@}WTO<+<6Irr+DI&Rz*=5>vA# zgJW-_X*YgzTBCR7{(48fU=JJ21uAanv);^KIXvGuxu&d7nY2SWWMmKcW5rCeN)B<~ zPF>pKtX@l}7nhc2J_j%f7*U*;=NOz6$7{ja!bUYWHT8%Id+r-iBO3(x#xaE7SJ>xU z!x_q?CyZmejn!q=lbcX84Qp{V%5Ee7ZbCTZ2=-Z^4nY4@{lR%#Co3W=)`3VaMU9Y6Q6x>^tp+nl*&k9Yu zztIpwGRBg|MNLS|v8UJ@Um!x(89`aLGUk4EqTr{}T}&D#jsG^e73aK&T-Vcv8Cv@_ zG+1UC`F{IsVD?ko=hTN7qfxieikOUI$TW@1uO@HeMxaoEbL{>P$jd#cvar{PdZ`Z%DxqC^Z8dT@kU zZShmjXjGdiX@b`<8%YzP$HmKsDZiZyZ-bWBq%>f>AmQ5z%BNZSU?}BDa>k0`AyBmp zYl4AE^LXX7#BQ!Jms-3m34|poC=3gPBs2pbh@Yy~x&aag`-#e{ck#!m2ijcYoZSvp_7(3Z>=V>~RR z0`#2<%`*EJ;>r4U7{BOlNPF7fI7oq`eJX`gZr)iN zw|0`8>1dTi;eAF+WS6xa=IEB8>Ni4rpw+Tgko++bR2B^u$06a}!FlqZ%h1u;$9|hL z2W^nD>}V`b-(c3qt?{epHyxkyLZb59_UfyK;m7wQdfz5HIAmsAf7!w)j->G@qQ6u- zR;0ce-BGhR+2eBEuugE*jMJ%IOWkn52|mKW3GR$;%H56ltfNd5dvj+mZ+< zrL-pw)Hh$AAEUkpk^7y&#EKfpy_S`hVwr)lvj}jNaWuh!c7}q(5#>kn-{j>h2y5`L z`>y5QgsjBe-zK6nX^W^!>S^In+sI#1kGxmpLYjk)k(TtAH1jnjHRUf`j^>6Ml~hys zdLgrH$5yf>GjJgG-T8Ns*4@rLeM}aa+%nJ->^&~C42ZZBg7%&gTnWYtz|tJgVaMN; z(>^4Q@0@$PjCG~H9rDx9^WT~?`^8>L9_n|8^idbv<@KD`{IG+;Sza0(**f(J)}x0v z+4>;&*r{3&0A|Ea-Fk=Y@m`OAbXkilg$C1?h_Lcan*o-5oPKJmshKyfS;Y5<=^`uIOu~t4EQ#tBoD3wnNqE< z>EEjmT=yEm`!7biuVCqEhV62nTvk1xUP2zU2!!maRO7!QeJZTQzt(h5Kv%OBKoDBHeH5&^q8 zNwese7TqVeND%?KME&7+G%sUdP7qxmf=67|GB+Rj-i&hcoK7uXQV|cnn`+fJZ>{Kc zzUIH^&P~{vo~Z;peBI;p0=9*2#0s8Z4&$*Jgr9Hm|6nB2`<(X;71Y-__2c8dCu&h& zS_o3p&6kVe!%jWA9Y-O0gU`(9jFdkZ-+2_U4_}dK&OsM>Z!gty3?}ch9-;6P9`|myQKy)s1@e+go z)Y8|%q(N-3O)yZAurQE`sydA?9t}5DN4{|(0tz2hoUcI=DR4?18emJcDjF@+NJnpzE#1^?9;`>@6w{uP6Fy z`(q0x5d3HkftH5%{ac_z2xvOSJWx_tlzugl);2(GhrKu+F?%eVU3N8RWInolKYm%(`9R3(1 zSi|Z+jU&c67lFbNpn*=Z`0FG<5rZ7Em3-fhg8b)k@#!b!vnWP9EYp-!Jc4iPp5se< zD!;v09l&D>OTUs?lz<^7-rt()KFO$t7yFC;)3$sw!{WU%s2Mp_DYrz&IEftXg11v9 zjfK&6j9ARVp2TL390whH`xQ0#)VR&K00ogMY{6LD0QJJmEI8`CQthYn*tEU# z<@_ZqN${rEM8oq*PpA@#B!dULha2#Q#<5P6PaH;&qx_awz? z_@-|yc{0(Yaq!dG7J31#iQjw*$+hANJHb3j3=evS5A*34eYB?R(;RmIBXc96RZq^* zm69w%7eJL02)@Ll%mw~{iD(lsd~J6w*=|X&nJ>uf9@hB0K5?z7k)5icj!hAokO2tH z$>$qUrQ0Qr@6FkIkc{CG9&j3GBXCr@K>2~b=?XU8VgmKwx<=5-NwBM4Dmrdfbw5?5hb~H&m;8bOdMeR`uwpwQRJhmVVR8ZaZmB0 zo6w%{$BX@YfGt+_g}fs=;w_cGQR7t`m$bh85t8DZ6B@JgzfRDIDJDWxWF))Ckxr)H z#bDD;x_wVATl*8J{eJY*V)gxM|6CF}>Uy6!qS?|4ooVOwl=E&xB&PdOP8~XOYfd~C zCHE}ztW1!$if6AoLQP5sO5D^1r;ou|_#$1xi%%_89o>y@G~?9=6p9TIs9UG(^VUrp zkAXo)I%j|WTIO~Lo&@y1C=$43vuko z?CwY-;!<{Bg{WA#!nk5B={< z>gG;YcFzS)BWXSn)1_s{F$vYU%`HXKCcW^oW>#XK_5zmh-Jx3fH0 zZGqO^mZS-OS@}q})dGdDCQ{@pe?>yAPj?Azc@sdA6q#(j8h4PUYAy1tvzeoQL?QIz zpRn_{sMh+KPYdfZBcT|jKfNL{?B&hZ=u2`u%eu-)7I2j-R}$Nu%)tAFE%8AaQv)x5 zW`CEFLMBtslnOiz``N!=`t1NwdA|u1v~C@Fx)e(W)dCzG!BsVIp=oZ^%D)YnJ+&Fp z2WE3p;CS&M8=_M*cTb|ux}1H|I7IqB#?p_U@(xb4h711Vi0xZ-t+O;P2f2>%Bf7i0 z>#Yw&6LOvb+-bMIyI8)qh03Jo%#<}vCrMZ`wQc;X#VC>FyS8rz}u&0;?Jk zU+e;22fc;mafA{dsBe0nRTZ?*OoL>^-^%)U>X!Q?$USfQ-F&VYF>E8O9AXJ4WS2O^ znw!1$d3GZH#aH$8GFC#upty?!{o#(vDBS60**wbCI(G~Ed%=sVfrvBThm60)LWLw# zitOl@Cl`;f3%XOrBhrQF1L6&L@Gm4S4puG)NjZv-U>K)%7CAU`YOkz$@{GvReg3q7 zp?Y??zM>b1|ABC2yt*Zb#f)d&>sWm&L)ftz;*WxCe zH8#B{auR70=e~_B0D#lILXm<|#nvrozb57nDbY}hGyn4o^On}JW(340@6|pu&@EwZ zoxd5`zV*bBYAWLwDw+t_WqE&Az*+6nWg}#1{6)7<9?Ta@;I6)Y$n?=Jh=un`$VK}R z;QXtas%aySrfBK>yILhxLKiKqzijWK zyH19r)o8z2aGKgFPo-u}>nMD%k@Zyr?v8$n=5=X{-YCm^!gJv<+&Nw0J{7a8nQ{_nt3ko!gYv$@2w>&NiX0Ty8d;2Lx83r&J}hvgfBpds zitcjUj8cum)krme93XqBO<_dUNc=(3FDki#eVSiGIh&I3buk6h*n#-c_CH52)suy-|}!kcCeV3%4+#>#E4e z0BJ$WU!9h==myY_#SCxf|0B4W2_1Ma6l!01cc+{l)NDs%V4Ytd7)Q6R{&cpjyhJt3UA66h-Cnn2f=Ik_83oeZ2q;x?F;;@QOU3F7znvDn&iY3Ee z<0+Z(mrxjKJjnD4k^gqG&}y2F<4Y4<-F3?>s>?I?oxEa|neG~J)NhXj*Z<)<{}f+r zg}25(UXJ{;dgJhPer8hId~gqk&csHnSQIVUifiHp%G2IaFd5T34+{)|;{K>! z_#yl$jf*7p>dA*#{+BT98LW5DQjQpI!HF%n!WC=zKBoCR8W>?}EwU#oT_&!OVgMY6 z^)psDDx_mt4Zo_4GhyFvIeCe~mz13bebS)zM`t>>*wq2`=B0mFEyhbMFv|;}D8BK` zH~KGb*GP{1$ww@%r}i*10PFIq%B4u@{(QuY-E3c%7nwuZ zSOoRc9)@R`jkNGncz*e zWjnQ><_R&nn!@~Psb z(=fevGZp5lEE#qi;s>%a%>!H^$AXs1L~t4xs&@w5&SVdT*N13riTF#olM{VB*M#PI zGVW8y{(o`QitMZZHr$^jRBzZP)$Eefp@7HSZNkzL*=3f%=L%>@YUcy*8wfZ}a^4Ri znFBaY6_-bNvCW+HJq3HE+8z@xb=pi3HuQx)uKW&6Gd-=E9WG6;dS*gYQk96Nc{eN0%NYa+?#-HZLD_1))tg#qW8Fz?TI zK$v~7{-nht$wcC^{b?fG6O?yli+%6Qv0QJAlm@eP(}JuO80kaW@b?6T?|W?pGBg3` zm;&D~M^0TUcR|(zhR&s;xL-2heOY*O7*0@-MYLecAcp|#leU8q0u)@Pk0>DN0D7d5 zIMuS&$RigNoGIcV=LBbJ~=%17m8q9nJi^+c0x&dk0=1KV20ms0e> z4w0YjAFV9nY*@s8P;^B=kCDlNr~{ppYdFKw`VrBWbBuqh3;>pI$kMU2xH#;;MQ0%> z`fKE6ykdE?jqs7sZLW3+r4Uf$buO5cP$cg?bG{rw0h^m0p_fW-{#3Ho?M|upw}I%! z$R$fO;XfR*S8|$tDm`gRD|(73{z`IZ&p!GLBxKpLdqwQuzX$CAO%n@XE%nXK8P=}> zhxuz;jh3>UHjSF*;=G1mAFc@Nu7!)-4_WS-2GMqmt2#63Nfg{*?88sz2wSEP)mGem zHY#>ndSwOuTX)Q;IwOmyW7WzkM6M_a^0^6PXhP!m`^oj_#3ELy$00BDeKC9}g7(9( z7F-u>F;^*K?|b1KPBp!ppHnd;@?1&}-%%Pw9L-O+d6|rAd)d#~W%8Q@Pr9;YM$Opt zy@31I8+u6QIm0?B<<14(nDQfEek5=cmd zD!00$bg?8+wt90Q%X#s$(xx8OCxT`wXDVT?vxd|^Sy**|tqe-U-`H@~TOt0|6 zDz{r~%^Y4kJuMmPcKFL**7&1p281O2;wW4`p3?pwP45&Q=liy8|JtarlZkCNwr$&X z(ll0M+qP{djnT$-GO;~z@=l-s_pQysEX{Uo*WCAcoyWejt^KusVF})-z3?zMuQLwxb{pbJ#`=`^{Qf zwZ9jc-;gnhz8@}&aewDVNut~i3A$3mCJ|^HMHUm^y*Fi|s%Xv< z-6f+S06EeUM@J#jB6o8zFjoop<0cfM+?5u4OV&-jxyx~XcjyS2NI9z_jI6!7woL>( zBVx}H+!q=UY`?H=sUI z7^|fU^HC-TlEn@VIz_(_EO*G8^{FEKbf(CcO&koNwwX} zc&$Fz*G|4*n=W2@UU@jhPkMtfbrDgug}F_JB(TBMslnoKFuNpsFJ+rQ0NhuH2@eD| z{C8@iszbjW6HKAM>aIC__$!}C^8`2gI>prC9foVN1$_{R2H{0w1KW`ti@#567hC!f zIJovOSkj-E&xPdcV1GUfye)f7JahW3o|VO*h>R^HQp+cUUpnop{wwMjcYy-Ejmkqz z{Bw&~S?wLcb@}|O&&Ta+rU(~^9?d`5U?ba9aR-}5HTJpc2mSX^YhRZv+qi;DUGU3A zaVlEB(-U}d58h@oSOd+I|B67T0v1Lw4uClr$f8c7c9dfOJ^Q8IQdDjoAfCiX8V1e- zd8XI_3IOs@b87x%x8x8S*3*&r8BBVM))p87f=3s_XQ(seg~*u%u`Fru88W0|0yMIp zZBF5wR`H?zyfw8Owx=g6MlFhhJ| zq0I#RI;m6mwcU(`vVpNOEI0{ARli|iay;x8@zS+hA%f1;$9^n^z5g)f1k4(-MKQ3Y z|Ml=XOY^8Y_NLD&Z^v=jQ)Qv4A;LF64xN67>2-rlDSXXw_m1uT3gvn*cFS&byY(0{ z224tc`~^{`hc|<#yzLnO0v#)D4VOk8EswrO0@6iqpk_tZl<)njIo-~4&T?Bh)wm)z z6sPIsvh;TSMdDH$y_6hBDpJ;=)u)a7?}wOvo1vcV4{w@voL#y>RgmMg=o{#lK{y%# z*(o-d*YC2_Y5=g4^cTit$LVT07`lWL2e6gJT5W zYL|>df#Tm@SGt3$jL$HprdUfO=axrN&mK2W2?}L#NF2R|bIUtTagHzz*A(?D@&nF! z8peEWqWKTXIrlkof9bg1>7833t+Im8015?8E!FkXsV}J$IqMcFC?-1v191Du8rD{6 zr-5m`Y2eSDhLC-|op*COJdyU&NC*%Rfs87Ju^~84vJ!OtKUO(AE~l>VJ&zuvLjgY`zZxJnCr30`ajBZJCt_LBX@jV()xy+bmYnwk6Ez;I3ZZk^8hx zlPLIG<%~QJEeJmmS{XdVd_qsXKTZThQ;4)OogE}R5Fwy?DUb4IGvV5%X0bm!PdzhH z*IvMqSezUni; z*mU~ueC=`De>pD)9|uAVs`iX2S`1yMCsXVt)^GUdzV>QWGQJNE!asNug66Ulu^TU~ zpu(Iy*e#`#n9I4L-w(FrMo9xnaczT%OJtCMcWU2vQZ_08S!gS{z6C%g}-npPf|~JUK=Y9H=^x6<+p=te0NU!oXH_vhicAB z*)TetmulI%jojA>3!^hfm=rVnKh?N&ZN?LXs9 z*wV~ny zhhgjlLt^Q`exu0BGNXNUsro1VAn=H2SJsBCy{GvHP~#rwTx-;5{i~Ff;5rbHET@q$ zR%5c=MGmwqrbIYRjNnJCWL|L_H41+^`b0oHn~MUnW0>Akb>W%LiQ)%Mwpd@Y?*TAs z2;aVzv%i-AN=5r}rX;wm{eLdQ^vgYf&%>f7uRpmYHTf?L4L0cTpj}85bwKrf+LyMJ z%8?l{;EowEkT71Z+WoO2?9wsH4H(EWfqhg{;>v}+NIC$GQ?*0 z9WmatzRLx?8Jgbr91rq>Obe}|P-3&M7536BgpOo80;n;4==mAf@Lo#FmiG*oTVkic zc-ce-pOMW$>94q!Q@Ht-hIIFViHlSJIoD@Isq^3a*~`=|@Io(c#hwGytnC3(zjo{n%L8wEvVB#DXAB+ej{n*9BrD zXUBh8m!JXF4$Td)s?i2Xggu&kYHuh4GX(hI*eGFQpp@zCB3*}}w7WvU-M^m6i|}6i zp1*i7*q=Tx+3#r;LQNG*zz2`WD`?ZnN-b30)1$t*XcO1}n+Rzw*zj9X;#%S~lkn|= zchO6=3PI3eb3)BW^t}?3pzFsD+)W0~C94YJzLKG$^EwkkCUE@_V0X!yY(TU-N4ClQ z1Os5nzpg9riw;fyI|BlsiW$lTmIZtMP&yS%dN7T_`N?z2*%SDbkQRmw#g8;*0As`~ z3YWw+^>5A~H##`^WiVV4yRQRxkmyxGZXGXF=<7FFLWYMC*@%{(QgOnx;!9KnXR}o3 z?(Tt`zF>3JV;4bN>VkW^ti4Dd`K)ccSmmi3T$6r3Ngqo3)fI`S(6UQ?mq^`kR-eX; zP(}aW*V^0Gs3PszRYk;_;fb`#nn;cBnQb41P$m*&jR)PilW zamz8BAMPDe7bR#${5Cd@G3y0fSQHQj7rZRRb}N?5COcPx*!-Z}EUyq0C|Fu-Bm=4l zKEsi5%(#=>m{UI{KmuXVc7(mZ$Qi*UFZGWwSDp0UgPJ9LB!gj0j&2F;smbd< zyvy$gd%{O^w+p4#)g-Fh>&b1OZk0qEgBRwHnsqVA!RYI(*>>-Mc6*s|^n>31FCt#i zUl^`6=jT((e^(v9rg2wUP!%R18GkE5ZC-KlB%YRo6squZZKbbinv84MO?E&H^ zPQ?RY0qk#SK4}e&v&t)|WL2VCt7PQ&>N$38I>`O1`-%P*$69zLE+~d|q~|J<&8n4D z_%SPfCJRWy>6k9;MCv1J;BGTgd@V@*_fFvz!+h+-<@EXfXgZNhGd4LXuAmSLTAo+d zx4GjW#NfZM!o|m!(~&xUdU>e;a#*W)eIc(lonbm};q@qn8qKfEqFR>t@mSH1t1ElD z#xRFVVMS^$ku8|fo>Q`+-!JSR*Dw8^;!;V)1r6J>@V?NEFzcx5t7yf4q~RMcZ`GYjM@2VtwB1wWKy*V;5vrR*XEAxgSkB7-HBbaponYeJg z+0#;rv3yAL`B77`!c^M-4kNit7|2qNkp2P%s#>E`@veZ>V%ncIm0Ug_jV-ev+h$rJ zP;b)YE1bg!x*f8kzv9L1%jJTJB4<6_KstX23kMMI4R2JCoROEGgE+l4!tJZ}3M6OV zT!(izJxPUE(!aQ1J;0@2k!##bqr0;y!F^tC-M)5P} zNrj^+vQ?}22l9QdOokb#apL)3;qUtzpN9-wUn_slqiuEi0`HQ&sBo(zE^u9*a!VNe zFFWblA}Y9D+nvnZmMn|c+?nc=pM<((B7%ndjAm0y@4aTvmMlTo$1b}ffW6l!Q?iV~ z&)0*yup*_%MuTkI6G?1#H43f-tvH=be45{4{EmeeisS!xXkdQ}a^G~t7I@l$(DOPe z`Nsz(`nZPCqQ}w$OX!bJ${E?!;|nWrG3E$gC~1vJAyiEvAW`@$GEM7)g8KpHzFuhd z7N|SIy9BQ`=f_hsEO6h!n4s+;zlnx*4GpG=Z@OIyXy)q6JKRN$>nZEn=!J~ROB3NijKoS|R;NZLGCPkun!nk3gXweeHb z0aJv4Uw?V6(2wWI|LqSr%_QbO;K@0Z3;Es9cK4jxcejHeHq`E$JhoJW%J$l*wqi&A z}hq>^u=t$XQ6^DpW3Y>`syD4{{$PEf%qNJDcAKR)!67j${V# zTG3WNYwV&VS4XPOWLlz`p0xMcO;~1?bqamUYW<)Z$WC7eHf4GtXtXv)x4*wbt-o}f zsRT*ttQyw0SabPe$ynRZ4`2XoA3;03`<^fM&L7tBd zdH?9`iogKSfX>_!NiIJFjQ$@Ji_dGgqSbafYCN1ftTV zb4(z4&0cTL_AZ-;)4|L*_{VLoCM(Kl=380X%R*PX6D8Ru-5jsICrR5qSoRNe>y+VWU$i z3^kg|RA?!NijmSXT^tvysaLD&2ka_csSb*+T>+wr5nf(rTp!JV3EHsrnaT4mPBwNz zu%Ph2PaJ9JRs4`ifht+^?_e<@;US>--Py}Wsy?%sFp*y$fY32UN={=#a_W>1r!WZ> z*Iedq;2z-RzxwD`1{GFrHvQ3v*-!R|6oidn=m+pkta#BfjTe=Xom$ZEuAFMyNnW`O z#htowzJbQzREucTQ;&sryAvm4JoLS%UK%Y9#sr(+u#wn>+l?-RuD$e_k7fK}T@^5I z45l&yMJpz3oh(i?=(Rv!1^$gEKfwiV)3ty}5rj9t2OlZ;JR~P3H1Z@IbXH}XsL_FF z;{l3t5M*&f_NqUZ1-Ocip@r-lSd|CVS-r|NtS>9TC8Q-;q(I;9d_%V@=LrWpBZs?t zJPJ_G665+L{_;Lnt9x0W7W@Yl1bd|S$_K~PNmMoU&d)eT5Y;_|@OKI)qT}Jp6kI^c z$4JTl@WWtB4n!O@IU zm~mHXe9Nq=4tZ>(jjpI=cf802=ip=;ImeVWa$0|qC7q*iP}cLIypE_RcM%Ba>MGt0 z2BQPAx;l0eR_-+-dI^Al1s$>Gt1ixeBP-?{Y6Q^9Jk0AOT~A>7=#HY`doY7;>u4@X8pyFcQIi5mcVbG*`0xsj00wUTMMfv=}AS z5>1brnYjS-08o21TBU;!VYSipMOZE%0Lxkk7?9k=R+&Ov5Gwh@{p~X2p6LuwDcWAH z;lcO2G3`=FgZi$RPsHAGzu)gq^4$-_Wl(DA^>Bb}#b7Q9q6JvP5{|b0hw1~j!5LaF z35{;aw)ErI6b}ioVw!!-fMl)Y^ZNT7om-eQ)7J-RvRp9E;1bu>?H6@<>~Jcp!0!NT zB%Qj884hQJAZ4h<^bJ)u<9I9jZ<-gxu)=Y{{Af=L#K>^pJl#hQ{!#TkTm~9MFxW;O z(Z3+(cA6-2)QL=!z>svnM7+2f3W2teSuMByT!odeh^1v|x@Uab`d-MFDKmpw*PhFHNd zL73nDAF`Z6HhD<+l+NRJoXYfef4u$e_Rs7*$?nPS{9Vg)5lm?)BAhjY&9)G`Cl@}! zlBtqBMQlBT?|;(n7R~{;CHF%l0eu=(4g;-}=#pp(-r$!p(U0#yfd~x}6HBUt)bS7Xw&FpNOY#54%TzuZ=H_{LL{_o0v2VyRe=!k&FU}$b2o|D zc0z)ysAy~X(6;|3qLzUs(GS{&h(@!i#h7KT5kDdV^a2G-5eK+c>-u}hriW^u*f#70 zehEJ`e0k?6VJ;*H37O%se(gVd8_y0$rY{^KPHDM;YE0-)EVrp3n<<@@ zB9FU^Oo50m-Adp9WoH08Vj%=!Nv3f$@KcQyF3Ey>q)vKsUwkM0C=dg=wP}jnG--N( z_d|z7$f`Pwe2Xyk@2T`FZJ+<8(}(9d#U4un=mlD{WwHr`hwj|Ue=p=}e1on!U9n$f zS;6tuvOd?g^xqNG=*5y%>4~)gqcXyOy1bwkvnqpD`}F;fr8Jwfm?`$diPWgg$Tzq$ zA$xxl1~G)jJ>^**ql^;&Pa`*PAJX6VcECjH5&U%F=pQ8>g|+*S0}Zwd5aGiPrDyei zGvxLZ>Jk?Q_fOU&nelBt`#~T;bz|F%DRYq}7j)XWN^n1psHiOaq6*Ny#GabMEm+ZB zLp9=07jsIwm!84fp$&rnIWJ2LCE}}54p87Esr*}@FFIzxoe(E7@#=x#Cv?fkfLZh# zi`YSxn%6-EL*Nh1Gz`Sx39 zdYhR7#yof#TX~Za4BaugqVuGFH&Gb!)!Y!uE!USj6(@!bnvMJ|&kqg3L|oCA)t?Cd zDVhaJ>axlfeK&O=BAhQRMEC+D)Yg3Zr-qpm1{tZT#qy%N`WjlbZ&%ENc zSL;D|P^@Oz8B3Dr+Zu8_I80bRQ6*>F=t#qcOa4%K=Yx%JNx^TFFeym>YyND|o>fkr zUH`e@9h&$YqBuvFSQv1&{LD}Zc=$rOFc`P=tT$!0TUg{;UB?&xXrafr;Ykh$opzL% zkHz_tOu4Kde;1o88fe*mYxRRJLpuMlv;L|@`PVoh3w1F!xD1o>K#71N-5R`Z7+X2o z;SRy4E|U^c*Uwb?)IFB{jy)S!&waz<^CWd>d}6tl+3T4g_8|pSwv5${!?gfbsJs}o zrb}ff)`d^!yj_Kz!@hi!bn@#uN3X+2JS{x3tKv~Rk^9f$)p*~Bp&<9Nd zPc9h*|7ej2^Q^)BwzVD5vT2N%ZQI^g{D0F~Alf#5z;F3J>f^&66POYl5UT3`n!N{{ zx2plK2XFFgBw>`EfPr|ue^my2BJXBD^rueyLB<50qG2(|!9jbphwGl~FNegu|j zD?Izu_ggBZ6h8jER)7EtEXmp9#8y1y?ok?FMGA3Q2QG7k1(9AN>J%z#uxd=Zx?6bS zie^}J$iaA%a+eLG9p*4sNB4jJpC8)U*FbqE!WG(Boe*w~WF)4Ezk@00Oe6fE=Kue0 z^EWkklA;n7!#whcxdS-bqWiueq>)l%mnkznjuVv{AFb5lU%qoiso>zGzK+(R^3q5a z-(<4FKyh7N5^$;}6ITKAdNBsf}+J}I$DR*j^!G#PL>LLA4A3BLOvdflAAsdwi zQZ;T>91jkEE|pO0$X*Vi=J!|Zx8Bzm!Z344qch$H@-w~gVby2Y+Y0)Ox?VX3zM1N6 zYY^?lGEyOpRHdT9a6=CtHFFz0XS*%7R*Vw&^fl);8V~K268V7fW&d~Eie2M?@U*CD zxSL^_i`tgw0fZ$%qNJn*#`(XI`Mukg{H>-^Ej?q=oD&`}O2HC9TV(+_vPU*fNVH)i zwPABKHRO<*J=qUy%O7W1p%2XF+VDcZh74Q|F?m-FIRi2<>J*n$8WvBAwz0xLA``fdvHx2{Gg;(r@5|zahM&MI zLW7Q2DL5){*ozVgmf?PxK9*V2d9j#G|22|BG^j2yu!DKA)|+T@g1P>%fKgz)Tvq=e z_$7DE#93Gxd;OxLeu2^8p{GvmhINI6H1j}oL$YMs%L)NZ#L3yNHs?gq|K@duCk|WK zk47EHZYYzDW{_P@gHc;DWbLB#`UfUJloN1MSIzQdacMeWEMby(s$eUBQr~N)i5&4` z8T&JEdqXe^gTFVtwzRf@$oNbL?ZayRmI1U<28fpS37 zny?YDVUU689XR#db?C`xvQ5Nc?CS;x304yIiix#jPG2&Y@vkK!RU)CnIaCMrye`zn zDkNr|fmF>(Qod)#&B_99QCp%)}YO;|U69o`_ z5LhR6!rJ1M(#I~g3eB>uJ)pPZFSrxZZ-?Fki_CfI7wWQSyGv%A?SH>|>be{?y|nWS zrLKp*7~6tttOJbIBNu{>3YYIO{r|QGI%}9$R#w7SRy&B_2fa6RB&x*pE>I{5P=+7!Apawa8~I^&WW z3tLU>Cw%3ojfVuE#zj^C(j1Q*5e7F7$J$=fE;12~?J*D7b_QKJ^VW%lAM`>P1R2rG z-_O$C)ZMFX95051Mt@wm#$!Zp=8mv|sat=PVq9-7Z{7B^s1dxP4(=s6V~d|;QOME^ zyQa2Iv#gM>J+~>UX2dR&vd{$&3{0;b@K`InVRRZLPu`xe+pIh*S8WLWB#|# z+;txZe4wJrG*Fu_f=+=9i#vvpItDg5R{;fBEfE5{eBzwCHdx-|d^9x~yk;?%)QvuJ zCv^n7tYpK&76^tGyVA(|dgbn?ioUPr+++YW3~67!R-SaJ(+P@9W-77_U0JCP6$%}p z@H=?;R;2z%Z%ZgCO}>|?#cpzPN1be6c(1Xp_|GnkmOy-d*WPS|%mS9TFOrBmaUC}6 zGIO*r?eEhA(7*36(gnJFT7b(h!32NOJ4KJL$^$ly2DbVoP0uR&P#-URA5dpjXO9Bw zT2$nHE10-`S3tQL`2lS>d?Jh@5_Ixo8b9)mDq9XcK5nl3SIN*T>gLMV>C3h_}tvs zEXQ6PM$P=JGw>qa@b3VK5G8JBpcq(_gKWk0a%+rs!V@?FPH=!P^tyq<21c!M1hr6w z33|swA%ix5Ha$)FhGBir!BE10t97XUTXkmgLk8^oonR-xHcf;=4#u6QTwnkUpPoDN&7a1s!LKcYAQ1a|nV#5(&^n31)^7fE~8-_ zivr#XXlG}XeJ{XEvgtF1_oYRq=e3N#&Jo`pdCA!*CR7ft`^hG|>O0}@eP;mX|3$b7 zwCph3rZEEwlDWt+GqyA@-rnqDr>LJDkQeY&zpsfQ8^ReW7d&!@B#ND4mZwI-JjP=f zlYS5BDUKk5%q*hG(0cC0t|$CF@@mII{r8MF_!Hgu8no_+P4f@fkLl2TBhe5I*`Zt{ z(Q+!gXIs}3dVBkWRGVLIldz_)yh zm%o|3E3bVEfB+xchu-kO11JCg##0kJIYQ#d!TL{&B4K?0ImmUq|K_pATBIumXn#f> zUV-~qt49QC1VJ`&!t6f9S@1!h+glmGI@FiXKC|p8Gkkei?aN*juw~#&pv*8MiO1B- zzZO#e(CtnucLDaH_(PmATTpDW12}xO})%kqlN=-$W27 zN=EqmOq7uHZT)1*+31{9D?ZyQ!V0ff!ivhl;3@qK=lXmq7QcV;Tu!p=rvVD_t`yY1 zHlQEP_y#>j&c%gZ$1@`M2{b2fIeVE9DvN(;SU;bvcDCzqsAE#DU%eth@w6-_3tt~D z=CM{2-aA(2RCYajfXMnnJ9-u^NKP3lc;5wwPiV4;P|H$Ul8&iAjnvN5WR(ti0)ZX; z-uHpYQ}QIg$HyA^pSPFn!e5o+YN(+{cMwSAcx){qFJSL4Vms~atRok(Ojt+rSz&1qZdVYcLK|ntJ_xM43RO4U&`|m#tUTgTE^NsapYjpd~PIc_N!>JtEzR&k7 zhV4;#&P_2ojq3cy#_yF?RYi_|cUeFIZ?6S^VneSJ3KGDNd6q6X%c*Q>@JbQcCb&Yl ze^(JW3a+G(Mk*-?zW;O<)HL*EpUe|9{1#gjaI|#rmnHr8Ft(;p;bgxob`c(9LQqmj ztCnbX%9xG7jy>-~Tix;c<4P+i*g>LA*7xM&GRgE}%M7{`j8ATEJ? zlgz32s)L};+X$PVGkF%-T1*hDo_!IzGyA>*6IQr_d8JLCy6Uny}(#jP;Gl^U_gm zc^mVQ=RniyVvLyEL{^hcatB(m2Zb%qUq8oPOTd)-d4l#Kh5jhuL+t0xuKaz?$heyK zKnbw3x5fReaEY`e%kRWD&;id&i|q;8PGQaQ2--q?Bdh>x^cQJ%CF$XMV+7BKXAa2z zVu=GrozXyE=3R|{;O}(Iw7==mor$gqJoB71Y%-^08V_U_vP6fF`T66bweigc7O(0j zlEtowU1t?(kNvE{pqqR+ZQc)+H6Q{!Hhp5F6{+QicxFUf*-w=C*jS7!u? zX&gC51n965Q|8x!{7G$vsmxWNE8+1rx_eLOA6Wg`RgY|b zWl@QfXA|wTtUdf&t8t&75Mq_dSN!vd|`kmuG6#B&!lfn1BO;es+or8@3>)$4jh*?=)&#T71-&VJxSo}MTyX0f8 z6-&Rmw_(|PE>9(F%*?Flg_rWTwkLsZ5J%7Ca<#q|R_sRKr@g&*pdv~NidDVtx%VRiyU8oe zqs%UrS?Yb;oHhUJn4+7P^MKv$`uR;_gN8>zTFj80XTBp|M>Yg$r`?Jf?R+Z*&s^rq z?`^3^)xPj8R{CEyA|SG)>PPh8-RMpa)4kG$z6~=%O>1cjo@M2%xh%*K_X8!^528=j74>K%}U$;N~lK1NS`V6^XW29!| z>tx;VJbmc}UuNTm=tZ6vXHW$D6tEQ8)Kj9EZhDkEM_(iZ2fk?Txn)KYE3Y#V1mVC1 zC5-*ho*S#2uP2~~(}}1)gs5_mz(R>>lchq+sm?a9&Wg}ZPQ^ct!LCK;L`yq^DMQ3G z7opxi8Xws8FwRu+$TFPXv`9*chAqow<)YboK6LcV*(0cy4h#KvwS_uKpv z7`J?88TqFQM#s9NP4X{vbPlE!28`zi!KifyHCcIZa8`VjgbBM`*0}jI&*e|`x!MT{ zo)%kV&w(#%TJv&oh!0V~#P&RRum$g^I!El1yDD7d%i6=mu!(;RK9>-gchG&w1Jevc z)>YZI;~Ukx`5r&;=!4xF)%PqN{&@0`LK%u;WB~qZtHs%zY(RN&OQhh#Z&!qEJ(YUY zC^JDrxfQLeO)k^(K#m26qWQbwOtr@l+;=3LMq-f>H2ekJh$^;adie58@XZhjLMGO? z5OV5>KB#gzn(V@lPX0XUgz-A#cA_j`>SqON=yBpI>rYF)`BTBjpf)+AMoHOlnCd79Jaw&l znN_ix46Wu@9e2_!I9upZ@~bfEqtBemG#?o~kh??a>~GSY(;D6r>1Dn(^dFHp-c)>V zvOJIDf+H!;PhD!@^&I>=2XEPIS4Gb_!Y+kdIYeex@G&mS<0kRsIT2jLe3IEyF49XP*#l;JeO^l)M-~ zZj>ecQm-qXu#Ex1I6kk)eH$I<g3J!A+Otat?^jyWr`*lD-iR^ggv_dskf_ z;akgcM8mupOSPxjIsjv2|5%$GV#JP>dY(D>{9ls5pt++Q_qkC45KHG#uJ`c(JX3V1 z1GvD^?0&UHeREmUwuPo37|ZZyz5DqvOIdKVjT^Lb41pN&=YTYB6#W4+3L|)ho1>zW zp3VijD^#WHiToUdtDn4*rvga+x>3=z=szLgK3DBb0w=>+lpy9XB8TS_Q`^0An@~>e z9D2aCiUF;CEcdV$^%q;MO}B6w2fu8T6|^CDU7iO4{6%itNin`Yvj=Fr!+gIo#ucu=yE-y@to`p_E;rI2B)WeZ1gpfS}%CH$Kxj#~%+-gyKcNn*# zgj9+6+1!-F6e7tBxd4E*##u2uK0){0J=p^mtk{T;G&y083-Z_k85B9*YOukFXL=OQxY+&qWWyEX1~009A36DEtM7{hbsq%iANf^MoBl9iWZT3 zYwbLf6wWmM2;@4be5N+s%^b(GM|yPU6>>00D76lY#cR*JiTHcZ4ZvGA{aIK$&fG^a zR9+rtJGMBzY+UEY}QsJW;rOO2= z>gC3e{T-$<`|EGYw3?xc%!sf@K3WC3!%BwD5{W|6+}rW0M2QGhUTCV4T|hJz^no|g z@V|#4A=qz0|4RR25wN__)7(ed?Pvd>Y&u|Zo$vdZVOc=H7aMEqf-Aqru0qe13k`8( z2eDqTm{UwSVjFz4zF)eVd=R%$SVl(2D^!2yf|jH~m>^A1iy0bOzc)JuBnO&QYKM++ ztPl{`u#JdNMrlvEu93lPpEPKicyoIx&(*1$}az!JXcg+ZuA0kHl1B=~F7exW9@1m6kmy z{ZnG91P8BSTp&a!I%zWAXiB6o&&r7Q?#4$d>uJf_ zvd~+&wWVbRS9hNx1hLe}|wJv{|`NkE+{=O`#?uYX?h1up6P;OhB+|ernvSXLe?ERL(lR zzokKNSx;z3XXpFnwXwD{i^y;D*)WzZ8Jg}0FDmdsyF!Po(8JT(*#VXkPC`-OGk;3e z54laiDc7w=WKeo*-R6w5WHB;37TuOlQq5Gb-k61bnZ+810%=4nqGM5~6PL~+Pq8GN z9_Z{O41ZNMQZ#IywRD?v{7^a#6KzZ3uq-R9V*HrS3(lBfuizJO$l{5BtOlMtvW72c z+&KzfpRe0Q5AUNy{$NItTUQRD=RPXQ2RkRHs;4Kn?|l(bN#6Up<%_-GZ9<%qt}dSM z+a6IF2;`>IY=z1XS}|qw^&($OVjRHA*;&F@A`%Z+YL;lhN^RHOPEtMKrj zCtrP?F8@r{ypr&h-`U?}=VNw%-zd;ejXLHspR{dP2U}@29m72WM{WWZ!Zx(pe=c0=_3C z2ECu5;d`B@*x_2~Z3o)UMy%a;c?m>DX}Ymtqkn=5#8|3|8F9%5#6<_h2T@zaJRSuZ z6wVYo1HgZYBK9foqj4ctL#UIr^8)gmuB~%>Fl`ZYuoXP@zeY)+;5{~;Y%sCR-9c?h zYtB^zcOZc#|C;nL_m!Gh+w_MK!}7fx){5O`!KAAhQMT?!!(zzLG5!aP+ZH}aj(=Jm#+kn7P(aV? zJHeA2No$W~+2$pSGNNe#)s57>P9LJTYVS%a<;`=UXEmcq~2Ad$VpUW>@$LMqd3Rh|zbGfJE_c=v^Vs-l0=9wJAF*hvTy&oX{rD5SDkJ=1o z_U0p0+B}93ye&@SceU`KJ6fxW5~ksZX|G~-hyWS56lqSu9BSuO3j_-w0KwX%r%A^Z z;gk&VKE{-@dh)(Uf2lp$Zc0YwYvq{Umd{uA?#DD(vg*h}K;clxE@1x%?R*{Y;*jI{ zw?w#zjMO)I4$0Hcgzx>z{PJ&%Kmgx#ZL$K}_O50yZw%SaoVr%zway}eKcXwYJ9`Q{ zy@upZ4}Zqmrm{%1(QZZ2EjIk1%l%m4uvUeCf5p@$#_^xC@=$FUO*3f-ZUncQt?{w_ zrIp`l=Yxxsd7;@K^Dwaumn;x;Jm^oR*12QxgSxsFAbL6wE0FKCq&oLkXbPS7gJdan zBSp(H`>6?niWsuTb4_O~$62UDgvLGWDP!$(4%;i`>0&xwZ!t>+ixw0~Y<$Byb={Af zwrH^pBzo$6<9PBusxOsLCcBOMoKQG&Yo>_)f<3$fGJgv(M+Hl)Mp0!>A{$Q&BRYBZ zskZz5qwaDuEKi!A%@Ev+eK|w6JL6ibpSTb;ZUZ#rvYHBKLXp@zZBnYRa^xN_qwMCD zgD!p^b#{$a1dj{DP2N_*1ieY|k=6TeLa22d_h4966)ENC4Gd1hIge{-$bVegn=qJV zG4Ud5*T4A1*>e~(HF1rJRuA-XZt1pJ}{E6^vE#| z8`&Q0MfcNL@&09}fIV3b+%DiCajLhn!|K~x4yOJ#cNv-U5Bt@}+d7Xpi5-a(!8aH$ zu1)s#f}`~r|6)pybn7C`mN#d?8goSX1D2rU2tg%KbU(utNuA+?3$e$W3GvELX~W_+ zjF80_8OjCU`apz;GFjnSYJ?Sfaxeab8@jB7fA05ogETf&Mr9GB^vi4H9{?A}D$1GaZuH7r1Gw zK`$%Vjom*W%iWLd7eh6>!^z_ZK6U`uQ7|b&O;P@3&db=T+a#Mss}?rsLfZvF2L+nH zD4V4mJE!<#-#36`+dfPKG69hj059k>K}s;{JD;Q9uA9ZrS=R3Z(xZ<_F}I$CJeNiz zi*=wN)Ey<})Ovgkq$wIwX?BQpMu66KCMy)|ZjA#yda&w5>BUQ1M|TOwoFckkF8672 zD7)qaHwVcCxLu!QJojcJ$1M{Cu_yzzW+QV9=ugMSici5x%+1U!QqVc?Tcy)(2X1P7 zlMQXl$M$le#htS${q*MRLhtfPmaG8E!TBEGaz5tnBx!TqdbyK#FL*+%d!tqIn|{nL zNo8Gz$oA^p*N&A%GEQzA%kmOzQQeir^4be2L#-j@h)%KWMDg;hR=Xu}VT-X{v`1Ex zCipTU?7-{uK7vfyq0(UMhvtw4T@8i%DY9mp@*u2bgfM9(4Exys?Y;*eGRYm9q4gKTin^jkUnP17Vr+|D`Z3JWG>Ka$APZy z5$(-2-73jtE6vm2S60p4l&U2Hi?V)sUc`c%7p?5erO`WX0$xdLDjO?u0Rd?dU**l< zm*cCPQ=NpLb(RvF{JzTfy{smm{kgVHI3j6GUHmy^4;1RN>6a{j__!Nizh#4h(UJ3K zM5CCBiBF0(Wv-qE{9RzNy7ZEP!iE{wFp+$?Z^r)-jq$SRo+#4qcjwE%g4H_)dcKLp z$XjLM?tXMu`5HvZGvT8C%!7sWtd^IPUIaun&DQ!Bq$gzJu5yJZi0bUK}7YO%^-RHp#!H(sBYeA{X#O{* z7;sjl;b^eJLV{HeQ$D)kW|+iEdR)D2VrOgQ1lRJ^jf|YBIW#7KD+B#*Byd|Tmy9}_ z4M`T>-d3)oNS&VRrp?XvoX@)MN}pMev$VlPj!!ge zULQx+2U7lXf*7ZXxKYsIU+w7wLmmdcu(ZwW{N!zr#PrH@%$EFg9!L>cU~5IX+gt45 zyI&jilQK^_Oqdj;A7W<>h{^jb?04e1{hCoU1<3uA~C$KQSSMStkR2UHojTGlaeNRN%`Zc*$T z)X%b#F1BF0t1uhF$GBJ+Z`iJL!DxFW{mi)lph_iz69W8;+AVyrFvJ|qNMI5p!lCmB zG4F7@n5h%Fn4dk8E>Cgf1a8B+J)2<`Yr9Lb3-l_@*c8(V^xk|t7OH$0f2OIELtyKg zm`Lto#;*zxavf@1>i#;E$jQ~`>|7aavuxHPjswgKnq+|X@%mEj$Z!Aa`>xLGQQLkB zxCu|EXOPMjU_Y{SYWcq6x9vQIuTBD-zAzyEWA8a|s!}c8=EoHW1-~B=r$KqbwU@ z45{ZQ>{l-+|0QYY3I7?Vy=DxOW7ID|;8=jr4<#9dHhoMIj62iWi9A_{Zrpm?!e^Rz zu@&!rifpYev$)-1w6lz9vEC(r`MT652Knbsj;7@wJ?>;O>0!E0j@VjOAPvi(7>PV- z?%7pA0@%UEYDuo8`iyMW<{3~{QD3O^(rQlhE>Rsr=$n42a~gZmqf2R;lRhaE6<_0* z{U3l%idO!BzT1+Z-RH&H^bbnUC5l^a8V*wHG96i#zU#fE6ltA~6}J`5wWX)X;24Pd zoK9{*N6o)P9MA`X7tVsJ4aZE`rfOsoPJMQJfQwnz8${OvP836f`+mj8Y69@mM|ztW z^xJ{%fot9RXGW z7h9#MWbytOMfsb!4;B5Ug#AW*9jDXjb}{`86u4yXof?u|sPow<2W|VZ9fcBRrJ6I# zut;VCyO>-%vIEzK}rNxwfSg{5j)N_iK{N~kmAsbfQS zg>rq2u|jc_#}2k`I?l~b;JGV(eRhnlLky*z_ueR(gb3~PmmgzqG;K>8PdOFDiMX86 zzt?eocpCt;&_`cC4$CRIk=orn(nzEn?MY@W2r`8ALyXvaY3URTH#gm|D7pT1gerh* zROKc>^$;O_-E58RH3=U6lKsX75Fj5N>5SdzBmT0m>&^GJeuvL9o`ZSTRBn#yP|HpI zcnn2|)`!X<+nF&JRy8UL5j+Ct9W&V-l`$gmo(OiRH;_8bHpGLyurK)bCNp@!Szwk&3WiNUBBj1?P zb6HdFVO-&#b$16OEGNQmYn3YV|M+-O|c&ITCe4UGn3<<@(?AX^SMIiriw}ZHzCMeIPYn40n z8SDua^@bE?NMR^yZ(~Aweyh~>+pI;q0ejT1hX69yr<@0$jN$osEUh>`u}>qOtoTC= z6olNbr#Gx>j<2_FL~n*m?o%vax~_G7{K&U^Z77+zdngT0&DrVI|25Z-*Cr}v3zT@+ zhDpEZsoU9tGf0^9#U85of3X#tO^8v2fSrCPeCHsVzqSSolUM=UloOPXwstLES}c_8(S1~WxFWSJ~@G{-H$h`01#u`{rn@iF||CoMx~_e z@h{2cH12EOp515o4KbR?7d;*Pm9;i?u5-hyhspyXq5E7ie^K$7rTMYtbOknAR(_@9K}U5y)%+O=4SMndT`skIN>K7Trk?`CobcXt;*3(Y*=t@XMxxSr+qiXT1-=x}@z z`+FPH2s*ZF#QWtkr$pUaD8`briB^nlGCkkYPA+;Meq0(kH;i2Pj zpd^~pL~)kp=l-OeuJzzEdAYvr-9^ST&?n^`*M%VqzgO)^jT|j1UibNVPd#zl&@>_` z2CHOXEJIknuaxpeF~Td%JSdD?IiMG)Ov918@cUlA9>nq(K=#6m#)Ap;As#0dGB^KUB6#!aLsBGPK#BnJYd$-#&jjX^;D0}IX;ia|xliM< zCnX|#H22Ur@jok-IPwK%59FL$4(V+6XaqTNri~9>S3B~xYr1xk?O)~ZOl%){tj$|( z9;RH9Oc{o&|M8(a>QmTNIhM8fkR=(fXgzE~!iTRi{sMxsTA7A0{ z1)Oy~IvnMExZEQyHSK|tBH3cxT@Pl_1xw?v=DtO-+MeLK^O?2k5$aTn-umP=E9C5f z@@T#EPW8r$U_QYaDa$Io(s15OCJhc^^^(wI7|XLs(*FpE@w3HuW_#k!^JE69lAmfr zrNfbpXljhNgvh;Q&P%Cn&YU|5ftRx*A7Z%rcQO7U31v}+oa<6q+XbV%)lmNv-Q4GP zGpF>QgX6W;k{Qj~&F1w_J{?8`@0x$y+{}{KfqpYe7;V}4V?^a4^UM%|(Rp%lg{bG>$YN0B|O(Mcu-7E{@18*Y_J3bqI_Oe+}$MY^pEAk zYYm>+TTro51X&zkO@}PGsX5$d<~2I2EB-Kk7DmOOpwh~?-MW0qPxuhGg;&L&VTIb^LM9fz!O}3u~&mN7uPfm%qnbgC}-$A`Z21w(L2HVeqmF z^vRjn7fFfy0QZK^(p^>B6QA5^exhXcH8sJJ3Le#IHPrKHL?g#B@GJdc=CNCi*7ssx zUwk30j^xbDCKX#=G~cY%XJm57j3}q%4c7V(WgBFX&X|Te@6w#7h&t zsA!rhwVti{<3;6%%uI(B#Vo<5G+#-H;8ou+;maP%{go#SeoJbougThxi$Wn&gMiJ5 zh3df$ZU;qq5Y&>y&u#4Z#~+mugN`8kUf08j))oD(g|)L2 z=*}0>q#w}xxNv|em7Kc$>px{wn#M|o$kli2U}I(D#(f{qxb^QokZ`g#w9CyCgqt6$ zZ*Ah=dPBNE#wTazVYeQm+^2Qn(lBKiWuQXQEa(^B1B;9jy%cs?sqX?e3DBqw6X6-|LAgtj>=1V-~nIPk?gUye&^ll}3i$&3p>O#F<42%JpYA zl$GjZ7VC7ch~#hv66N0UrN8t``3|e%UUyPCa$K}YfO6EeGt(J$h5H0*pnmT?oW}Jv zJF-DT5ie&QQ4%UP5Pm<3gAvLZk=xd~KO0_Akk$71s{CX@Ss-K|0P{ZBUmQHz958zs z6;QTcf^LtMQUy6dv}hPl7goPDiI)=S9z?qn(3G&c*DtApS_~*s*N+PAyjJr9GDFsT zYG3bR)V(95Mnhb5=-CU;*L@Qww2}HUC}h^$+{AB2jP!sRy9t5+wOZD7UP7IPf7a(k z1CK1>iYWimtDyg^O|@q(aO;&z9^S`e;?}}Z0n7+=N543dX$Yc6;50@u$+76``*`JI zPV5LmPdc1eJ{)nBeLcM^d>cSh?oiAodM?1w@orwHd`#v2dy0rB za{Nt9m6`eSvvp_54QuCFN;-)y<7dOGD+~89H`^yews879vzQxqs_@d=Y=tz)0F-Nz zZPqJz*uPuYx3b{IOVcMJ#7xEK>q)3@7M}M1w^?G*%|*WoW2rNy*Nm!2X_9xA*2!SE zY_n@YbU71n9r#BlG-!DmXO%;%Z6^!_Wh0d<>|}kiKT8lqjo4LD(7~pxu;+4H=)1Gi zM;T~Ziqjny3wUA61qc7F%Jn|+M=`wgHEmgePM<`pQ0X}ORoO0qv@(&RFx0}4%#X{J zLUEb@jzjI;49{^1n`yV1wo^9{(D_UJS9P&aaC@Obo$i!UZt)-#^0o_ z{|($Iee-U8#Z|)$8goBZ-Pil^X}^o+{%^|HV;u9w_3stpa3xWKzlQ-Y`CFYEL5FWE zw8dRNmn3_cPP0&fhUk~VB+oRy_863-naGnC*yLn0*~(ViJ{hBw9}CEcV-N~)>ENdk z5xned_~+fS9>^Tj)St9-6M1g@va$T)j@d-_kP-K^LqidA<%9_{I8i?zc>j`Jk(?Oo z^dsNX$%`b^ zX9$Gqu>C6ZZhrF7DkfwerkU@xElswgr%ATz;V4b=k?`?mmkyo1`H>5wUL3MB2Zmdh zowd=!7nq3Ly>`1LDw`mLUF2YPoC%~B-Vu9x)(P@F=phYrSAD4n#1 zCxU$I%sWkNiG|M%4MAUS9Mm+4i-n|E-AcX1{{2Qc#ib)F;$^8sxWDGsshc|hNUR!3 zp>q5`7dWn$lBi6aa)Kl#Rm(@pHXYeu(-eeRwACb;7p9MOLVm;i!mC*FT+oMeWU(1; zGOS)!LKf8(S{uFCRw2_35ErBotO)Gx^bP9~@&t5=wYP}0g44#7tIV?T-CC|^m1Q0T z4g^Ipuq)}N_`NT~IM0)r{psOwkeTBnl?GA#y&OMp>2Su(9vVICSd1wj;eFl?(RTlz ztI4MyJ*IwS#*}1SQGA$Z2J$p#2$d!+s?UKS!H;+(D&wtQ()-VIYvRr*8qx%4eov0k zN?ymjGo}~GERF`GhYS|bj~e0Qc_R9MG`{TR*bJUHPKDdGTFr_0f?zludb1Lc&L{So z1dZs;qe6FlQiH$8M*9Wr)+~2LD!i-!Jz87Hl1(RW@OPLMGxW^8g~_sn9UhT^nOmB% zQ}>)VJh;IUjyv|-d3NzLRVCAI)lXthyubQxmf|zNyYqr~mVD%r(y=>?JVlOdG)%6c z0USisL4sqPUmQFF$*MO?LeapQMDd%}qeI-L1(aDAJ2g@ofh<{&MRn-59lq($`{x3m z&XEg2u!SP-;?Qt!wf%b4o!?-dynVrtMs1OILtOfM+}u8jr#bYbp*M;)5Zp7>( zpQphC_eG|wk}Xi^`RkjIGt!`R(-d&B5_9zeFJb8pl|pY@PbCANvP0g9;>lg|*Lp4n zb@RS#CUgR?^qR7BBKYCif-Q(*(2k2-JHW{6MA=)clWhNsfYq(E%sn~vo-uz(q4dyC z7Jhv*@_;GNlcIG0+bH1J{Fo^kuPu%Wf~jsQ7-+?8#?;hp_K##7VWL(?X4n?@6vr5c zG}OOGeLXc9S312UbwK3p4#4`1hVX*{FIWjiME(7=Gy2d)3?J^4Gdhp?IuRE$rHO~g z*Q1f!zZ=h9;fadHfcX^EUF~eOYk!S5K^BSf{ma3C zqli$`SG0^t!K8|!6l&O!!A;cJR9xg`-KdIXWqYEbt}hPxNlEU?jkjtz7LMZO)%42I zv(kL#7yS0!lDsbCzej0bJDPL8`&RGjUX(w4b6l++=u_e&=>4+V^xYff=7^2mjpLMf ze<~xY0DGH=j9YQLsA&ES!gE3D)k(@_;^=8){_HIN$Ni>V!jDbkU)82qys9am8GdY@eJeUR(+d+=sv=kGZn*Pv*;cltxRnC5yc{%6`dALng$Aks?%ZT4i7IFTE| znAaP!gXK$r%-1*OA6zTtGYX3{-=V}PA2F?iAQKCJ%yN0kn7Nw>9%u!W1`&U4ZZasT z`b#)K7U;0tgoQA(X!xAMd?S47)}5}+fKQs!&TS*2RN%mitL`$ZKnX;*AC7}8nO@`W zE>%4umaTvrF2&Cqj)NnW>0eFP@j#EZC-Hq4M#0-l*P297!e_f(>B1w(zZCE<4^X`rZZP>0Vui_Va zFK&d|7w>q6Vx$>#Qr5n$=`eV(BUQaDeBwP69_3g)6PS(bY3ugzc^~6&DmtP|kWa;rdkS7!aal+M{%D=ROpFiyVr?(Jgv)>>NW|6C$FRityUE++B7C8B8zA_BD`RylX^r z*th+$VK<&?ALTG!3eTYcjt~b{0p^X%=nA%j4`vo?HiX_OY^lxh1T$Q{($RJp*uk#c zBeWJ~_zCQeu@UI!xD|5~6AfvWFB z5yVq=d`{+ef4#*mcIh-UITFWd#luE(0d1I!JT&o@>0fVd=X6)+UdBcY$osQLjo%Rh zRAJ|~at^^BJ|(6b=t8L}N-VWlARB!qrPmpHpd$Q=pJ1pkRwbAqCz95&w1nE!awf(- z?U&?rjqZjL*>8B|Kf~UUTFAne|8|B50*TNq-B21tm+b7}ZNtlFKrS<98pkpeWEzh~ zfWljVb(ELfID&OjcjuAy(0Uh@E|T{)coQ&QPG^=gq&XMPS?{1hjwDmwjuY28i8yt9 z;Qd_?o(^8%i`Q?f-z4BNT+1B|9wBtPx32HEP<513Y+h&#zVmL`hq<89h|!{g41VI4nmn;? zvQZYXB2qrP(=*jYwO=W&ot>Hh$bE1eLWVCgc{0H@J70c0KM z29etv(t2RB0W>DcpmuDiIHwEB9|)_C_wBr>$bq( zusb1%(0-(2P4cD7kW^EPJ!70kYyS5u#p^d}3v1G=LQ$c^nJH(aE4cs35kE@(1Q$^u z#nbsLSv$@Cs=SjuCFZJA(GlGRSjdr$)rY910w-!hO0113Na;(TgmHFccKmJu)uj?E zPKtAX_F#l4)we^N)kOGh2zKWAj6So;) z8(FCC-z1|{tCAY1D09f-WgXSqEKV{s$47z*2-*qHTJ+&7&wbqmo88 zbr3BhOMU>}PqliSLMDnB$6B_tn=Whw5Z=5q5anjy;4^LQ`Sp4qLYAV%Iznj9G?cEc zaf&sbyGA&Z5t92kAf4Tk8vPK0%#C8nl7bh-K{jbn@t!)X44p3=QFoFTQ<1{HgEdyZZ`8H%6^H~bA_*FPUu&`J%?Un(sqj@8v2+8 z;0TyDP4}rSIXnoOTfx)Bt8PC!f=z^Vhyw$xB*q@o28#oG%_KH(GLXzK7Y4cW(@9p{ zaX*XofGt^dnI?PLChO7+%Zx^LA^1PIm0_{X{!->`+<<;(Y@qf7x^9yQ4T6MQj+`P@ zqQN--v;aMLx#(*gST5b6KN}Bu)Z*d%#`DPpa9O0L5GO_T^o71QIGgx$8eHE$5MZX_ zetwnA|Fw2Wj>U+y!~T5ZW&c6k59x(ZZvze_STi)HLqrnMuPL+Fvo*yyJ@N6G1uYys z#&hq^bPDI_G5aVcx9xxA$%cinxLn$#X85z9!f-r!TO5QSV{*3?{~hli?Z0uzl)UZ9 ze~Zs1t?!A#i(AVvP`f%si2Rwknp^dIF9dOJ_|WKDSL+-?pj=Y0%r3xFT-28ngT>0M z|0RB&$-C35<$G?AXmF$&Kb~0(f`_0++xFpadm3wh-0d}{ohoMDbM*m72ET=vE*Msd z5G_?TZC#P7w@+&F$znHNsz^g?`qr!M+Z``3`+BodxGw1FdQOx|y<-`ihuTLVLF(3q zfj~#=w`mCMas{*`k_zV`w)wln2$mYmfBxzx2w!&B_f}`YT)92R2pe~K6UPq~-oM`V zhrV7}mV7Czvo(2l(`xk3s08EAN>AfcJZRv?d1EB^;CWOa3d4O>zRQik?O4KhRs=ek zCZXWeRJ8jqJV)2jY^#OETJFb$^GvbCy-}{SPy6;>iYYxVrkxU@Mi$psbrjv)6nDbq zx-^WA#7JsQ^6*gu*@_lM+2u$@@&KClcfBMBZ+9$nu6A|8E2@6{GOw&s1!l|S_0{^8 ze$66<^{TH9G}gJtzUayDJDZ#x)e{jIJIja(@i zL&e62-ISEGtTvZ8dhwz;upNgT62AQJpY zqr2?p>5PpQ5DAQnkB#!+ClbI0(|un%^IKgJQ)f?1N&WBtQ~5>h;*1c+t6NLr?*UHU zx?w(-{_Or1fJ$1ZwJy6+Qtvw{Q(#?%tLW^}Ly@@$l!Mzo>Go|F$h0ZboVFp%~S0GgoN z{wh1({fx2Ghi=Dr$nB-Ad5Ah!)@iL?NDe~~gy?6Zf zx#XPYcJw8Z}9FWG{QK zjLygzw?wEsAvpXK>8GFnmU$;OT9v^*s=uY6*6QXNOtxRd;!Xf=3KQa;U9G+2`7pu5(e9Sg@^h=8!UmoLM^sVrom zm-%1}Y7Uk|Rdo8wfV;}_F2Ib#qKW}o<_rGhvbQ zxw}Jepktgf_M}E9-dn1TQ>i9tYIfdu5;g*gaGhJUHFr*&%)@*RtnsV%rp+LZ%Y~!! z7&>M!amm6bOkJQlJ&>4TWr9z6gmevuM1nYUoJTjm*uc^$j-20L|7tN)k=md}bj_8G zU77!Timk^fjdHN-%bq0yZ>3g2t>^N*5zYQcFA0!AdAo+Ouzt?|AiAEd&^WV z>{S847?v@jXA9ZJ^jtk$ud)Ul`9y^hSjM-8M$A}|+!sSKM!Q5FRY%@fi4g&@N+i6J{Z6~!3 z+Vb4Y^D2wmNSpEO78mJcU(%ZxdLz1KHWS+-KbtuI2`M&oxPcN;%9&=&k3{^tVNPK+f)=A}H%r4()#KaMCbf350|k`*-zD?`;f{v*@qEz#|av8Pak6;+>W zHWACw~g(N@Lwd>b6;7w@&g_+Uz@cel&`X+-hE3!^Py z4`m$kkbj%$=BU8@a@Ky^X;G=a-G)af48}SZTQCmLxwBI{~B{nv`VL+d0u%j zN(P1eF$2p9=1GQ{kp)a5W`5yKUE{ZA{ylnM(d9ixsGv-wup(pIqXUr_S!>)#;=_l} zOd*Wretf{8Q*x-NAg+<=k+Z3%s8`+~Qb4h|iYOZHC8L>J>om}tMKck3fAR(Ed=f|U zv6U3!OWpPV)Lgl9M?<%gyZrR*T7HH|Z%6$4G16ph&A*0X z-DE)Cb->MdBSVM2>)e;!;j?6x_O9&Uv@lf134Lgw(L3n;3;h>^5jz!fL49jnd96M~ z*FQBhJ*Y&-Bk86+^WM+uCdiM@Paz>v|1JVM5N{w|Gq3S7xwU=On;nr`QelT9hP z8?OxnIe)-n=ZXpt762a3Z2VKh$cx=g0^}g(nSWj>LB>7O^06*3_Pz=D>+>PU zy$e{(0vC5&%wQVac`QBKcPIF(&Udwl{Y5blqH#@^YnZ+Z71vPKV3#e^)GEE1y3-LprmLM?jX zy&MF@)7Wi^N^^mttQ}Un>zg$gp?F+6(ZhJF9V;2)syAsvRE!pY*d7w)lEGaW)A2lm zfql8d?iO2}eY>Afy8qM|_4dbA=y)a(9ZNwte!p?lyn|1lv7~R1sF_&}ydfS>8$zeI zLvzr^2Ak7*>lc@iN7IFsAV3a~`f^%J{!2gaf@ccU=vaD$3I3I=epUQ!$2ZhGx+>AB zhR9#t<-BuVW}|XjuFEnJg+G1Ox4DDv;3kE?WkwT^w0M%sB2ThE|5!roP38w{q(Msq zF8=~z=@kJZZQitx!~u&E0LtIgR3@dEd&(SHRK!BDF~Bh{CXYvVZPRUB_HnytCZ}i7 z4Si@cCQo(Kg*>1*TyN%)d}tY+gAva~5Kf2GvPuuwXQpqxzr;h)AjsrED#u2)vX6c% zb4m1PE(x-#m`(%fQ!gXcaGHlUe}MK~>ko-aWO4exhihMAtUG$26t@{tl*aUtD+69Q zmu8QUo3_v9nf1sdrP`D|L}^wby?hFxt=-1eFscie86pmtt|Jbpez;5UQH9&CDzT~a zJ&)V;-cG}mi4s6WLS`H~w;^A!)Xo@5-4R`eSy!g&$7)M3O*S+=2pxGDYX3#ROE+|jQZm}jZ`=<;>=)Xso4NnpN?vS50jFGKPD08$)!q-+_d0~3 zdAaPV9lHAtz*i(}^Yrd$YfuTZvO%`(% zrI!ATmlqwUs?ynjr?;=MRzr9y$)ex*H1NNJ&GS(?vm6x`S33MjDrG0VYvns^lj2u| zv~N^C8k!}f10eUjtOv+ZRkEhV+3Smu@TBaQ{-Pss70ydzlsZrNde1EWotO7jOnNf6 zP*a^CszkrtG%Ey%gk92LY1Dvo2>z!8<^iG$k8m6`)vl1B6!j@$i-v;gHz=5NEEHg= zP**ss)JNCdA@Kf*%mGo|V#b#`omJnu9U3#b%>htrL_?ZnNAF3^6!0*nJhTyUJ(saA z%-7(A|0LiKiTZEXd=VicXGrvLt#gRpR>B!vyiP@`?kP;d`(Ce00bPE6a?feOYD0p% zqOP8mUx_80F|Td2N>wVK9QMcAD5n{}(y0AIzPQ>LQF`JBx%3i)BzG%*|6*dr1Wn!0 z$HZajz9BFOY0$Q-(txMok4+M}S4wx~{mIGU$WOvbVZMB4P2ni!v&EwE`1nht{E)PF zf>Gm;Goj4~xDU!f{+x%&9{_9M`dSt6)OJqEwY)4YoECtQpfTNNU#~)q-(oh=V?b~L z``V$+R?Y7`)-+aQ#XHRxw%AP-)RpW}c(}b~RN>|{H(JXTCzl1@KT^6C(3c9`DI1bN zh(0>m{?>P{d4JNBg!uh6^B@18dAgaWh0nxiQIS#KK8qM6EFXu7@YtQ*hLrhz_)56WOTud1M74*f0{2*FDO|l=77^EvV zXM}MV4e@5y|1EPw!RW%k)UNgPE1ZMlxK|^@mn0CT6PccfFSC!0oeUj1b0NTU#FR{g z_dqF}PN&trfqDXRG8!D#`BlK!$i|Zo)3LnletmvB}#2H%1&fcvLUnV7DkhRL70- zH6XpEvU|on^M%T(Us8A&rngwMB^4N*Bj{B9vcj>V%pLY*r<|lHb&Z{9ARwc919|PI+>ocKXyFx;1=2y^6@~j_hjvM>GAELW4RIt)2p^ zOpdN0_Xell$V8ZgZk=h21X*-1P5mI|n0f1|ypf;Txl*l7EHsn@{eul=9C}E!4s}I<5{1~6xPRZ>^}WST{b5RbtiKz>DCJ>Z z>c@v8=M7^NzQ}+F$*UHz9oD0%bi4UD^Cv?SC^F3{!2E35#+RDE)-Xov54CQ0c!&q8 z6z1RwOHWuNYgXTkqDSX1El4#S?{0!WWuMm@FRiC_9YYUr%tdErHj=k}w^M`T#)uTg z!BB#tqh3j-mAnuq4Cj7h9>CfhnR;~g3_MiLu}YEt*H>nWz=9#R6xr@}3MHfgt2riG>|3O+IjvI%;8I#SjWJH@I zvUkf#1z_DCesH{xcq47_hGq}z;<(eXY$yS6g-OXKh3cAJTB6FV@@J#ID~)Zk{)E4! zF!g5WU2X)<^6>AvT>DgLXB)e(eKrmas+=u_UaI697^172i4vQ-a78lg>qmB*s?8}h zbg}^t3PT`HY zhc=xs38+weF;7E$clRS`$@j=-i{afK$#+zMBMDRQ@lpljAK;&e``Jo_O3wV&U^M+Z zn6umLi2lC@dci>f@-&I&^VQ9$pIheIt&^pKnYzNn-iCi8e7a(VXQFwZMZsGRg7AqO z+H|pz<3@?LPyQ`lmNYeNsATQHOb#f1`<|o_qZJ&C5O1GMp+>Wgb8jzt&+aIJ(<()z zEJyOqCgi|!1>hqE07b~@aII2~!YLFRi_c3oB|8`(w~J3c$ZS!M!iAtAFCSRwQU2I7 zyd?)HY*Z_b66;Yq5rT3ZuB>_#F5-6wnGkLK~^uIE)BP zV{xmK0k*_5#Yu3=qnkFWI^U%iITp`0e^<+k8yjhp2zBN( zb9C9EaTovyv|E2E_@9>A-SA6kZjI34yCYXXmI52BCJf;=So)fLy5JaPN#RDMxoFb( z$>4;xMA#Fo2;Ealb=$E?Oj93yL#qKrgXz9Dbv53BkOJMZIicnxSAU(hoWUfF+oY!;7{RjMuLtLj#&9nVaOI6w+w@ zd#rAkWJudV7HWd4E>)PS2+}G3N=9lbBZp&-#UR!Y*Ic=ZHCH>iM&*Tw0qD}-N?+BFDi6_?& zaVtMx1OhZii32vP1qpI`_?RgFN2$FqE@SjGaRlz@vjte@dC8M@s~7bHa2pSMtXS?`DP$ ztVX%x5nU7xyTGM2#K+^FU-w_!-rtjvD6@&I>xM_OX{r{BT>k#E(32A@$zDRmGU~=@ zC4j9dwpgfawIgMcekK#3yoGyDO@*w;o~HD}T-KcWjAhb(!89Bh%}rFIPKPpv#L{~` zJ({JOxXlO!UN;u}5(Dys&O=D%HCS4uuTm0pH-hooP}D8VXLE+9a2jV_UFb8UL5*gD zyf}s2W*lhcJ+Dpz*xbI+v)IL`nvVR>P5k18q!e&27610{>wW_$QltfpCZMH?JY7nq zuF`xfc@wc^ik@5}A&ehloRQAF?q$;TCaeW{wf;1$w4Ya<9(w;&nYlPty2^ICdMKzn z{nT=kXPH!fvVF37vOEdSb0~Dl0nDM60KDwBe7feH%+~HBbmcJ{axm=GI-N>0h{V>< zRSFs5Av>JUGUFi&00^AP%?Rw)Pk5iWeAkzWR~lVj6O$W?IfDDx;_yD=l>oq|70;-~ zUZ&gk9iSNWdiII{Ma{y*Uqlcku{oT(M!~EEj1NP3W>pfJRw{IfJ{nM*QRq#-+?=ac z36su&q2J*E$pKRF$@4BA-`I0xLty0ClLK_Ip7fkS3r9kN(DwYt~_Eo zdr}q2WLez^$S3VL4;%M{p_k4iOu6ayQ|-yj{p%6QAn-Uo`uFZBZ7O3*W!L6kPXDV< z(0eg#v?RgHKPbv4SgP6tY|3eIhH-f=XIIwU+6@hHjq<3aP6D13pHG8Czv?c-=C;#M z$p*LTpyw?C?a2M>`$3{N5j&G(Aiqf4Q|l6)=I^kzs>I(APTYFi&$D80)L#YU1Y> z50dFO4T5PdBKfsKJX-l4Px+ zZU|1ll<2Z4nGsN~@C$4h%tulk0zS*qt`1@6nQvn4cXmc{&|8og&|RKl?)cgr!C&Im zk1Bf`g~PxUZvq$+ww=tMPqdHRVuwv|N4r-)g39f}=~nn+)rh>UlzEZFP(AhCE}BfK zn~5hpx?H>Qi^2nraawQ{?RD^` zAX)}YsR$$;-zc8$?lI*&zgzzUD&AN?LB|6>9h^HbUIQ|aChF-neC6D|Jo;>DGc%XC z_iYU1FT zB{efqf|r#-*|89*k;$yu$ZHJjVJ@ZV+@wGHscw# zE^Qa8ek=xz_w}Klq<74j@YEU97p4RS={RV62-2o=TYmSw>-)ax5(dSQ4&CbIt9MP6 zbXFwV^GP%o`CKFP<)!Sa#vJS{fRBSbq8}-ri{FwVeggs7Vz#)&WV!VnDilk5KwCjGy! z{|HvQK!`FcfrM2OU+K@QSpSge^Oc^KV=)024CZ|l%UVp#1)bONySh#P@XbnQ-N!5* zqse4!$}V;q*+WgmuP@_+g@uf90+yJQqjQ|2qD(w7`x*ciWTD(Rd6=nV}FI56%LIx1b z1lt8OEv%zN>CmAI>~{i~%@cuV?$+fD>^n5aVYU^Fh5x6u_YP{R>-vWAQaU1?(3@x| zQbc<1hzNv^l+Z+!8ah%X1nFG?=^&zl^j;+rKsusyq&E=|5b5FFfcJA>&wMlA%scbu zk7Uj{Ip^%X_S$Q&z1olCghRpTX+X_W3->X^(2AG69>QL#HJG|z0?g%`83En)cUBCi zSY`zV&z#YYFdiM51Zm4SguT$8J~Od+5LT^|WgwNX$|%co{}VQwJEXB*%aKN8g4UUF zh5Bk+#SiJqqxuT>kx@+do0umIF&PH;)~@X;SNX%{|xF%9GnQDpe~(SV;d8@4`(J<6F4+ zq&BU$u8r5n6%HXdmzLx9mgcNCj5d zCBn_vH*QY4{G;9F-z7ds;$4MV8GEBq0> z92&U_8xgl=1&jj{_C}$du_IkbCP-EOR((j$SBj$d6Ljssc zlNJB!P#9I9L#-wS89lyX`<$+!+}qsbeF8;cC#c#7N>Igmn~L8eO39&)J9Zng+{Qy! z+UR%;&kY_po%Qf$x2m_a&l~+}R4XWw^3|4O`?%S($FZ`WA7q6N4p(2=dL`|s`6mQU zb4k{J)AnS$feFdpCG{NxLi64ds>L4!qbNB)+LfWkk?s7A}pwyMXW5Q)88J~)VefX#$vP?`LZ|}SWiAsvSC@+J9gTW7x zkNg!S|Aq&JNyx7jdOe z_>)8CGyC`7-$EQEJH=j6z5-$2hy zc}?Fh$b8EE?dw;94ifS=gN9Esm;;y*`Fh!A}nLzkWzRG|mzl zwQ?a@vWKTP$x-{h?_xw81yA{kN;l}HPftjv>x;rAU`q&NnOs6~w%*6fyn1I*XTr;Q zbn$dZ%o-%B^8VfpPm(1NXu`uXi%twd&p^AiYQ;V+6_F{^M+9bDJR-TxI4xTJPvnlg z^DsCd?G=PDM#WM*SE+;whRB~!Iqi_BZ~-GYThFC*Pf3(ILm0sT;-f6Tch}9^v8RyH)po$w*d*^!)LYpZC8zCmuvYzQ;{p@~4Q13Z@_#4u7 z;iir3ajW!O2mzC_jWRx#c+CcdC)Y*hl7yBM2#}VrVhXNe=ms4Uq|tnW&1oC3jJ);> zVM6v1s=kXgmd=c6oURqOLFQdgU=9 z#a{_Rm1pCYn1#JaRK|<`3R;?WC5R3AW**B46jZmrxlw<#*^;G@LpJ3-AHA^UZMXU* z|97;r9}?g*Os~|`Ext5ad1YTrem?L4Em_RoGtZ=y!gUFe95A;_6|0b_Xo}@=!O_h~ z0xRJ~O^MM031M}V18p4RSF1MNCtaUYF`dOPLKj^NGVoM_L6A^X#33Gf7AguC$!o6T zGyF^)Umj-Hk?sDSnqKGU?Fgm(QFRBc0d)uW@Xxm6ru`6`*J&jO9R0AfJ^hYy>|mvq zQ?L3#xO+gCI5HRafTdt<`_ao{W#g~};!$DGKP>POeozGu7seQW-zKScgf-5#FkURHR99Pq zD%P%e$U#KxCi}=DcOCoito}-jyz#4qPQlJRI;9=g&pi+g8qPkmgRm_GHD^&vak_Yl z867#^M6OBP?p1=A_XlF|&X*2(pp2U&p0v0t06>7~DO}PyK2Z|!ZB;7$JBoIeahR6+ z`uf_Hvc{MeNX10wTF?GqY=9CqHT9vPqT=*aG6FiB65i1P&+_uW>F>#vv*+!2lh_!tk7 zM}InqlyckF!%gB;2mR9d7c^Q{pokb-5_L9^O3mhN560T3S~Skb2q)?lVh_$o zoACROiloHTr%!*c?MDhWL^t+D0c4!a(C5#0ONxs-1$HVKkz66IF^oNsg;3KNWVt}c z&c=es06->~rJ~z=4+y>8C^(nC(D)jEfI13BbTo66yqlQWEC5y- zhP^HOiyji0Lrk0f>cXxtq(w|WUArY18;5EcAAj%)z)m%R+S_ORM<=ft(!EHrLl6yL z?Ms{ghcxB|eTMr1*eue-so|&bDt*R9Jz$Ja1U?!{Jb!Co9a@4o44W5J+|;Ae_$taW zxTcm~TQI|fg!KYs7vm>8xOD#at!+s{e;)*o#gYsCyd9Y#1R=+B+es;lksl213H(_8 z)i2$vBRl7X5kCvU_H^&9Vq`-1ZF-tZ6Q{d^yIn3pp`Ox4WEFH5ya(AsvnEIG`^mr{ z=%}cuus_C@?mXs~>ZztHK9 zLdnWs>&)5+^O&8jMzS49U!vH?6jTz$-}4e{yV7y;eVq$4B|tVAdy>Q`C)L*72mtx^ zlk2aJerGsm!USN`eyk`)K6ZkmqfyP*stUvpAYYX(Hn!1)udD}(!|!4ucwZ1)Wekf5 z>DrWZ8&KmdYgqLA1PU#z3&zMJ0d*Kpkf?p=hq5tWr+Hu2#aJnmh)Ro3?-sP z?5d2!)oCwW4Y9MheuhcXbEW6T{V#%IaV!8yM=V$Gv)O?fmYDff;S@p$Z*MQ^{ykSV zjOJzO3F4>C7Jf;iJ%S)Pkj6PF1vispFRRc@N9nq|T|Wm}m=-~@r1IMO^~9amn3R0C zA>&m0j_mqsHs@p`-?YMn^lwA&v`fdBtfo=^W+1)ec9o3xC79aD5$($O4XdUxcNz7O zx9%j{CwRUGCCxh8|LG8Pg$_BNs?rNmwCaq;@!5fbw$7ITv+}&Yl;?Ma%;U*MKd8So zz*$p5iQ-NDvV2v$gNEstZ>BShz9G z+qZ)am|5p=pDQu%Ghze*wv3T#Pb%&nsI|2cSPJA=m)e^ol^Ucka;z)EWpY&%I8X-d zYHy>WCER{Ml7#S%wkbK6I^2@NZ!EYB+`~HUdYFn>3R2U1I`(C^tYw7Qr`&pdhIOR& z>;Dx?-0Yo8RQ;k6gD;b`0R2**lU1c^ByxuO=-v)DY z8G_IdMo(Y5LG~OFnhR;-c*6~^sYsmiik)bX+@jx@WWfB!eB`s;dSgD*NM82y@d^FVga6dunhz~( zsM=4LWW{Mq0@Pad2#lbeh_%3VFiYyJ<2bT2=?cF&i%HLw7h<7ANA=-9`_hT>ws)zR zSE&chWjGrme{K+p`)br>S~^SOiiMiY#I$BZ|Iw*5+H6d3d#ax^d?UofN&ZibGubqM zR#^F8LsTOe*UPJ4*65LR$Z}wHHj#6x-6--wKU@~DL;4*|JnHRU!IH)xeFDnd@OGhs zj7Y*q=(|MU1v@e9A`MV_m;!l61qG>cm+B-?$!(0}Uj5E_4oWyHQZdpTDM@_t9)|PX z6JJ;hHwk|TaA2zH81X?Ih+My>piuwP@3@MmH-Ls$$~5kiCHBEMfck#RTn1>ZBWZH| zbW$l9zG@{DG4^`C{P3^EH0mZR$s2ja1Ue+6bW>o()3}5F-sh^{EbLYE>lE*dtN&ml zS(+5wKTOuj5$?F7oBD?I`|&f(+)=6k^Q2GWL!qsY1XuTizs_F;HD*ULN?BzNjd^3_ z)27H%#S1V-bh9sY(Q^moP@SKp`-U>B-iUzLyH}h1hg0(?$SStUSI6C#j2vE~v-f6N zFkB5B2OipXQ2AZ2f;Q>-o^+W^Ue+xyhc^Rq#AE5y3-3+hhC0sjRB&)Cc%KQR;OUT= zPJB@W*`=Dar~63^_KQ8$ATzytj0%6u*eVLz?em<~tCYZdZ?R*@tIyyX5qzSg51+w| zr|ic#1Mv;ueILfgclxy+mOZ}9yg52m2E5QTczJ2zz}(z90s9@@R+c1M@&(nJ?U2nD#my{-OpZE#s?>4C$`665KdjIxD!67_HUp0JzfTCNh^or`;p^wShc+oBdM4^R}J-ba;!xjfrWS? z(!1G$cjNQTu%UPku#JyUbsbe>T!;LORtn!)fao1x#x;@pve&K^k|!LjKt&3hPLu5& zvj*`6Dul?zF!FN+K8PJ3ovj?Q|Hw{hA@l(kwoI%ux#F8e8bRI}n%9A~rXpvCRAFZ0 zGXd#ZeQJt?))IWrB);R%Zgal@;!T_^)s2nYb=xdy<;+4g>J>DcPM|sva;QUK+!P9% zvvMJ(&r%(Ll01oSi(z-V9+U4^4sNLfSCm z8uujD1Ie#rfpv1tGz#PPc}0ZLZRZ@2U5kj>#iJtn+$I~7zOhOlQy*~WYIS(ZTV;8= zq}YYzq2)URJV#Ggh)?~}nEeYfh8cxYHzp>z&1oC4+uIDcrqE1wL+N=9lFwJZ-+y8n z4`=>)$KTt&Fa@5n+K3)Zj*ZIpzK$#6Nid$FG;7g^n|`bc_#)d}Dz}$~7gtPVy(mMm zwOM+>(dWU5xqb|)wfw;p*b6f-oJ92`y`kmYjk`Rc>0~A?;5_s@BaJGQKKECaslE$ ze?TJY9YQej9NW8}G>01a;qunN5ByQUnha*8>%GC=fcNP;sVhySwRS88gDnYZP4Z-v z{3^YTrNF>$%sWVuW9=yBOb-`Od-grUhXRkI#3U`xG%N?Dvi{!wG0+s0(r?%z29~au zOTP776m|QPqO$k4cb2d7zl%U_8%-UMWePtNU0@%mPQNA)=`SG09Nh=METxN~bGuaq ztX+z%7Pix=E-hXuGJ*+^*M+4P%tLG}T>|@mrPN%H-6P0zP-J>MoitRA^kc*A8yJYM zr9+Zxg%cusf27ObEzWCe7ei$G`kLDU6VX*uRkMNUwx5u6*VS$i-l^dFt)I5QFSR9$ zCq0z?Re5{9jrFp?IX~bigMCP3X=jJkG?k;~1fkGcUYqRdjEP{AW>`pFSoq;T@y7Q? zq?`SFY`?vrw-wwTjEhXEqn6^s|5l%2^?mlur;|Bf7n1f*>@y(ehJ1rBG~=OP-2g`3 z-}BX7p0cJkMr3)A(p)FVzw{*bYJm&Nw4KbEu=LfJX%o2qotTM+DItuz$-?Krad&3;Q9{ki7rwy_ZDr-ws1h$7)x>&IM zVK}E5^eK@2;Z)dhe0?@;U?^k`5;jnoYaWZK2>rD5p_5fs(3Oj{J;L9%z;7sZm-&HP z4^{oq_I%rF@SCo5OwWfe4$#usk=qRf&x|SG=lo>7cK_{xoQk2idJ#0jI}_`31G?F?)LX)1oG3#;_8^KLrFT!Opz*whEQ*`vE%|GZw9dsuf%w6x2nSFn>+ zMJnKx_Rh1WB6a?c5biS`#bHX$Pt8VX|bwNLmSkt}hj zm=?`>7Pkgmm@o1PLRv{stuaO&7BQfn+Jkuc4MCco>l8=rk^7JGQ&Z%(I`2SPG%vpk_Yq+wb@2T^@pPAc6ry8Eegv=OUe8UKGG3JY` zr3*=^Zn(Cy3Nh{AcHF0Y(oC$6&J9xf^Ef#(Pos#FxLL)OH+^g>9$KboAJ&&&+iO*g zWsFps>=Pb!zL0)Y&#VQyVRNPuc;IU7dQr7wMi z08yv+sDO@3P<70RK#mkCu+p;?)oMjmvxEB|9ufvTbXO4-=^&C@Y$=PYXz42P6DEY8 z#_cu_xx&hTD*_L&hzvN0erYbTWyl}<_}*>Er?JNitg7Fr${Qv*SE1cCI8^#F3G;tL zL2y85kr3Wc2QC6)2vkhJSnhG6#9c^igB+M&;$GKbP101rY3CTp z5RPT^Oe4EYC$rc+>2wvR(}U-ZA*(%p31$9Ei?eH}D@yh{4tOHfAe;INLx>>sWL0dz2{|K6dk1~^719dbT2e@|z}1qp}| zEts}G06d>Q`r^O;&US&?3EzWJ)z5}9*mWgwo%tUMGCb)W$I3Z3W8|s+GjqTlK?-@< zs8)c`p6b-FF7gx2GK) zFJUM(;EMXyF|)jS_<0L1zP9CCiI68JCv%m>#e6@GfGPUWLnQ!!U%`}>QP^(-0|HMv zEW~n&f6UFOwEdflFKL&eE$-is7F%Cmk3J00(uxhpi2s+Fv=}ChE$6CQs05KqoPItB zN#n37{(rsr;H>@swmj|yx3W4;*23Dttr2ymR-`#w_IFIZhNWCb9qYw93(oh44Bt-v zO9Gs@YeWVRo8tN(+=Cj854&jug?^oRi2j*D(VD01bl7&x08nMr|40b<(&m4s3y#2d zgwCZ;(QTJ6U#@(*`$W+2*ZzEL!OcwX;P>y}Z*TAO{sVGUBO0Y>{?+EOwl|PMk9!23 z5LZINeg;OzqJK@6AcdiPB8fBE@IRkUFysE`00$?DmF&Xtb#V?V&-ypE_WW2o_&;90 z^TX^b&jc>)A?Js3gmbSclwnj&%=8y`pM3}UvF$?NX+=|W@{o{{kc16|hK81XKL>ri z_>*=pu#&!i`xa8s!EbC?`u@Fox~HdS%<4Zuzo|WF+#2fZJLk77_M&x5HBtD(MFOq$ z)Obb(=qqam5Q_{V$|4iXU=Idai(3)aQ&h_2xfW(-Qz=e{pNWv34HD+@%JKvnDEtz- zVaH>n2e(wIEsAjXgTO}#>KjHiXq+{@6pJbFjEVhA_OSgm13}WLC(yq!e&?)I0{-j*hqPr;EWRJ=camyonu|p4O_c?PX8v zRcW;lSgnqZiW>N42*1Ug$da}>QtNp1XPt6S7YG`Cef>j2IGlxA64mIW;q1(B=J8G6 zYQm>?sXt2#Kp|35GoTtZK{=Y(yzhp`4{Ih?fq|6u{NFvN*v-?3Jt}zro-dFgI%Rw2 z)Q7K5c1r^DIq$t(X}RVMWE8hb`;G)K6u0D3YKlGM=H|8=uYCNb#%C5qyHYzJLs^q5 z?JELc6kGCivg1b92XYkWHivssg)k>)Q0RI^RNE2&hw(HQ7@c)>btysj2LTfGO1vs_ zjt(n)&9j~Ek+!k1@z+xiAlB}EahyM8s_k_HQgqIHt#U{+@0LmR%7|~1`C+H33_I3o z>ojcopwH{A9(2LOq`~u+nM*6~9iMHRvXf&e>~?aCc8*S`ec7Xa<}=4AMr7+xe}<&t z@ia5(^LL{M2A4|G;yu=epuMJ85tRsjuRq?)IgZpzVc^DZ*&OZ zTozBj+?nOvf1Y7_zV1>42AGfNy`V02t=+&RVP9Oy3Rh z?mf5~ppu!_lm~3Hu*r8X0{%W39w2@`Mt-cj>&}5DjK^S}4&=qksJCEuOIEc44=JgI zP>r_Nq<-P}FY>_2?c4Cj0|C$=MpovU?6Ckf!@N(%epbsFSiL)d+D$X>kM+PFEDr@@ zmjffN)$IHHlC5eCz-Y3SFho*s`c5CM6gO0c-2;at!SE{my}PDoZg@ zr`oRH@^$EaC0yyVV~db#M@yfwY|kLC>9B!8YGn!iwd?5UI2ZV_AS>X(anm8_=sir# zhoF(({e44I1a3ya;p*xp&cpNy%TIXKFQ8LXQ*+zI{EgXS8JhWdd5SH)$ZIlh_4M?h z<|QM)Wq{+Y&A$lVBJ<-2kf7A{c&md)OZKF)R)&n=`Xp(yb8H6(^F8#$$BFH^NdAa! z-@Og$y$ZKw&HS%iuRR*Tc)VCzvc)X#aOJD8ebD6T-Ry^pU^1r%{XF?fY#+ujwD2Oo4Y#bw!@5}ipVnPJz7@W(dem5y7~gWd$lvw# zo$h?|Y15`Z|3=d;{B#%ImHH_2T@pR2(n-a(Fa6yy7)>2@l!DpK&*cxh+omgZI1JZ3 z4_6C#M&N<|4<>Hg5A!Yp)p}9SWS7Gzyl5*f(nf?N@s+n>!7yE``+leHd0b> zPETs@2`eVSMn~Hgp~wt{2Q@lx;zq*ft&fj(My+G>&&byPYyWaH94nj7)L*ti%klI2 zeA)f>Y2U{0jW_c5eM?eCqBEW_^7FmiGhr*nyer65XO2~MxLJZ9o6RMh$zAGUy~lpD z!u#0ZMwGqfFEC6wn}MfCzXANY`6+XYfY0!A@;W0wGhT6#I|PiX8QD(_#je#*N83U4n+a zNw?Ur&aG4Yu|s%S64!#qJh@h~scX0x-_d@DtR_k`rx-Uj-LmWl@C%Y#r+J&3b8Trn z`@m504V>U=$JzQhnM;9Zyng)axvYlQBmzIfccbob&j)h7|4VqrW%d%G?REy|0pmv* z%Ch^d*H(tIu$9=8hRx zju`>}n~KV0+ z=)8^_d6$=m?33Ej5NwEhr1gTL&QvrsQD3Ssa@mQ`q*{aO1qd$kM}O-hy+2<+<+Gge z__W06J&qGa$GdkfM<0AGkjXcFx|*-frTuoz6Rg+Vi8t;?9M&~# z)Za@LL*(j2QT>p(3&{Opblr2YZaGs|JzT-8=9=HkWrUDbz(F^ho0yhQFCs(1Oh`!P zch0qNaU`bG+w>+-v||A-?b}WN-9q@SR5~Q8-YH+ix)e|;KVMn=$J@N5e!%1EP%0h3 zQzdD1r`Wv~>gS(wNUmPx%&5SeDngbWgoTAI+bzh882S;CtFIH2cKT&yXB(>(a^ptW zU$S6-J?~23yqBai6Z4OmC^j&dMHhQ(;dIxBnLVp!JWvoMMW6Lp9V|BJ%T(A;jbLZ9 z6)P7Q*is&N8X!or51@Aw0@6Uh5ByzmvB5^up83$x3|tDIlyRU1s5XINf$V?QCkjYN zNpDP67Z%s6OVP;Qko|L0W{VJEjIH=Maoi`l32n8|rlX@HpVRU2@%ehms7$AGt$hzD zQ2EC{AIa(-2ei~Ou{ii|MZ)zWq7}?0a^SI3-6GAFEWRv0w%}Lu(S|M<5_3_N0O$57x-I}zEs4lHJ%x%8`D9c(PZw)s z$(V($=c~vJf2gX`_W_FjknW?~IabrUOjqn3)a0LM{PQ z5)}~0o(}E4;&bZ^4|~yM`tYS#e+vf?oaQwgsxe`X^V=0x`({R+_FG?dwYW+ewnI^dYT65?ZNn`4vCzy^b2Q?5RfTl4f@Xx3A~M;;aB<+p!y*UBAtU>kS( zD5tXoEQ9Sn3yO4Y%R?n2tTvI<7DAbUSf6`WZI2;-a+ui9dmR%Wvu>#G>rRWiEfIXH z1&faOYzSqWEHoc1S`0fs3QHn(=c?vKr+`T0`0kET$tj_n4rNFIs|TD5ECwYEf!f;{ zn|`W5+pMn5WcUc$tKKwQXvDQ3Eb09#+ZFi#!>(!UXE8Kqo|1E&>8yx6#%aDk_M6|E zV0)O}Hm4dBzX!))?KI%RCGwx@DPF!DZIu@{vKqltOqOiTB3fP61o_-iztz7Z&m-x! zf8@5@M~%MB;&2lQN~|5VoSIzs-$#MzfzfiVz$Af?E)^J$8 z{;#$iSJ15gdK@Rg-*~}`bLwRO&vubGFPKkRHqkdJOc*3g&z^o)SyQQ4!6Nwo0Qk@d AZvX%Q literal 0 HcmV?d00001 From daca07e9bbc9c75c49c12474bd49dc3ede0a6532 Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Mon, 20 Oct 2025 14:06:38 -0300 Subject: [PATCH 08/10] Update --- book/_quarto.yml | 12 +- book/content/pt/part1/ets_and_ar.qmd | 60 ++ .../pt/{part3 => part2}/deep_learning.qmd | 0 book/content/pt/part2/feature_engineering.qmd | 2 - .../hierarchical_forecasting.qmd | 6 +- .../{part3 => part2}/img/coherent_plane.png | Bin .../{part3 => part2}/img/global_reduction.png | Bin .../img/hierarchical_bottomup.png | Bin .../img/hierarchical_reconciled_vs_not.png | Bin .../img/hierarchical_td_fcst.png | Bin .../img/hierarchical_topdown.png | Bin .../img/nbeats_simplified.png | Bin .../pt/{part3 => part2}/panel_data.qmd | 0 .../pt/part2/probabilistic_forecasting.qmd | 105 +--- .../pt/part2/probabilistic_metrics.qmd | 2 - .../hierarchical_forecasting.quarto_ipynb | 511 ------------------ .../execute-results/html.json | 16 - .../figure-html/cell-16-output-1.png | Bin 80589 -> 0 bytes 18 files changed, 96 insertions(+), 618 deletions(-) rename book/content/pt/{part3 => part2}/deep_learning.qmd (100%) delete mode 100644 book/content/pt/part2/feature_engineering.qmd rename book/content/pt/{part3 => part2}/hierarchical_forecasting.qmd (98%) rename book/content/pt/{part3 => part2}/img/coherent_plane.png (100%) rename book/content/pt/{part3 => part2}/img/global_reduction.png (100%) rename book/content/pt/{part3 => part2}/img/hierarchical_bottomup.png (100%) rename book/content/pt/{part3 => part2}/img/hierarchical_reconciled_vs_not.png (100%) rename book/content/pt/{part3 => part2}/img/hierarchical_td_fcst.png (100%) rename book/content/pt/{part3 => part2}/img/hierarchical_topdown.png (100%) rename book/content/pt/{part3 => part2}/img/nbeats_simplified.png (100%) rename book/content/pt/{part3 => part2}/panel_data.qmd (100%) delete mode 100644 book/content/pt/part2/probabilistic_metrics.qmd delete mode 100644 book/content/pt/part3/hierarchical_forecasting.quarto_ipynb delete mode 100644 book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json delete mode 100644 book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png diff --git a/book/_quarto.yml b/book/_quarto.yml index e503d51..024e15b 100644 --- a/book/_quarto.yml +++ b/book/_quarto.yml @@ -17,15 +17,13 @@ book: - part: "Part II: Intermediário" chapters: - content/pt/part2/exog_variables.qmd - - content/pt/part2/feature_engineering.qmd - content/pt/part2/ml_models.qmd #- content/pt/part2/probabilistic_forecasting.qmd - - part: "Part III: Avançado" - chapters: - - content/pt/part3/panel_data.qmd - - content/pt/part3/hierarchical_forecasting.qmd - - content/pt/part3/deep_learning.qmd - - part: "Part IV: Apêndices" + - content/pt/part2/panel_data.qmd + - content/pt/part2/hierarchical_forecasting.qmd + - content/pt/part2/deep_learning.qmd + - content/pt/part2/probabilistic_forecasting.qmd + - part: "Part III: Apêndices" chapters: - content/pt/part4/sktime_custom.qmd diff --git a/book/content/pt/part1/ets_and_ar.qmd b/book/content/pt/part1/ets_and_ar.qmd index 4ae0906..192d6b4 100644 --- a/book/content/pt/part1/ets_and_ar.qmd +++ b/book/content/pt/part1/ets_and_ar.qmd @@ -101,9 +101,38 @@ plot_series( ) ``` +Um modelo auto-regressivo mais complexo é o ARIMA, que combina autoregressão (AR), média móvel (MA) e diferenciação integrada (I) para lidar com séries temporais não estacionárias. Não vamos estudar o ARIMA aqui pois envolve conceitos mais avançados, mas temos ele disponível no sktime, `sktime.forecasting.arima.ARIMA`. ## STL: dividir e conquistar +Sabemos que séries temporais podem ser decompostas em componentes de tendência, sazonalidade e resíduos. O modelo STL (Seasonal and Trend decomposition using Loess) é uma técnica que permite fazer essa decomposição de forma robusta. + +Temos no sktime o `STLTransformer`, que permite fazer a decomposição STL: + +```{python} +from sktime.transformations.series.detrend import STLTransformer + +stl = STLTransformer(sp=365) +stl.fit(y_train) + +``` + +E agora podemos inspecionar os componentes: + +```{python} +fig, ax = plt.subplots(3, 1, figsize=(10, 8), sharex=True) +stl.trend_.plot.line(ax=ax[0]) +ax[0].set_title("Tendência") +stl.seasonal_.plot.line(ax=ax[1]) +ax[1].set_title("Sazonalidade") +stl.resid_.plot.line(ax=ax[2]) +ax[2].set_title("Resíduos") +fig.show() +``` + + +Uma possibilidade, uma vez que temos os diferentes componentes, é modelar cada componente separadamente e depois combinar as previsões. O sktime tem o `STLForecaster`, que faz exatamente isso: + ```{python} from sktime.forecasting.trend import STLForecaster from sktime.forecasting.naive import NaiveForecaster @@ -125,4 +154,35 @@ plot_series( labels=["Treino", "Teste", "Previsão STL + AR"], ) +``` + +Para fins de demonstração, podemos complicar um pouco mais o modelo, modelando os resíduos com outro `STLForecaster`: + +```{python} + +model = STLForecaster( + forecaster_trend=AutoREG(lags=31), + forecaster_seasonal=NaiveForecaster(sp=7), + forecaster_resid=STLForecaster( + forecaster_trend=AutoREG(lags=31), + forecaster_seasonal=NaiveForecaster(sp=365), + forecaster_resid=AutoREG(lags=31), + sp=365, + ), + sp=7, +) + +model.fit(y_train) +``` + +```{python} +y_pred = model.predict(fh=y_test.index) + +plot_series( + y_train, + y_test, + y_pred, + labels=["Treino", "Teste", "Previsão STL + AR"], +) + ``` \ No newline at end of file diff --git a/book/content/pt/part3/deep_learning.qmd b/book/content/pt/part2/deep_learning.qmd similarity index 100% rename from book/content/pt/part3/deep_learning.qmd rename to book/content/pt/part2/deep_learning.qmd diff --git a/book/content/pt/part2/feature_engineering.qmd b/book/content/pt/part2/feature_engineering.qmd deleted file mode 100644 index d64e087..0000000 --- a/book/content/pt/part2/feature_engineering.qmd +++ /dev/null @@ -1,2 +0,0 @@ -# Engenharia de features - diff --git a/book/content/pt/part3/hierarchical_forecasting.qmd b/book/content/pt/part2/hierarchical_forecasting.qmd similarity index 98% rename from book/content/pt/part3/hierarchical_forecasting.qmd rename to book/content/pt/part2/hierarchical_forecasting.qmd index 5b88a19..0694118 100644 --- a/book/content/pt/part3/hierarchical_forecasting.qmd +++ b/book/content/pt/part2/hierarchical_forecasting.qmd @@ -105,7 +105,7 @@ from tsbook.forecasting.reduction import ReductionForecaster from lightgbm import LGBMRegressor forecaster = ReductionForecaster( - LGBMRegressor(n_estimators=50, verbose=-1, normalization_strategy="divide_mean"), + LGBMRegressor(n_estimators=50, verbose=-1, objective="tweedie"), window_length=30, normalization_strategy="divide_mean", ) @@ -289,14 +289,14 @@ from sktime.performance_metrics.forecasting import MeanSquaredScaledError metric = MeanSquaredScaledError(multilevel="uniform_average_time") pd.DataFrame( - { + { "Baseline": metric(y_test, y_pred, y_train=y_train), "BottomUpReconciler": metric(y_test, y_pred_bottomup, y_train=y_train), "TopDownReconciler": metric(y_test, y_pred_topdown, y_train=y_train), "OptimalReconciler (ols)": metric(y_test, y_pred_optimal, y_train=y_train), "Mint Reconciler": metric(y_test, y_pred_mint, y_train=y_train), }, - index=["Mean Absolute Scaled Error"] + index=["Mean Absolute Scaled Error"], ) ``` diff --git a/book/content/pt/part3/img/coherent_plane.png b/book/content/pt/part2/img/coherent_plane.png similarity index 100% rename from book/content/pt/part3/img/coherent_plane.png rename to book/content/pt/part2/img/coherent_plane.png diff --git a/book/content/pt/part3/img/global_reduction.png b/book/content/pt/part2/img/global_reduction.png similarity index 100% rename from book/content/pt/part3/img/global_reduction.png rename to book/content/pt/part2/img/global_reduction.png diff --git a/book/content/pt/part3/img/hierarchical_bottomup.png b/book/content/pt/part2/img/hierarchical_bottomup.png similarity index 100% rename from book/content/pt/part3/img/hierarchical_bottomup.png rename to book/content/pt/part2/img/hierarchical_bottomup.png diff --git a/book/content/pt/part3/img/hierarchical_reconciled_vs_not.png b/book/content/pt/part2/img/hierarchical_reconciled_vs_not.png similarity index 100% rename from book/content/pt/part3/img/hierarchical_reconciled_vs_not.png rename to book/content/pt/part2/img/hierarchical_reconciled_vs_not.png diff --git a/book/content/pt/part3/img/hierarchical_td_fcst.png b/book/content/pt/part2/img/hierarchical_td_fcst.png similarity index 100% rename from book/content/pt/part3/img/hierarchical_td_fcst.png rename to book/content/pt/part2/img/hierarchical_td_fcst.png diff --git a/book/content/pt/part3/img/hierarchical_topdown.png b/book/content/pt/part2/img/hierarchical_topdown.png similarity index 100% rename from book/content/pt/part3/img/hierarchical_topdown.png rename to book/content/pt/part2/img/hierarchical_topdown.png diff --git a/book/content/pt/part3/img/nbeats_simplified.png b/book/content/pt/part2/img/nbeats_simplified.png similarity index 100% rename from book/content/pt/part3/img/nbeats_simplified.png rename to book/content/pt/part2/img/nbeats_simplified.png diff --git a/book/content/pt/part3/panel_data.qmd b/book/content/pt/part2/panel_data.qmd similarity index 100% rename from book/content/pt/part3/panel_data.qmd rename to book/content/pt/part2/panel_data.qmd diff --git a/book/content/pt/part2/probabilistic_forecasting.qmd b/book/content/pt/part2/probabilistic_forecasting.qmd index 142238b..8810337 100644 --- a/book/content/pt/part2/probabilistic_forecasting.qmd +++ b/book/content/pt/part2/probabilistic_forecasting.qmd @@ -1,6 +1,31 @@ # Forecast probabilístico -## 2.4. Probabilistic forecasting + +```{python} +# | echo: false +import warnings + +warnings.filterwarnings("ignore") +``` + +```{python} +# | code-fold: true +import pandas as pd +import matplotlib.pyplot as plt + +from sktime.utils.plotting import plot_series + +``` + +```{python} +from tsbook.datasets.retail import SyntheticRetail +dataset = SyntheticRetail("panel") +y_train, X_train, y_test, X_test = dataset.load( + "y_train", "X_train", "y_test", "X_test" +) +``` + + When forecasting for retail, we often interested in the uncertainty of the forecasts. @@ -44,6 +69,8 @@ conformal_forecaster.fit(y_train) ``` ```{python} + +fh = y_test.index.get_level_values(-1).unique() y_pred_int = conformal_forecaster.predict_interval(fh=fh, coverage=0.9) ``` @@ -105,79 +132,3 @@ pd.DataFrame( index=["Pinball Loss"] ) ``` - -## 2.5. Deep learning models and zero-shot forecasting - -* In addition to simple ML models, we can also use deep learning models for forecasting. -* There are some models with tailored architectures for time series forecasting. -* For example, N-BEATS is a deep learning model that can be used for forecasting. - -* **Zero-shot forecasting** is extremely useful when a new product appears, a new warehouse... etc. - -![](imgs/nbeats_simplified.png) - -```{python} -from sktime.forecasting.pytorchforecasting import PytorchForecastingNBeats -from pytorch_forecasting.data.encoders import EncoderNormalizer - -CONTEXT_LENGTH = 365 -nbeats = PytorchForecastingNBeats( - train_to_dataloader_params={"batch_size": 256}, - trainer_params={"max_epochs": 1}, - model_params={ - "stack_types": ["trend", "seasonality"], # One of the following values: “generic”, “seasonality” or “trend”. - "num_blocks" : [2,2], # The number of blocks per stack. - "context_length": CONTEXT_LENGTH, # lookback period - "expansion_coefficient_lengths" : [2, 5], - "learning_rate": 1e-3, - }, - dataset_params={ - - "max_encoder_length": CONTEXT_LENGTH, - "target_normalizer": EncoderNormalizer() - }, -) - -nbeats.fit(y_train.astype(float), fh=fh) -``` - -```{python} -y_pred_nbeats = nbeats.predict(fh=fh, X=X_test) -``` - -```{python} -metric(y_true=y_test, y_pred=y_pred_nbeats, y_train=y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.loc[10].plot(ax=ax, label="Train") -y_test.loc[10].plot(ax=ax, label="Test") -y_pred_nbeats.loc[10].plot(ax=ax, label="N-BEATS") -fig.show() -``` - -```{python} -new_y_train = (y_train.loc[0]**2 + y_train.loc[20]).astype(float) -new_y_test = (y_test.loc[0]**2 + y_test.loc[20]).astype(float) - -# Plotting the new series -fig, ax = plt.subplots(figsize=(10, 4)) -new_y_train["sales"].plot.line(ax=ax, label="New Train") -new_y_test["sales"].plot.line(ax=ax, label="New Test") -fig.show() -``` - -```{python} -y_pred_zeroshot = nbeats.predict(fh=fh, y=new_y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -new_y_train["sales"].plot.line(ax=ax, label="New Train") -new_y_test["sales"].plot.line(ax=ax, label="New Test") -y_pred_zeroshot["sales"].plot.line(ax=ax, label="N-BEATS Zero-shot") -plt.legend() -plt.show() -``` - diff --git a/book/content/pt/part2/probabilistic_metrics.qmd b/book/content/pt/part2/probabilistic_metrics.qmd deleted file mode 100644 index 599cbff..0000000 --- a/book/content/pt/part2/probabilistic_metrics.qmd +++ /dev/null @@ -1,2 +0,0 @@ -# Métricas probabilísticas - diff --git a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb b/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb deleted file mode 100644 index 9812fe5..0000000 --- a/book/content/pt/part3/hierarchical_forecasting.quarto_ipynb +++ /dev/null @@ -1,511 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Forecasting Hierárquico\n", - "\n", - "Muitas vezes, não apenas temos múltiplas séries temporais, mas essas séries também estão organizadas em uma hierarquia. Por exemplo, vendas de produtos podem ser organizadas por SKU, categoria, departamento e total da loja.\n", - "\n", - "Vamos usar o mesmo dataset sintético, mas agora com uma hierarquia de produtos.\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "```{mermaid}\n", - "\n", - "graph TD\n", - " root[\"__total\"]\n", - "\n", - " %% group -1\n", - " root --> g_minus1[\"-1\"]\n", - " g_minus1 --> sku20[\"20\"]\n", - " g_minus1 --> sku21[\"21\"]\n", - " g_minus1 --> sku22[\"22\"]\n", - " g_minus1 --> sku23[\"23\"]\n", - " g_minus1 --> sku24[\"24\"]\n", - "\n", - " %% group 0\n", - " root --> g0[\"0\"]\n", - " g0 --> sku0[\"0\"]\n", - " g0 --> sku1[\"1\"]\n", - " g0 --> sku2[\"2\"]\n", - " g0 --> sku3[\"3\"]\n", - " g0 --> sku4[\"4\"]\n", - "\n", - " %% group 1\n", - " root --> g1[\"...\"]\n", - "\n", - " \n", - " %% group 3\n", - " root --> g3[\"3\"]\n", - " g3 --> sku15[\"15\"]\n", - " g3 --> sku16[\"16\"]\n", - " g3 --> sku17[\"17\"]\n", - " g3 --> sku18[\"18\"]\n", - " g3 --> sku19[\"19\"]\n", - "```\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Ao mesmo tempo que dados hierarárquicos são interessantes pois nos trazem mais informação, eles também trazem desafios adicionais. Imagine que queremos prever as vendas futuras de cada produto. Se fizermos previsões independetes para cada produto, não há garantia que a soma das previsões dos produtos será igual à previsão do total da loja. Isso é chamado de incoerência nas previsões hierárquicas. O processo de ajustar as previsões para garantir coerência é chamado de **reconciliação**.\n", - "\n", - "## Carregando dados\n", - "\n", - "Vamos usar os dados sintéticos, agora com sua versao hierárquica.\n" - ], - "id": "954450c9" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# | echo: false\n", - "\n", - "import warnings\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ], - "id": "0fd4b2dc", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from tsbook.datasets.retail import SyntheticRetail\n", - "\n", - "dataset = SyntheticRetail(\"hierarchical\")\n", - "y_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")" - ], - "id": "87b5df73", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Uso de pandas e dados hierárquicos\n", - "\n", - "Agora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n" - ], - "id": "b3735e56" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train" - ], - "id": "701329e9", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Para obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n" - ], - "id": "d105ecea" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.index.droplevel(-1).nunique()" - ], - "id": "086fd6be", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n" - ], - "id": "ceec492a" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.loc[(-1, \"__total\")].head()" - ], - "id": "43a8b75f", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "O total de todas as séries é representado por `(\"__total\", \"__total\")`.\n" - ], - "id": "1eb50ed5" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.loc[(\"__total\", \"__total\")]" - ], - "id": "4f349170", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Para contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n" - ], - "id": "74ede870" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "y_train.index.droplevel(-1).nunique()" - ], - "id": "5182c916", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Previsão sem reconciliação\n", - "\n", - "Vamos fazer uma previsão e entender o problema da incoerência.\n" - ], - "id": "e6c66a31" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "fh = y_test.index.get_level_values(-1).unique()" - ], - "id": "3b54ec2a", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from tsbook.forecasting.reduction import ReductionForecaster\n", - "from lightgbm import LGBMRegressor\n", - "\n", - "forecaster = ReductionForecaster(\n", - " LGBMRegressor(n_estimators=50, verbose=-1, normalization_strategy=\"divide_mean\"),\n", - " window_length=30,\n", - " normalization_strategy=\"divide_mean\",\n", - ")\n", - "forecaster.fit(y_train, X=X_train)\n", - "y_pred = forecaster.predict(fh, X=X_test)" - ], - "id": "417c18e4", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Para somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\n", - "quando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n" - ], - "id": "ec9435c1" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.hierarchical.aggregate import Aggregator\n", - "\n", - "Aggregator().fit_transform(y_pred) - y_pred" - ], - "id": "b590118b", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Existe uma diferença... ou seja, os valores não batem.\n", - "Imagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa?\n", - "A raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde:\n", - "\n", - "$$\n", - "C(t) = A(t) + B(t)\n", - "$$\n", - "\n", - "Aqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completamente determinado por $A$ e $B$. Se fizermos previsões independentes para $A$, $B$ e $C$, não há garantia de que a relação acima será mantida nas previsões.\n", - "\n", - "## Reconciliação de previsões hierárquicas\n", - "\n", - "![](img/hierarchical_reconciled_vs_not.png)\n", - "\n", - "Existem diferentes métodos para reconciliar previsões em séries temporais hierárquicas. Não existe uma solução única, e o melhor método depende dos dados e do contexto.\n", - "\n", - "## Bottom-up\n", - "\n", - "A maneira mais simples de reconcialiar previsões hierárquicas é a abordagem **bottom-up**. Nessa abordagem, fazemos previsões apenas para as séries mais baixas na hierarquia (as séries filhas) e depois somamos essas previsões para obter as previsões das séries superiores (as séries pais).\n", - "\n", - "\"Hierarchical\n", - "\n", - "Lados positivos:\n", - "\n", - "* Simplicidade: fácil de entender e implementar.\n", - "* Coerência garantida: a soma das previsões das séries filhas sempre será igual à previsão da série pai.\n", - "* Sérias filhas podem capturar detalhes específicos que podem ser perdidos em níveis superiores.\n", - "\n", - "No entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados.\n" - ], - "id": "a34ee9c0" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.hierarchical.reconcile import BottomUpReconciler\n", - "\n", - "bottom_up = BottomUpReconciler() * forecaster\n", - "bottom_up.fit(y_train)\n", - "\n", - "y_pred_bottomup = bottom_up.predict(fh=fh)" - ], - "id": "eb678a15", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Agora vemos que as previsões são coerentes:\n" - ], - "id": "d2f672c9" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "Aggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup" - ], - "id": "8f7e93e3", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Top-down (forecast proportions)\n", - "\n", - "Outra abordagem é a **top-down**. Nessa abordagem, fazemos previsões apenas para as séries superiores na hierarquia (as séries pais) e depois distribuímos essas previsões para as séries filhas com base em proporções previstas.\n", - "\n", - "Suponha que temos a seguinte hierarquia $C(t) = A(t) + B(t)$. Considere $\\hat{C}(t)$, $\\hat{A}(t)$ e $\\hat{B}(t)$ como as previsões para $C$, $A$ e $B$, respectivamente. Na abordagem top-down, faríamos o seguinte:\n", - "\n", - "1. Prever $\\hat{C}(t)$, $\\hat{A}(t)$ e $\\hat{B}(t)$ independentemente.\n", - "2. Calcular as proporções previstas para os níveis mais baixos:\n", - "$$\n", - "p_A(t) = \\frac{\\hat{A}(t)}{\\hat{A}(t) + \\hat{B}(t)}\n", - "$$\n", - "\n", - "$$\n", - "p_B(t) = \\frac{\\hat{B}(t)}{\\hat{A}(t) + \\hat{B}(t)}\n", - "$$\n", - "\n", - "3. Distribuir a previsão de $C$ para $A$ e $B$ usando essas proporções:\n", - "$$\n", - "\\tilde{A}(t) = p_A(t) \\cdot \\hat{C}(t)\n", - "$$\n", - "\n", - "$$\n", - "\\tilde{B}(t) = p_B(t) \\cdot \\hat{C}(t)\n", - "$$\n", - "\n", - "Essa abordagem é capaz de usufruir da qualidade do forecast total, e ainda consegue distribuir para as séries filhas baseadas no histórico.\n", - "\n", - "\"Topdown\n", - "\n", - "\n", - "O que chamam de \"Proporções históricas\" é equivalente a esse método, mas com um modelo Naive para prever as proporções.\n", - "\n", - "Esse método pode ser bom quando o forecast total é de boa qualidade. No entanto,\n", - "dependemos profundamente da qualidade do forecast total e das proporções.\n" - ], - "id": "499d5377" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.hierarchical.reconcile import TopdownReconciler\n", - "\n", - "top_down_fcst = TopdownReconciler() * forecaster\n", - "top_down_fcst.fit(y_train)\n", - "\n", - "y_pred_topdown = top_down_fcst.predict(fh=fh)" - ], - "id": "276029a1", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Reconciliação ótima\n", - "\n", - "Existe uma abordagem mais sofisticada, com uma intuição geométrica interessante.\n", - "A ideia é ajustar as previsões iniciais para que elas satisfaçam as restrições de soma da hierarquia. Por exemplo, para a hierarquia $C(t) = A(t) + B(t)$, queremos garantir que:\n", - "\n", - "$$\n", - "\\hat{C}(t) = \\hat{A}(t) + \\hat{B}(t)\n", - "$$\n", - "\n", - "Se consideramos nosso espaço 3D de observações $(\\hat{A}, \\hat{B}, \\hat{C})$, a \n", - "condição acima é satisfeita para um plano 2D nesse universo.\n", - "\n", - "\n", - "![](img/coherent_plane.png)\n", - "\n", - "\n", - "Podemos então projetar nossas previsões iniciais nesse plano para obter previsões coerentes. Essa projeção pode ser feita de várias maneiras, levando a diferentes métodos de reconciliação ótima. Os métodos levam o nome \"OLS\" pois a projeção é feita minimizando o erro quadrático (Ordinary Least Squares).\n", - "\n", - "* **OLS** : projetar ortogonalmente todas as previsões base na espaço de reconciliação, tratando todas as séries igualmente.\n", - "* **Weighted OLS**: projetar obliquamente, ou seja, considerando pesos diferentes para cada série, permitindo dar mais importância a certas séries na reconciliação. A projeção não faz mais uma perpendicular, mas sim uma oblíqua.\n", - "* **Minimum trace (MinT)**: use a matriz de covariância do erro para encontrar as previsões reconciliadas ótimas. Chamado de \"ótimo\".\n", - "\n", - "\n", - "Para a reconciliação ótima com OLS, podemos usar o `OptimalReconciler` do sktime:\n" - ], - "id": "9ddcb9d2" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.transformations.hierarchical.reconcile import OptimalReconciler\n", - "\n", - "optimal = OptimalReconciler(\"ols\") * forecaster\n", - "optimal.fit(y_train)\n", - "y_pred_optimal = optimal.predict(fh=fh)" - ], - "id": "d973b7f8", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# | code-fold: true\n", - "from sktime.utils.plotting import plot_series\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "\n", - "\n", - "idx = y_train.index.droplevel(-1).unique()[10]\n", - "\n", - "plot_series(\n", - " y_train.loc[idx,],\n", - " y_test.loc[idx,],\n", - " y_pred.loc[idx,],\n", - " y_pred_optimal.loc[idx,],\n", - " labels=[\"Train\", \"Test\", \"Predicted (sem reconciliação)\", \"Predicted (ótimo)\"],\n", - ")\n", - "plt.xlim(pd.to_datetime(\"2024-05-01\"), None)\n", - "plt.show()" - ], - "id": "5394d70c", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Para reconciliações ótimas (que usam a covariância do erro), podemos usar o `ReconcilerForecaster` do sktime, que internamente já faz o cálculo da covariância do erro:\n" - ], - "id": "c0a417ac" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.forecasting.reconcile import ReconcilerForecaster\n", - "\n", - "\n", - "mint_forecaster = ReconcilerForecaster(\n", - " forecaster=forecaster,\n", - " method=\"mint_shrink\")\n", - "\n", - "mint_forecaster.fit(y_train)\n", - "y_pred_mint = mint_forecaster.predict(fh=fh)" - ], - "id": "a23a1515", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Comparando resultados\n" - ], - "id": "cdff48a6" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from sktime.performance_metrics.forecasting import MeanSquaredScaledError\n", - "\n", - "metric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")\n", - "\n", - "pd.DataFrame(\n", - " { \n", - " \"Baseline\": metric(y_test, y_pred, y_train=y_train),\n", - " \"BottomUpReconciler\": metric(y_test, y_pred_bottomup, y_train=y_train),\n", - " \"TopDownReconciler\": metric(y_test, y_pred_topdown, y_train=y_train),\n", - " \"OptimalReconciler (ols)\": metric(y_test, y_pred_optimal, y_train=y_train),\n", - " \"Mint Reconciler\": metric(y_test, y_pred_mint, y_train=y_train),\n", - " },\n", - " index=[\"Mean Absolute Scaled Error\"]\n", - ")" - ], - "id": "8bc6da84", - "execution_count": null, - "outputs": [] - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "language": "python", - "display_name": "Python 3 (ipykernel)", - "path": "/Users/felipeangelim/Workspace/python_brasil_2025/.venv/share/jupyter/kernels/python3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json b/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json deleted file mode 100644 index 7ccc2e2..0000000 --- a/book/content/pt/part3/hierarchical_forecasting_files/execute-results/html.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "hash": "00369b8f9f3f95617cc57077c327824d", - "result": { - "engine": "jupyter", - "markdown": "# Forecasting Hierárquico\n\nMuitas vezes, não apenas temos múltiplas séries temporais, mas essas séries também estão organizadas em uma hierarquia. Por exemplo, vendas de produtos podem ser organizadas por SKU, categoria, departamento e total da loja.\n\nVamos usar o mesmo dataset sintético, mas agora com uma hierarquia de produtos.\n\n\n\n\n\n\n```{mermaid}\n\ngraph TD\n root[\"__total\"]\n\n %% group -1\n root --> g_minus1[\"-1\"]\n g_minus1 --> sku20[\"20\"]\n g_minus1 --> sku21[\"21\"]\n g_minus1 --> sku22[\"22\"]\n g_minus1 --> sku23[\"23\"]\n g_minus1 --> sku24[\"24\"]\n\n %% group 0\n root --> g0[\"0\"]\n g0 --> sku0[\"0\"]\n g0 --> sku1[\"1\"]\n g0 --> sku2[\"2\"]\n g0 --> sku3[\"3\"]\n g0 --> sku4[\"4\"]\n\n %% group 1\n root --> g1[\"...\"]\n\n \n %% group 3\n root --> g3[\"3\"]\n g3 --> sku15[\"15\"]\n g3 --> sku16[\"16\"]\n g3 --> sku17[\"17\"]\n g3 --> sku18[\"18\"]\n g3 --> sku19[\"19\"]\n```\n\n\n\n\n\n\n\nAo mesmo tempo que dados hierarárquicos são interessantes pois nos trazem mais informação, eles também trazem desafios adicionais. Imagine que queremos prever as vendas futuras de cada produto. Se fizermos previsões independetes para cada produto, não há garantia que a soma das previsões dos produtos será igual à previsão do total da loja. Isso é chamado de incoerência nas previsões hierárquicas. O processo de ajustar as previsões para garantir coerência é chamado de **reconciliação**.\n\n## Carregando dados\n\nVamos usar os dados sintéticos, agora com sua versao hierárquica.\n\n\n\n::: {#1bfea3a6 .cell execution_count=2}\n``` {.python .cell-code}\nfrom tsbook.datasets.retail import SyntheticRetail\n\ndataset = SyntheticRetail(\"hierarchical\")\ny_train, X_train, y_test, X_test = dataset.load(\"y_train\", \"X_train\", \"y_test\", \"X_test\")\n```\n:::\n\n\n## Uso de pandas e dados hierárquicos\n\nAgora, os dataframes possuem mais de 2 ou mais índices, representando a hierarquia.\n\n::: {#bb1952a3 .cell execution_count=3}\n``` {.python .cell-code}\ny_train\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```{=html}\n

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
group_idsku_iddate
-1202020-01-010
2020-01-020
2020-01-030
2020-01-040
2020-01-052
............
__total__total2024-07-012000
2024-07-021616
2024-07-031917
2024-07-042384
2024-07-052462
\n

51088 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nPara obter o número de pontos de série únicos (séries temporais individuais), podemos fazer o seguinte:\n\n::: {#bf5859f4 .cell execution_count=4}\n``` {.python .cell-code}\ny_train.index.droplevel(-1).nunique()\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\n31\n```\n:::\n:::\n\n\nNote que existem algumas séries com um identificador `__total`. Esse identificador representa o total para aquele nível da hierarquia. Por exemplo, se o id completo é `(-1, \"__total\")`, isso representa o total do grupo -1.\n\n::: {#0305cb20 .cell execution_count=5}\n``` {.python .cell-code}\ny_train.loc[(-1, \"__total\")].head()\n```\n\n::: {.cell-output .cell-output-display execution_count=5}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
date
2020-01-014
2020-01-022
2020-01-033
2020-01-0414
2020-01-0516
\n
\n```\n:::\n:::\n\n\nO total de todas as séries é representado por `(\"__total\", \"__total\")`.\n\n::: {#78019572 .cell execution_count=6}\n``` {.python .cell-code}\ny_train.loc[(\"__total\", \"__total\")]\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
date
2020-01-0124
2020-01-0219
2020-01-0314
2020-01-0423
2020-01-0523
......
2024-07-012000
2024-07-021616
2024-07-031917
2024-07-042384
2024-07-052462
\n

1648 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nPara contabilizar o número de séries temporais individuais, podemos fazer o seguinte:\n\n::: {#34680d4b .cell execution_count=7}\n``` {.python .cell-code}\ny_train.index.droplevel(-1).nunique()\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n```\n31\n```\n:::\n:::\n\n\n## Previsão sem reconciliação\n\nVamos fazer uma previsão e entender o problema da incoerência.\n\n::: {#ae451738 .cell execution_count=8}\n``` {.python .cell-code}\nfh = y_test.index.get_level_values(-1).unique()\n```\n:::\n\n\n::: {#248068cf .cell execution_count=9}\n``` {.python .cell-code}\nfrom tsbook.forecasting.reduction import ReductionForecaster\nfrom lightgbm import LGBMRegressor\n\nforecaster = ReductionForecaster(\n LGBMRegressor(n_estimators=50, verbose=-1),\n window_length=30,\n normalization_strategy=\"divide_mean\",\n)\nforecaster.fit(y_train, X=X_train)\ny_pred = forecaster.predict(fh, X=X_test)\n```\n:::\n\n\nPara somar as previsões de baixo para cima, podemos usar o transformador `Aggregator`. Vamos ver que,\nquando somarmos as previsões das séries filhas, o resultado não é igual à previsão da série total.\n\n::: {#14408f79 .cell execution_count=10}\n``` {.python .cell-code}\nfrom sktime.transformations.hierarchical.aggregate import Aggregator\n\nAggregator().fit_transform(y_pred) - y_pred\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
group_idsku_iddate
-1202024-07-060.000000
2024-07-070.000000
2024-07-080.000000
2024-07-090.000000
2024-07-100.000000
............
__total__total2024-12-28236.811238
2024-12-29408.247548
2024-12-30222.472056
2024-12-3198.131539
2025-01-019.309276
\n

5580 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nExiste uma diferença... ou seja, os valores não batem.\nImagine o impacto de levar previsões incoerentes para a tomada de decisão em uma empresa?\nA raiz do problema é que temos mais modelos que graus de liberdade. Para ilustrar, suponha que temos 3 séries: $A$, $B$ e $C$, onde:\n\n$$\nC(t) = A(t) + B(t)\n$$\n\nAqui, temos 3 séries, mas apenas 2 graus de liberdade, pois $C$ é completamente determinado por $A$ e $B$. Se fizermos previsões independentes para $A$, $B$ e $C$, não há garantia de que a relação acima será mantida nas previsões.\n\n## Reconciliação de previsões hierárquicas\n\n![](img/hierarchical_reconciled_vs_not.png)\n\nExistem diferentes métodos para reconciliar previsões em séries temporais hierárquicas. Não existe uma solução única, e o melhor método depende dos dados e do contexto.\n\n## Bottom-up\n\nA maneira mais simples de reconcialiar previsões hierárquicas é a abordagem **bottom-up**. Nessa abordagem, fazemos previsões apenas para as séries mais baixas na hierarquia (as séries filhas) e depois somamos essas previsões para obter as previsões das séries superiores (as séries pais).\n\n\"Hierarchical\n\nLados positivos:\n\n* Simplicidade: fácil de entender e implementar.\n* Coerência garantida: a soma das previsões das séries filhas sempre será igual à previsão da série pai.\n* Sérias filhas podem capturar detalhes específicos que podem ser perdidos em níveis superiores.\n\nNo entanto, essa abordagem também tem desvantagens: é sucetível ao ruído nas séries filhas, e se as séries filhas tiverem pouca informação, as previsões podem ser ruins. Por exemplo, muitos zeros nas séries de níveis baixos pode levar a previsões ruins a niveis agregados.\n\n#### Top-down (forecast proportions)\n\n\"Topdown\n\n#### Optimal reconciliation\n\nThe coherence can be translated as linear constraints on the forecasts:\n\n$$\ny_{total} = \\sum_{i=1}^{n} y_i\n$$\n\nThis is mathematically equivalent to saying that the coherent forecasts lie in a hyperplane defined by the linear constraints.\n\n![](img/coherent_plane.png)\n\n* **OLS** : project the base forecasts into the reconciliation space.\n* **Weighted OLS**: project all base forecasts into the reconciliation space, but with different weights.\n* **Minimum trace (MinT)**: use the error covariance matrix to find the optimal reconciled forecasts. Called \"optimal\".\n\n::: {#2e0c8cbf .cell execution_count=11}\n``` {.python .cell-code}\nfrom sktime.transformations.hierarchical.reconcile import (\n BottomUpReconciler,\n TopdownReconciler,\n OptimalReconciler\n)\n\nbottom_up = BottomUpReconciler() * forecaster\ntop_down_fcst = TopdownReconciler() * forecaster\noptimal = OptimalReconciler(\"ols\") * forecaster\n```\n:::\n\n\n::: {#88777ac3 .cell execution_count=12}\n``` {.python .cell-code}\nbottom_up.fit(y_train)\ntop_down_fcst.fit(y_train)\noptimal.fit(y_train)\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```{=html}\n
TransformedTargetForecaster(steps=[OptimalReconciler(error_covariance_matrix='ols'),\n                                   ReductionForecaster(estimator=LGBMRegressor(n_estimators=50, verbose=-1),\n                                                       normalization_strategy='divide_mean',\n                                                       window_length=30)])
Please rerun this cell to show the HTML repr or trust the notebook.
\n```\n:::\n:::\n\n\n::: {#a0fce950 .cell execution_count=13}\n``` {.python .cell-code}\ny_pred_bottomup = bottom_up.predict(fh=fh)\ny_pred_topdown = top_down_fcst.predict(fh=fh)\ny_pred_optimal = optimal.predict(fh=fh)\n```\n:::\n\n\n::: {#acd00d64 .cell execution_count=14}\n``` {.python .cell-code}\nAggregator().fit_transform(y_pred_bottomup) - y_pred_bottomup\n```\n\n::: {.cell-output .cell-output-display execution_count=14}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
sales
group_idsku_iddate
-1202024-07-060.0
2024-07-070.0
2024-07-080.0
2024-07-090.0
2024-07-100.0
............
__total__total2024-12-280.0
2024-12-290.0
2024-12-300.0
2024-12-310.0
2025-01-010.0
\n

5580 rows × 1 columns

\n
\n```\n:::\n:::\n\n\nIn this case, there's not a lot of difference between the reconciliation outputs.\nBut we will see that the bottom-up approach is the most accurate one.\n\n::: {#1954362c .cell execution_count=15}\n``` {.python .cell-code}\nfrom sktime.utils.plotting import plot_series\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n\nidx = y_train.index.droplevel(-1).unique()[10]\n\nplot_series(\n y_train.loc[idx,], y_test.loc[idx,], y_pred.loc[idx,], y_pred_optimal.loc[idx,],\n labels=[\"Train\", \"Test\", \"Predicted\", \"Predicted Optimal\"],\n)\nplt.xlim(pd.to_datetime(\"2024-05-01\"), None)\nplt.show()\n```\n\n::: {.cell-output .cell-output-display}\n![](hierarchical_forecasting_files/figure-html/cell-16-output-1.png){}\n:::\n:::\n\n\n::: {#54e9116e .cell execution_count=16}\n``` {.python .cell-code}\nfrom sktime.forecasting.reconcile import ReconcilerForecaster\n\n\nmint_forecaster = ReconcilerForecaster(\n forecaster=forecaster,\n method=\"mint_shrink\")\n\nmint_forecaster.fit(y_train)\n```\n\n::: {.cell-output .cell-output-display execution_count=16}\n```{=html}\n
ReconcilerForecaster(forecaster=ReductionForecaster(estimator=LGBMRegressor(n_estimators=50, verbose=-1),\n                                                    normalization_strategy='divide_mean',\n                                                    window_length=30))
Please rerun this cell to show the HTML repr or trust the notebook.
\n```\n:::\n:::\n\n\n::: {#32d65af9 .cell execution_count=17}\n``` {.python .cell-code}\ny_pred_mint = mint_forecaster.predict(fh=fh)\n```\n:::\n\n\n::: {#c66d6cee .cell execution_count=18}\n``` {.python .cell-code}\nfrom sktime.performance_metrics.forecasting import MeanSquaredScaledError\n\nmetric = MeanSquaredScaledError(multilevel=\"uniform_average_time\")\n\npd.DataFrame(\n { \n \"Baseline\": metric(y_test, y_pred, y_train=y_train),\n \"BottomUpReconciler\": metric(y_test, y_pred_bottomup, y_train=y_train),\n \"TopDownReconciler\": metric(y_test, y_pred_topdown, y_train=y_train),\n \"OptimalReconciler (ols)\": metric(y_test, y_pred_optimal, y_train=y_train),\n \"Mint Reconciler\": metric(y_test, y_pred_mint, y_train=y_train),\n },\n index=[\"Mean Absolute Scaled Error\"]\n)\n```\n\n::: {.cell-output .cell-output-display execution_count=18}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
BaselineBottomUpReconcilerTopDownReconcilerOptimalReconciler (ols)Mint Reconciler
Mean Absolute Scaled Error27.46679686.1302832.83304133.4823234.572241
\n
\n```\n:::\n:::\n\n\n", - "supporting": [ - "hierarchical_forecasting_files" - ], - "filters": [], - "includes": { - "include-in-header": [ - "\n\n\n" - ] - } - } -} \ No newline at end of file diff --git a/book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png b/book/content/pt/part3/hierarchical_forecasting_files/figure-html/cell-16-output-1.png deleted file mode 100644 index 7c49399a66a325350ad707bc2acad4e4aea564e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80589 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 AZvX%Q From 44ad65ef2daffb9d146966a9755e9589ac27c113 Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Tue, 21 Oct 2025 08:02:24 -0300 Subject: [PATCH 09/10] Update --- book/_quarto.yml | 6 +- book/content/pt/extra/img/private_methods.png | Bin 0 -> 175551 bytes book/content/pt/extra/sktime_custom.qmd | 358 ++++++++++++++ book/content/pt/part1/components_and_diff.qmd | 81 +++- .../pt/part2/probabilistic_forecasting.qmd | 134 ------ book/content/pt/part4/sktime_custom.qmd | 1 - book/cover.png | Bin 51194 -> 0 bytes book/index.qmd | 8 +- book/intro.qmd | 2 - book/summary.qmd | 3 - convert_qmd_to_ipynb.sh | 32 ++ panel.qmd | 454 ------------------ reduction.ipynb | 312 ------------ 13 files changed, 457 insertions(+), 934 deletions(-) create mode 100644 book/content/pt/extra/img/private_methods.png create mode 100644 book/content/pt/extra/sktime_custom.qmd delete mode 100644 book/content/pt/part2/probabilistic_forecasting.qmd delete mode 100644 book/content/pt/part4/sktime_custom.qmd delete mode 100644 book/cover.png delete mode 100644 book/intro.qmd delete mode 100644 book/summary.qmd create mode 100644 convert_qmd_to_ipynb.sh delete mode 100644 panel.qmd delete mode 100644 reduction.ipynb diff --git a/book/_quarto.yml b/book/_quarto.yml index 024e15b..fc18f34 100644 --- a/book/_quarto.yml +++ b/book/_quarto.yml @@ -2,7 +2,7 @@ project: type: book book: - title: "book" + title: "Previsão de Séries temporais com Python: um pequeno guia" author: "Felipe Angelim" date: "10/11/2025" chapters: @@ -18,14 +18,12 @@ book: chapters: - content/pt/part2/exog_variables.qmd - content/pt/part2/ml_models.qmd - #- content/pt/part2/probabilistic_forecasting.qmd - content/pt/part2/panel_data.qmd - content/pt/part2/hierarchical_forecasting.qmd - content/pt/part2/deep_learning.qmd - - content/pt/part2/probabilistic_forecasting.qmd - part: "Part III: Apêndices" chapters: - - content/pt/part4/sktime_custom.qmd + - content/pt/extra/sktime_custom.qmd bibliography: references.bib diff --git a/book/content/pt/extra/img/private_methods.png b/book/content/pt/extra/img/private_methods.png new file mode 100644 index 0000000000000000000000000000000000000000..fa12ee20baa330b75aa86eaf05791e31521acd95 GIT binary patch literal 175551 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%0A~&aMjI|uk$kf4dXiD8lS6I``u$m$5 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

Ieao*zx8c2R@vN)Urw}yhOIQvu+^e|MioN} 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

?KXf#V*sBZw) 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 N^llhlM{C+V`9BCXVru{Z literal 0 HcmV?d00001 diff --git a/book/content/pt/extra/sktime_custom.qmd b/book/content/pt/extra/sktime_custom.qmd new file mode 100644 index 0000000..0799f0e --- /dev/null +++ b/book/content/pt/extra/sktime_custom.qmd @@ -0,0 +1,358 @@ +# Criando modelos customizados com sktime + +O sktime oferece um ecossistema robusto, mas em cenarios reais frequentemente precisamos ajustar comportamentos, incorporar dados hierarquicos ou adicionar pre-processamentos especificos. Felizmente, o sktime torna relativamente simples a criacao de modelos customizados, desde que sigamos algumas regras. + +Acredito que essa e uma das grandes vantagens da biblioteca: o foco em ser extensivel e customizavel. + +## O sistema de tags + +Entre a chamada dos metodos publicos e privados existe uma camada de validacoes e conversões controlada pelas tags. Elas sinalizam ao `BaseForecaster` e ao `BaseTransformer` o que precisa ser garantido antes de executar a implementacao customizada. + +As tags mais importantes para um forecaster podem ser definidas assim: + +```python +_tags = { + "capability:exogenous": True, + "requires-fh-in-fit": False, + "X_inner_mtype": [ + "pd.Series", + "pd.DataFrame", + "pd-multiindex", + "pd_multiindex_hier", + ], + "y_inner_mtype": [ + "pd.Series", + "pd.DataFrame", + "pd-multiindex", + "pd_multiindex_hier", + ] +} +``` + +Cada uma delas indica o que o modelo é capaz de fazer nos seus métodos privados +`_fit` e `_predict`: + +* `capability:exogenous`: Indica se o modelo suporta variáveis exógenas (X) durante o ajuste e a previsão. +* `requires-fh-in-fit`: Indica se o modelo precisa do horizonte de previsão (fh) durante o ajuste. Alguns modelos precisam devido a sua implementação interna. +* `y_inner_mtype`: Define os tipos de dados aceitos para a variável dependente (y) durante o ajuste e a previsão. +* `X_inner_mtype`: Define os tipos de dados aceitos para as variáveis exógenas (X) durante o ajuste e a previsão. + +Os machine-types (**mtypes**), ou tipos para máquina, são a peça mais crucial nesse sistema. + +### Machine-types disponiveis + +Os `mtypes` definem qual a estrutura de dados que o modelo aceita como entrada e produz como saída. Os principais mtypes para séries temporais são: + +- `np.ndarray` +- `pd.Series` +- `pd.DataFrame` +- `pd-multiindex` (ideia de painel) +- `pd_multiindex_hier` (dados hierarquicos) + +Se o modelo suporta um `mtype` hierárquico e passamos um dado hierárquico, o +dado chegará normalmente ao método privado `_fit` ou `_predict`. Caso contrário, o sktime tentará converter o dado para um mtype suportado. + +#### Baixando exemplos por mtype + +Para entender melhor cada mtype, podemos baixar exemplos práticos usando a função `get_examples` do sktime: + +```{python} +from sktime.datatypes import get_examples + +get_examples(mtype="np.ndarray", as_scitype="Series")[0] +``` + +```{python} +get_examples(mtype="pd.DataFrame", as_scitype="Series")[0].head() +``` + +```{python} +get_examples(mtype="pd-multiindex", as_scitype="Panel")[0].head() +``` + +```{python} +get_examples(mtype="pd_multiindex_hier", as_scitype="Hierarchical")[0].head() +``` + +Alguns mtypes tem limitações: uma `pd.Series` simples nao representa problemas hierarquicos, sendo necessario recorrer ao `pd_multiindex_hier`. + +#### Exemplo prático + +Vamos criar o nosso primeiro esqueleto de forecaster customizado. Para isso, baixamos uma série de exemplo: + +```{python} +# | echo: false +import warnings + +warnings.filterwarnings("ignore") +``` + +```{python} +from sktime.forecasting.base import BaseForecaster +from sktime.utils._testing.series import _make_series + +y = _make_series(4) +y +``` + +Nosso protótipo irá apenas printar os dados recebidos no método `_fit`. O `__init__` recebe um dicionário de tags para definir as capacidades do modelo. + +```{python} +class Logger(BaseForecaster): + + _tags = { + "requires-fh-in-fit": False, + } + + def __init__(self, tags_to_set): + self.tags_to_set = tags_to_set + super().__init__() + + self.set_tags(**tags_to_set) + + def _fit(self, y, X=None, fh=None): + print("Inside fit:") + print(y) + return self + +``` + + +```{python} +logger = Logger(tags_to_set={"y_inner_mtype" : ["pd.Series"] }) +logger.fit(y) +``` + +```{python} +logger = Logger(tags_to_set={"y_inner_mtype" : ["np.ndarray"] }) +logger.fit(y) +``` + +```{python} + +logger = Logger(tags_to_set={"y_inner_mtype" : ["pd.DataFrame"] }) +logger.fit(y) + +``` + +```{python} +try: + logger = Logger(tags_to_set={"y_inner_mtype" : ["pd_multiindex_hier"] }) + logger.fit(y) +except ValueError as e: + print(e) +``` + +```{python} +try: + logger = Logger(tags_to_set={"y_inner_mtype": ["pd.DataFrame", "pd_multiindex_hier"]}) + logger.fit(y) +except ValueError as e: + print(e) +``` + +#### Input hierárquico + +Agora veremos como o modelo se comporta com dados hierárquicos. Note que, nos casos onde o modelo não suporta dados hierárquicos, o sktime tentará convertê-los para um mtype suportado. + +```{python} + +from sktime.utils._testing.hierarchical import _make_hierarchical + +y = _make_hierarchical((1,2), max_timepoints=4, min_timepoints=2) +y +``` + + +```{python} +logger = Logger(tags_to_set={"y_inner_mtype" : ["pd.Series"] }) +logger.fit(y) +``` + + +```{python} +logger = Logger(tags_to_set={"y_inner_mtype" : ["np.ndarray"] }) +logger.fit(y) +``` + + +```{python} +logger = Logger(tags_to_set={"y_inner_mtype" : ["pd.DataFrame"] }) +logger.fit(y) +``` + + +```{python} +try: + logger = Logger(tags_to_set={"y_inner_mtype": ["pd_multiindex_hier"]}) + logger.fit(y) +except ValueError as e: + print(e) +``` + +## Criando um modelo naive + +Agora, vamos implementar um modelo simples de previsão, o `CustomNaiveForecaster`, que prevê o valor médio dos últimos n pontos da série temporal. + +É um exemplo simples, mas que ilustra bem como criar um forecaster customizado com sktime. + +```{python} +from tsbook.datasets.retail import SyntheticRetail + +dataset = SyntheticRetail("panel") +y_train, y_test = dataset.load("y_train", "y_test") +y_train +``` + + +```{python} +from sktime.utils.plotting import plot_series + +plot_series( + y_train.loc[0], + y_train.loc[24], + labels=[ + "SKU 0", + "SKU 24", + ], +) + +``` + + +Abaixo, implementamos o `CustomNaiveForecaster` seguindo as regras do sktime (clique para expandir). Em seguida, explicamos passo a passo. + +```{python} +# | code-fold: true +from sktime.forecasting.base import BaseForecaster +import pandas as pd + +class CustomNaiveForecaster(BaseForecaster): + """ + A simple naive forecaster + + Parameters + ---------- + n : int + Number of past values to use. + """ + + _tags = { + "requires-fh-in-fit": False, + "y_inner_mtype": [ + "pd.Series", + ], + } + + # Add hyperparameters in init! + def __init__(self, n=1): + # 1. Set hyper-parameters + self.n = n + + # 2. Initialize parent class + super().__init__() + + # 3. Check hyper-parameters + assert self.n > 0, "n must be greater than 0" + + def _fit(self, y, X, fh): + """ + Fit necessary parameters. + """ + + self.value_ = y.iloc[-self.n :].mean() + return self + + def _predict(self, fh, X): + """ + Use forecasting horizon and optionally X to predict y + """ + + # During fit, BaseForecaster sets + # self.cutoff to the latest cutoff time point + index = fh.to_absolute_index(self.cutoff) + y_pred = pd.Series( + index=index, + data=[self.value_ for _ in range(len(index))], + ) + + return y_pred +``` + +### Definindo o método `__init__` + +O método `__init__` possui 3 etapas: + +1. A definição dos hiperparametros e seus atributos com mesmo nome. +2. A chamada do `super().__init__()` para inicializar a classe pai. +3. A validação dos hiperparâmetros. + + + +```python +# Add hyperparameters in init! +def __init__(self, n=1): + # 1. Set hyper-parameters + self.n = n + + # 2. Initialize parent class + super().__init__() + + # 3. Check hyper-parameters + assert self.n > 0, "n must be greater than 0" +``` + +No caso de algum preprocessamento dos hiperparâmetros no `__init__`, devemos guardar em uma variável com nome diferente do hiperparâmetro. Por exemplo, se tivéssemos interesse em ter um atributo `n` diferente do passado no `__init__`, poderíamos fazer: + +``` +self._n = n + 1 +``` + +O `self.n` funciona como uma digital do modelo, e deve ser exatamente o que foi passado no `__init__`. + +### Definindo o método `_fit` + +No método `_fit`, devemos implementar a lógica de ajuste do modelo. No nosso caso, calculamos a média dos últimos `n` valores e armazenamos em `self.value_`. + +O `_` após o nome do atributo indica que é um atributo aprendido durante o ajuste, e será retornado quando chamarmos `get_fitted_params()`. + +Note que podemos supor que `y` é do tipo definido na tag `y_inner_mtype`, ou seja, uma `pd.Series`. + +### Definindo o método `_predict` + +No método `_predict`, implementamos a lógica de previsão. Usamos o horizonte de previsão `fh` para determinar os índices futuros e retornamos uma série com o valor previsto para cada ponto no horizonte. + +O `fh` é um objeto do tipo `ForecastingHorizon`, que possui o método `to_absolute_index(cutoff)` para converter o horizonte relativo em índices absolutos, considerando o último ponto conhecido (`self.cutoff`). + +Retornamos um `pd.Series` com os índices e os valores previstos. + +### Usando o `CustomNaiveForecaster` + +Agora, já podemos usar o nosso modelo customizado para fazer previsões. + +```{python} +custom_naive_model = CustomNaiveForecaster() +custom_naive_model.fit(y_train) +``` + +Como passamos um dado hierárquico, o sktime converteu automaticamente para `pd.Series`, que é o mtype suportado pelo nosso modelo. Os modelos internos, para cada série, ficam disponíveis em `forecasters_`. + +```{python} +custom_naive_model.forecasters_ +``` + + +```{python} +y_pred = custom_naive_model.predict(fh=y_test.index.get_level_values(-1).unique()) + +fig, _ = plot_series( + y_train.loc[0], + y_pred.loc[0], + labels=[ + "SKU 0", + "Previsão SKU 0", + ], +) +fig.show() +``` + diff --git a/book/content/pt/part1/components_and_diff.qmd b/book/content/pt/part1/components_and_diff.qmd index a800bbf..0c4bb44 100644 --- a/book/content/pt/part1/components_and_diff.qmd +++ b/book/content/pt/part1/components_and_diff.qmd @@ -28,6 +28,44 @@ Os dados são diários, e vemos que sempre positivos. Também notamos que existe Algo que deve chamar a atenção nesse gráfico é que a magnitude da série temporal está aumentando ao longo do tempo. Isso não deve passar desapercebido, pois é um ponto importante para entendermos o que vem a seguir. +## Auto-correlação + +É interessante entender o quanto de informação o passado de uma série temporal carrega sobre o seu futuro. Uma maneira de capturar essa relação (considerando variações lineares) é através da auto-correlação. A autocorrelação para um determinado lag $k$ é definida como: + +$$ +\text{Corr}(Y_t,Y_{t-k})=\frac{\text{Cov}(Y_t,Y_{t-k})}{\sqrt{\text{Var}(Y_t)\text{Var}(Y_{t-k})}} = \frac{E[(Y_t - \mu)(Y_{t-k} - \mu)]}{\sqrt{\text{Var}(Y_t)\text{Var}(Y_{t-k})}} +$$ + +Em outras palavras, quando o valor em $k$ observações atrás está acima (ou abaixo) da média, o valor atual também tende a estar acima (ou abaixo) da média? + +Com `plot_correlations`, podemos visualizar algumas informações úteis: + +1. No plot superior, vemos a série temporal original. +2. No canto inferior esquerdo, temos o gráfico de autocorrelação (ACF), que mostra a correlação entre a série temporal e suas versões defasadas (lags). Valores próximos de 1 ou -1 indicam uma forte correlação positiva ou negativa, respectivamente. +3. No canto inferior direito, temos o gráfico de autocorrelação parcial (PACF), que mostra a correlação entre a série temporal e suas versões defasadas, controlando para as correlações intermediárias. É útil para entender o efeito isolado de um lag. + +```{python} +from sktime.utils.plotting import plot_correlations + + +fig, ax = plot_correlations(y_train, lags=60) +fig.show() +``` + +No gráfico de autocorrelação, vemos algumas características interessantes: + +1. Valores são extremamente altos, e decaem lentamente ao longo do tempo. +2. Existem oscilações claras, indicando padrões sazonais na série temporal. + +::: {.callout-tip} + + +É um erro comum usar a correlação de lags de uma série para seleção de variáveis (lags). Sempre que possível, devemos eliminar a tendência antes de analisar a autocorrelação. + +::: + +Veremos que esses padrões são indicativos de que a série temporal possui componentes importantes, e que valores passados dizem muito sobre valores futuros. + ## Componentes de séries temporais Séries temporais podem ser decompostas em 3 componentes principais: @@ -96,19 +134,12 @@ plot_series(y_train_log, labels=["Logaritmo"]) Ainda que não esteja perfeito, essa transformação estabiliza as variações da série temporal, o que é importante para alguns modelos de previsão. -```{python} -from sktime.utils.plotting import plot_correlations - - -plot_correlations(y_train, lags=60) -``` - - - ### Decompondo a série temporal -Sktime fornece algumas opções para decompor séries temporais. +Sktime fornece algumas opções para decompor séries temporais. Aqui, vamos usar o `Detrender` para remover a tendência, e o `Deseasonalizer` para remover a sazonalidade. + +#### Tendência ```{python} from sktime.transformations.series.detrend import Detrender, Deseasonalizer @@ -121,10 +152,21 @@ plot_series(y_train_detrended, labels=["Detrended"]) ``` +Vemos uma mudança importante no gráfico de autocorrelação: + ```{python} -plot_correlations(y_train_detrended, lags=60) +fig, _ = plot_correlations(y_train_detrended, lags=60) +fig.show() + ``` +O que indica que, ao eliminar a tendencia, a informação que o passado carrega sobre o futuro diminuiu bastante. Na verdade, a existência da tendência - um efeito de longo prazo - faz com que valores passados sejam altamente correlacionados com valores futuros, e pode dar a falsa impressão de que a série é "fácil" de modelar. + + +#### Sazonalidade + +Agora, usamos o `Deseasonalizer` para remover a sazonalidade: + ```{python} deseasonalizer = LogTransformer() * Deseasonalizer(model="additive", sp=365) deseasonalizer.fit(y_train) @@ -133,6 +175,8 @@ plot_series(y_train_log, y_train_deseasonalized, labels=["Log with seasonality", ``` +Podemos usar o `Detrender` e o `Deseasonalizer` juntos para remover ambos os componentes: + ```{python} remove_components = LogTransformer() * Detrender(model="additive") * Deseasonalizer(model="additive", sp=365) remove_components.fit(y_train) @@ -142,19 +186,14 @@ plot_series(y_train_log, y_train_removed, labels=["Log with seasonality", "Desea ```{python} -plot_correlations(y_train_removed, lags=60) +fig, _ = plot_correlations(y_train_removed, lags=60) +fig.show() ``` -```{python} - -remove_components = LogTransformer() * Detrender(model="additive") * Deseasonalizer(model="additive", sp=365) * Deseasonalizer(model="additive", sp=7) - -remove_components.fit(y_train) -y_train_removed = remove_components.transform(y_train) - -plot_correlations(y_train_removed, lags=60) -``` +::: {.callout-tip} +Tente adicionar mais um deseasonalizer para remover a sazonalidade semanal. +::: ## Séries estacionárias diff --git a/book/content/pt/part2/probabilistic_forecasting.qmd b/book/content/pt/part2/probabilistic_forecasting.qmd deleted file mode 100644 index 8810337..0000000 --- a/book/content/pt/part2/probabilistic_forecasting.qmd +++ /dev/null @@ -1,134 +0,0 @@ -# Forecast probabilístico - - -```{python} -# | echo: false -import warnings - -warnings.filterwarnings("ignore") -``` - -```{python} -# | code-fold: true -import pandas as pd -import matplotlib.pyplot as plt - -from sktime.utils.plotting import plot_series - -``` - -```{python} -from tsbook.datasets.retail import SyntheticRetail -dataset = SyntheticRetail("panel") -y_train, X_train, y_test, X_test = dataset.load( - "y_train", "X_train", "y_test", "X_test" -) -``` - - - -When forecasting for retail, we often interested in the uncertainty of the forecasts. - -* Safety stock -* Predict probability of stockouts - -```{python} -from sktime.registry import all_estimators - -all_estimators("forecaster", filter_tags={"capability:pred_int": True}, as_dataframe=True) -``` - -```{python} -from sktime.forecasting.auto_reg import AutoREG -from sktime.transformations.series.difference import Differencer -from sktime.transformations.series.fourier import FourierFeatures -from sktime.forecasting.conformal import ConformalIntervals - -fourier_features = FourierFeatures( - sp_list=[365.25, 365.25 / 12], fourier_terms_list=[1, 1], freq="D" -) -auto_reg = fourier_features ** (Differencer() * AutoREG()) - - -conformal_forecaster = ConformalIntervals( - forecaster=auto_reg, initial_window=365 * 2, sample_frac=0.5 -) -``` - -```{python} -parallel_config = { - "backend:parallel": "joblib", - "backend:parallel:params": {"backend": "loky", "n_jobs": -1}, - } - -conformal_forecaster.set_config( - **parallel_config -) - -conformal_forecaster.fit(y_train) -``` - -```{python} - -fh = y_test.index.get_level_values(-1).unique() -y_pred_int = conformal_forecaster.predict_interval(fh=fh, coverage=0.9) -``` - -```{python} -y_pred_int -``` - -```{python} -plot_series( - y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", - pred_interval=y_pred_int.loc[10], markers=[None]*2 -) -``` - -There are negative values in the data, which do not make sense for our problem. - -We can use a model that predicts a distribution that does not allow negative values, such as the **negative binomial distribution**. - -```{python} -from prophetverse import Prophetverse, PiecewiseLinearTrend, MAPInferenceEngine - - -prophet = Prophetverse( - trend=PiecewiseLinearTrend(changepoint_interval=365), - likelihood="negbinomial", - inference_engine=MAPInferenceEngine() -) - -prophet.set_config( - **parallel_config -) - -prophet.fit(y_train, X_train) -``` - -```{python} -y_pred_int_prophetverse = prophet.predict_interval(fh=fh, X=X_test, coverage=0.9) -``` - -```{python} -plot_series( - y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", - pred_interval=y_pred_int_prophetverse.loc[10], markers=[None]*2 -) - -plt.show() -``` - -### Example of metric for probabilistic forecasting - -```{python} -from sktime.performance_metrics.forecasting.probabilistic import PinballLoss - -pinball_loss = PinballLoss() - -pd.DataFrame( - {"Conformal": pinball_loss(y_true=y_test, y_pred=y_pred_int), - "Prophetverse Negbinomial": pinball_loss(y_true=y_test, y_pred=y_pred_int_prophetverse)}, - index=["Pinball Loss"] -) -``` diff --git a/book/content/pt/part4/sktime_custom.qmd b/book/content/pt/part4/sktime_custom.qmd deleted file mode 100644 index b5a1c5a..0000000 --- a/book/content/pt/part4/sktime_custom.qmd +++ /dev/null @@ -1 +0,0 @@ -# Criando modelos customizados com sktime \ No newline at end of file diff --git a/book/cover.png b/book/cover.png deleted file mode 100644 index e1f5bc61d11049afe5b5dc2a67a3a32f406be964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51194 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

sLQu|F-aZhE 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�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 Vyw!|9>LU1OnX%cT*addJ{|^#&e**vj diff --git a/book/index.qmd b/book/index.qmd index 2062215..5b3e68a 100644 --- a/book/index.qmd +++ b/book/index.qmd @@ -1,5 +1,7 @@ -# Preface {.unnumbered} +# Prefácio {.unnumbered} -This is a Quarto book. +Esse é um pequeno livro feito para o workshop de sktime na Python Brasil 2025. O objetivo é apresentar os conceitos básicos de séries temporais e como usar o sktime para modelagem e previsão. -To learn more about Quarto books visit . +Esse livro é raso em diversos aspectos, mas pode ser útil como ponto de partida para quem quer aprender mais sobre séries temporais em Python. + +Caso queira contribuir para sktime, visite o [repositório oficial no GitHub](https://github.com/sktime/sktime) e participe do nosso [Discord](https://discord.com/invite/54ACzaFsn7). diff --git a/book/intro.qmd b/book/intro.qmd deleted file mode 100644 index 3d07efe..0000000 --- a/book/intro.qmd +++ /dev/null @@ -1,2 +0,0 @@ -# Introduction - diff --git a/book/summary.qmd b/book/summary.qmd deleted file mode 100644 index b450ab7..0000000 --- a/book/summary.qmd +++ /dev/null @@ -1,3 +0,0 @@ -# Summary - -In summary, this book has no content whatsoever. diff --git a/convert_qmd_to_ipynb.sh b/convert_qmd_to_ipynb.sh new file mode 100644 index 0000000..b9f759f --- /dev/null +++ b/convert_qmd_to_ipynb.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# Converts every .qmd file under book/content/pt/ into an equivalent .ipynb +# notebook, preserving the relative folder structure inside the notebooks/ +# directory. Requires Quarto to be installed and available on the PATH. + +set -euo pipefail + +INPUT_ROOT="book/content/pt" +OUTPUT_ROOT="notebooks" + +if ! command -v quarto >/dev/null 2>&1; then + echo "Error: quarto command not found. Please install Quarto." >&2 + exit 1 +fi + +if [ ! -d "$INPUT_ROOT" ]; then + echo "Error: input directory '$INPUT_ROOT' does not exist." >&2 + exit 1 +fi + +while IFS= read -r -d '' qmd_file; do + rel_path="${qmd_file#$INPUT_ROOT/}" + rel_dir="$(dirname "$rel_path")" + base_name="$(basename "$rel_path" .qmd)" + target_dir="$OUTPUT_ROOT/$rel_dir" + target_file="$target_dir/$base_name.ipynb" + + mkdir -p "$target_dir" + quarto convert "$qmd_file" --output "$target_file" + echo "Converted $qmd_file -> $target_file" +done < <(find "$INPUT_ROOT" -type f -name '*.qmd' -print0) diff --git a/panel.qmd b/panel.qmd deleted file mode 100644 index 79147da..0000000 --- a/panel.qmd +++ /dev/null @@ -1,454 +0,0 @@ ---- -title: 'Sktime workshop: Pycon Colombia 2025 (Part 2)' -jupyter: python3 ---- - - -![](imgs/sktime-logo.png) - -2. **Forecasting panel data with sktime** (30 min) - 1. Data representation for panel data - 2. Upcasting feature in sktime - 3. Probabilistic forecasting - 4. Panel forecasting with Machine Learning models - - -## 2.1. Loading the data - - -```{python} -import warnings -import pandas as pd -import matplotlib.pyplot as plt - -warnings.filterwarnings("ignore") -``` - -```{python} -from pycon_workshop.dataset import PyConWorkshopDataset - -dataset = PyConWorkshopDataset("panel") - -y_train, y_test, X_train, X_test = dataset.load("y_train", "y_test", "X_train", "X_test") - -display(y_train) -``` - -```{python} -display(X_train) -``` - -```{python} -from sktime.utils.plotting import plot_series - -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, :10].plot(ax=ax, alpha=0.4) -ax.legend([]) -plt.show() -``` - -```{python} -from sktime.utils.plotting import plot_series - -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.unstack(level=0).droplevel(0, axis=1).iloc[:, [0,10]].plot(ax=ax, alpha=0.7) -plt.show() -``` - -#### 2.1.1. Pandas for multiindex data - -To work with such data structures, it is important to revisit some pandas operations. - -```{python} -y_train.index.get_level_values(-1) -``` - -In pandas, the following operations are useful: - -```{python} -y_train.index -``` - -```{python} -y_train.index.get_level_values(0).unique() -``` - -```{python} -y_train.loc[0] -``` - -```{python} -y_train.loc[pd.IndexSlice[[0,2], :]] -``` - -```{python} -fh = y_test.index.get_level_values(1).unique() -``` - -```{python} -fh -``` - -## 2.2. Automatic upcasting - -Have you ever dreamed of a world that you do not need to change code to switch between univariate and panel data? - -**No extra lines needed!** Automatically upcast to panel data when using `sktime` estimators. - -```{python} -from sktime.forecasting.naive import NaiveForecaster - - -naive_forecaster = NaiveForecaster(strategy="last", window_length=1) -naive_forecaster.fit(y_train) -y_pred_naive = naive_forecaster.predict(fh=fh) - -y_pred_naive -``` - -* Internally, sktime creates one clone of the estimator for each series in the panel data -* Then it fits each clone to the corresponding series. - -```{python} -naive_forecaster.forecasters_.head() -``` - -**This is extremely useful for clean code and rapid prototyping!** - - -#### Metrics - -Now that we have multiple series, we need to explain to the metric how to handle this! - -* Use `multilevel="uniform_average_time"` to average the time series across the panel. -* Use `multilevel="raw_values"` to obtain the error per series. - -```{python} -from sktime.performance_metrics.forecasting import MeanSquaredScaledError - -metric = MeanSquaredScaledError(multilevel="uniform_average_time") -``` - -```{python} -metric(y_true=y_test, y_pred=y_pred_naive, y_train=y_train) -``` - -## 2.3. Machine learning models for timeseries forecasting - -* We can apply ML Regressors to time series forecasting. -* We call this process **reduction** - -![](imgs/global_reduction.png) - -The `WindowSummarizer` creates the set of temporal tabular features for the ML model. - -```{python} -from sktime.transformations.series.summarize import WindowSummarizer - -summarizer = WindowSummarizer( - lag_feature={ - "lag" : list(range(1,20)), - "std" : [list(range(1,20))], - }, -) - -summarizer.fit_transform(y_train, X_train) -``` - -* How to compute forecasts for multiple steps ahead? -* We can use two approaches: - * `RecursiveTabularRegressionForecaster`: recursively predicts the next value and uses it as input for the next prediction. - * `DirectTabularRegressionForecaster`: creates a separate model for each step ahead. - -```{python} -from sktime.forecasting.compose import RecursiveTabularRegressionForecaster -from sklearn.ensemble import RandomForestRegressor - -global_forecaster1 = RecursiveTabularRegressionForecaster( - RandomForestRegressor(n_estimators=20, random_state=42), - pooling="global", - window_length=None, - transformers=[summarizer] -) - -global_forecaster1.fit(y_train, X_train) -``` - -```{python} -global_forecaster1.get_params() -``` - -```{python} -y_pred_global1 = global_forecaster1.predict(fh=fh, X=X_test) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.loc[10, "sales"].plot(ax=ax, label="Train") -y_test.loc[10, "sales"].plot(ax=ax, label="Test") -y_pred_global1.loc[10, "sales"].plot(ax=ax, label="Global 1") -plt.legend() -plt.show() -``` - -### Feature engineering is important! - -* We should not think that ML models learn everything by themselves. -* We have to think as they think. They see values, not time series. -* The **scale becomes a feature** that allows the model to identify which series is it forecasting. -* We can standardize the different series to make them comparable. - -```{python} -metric(y_true=y_test, y_pred=y_pred_global1, y_train=y_train) -``` - -```{python} -from sklearn.preprocessing import StandardScaler - - -global_forecaster2 = StandardScaler() * global_forecaster1 - -global_forecaster2.fit(y_train, X_train) -``` - -```{python} -y_pred_global2 = global_forecaster2.predict(fh=fh, X=X_test) -``` - -```{python} -metric(y_true=y_test, y_pred=y_pred_global2, y_train=y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.loc[0].plot(ax=ax, label="Train") -y_test.loc[0].plot(ax=ax, label="Test") -y_pred_global2.loc[0].plot(ax=ax, label="Global 1") -``` - -* Only scaling each timeseries allows the model to learn accross them... -* They cannot forecast out of the scale of the training data. -* How can 2022's and 2023's autoregressive behaviour be used together to enhance the model, without having the level as a feature? - -```{python} -from sktime.transformations.series.difference import Differencer -from sktime.transformations.series.boxcox import LogTransformer - -global_forecaster3 = Differencer() * global_forecaster2 -global_forecaster3.fit(y_train, X_train) -``` - -```{python} -y_pred_global3 = global_forecaster3.predict(fh=fh, X=X_test) -metric(y_true=y_test, y_pred=y_pred_global3, y_train=y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.loc[0].plot(ax=ax, label="Train") -y_test.loc[0].plot(ax=ax, label="Test") -y_pred_global3.loc[0].plot(ax=ax, label="Global 4") -fig.show() -``` - -### Exogenous pipelines also for panel data! - -```{python} -from sktime.transformations.series.fourier import FourierFeatures - -fourier_features = FourierFeatures(sp_list=[365.25, 365.25/12], fourier_terms_list=[1, 1], freq="D") - -global_forecaster4 = fourier_features ** global_forecaster3 -global_forecaster4.fit(y_train, X_train) -``` - -```{python} -y_pred_global4 = global_forecaster4.predict(fh=fh, X=X_test) -metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) -``` - -```{python} -metric(y_true=y_test, y_pred=y_pred_global4, y_train=y_train) -``` - -## 2.4. Probabilistic forecasting - -When forecasting for retail, we often interested in the uncertainty of the forecasts. - -* Safety stock -* Predict probability of stockouts - -```{python} -from sktime.registry import all_estimators - -all_estimators("forecaster", filter_tags={"capability:pred_int": True}, as_dataframe=True) -``` - -```{python} -from sktime.forecasting.auto_reg import AutoREG -from sktime.transformations.series.difference import Differencer -from sktime.transformations.series.fourier import FourierFeatures -from sktime.forecasting.conformal import ConformalIntervals - -fourier_features = FourierFeatures( - sp_list=[365.25, 365.25 / 12], fourier_terms_list=[1, 1], freq="D" -) -auto_reg = fourier_features ** (Differencer() * AutoREG()) - - -conformal_forecaster = ConformalIntervals( - forecaster=auto_reg, initial_window=365 * 2, sample_frac=0.5 -) -``` - -```{python} -parallel_config = { - "backend:parallel": "joblib", - "backend:parallel:params": {"backend": "loky", "n_jobs": -1}, - } - -conformal_forecaster.set_config( - **parallel_config -) - -conformal_forecaster.fit(y_train) -``` - -```{python} -y_pred_int = conformal_forecaster.predict_interval(fh=fh, coverage=0.9) -``` - -```{python} -y_pred_int -``` - -```{python} -plot_series( - y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", - pred_interval=y_pred_int.loc[10], markers=[None]*2 -) -``` - -There are negative values in the data, which do not make sense for our problem. - -We can use a model that predicts a distribution that does not allow negative values, such as the **negative binomial distribution**. - -```{python} -from prophetverse import Prophetverse, PiecewiseLinearTrend, MAPInferenceEngine - - -prophet = Prophetverse( - trend=PiecewiseLinearTrend(changepoint_interval=365), - likelihood="negbinomial", - inference_engine=MAPInferenceEngine() -) - -prophet.set_config( - **parallel_config -) - -prophet.fit(y_train, X_train) -``` - -```{python} -y_pred_int_prophetverse = prophet.predict_interval(fh=fh, X=X_test, coverage=0.9) -``` - -```{python} -plot_series( - y_train.loc[10], y_test.loc[10], labels=["Train", "Test"], title="Panel data", - pred_interval=y_pred_int_prophetverse.loc[10], markers=[None]*2 -) - -plt.show() -``` - -### Example of metric for probabilistic forecasting - -```{python} -from sktime.performance_metrics.forecasting.probabilistic import PinballLoss - -pinball_loss = PinballLoss() - -pd.DataFrame( - {"Conformal": pinball_loss(y_true=y_test, y_pred=y_pred_int), - "Prophetverse Negbinomial": pinball_loss(y_true=y_test, y_pred=y_pred_int_prophetverse)}, - index=["Pinball Loss"] -) -``` - -## 2.5. Deep learning models and zero-shot forecasting - -* In addition to simple ML models, we can also use deep learning models for forecasting. -* There are some models with tailored architectures for time series forecasting. -* For example, N-BEATS is a deep learning model that can be used for forecasting. - -* **Zero-shot forecasting** is extremely useful when a new product appears, a new warehouse... etc. - -![](imgs/nbeats_simplified.png) - -```{python} -from sktime.forecasting.pytorchforecasting import PytorchForecastingNBeats -from pytorch_forecasting.data.encoders import EncoderNormalizer - -CONTEXT_LENGTH = 365 -nbeats = PytorchForecastingNBeats( - train_to_dataloader_params={"batch_size": 256}, - trainer_params={"max_epochs": 1}, - model_params={ - "stack_types": ["trend", "seasonality"], # One of the following values: “generic”, “seasonality” or “trend”. - "num_blocks" : [2,2], # The number of blocks per stack. - "context_length": CONTEXT_LENGTH, # lookback period - "expansion_coefficient_lengths" : [2, 5], - "learning_rate": 1e-3, - }, - dataset_params={ - - "max_encoder_length": CONTEXT_LENGTH, - "target_normalizer": EncoderNormalizer() - }, -) - -nbeats.fit(y_train.astype(float), fh=fh) -``` - -```{python} -y_pred_nbeats = nbeats.predict(fh=fh, X=X_test) -``` - -```{python} -metric(y_true=y_test, y_pred=y_pred_nbeats, y_train=y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -y_train.loc[10].plot(ax=ax, label="Train") -y_test.loc[10].plot(ax=ax, label="Test") -y_pred_nbeats.loc[10].plot(ax=ax, label="N-BEATS") -fig.show() -``` - -```{python} -new_y_train = (y_train.loc[0]**2 + y_train.loc[20]).astype(float) -new_y_test = (y_test.loc[0]**2 + y_test.loc[20]).astype(float) - -# Plotting the new series -fig, ax = plt.subplots(figsize=(10, 4)) -new_y_train["sales"].plot.line(ax=ax, label="New Train") -new_y_test["sales"].plot.line(ax=ax, label="New Test") -fig.show() -``` - -```{python} -y_pred_zeroshot = nbeats.predict(fh=fh, y=new_y_train) -``` - -```{python} -fig, ax = plt.subplots(figsize=(10, 4)) -new_y_train["sales"].plot.line(ax=ax, label="New Train") -new_y_test["sales"].plot.line(ax=ax, label="New Test") -y_pred_zeroshot["sales"].plot.line(ax=ax, label="N-BEATS Zero-shot") -plt.legend() -plt.show() -``` - diff --git a/reduction.ipynb b/reduction.ipynb deleted file mode 100644 index 9337ced..0000000 --- a/reduction.ipynb +++ /dev/null @@ -1,312 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Modelos de Machine Learning" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
promo
date
2020-01-010.0
2020-01-020.0
2020-01-030.0
2020-01-040.0
2020-01-050.0
......
2024-07-011.0
2024-07-020.0
2024-07-030.0
2024-07-040.0
2024-07-050.0
\n", - "

1648 rows × 1 columns

\n", - "
" - ], - "text/plain": [ - " promo\n", - "date \n", - "2020-01-01 0.0\n", - "2020-01-02 0.0\n", - "2020-01-03 0.0\n", - "2020-01-04 0.0\n", - "2020-01-05 0.0\n", - "... ...\n", - "2024-07-01 1.0\n", - "2024-07-02 0.0\n", - "2024-07-03 0.0\n", - "2024-07-04 0.0\n", - "2024-07-05 0.0\n", - "\n", - "[1648 rows x 1 columns]" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from tsbook.datasets.retail import SyntheticRetail\n", - "from sktime.utils.plotting import plot_series\n", - "from sktime.forecasting.naive import NaiveForecaster\n", - "\n", - "dataset = SyntheticRetail(\"univariate\")\n", - "y_train, X_train, y_test, X_test = dataset.load(\n", - " \"y_train\", \"X_train\", \"y_test\", \"X_test\"\n", - ")\n", - "\n", - "X_train" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tsbook.forecasting.reduction import ReductionForecaster\n", - "from sklearn.ensemble import RandomForestRegressor\n", - "from sktime.transformations.series.difference import Differencer\n", - "\n", - "regressor = RandomForestRegressor(n_estimators=100, random_state=42)\n", - "model = Differencer() * ReductionForecaster(\n", - " regressor,\n", - " window_length=30,\n", - " steps_ahead=1,\n", - ")\n", - "\n", - "model.fit(y_train, X=X_train)\n", - "y_pred = model.predict(fh=y_test.index, X=X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(
, )" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_series(\n", - " y_train, y_test, y_pred, labels=[\"Treino\", \"Teste\", \"Previsão com ML + Diferença\"]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from typing import Callable, Tuple\n", - "\n", - "model = ReductionForecaster(\n", - " regressor,\n", - " window_length=30,\n", - " steps_ahead=1,\n", - " normalization_strategy=\"divide_mean\",\n", - ")\n", - "\n", - "model.fit(y_train, X=X_train)\n", - "y_pred = model.predict(fh=y_test.index, X=X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(
, )" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABSwAAAFfCAYAAABEEoKYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAApwxJREFUeJzt3QecVPXV//Ezs32XXXZBujRBUBBBsSZGsUESsJuosSWPSf4mltg1UbEnauw9eUzUJ2pssWIi2LBrbChFUQEp0nVhYfvu3P/r/Gbv7J07987c2Z3tn/frNZl2586dhuHLOb8TsizLEgAAAAAAAADoBMIdfQAAAAAAAAAAYCOwBAAAAAAAANBpEFgCAAAAAAAA6DQILAEAAAAAAAB0GgSWAAAAAAAAADoNAksAAAAAAAAAnQaBJQAAAAAAAIBOI7ujD6AriEQisnr1aikuLpZQKNTRhwMAAAAAAAB0KZZlyZYtW2Tw4MESDievoSSwDEDDyqFDh2bq8wEAAAAAAAB6pJUrV8q2226bdBsCywC0stJ+Q0tKSjLz6QAAAAAAAAA9REVFhSkItHO2ZAgsA7DbwDWsJLAEAAAAAAAAWibIcosM3QEAAAAAAADQaRBYAgAAAAAAAOg0CCwBAAAAAAAAdBqsYZlBjY2NUl9fn8ldAgDaUE5OjmRlZfEeAwAAAEAnQmCZAZZlydq1a2XTpk2Z2B0AoB2VlpbKwIEDAy38DAAAAABoewSWGWCHlf3795fCwkL+0gsAXeQfm6qqqmT9+vXm+qBBgzr6kAAAAAAABJaZaQO3w8q+ffvypQKALqSgoMCca2ipf47THg4AAAAAHY+hO61kr1mplZUAgK7H/vObNYgBAAAAoHMgsMwQ1j4DgK6JP78BAAAAZFrlV0/Jqgcny9e3F5tzvY7gCCwBAAAAAACADNFwcv2sY6R+4wKxGmvNuV4ntAyOwBIAAAAAAADIkPJ3r9ZeLh312XSLnodk07vX8B4HRGCJjJk7d65prdQhRAAAAAAAAD1RQ/kXjrDSZkl9+eIOOqKuh8Cyh9JgMdnp8ssvT3uf3/ve92TNmjXSu3fvNjlmAAAAAACAzi67bExThWW8rMKBHXI8XVF2Rx8Amj05f41cOWexfLGhUsb0K5KZU8fKkRMGtclbpMGi7dFHH5WZM2fK4sXNSX+vXr1ily3LksbGRsnOTv51yc3NlYED+fEBAAAAAICeq2yvS8yalW4NW5abdSyLRh/RIcfVlVBh2QY04KusbUjr9PBHq+ToBz6Q+Wu2SE1DxJzrdb09nf3ocwehwaJ90opIraq0r3/++edSXFws//nPf2Ty5MmSl5cnb775pkQiEfnTn/4kI0eOlIKCApk4caI88cQTvi3h999/v5SWlsrs2bNlxx13NCHoD3/4w7iwVPd55ZVXyrbbbmueZ9KkSfLCCy+0wacCAAAAAADQ9jSQzCoe5nEP61gGRYVlG6iqa5Tii//Tosc6l2NVJzz8cVqP33LNj6QoLzMf60UXXSQ33HCDbLfddlJWVmbCygcffFDuuece2X777eX111+XE044Qfr16yf77bef5z6qqqrMPv7xj39IOBw225933nny0EMPmftvvfVWufHGG+Uvf/mL7LLLLvL3v/9dDj30UFm4cKF5DgAAAAAAgK4mUrXO41bWsQyKwBK+tPLx4IMPNpdra2vlj3/8o7z00kuy9957m9s0yNTKSw0b/QLL+vp6E3COGjXKXD/99NPNfm0aZl544YVy7LHHmuvXXXedvPrqq3LLLbfInXfeyacDAAAAAAC65DqW9Rvnu24NSU7Z2A46oq6FwLINFOZmmUrHdOx9+5uycO2WuBlSoZDITgOK5e0z9knruTNlt912i13+6quvTLWkHWDa6urqTGWk7/EUFsbCSjVo0CBZv369uVxRUSGrV6+W73//+3GP0euffPJJxl4HAAAAAABAx65jqUN4LCnd6xI+iAAILNuAruOYblv25dPGmjUrNaTUZSjtc709Uy3e6SoqKopd3rp1qzl//vnnZciQIXHb6dqTfnJychLem6DrbAIAAAAAAHTVdSyzS0ZKQ8Uycz2nz45S9r3LpWj04R19aF0CQ3c6CZ0G/sTJu8nOA0skPztszv918m5yRBtNCU/XuHHjTDC5YsUKGT16dNxp6NChLdpnSUmJDB48WN5666242/W6Ph8AAAAAAEBXFc4vjV0eePizhJVpoMKyk4WWeuqMdGq4Dss5++yzzWTvffbZRzZv3mzCRQ0eTz755Bbt9/zzz5fLLrvMtI3rhPD77rtP5s2bFxvKAwAAAAAA0CVZkeaLjbUdeihdDYElArvqqqvMRHCdFr506VIpLS2VXXfdVf7whz+0+F0888wzTfB57rnnmrUttbLy2WefZUI4AAAAAADoRoFlTYceSlcTslhQMCUdDtO7d28TrGk1oVNNTY0sW7ZMRo4cKfn5+W33SQEA2gR/jgMAAABoC6v+MUnqv11kLg8+9m3JG9g83LgnqkiSr7mxhiUAAAAAAACQaVRYthiBJQAAAAAAAJBprGHZYgSWAAAAAAAAQIZZzsCygTUs00FgCQAAAAAAAGQaLeFdM7C8/PLLJRQKxZ122GGHuEEIp512mvTt21d69eolRx11lKxbty5uHytWrJDp06dLYWGh9O/fX84//3xpaGiI22bu3LlmmnVeXp6MHj1a7r///nZ7jQAAAAAAAOiBqLDsuhWW48ePlzVr1sROb775Zuy+s88+W5577jl5/PHH5bXXXpPVq1fLkUceGbu/sbHRhJV1dXXy9ttvywMPPGDCyJkzZ8a20Qneus3+++8v8+bNk7POOkt++ctfyuzZs9v9tQIAAAAAAKAHtoQ31nbosXQ12R1+ANnZMnDgwITbdcT53/72N3n44YflgAMOMLfdd999suOOO8q7774re+21l8yZM0cWLVokL730kgwYMEAmTZokV111lVx44YWmejM3N1fuueceGTlypNx4441mH/p4DUVvvvlmmTZtmucx1dbWmpNz7DoAAAAAAAAQGIFl162w/PLLL2Xw4MGy3XbbyfHHH29avNWHH34o9fX1ctBBB8W21XbxYcOGyTvvvGOu6/mECRNMWGnTEFIDxoULF8a2ce7D3sbeh5c//elP0rt379hp6NChGX/dAAAAAAAA6MasxuaLDN3pOoHlnnvuaVq4X3jhBbn77rtN+/YPfvAD2bJli6xdu9ZUSJaWlsY9RsNJvU/puTOstO+370u2jYaa1dXVnsf1+9//3lR42qeVK1dm9HUDAAAAAACgm2PoTtcMLH/0ox/JT37yE9l5551N1eO///1v2bRpkzz22GMdeVhmOE9JSUncqbtxDztyn7SlvjX7fvrppzN6vAAAAAAAAF11Dcvyd66UVQ9OlsqvnurQY+oqOrwl3EmrKceMGSNfffWVWddSh+logOmkU8LtNS/13D013L6eahsNIQsKCqSncg46uuWWW8z74bztvPPO6+hDBAAAAAAAaHMaImqY+PXtxRkNFa0GR2ev1Sj1GxfI+lnHEFp2tcBy69atsmTJEhk0aJBMnjxZcnJy5OWXX47dv3jxYrPG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lpdffrndjrmr+Prrr8372r9/f9myZUvcfRrwOj/3zu7999+XX//61+32fN35zwQAAAAA7c9qbA4sLSsza026W8BpCU8PgWUP98Mf/tAETV9++aWce+65JiT585//7LltXZ3jXxxaoaCgwIQ0QT344INyyCGHyN/+9jf56quvZI899pDuZOjQoabq1Ombb74xId+gQYMy+lwaeLqfK+h3RAO2//znP7L//vvL7373O5kxY0ZcuD1w4EDJy8uLXV+yZInss88+Mnz4cOnbt2+LjjdT37n2MHfuXFNpmC4NK2+44YaMHktjY2NCoNyW+vXrJ4WFhe32fN39zwQAAAAAHbiGZaZat2kJbxUCy07kya/nyy5P3yiF/3eROdfrbU0DJg2aNFTSSqWDDjpInn322Vh13eGHHy7XXHONDB48WMaOHWtuX7lypfz0pz81bdp9+vSRww47zIRZas6cOaYFeNOmTXHPowHXAQcc4NkS/sknn5gQrLi4WEpKSmTy5MnywQcfmPu+/fZbOe6442TIkCEmEJkwYYL885//jNt3bW2tnHnmmSYE1efWkEwrvpLRx1x44YUmLNT3QKtLNfywvfbaayYE0fs0NLzoooviwjkN/s444wxT7VhWVmYqD//3f/9XKisr5Re/+IV5LbpPDfhS0eBv48aN8tZbb8Vue+CBB2Tq1KlpBbtt/R3Rz2DXXXeVP/zhD/LMM8+Y1+YMP50t4Xr5ww8/NBW7zirRZN+dln7nnI/T4E8/Lw1IdemA+vr6QJ+5BnynnHKKjBw50gTq+ry33nprO7y7Yr5HN910k6xfv953m/LycjnppJPMd01/B1rJqv/IYLN/U/rbHTdunHl9K1asMAHq1VdfbR7bq1cv8zvXbTZs2GDeQ71t5513jv3egv7m3Jwt4XosdlWu82R/B/S3qVW622yzjfTu3Vv2228/+eijj+L2p39+/L//9//M70p/0zvttJPMmjWrTf9MAAAAANBzOdewFKuNAktawtNCYNkGLMuSyvratE7/XPKR/OTVB2R++RqpbWww53pdb09nP/rcraFhjbOqTav8tKVX147UwEADoGnTpplA7o033jAhm4YeWoWnjzvwwANNcPKvf/0rtg8Ngx599FE5/vjjPZ9Tb992221NoKAhl4aD2n6sampqTID5/PPPy4IFC0zb6Yknnij//e9/Y4+/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5z//Kb/4xS/M+fTp0/lIgE7w30INTLQlDujJ2uM3qMUq8+fPl3nz5sVOp556qqn00st77rlnO7xSoPPqyP8Wzps3z7SKdwsdPfUHmfGb3/zG6t27tzV37lxrzZo1sVNVVVVsm1NPPdUaNmyY9corr1gffPCBtffee5uTbf78+Va/fv3MdEXnPnSilW3p0qVWYWGhdf7555spVnfeeaeVlZVlvfDCC3yU6PHa63eoPv74Y3OaPHmy9bOf/cxcXrhwYY//DNCztddv8KGHHrKys7PNfwOd2+jER6Cna6/f4R133GE9++yz1hdffGFO9957r1VcXGxdfPHF7f6agZ76/0edmBIOtP/v8Oabb7aefvpp68svvzTb/+53v7PC4bD10ksvdYuPg8Cym9Ds2et03333xbaprq62fvvb31plZWUmdDziiCPMF975HxmvfQwfPjzuuV599VVr0qRJVm5urrXddtvFPQfQk7Xn7zDINkBP016/wf32289zm5NPPrndXzPQU3+Ht912mzV+/Hjz+JKSEmuXXXax7rrrLquxsbHdXzPQU///qBOBJdD+v8PrrrvOGjVqlJWfn2/16dPHmjJliglAu4uQ/k9HV3kCAAAAAAAAgGINSwAAAAAAAACdBoElAAAAAAAAgE6DwBIAAAAAAABAp0FgCQAAAAAAAKDTILAEAAAAAAAA0GkQWAIAAAAAAADoNAgsAQAAAAAAAHQaBJYAAAAAAAAAOg0CSwAAAAAAAACdBoElAAAAAAAAgE6DwBIAAAAAAACAdBb/H9I/G9WAq18IAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_series(\n", - " y_train, y_test, y_pred, labels=[\"Treino\", \"Teste\", \"Previsão com ML + Diferença + Normalização\"]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tsbook.forecasting.reduction import ReductionForecaster\n", - "from typing import Optional\n", - "\n", - "\n", - "model = ReductionForecaster(\n", - " regressor,\n", - " window_length=30,\n", - " steps_ahead=12,\n", - " normalization_strategy=\"divide_mean\",\n", - ")\n", - "\n", - "model.fit(y_train, X=X_train)\n", - "y_pred = model.predict(fh=y_test.index, X=X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(
, )" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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pVZWvvjii0wIBwAAAAAAnSiwrG7TQ+loAhEWFExJh8P06NHDBGtaTWhXXV0tK1askBEjRkh+fn7LvVMAgBbBn+MAAAAAWsKaf0yUuu+XmN8H/fhdyRvQONy4KypLkq85sYYlAAAAAAAAkGlUWDYZgSUAAAAAAACQaaxh2WQElgAAAAAAAECGReyBZT1rWKaDwBIAAAAAAADINFrCO2Zgec0110ggEIj72XnnneMGIZxzzjnSu3dv6d69u5x44omyYcOGuH2sWrVKjjrqKCksLJR+/frJpZdeKvX19XHbzJs3z0yzzsvLk1GjRslDDz3Uaq8RAAAAAAAAXRAVlh23wnLcuHGybt262M9//vOf2H0XXnihvPTSS/L000/LW2+9JWvXrpUTTjghdn8oFDJhZW1trbz77rvy8MMPmzBy5syZsW10grduc/DBB8uCBQvkggsukLPOOkvmzJnT6q8VAAAAAAAAXbAlPFTTpsfS0WS3+QFkZ8uAAQMSbtcR53/729/ksccek0MOOcTc9uCDD8ouu+wi8+fPl3333Vfmzp0rS5Yskddee0369+8vEydOlOuvv15++9vfmurN3NxceeCBB2TEiBEya9Yssw99vIait99+u0ybNs31mGpqasyPfew6AAAAAAAA4BuBZcetsPz6669l0KBBsuOOO8qpp55qWrzVxx9/LHV1dXLYYYfFttV28aFDh8p7771nruvl+PHjTVhp0RBSA8bFixfHtrHvw9rG2oebG2+8UXr06BH7GTJkSMZfNwAAAAAAADqxSKjxV4budJzAcp999jEt3K+88orcf//9pn37gAMOkPLyclm/fr2pkOzZs2fcYzSc1PuUXtrDSut+675k22ioWVVV5XpcV1xxhanwtH5Wr16d0dcNAAAAAACATo6hOx0zsPzhD38oJ598suy2226m6vFf//qXbN26VZ566qm2PCwznKe4uDjup7NxDjty/mhLfXP2/fzzz2f0eAEAAAAAADrqGpal710nax6ZJBXfPNemx9RRtHlLuJ1WU44ePVq++eYbs66lDtPRANNOp4Rba17qpXNquHU91TYaQhYUFEhXZR90dMcdd5jzYb/tkksuaetDBAAAAAAAaHEaImqY+O3dRRkNFSP1ts7eSEjqNi+SjbNPIbTsaIHl9u3bZdmyZTJw4ECZNGmS5OTkyOuvvx67f+nS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pUvl9ddfb7Vj7ii+/fZbc1779esn5eXlcfdpwGt/39u7Dz/8UH75y1+22vN15j8TAAAAALS+SKgxsIxEMrPWpLMFnJbw9BBYdnFHHHGECZq+/vprufjii01I8sc//tF129pa2784NENBQYEJafx65JFH5Oijj5a//e1v8s0338jee+8tncmQIUNM1andd999Z0K+gQMHZvS5NPB0Ppffz4gGbP/+97/l4IMPlt/85jcyffr0uHB7wIABkpeXF7u+bNky2X///WXYsGHSu3fvJh1vpj5zrWHevHmm0jBdGlbeeuutGT2WUCiUECi3pL59+0phYWGrPV9n/zMBAAAAQBuuYZmp1m1awpuFwLIdefbbhbL787Ok8P8uN5d6vaVpwKRBk4ZKWql02GGHyYsvvhirrjvuuOPkD3/4gwwaNEjGjBljbl+9erX86Ec/Mm3avXr1kmOPPdaEWWru3LmmBXjr1q1xz6MB1yGHHOLaEv7ZZ5+ZEKyoqEiKi4tl0qRJ8tFHH5n7vv/+e/nJT34iO+ywgwlExo8fL48//njcvmtqauT88883Iag+t4ZkWvGVjD7mt7/9rQkL9RxodamGH5a33nrLhCB6n4aGl19+eVw4p8HfeeedZ6odS0pKTOXhX/7yF6moqJCf//zn5rXoPjXgS0WDv82bN8t///vf2G0PP/ywTJ06Na1gt6U/I/oe7LHHHvK73/1OXnjhBfPa7OGnvSVcf//4449Nxa69SjTZZ6epnzn74zT40/dLA1JdOqCurs7Xe64B35lnnikjRowwgbo+75133tkKZ1fM5+i2226TjRs3em5TWloqZ5xxhvms6fdAK1n1Hxks1ndKv7tjx441r2/VqlUmQL3hhhvMY7t3726+57rNpk2bzDnU23bbbbfY983vd87J3hKux2JV5dp/rM+Afje1SrdPnz7So0cPOeigg+STTz6J25/++fH//t//M98r/U7vuuuuMnv27Bb9MwEAAABA12Vfw1IiLRRY0hKeFgLLFhCJRKSiriatn8eXfSInv/mwLCxdJzWhenOp1/X2dPajz90cGtbYq9q0yk9benXtSA0MNACaNm2aCeTeeecdE7Jp6KFVePq4Qw891AQn//znP2P70DDoySeflFNPPdX1OfX2wYMHm0BBQy4NB7X9WFVXV5sA8+WXX5ZFixaZttPTTz9dPvjgg9jjL7vsMvN8GvJp8KFBlB7jli1bPF+nBjgactx1113yxRdfyJ/+9CfzOqzqxiOPPFL22msvE6bef//9JtjS4MdOn09DFz0WDZ008D355JPlBz/4gTkODRz1WCsrK5Oec23H13Pw4IMPxm7T0Od//ud/pL3S8HnChAmmNdeNVmSOGzfOVO3q75dccknKz05TP3OWN99801R16qW+N3oO7YFqsvdcqxH1M/j000/LkiVLZObMmSaYfeqpp6SlafhmLcfgRQNZDRU1bHzvvffM91w/o/ZAVj9nN998s/z1r3+VxYsXx8Lu22+/Xfbbbz/59NNPzTID+pnUc3HaaaeZz+nIkSPNdevPDj/fuVRLPuh7bv3oOc/OzjbHYFWUagv3f/7zH5k/f77stNNO5rVYbfH6Xmggq++zVlLq+6FLJmRlZbXonwkAAAAAurBwC7SEs4Zls2Q37+FwU1lfK8WP/L5JJyfiuDzt7cfSenzZaX+Qbjl56T9vJGKCojlz5pjwzaJrEGoAoqGa0gBBAwW9TaumlAZtGlJqS6yGdD/+8Y/lscceMxVrSverFVMnnnii63NrJdill14qO++8s7muAYZFq6g07LLosekxapCkFZBa0aiBogZT1vqJWumoYZeGjLpfJ10/Ux+v22hFqdpxxx1j9993332mCu+ee+4xr1GPS9fK0+o8DbKCwWjOr4HdlVdeaX6/4oorTKiiAeYvfvELc5tuq8f2+eefm+EzyWg4ecABB5iqPg1tt23bZiov2/M6hnpe9LW50YpMDak0ENTf/X52mvqZU1p9qO+ZBlt6bBrO6WdP349U77kG5Ndee23sulZaajCoj9HKzpZkrWGqLc4XXnihCRDttJJSg0oN8DQMV48++qj5jGpFq4bkSsNL/ezq59JOw0CtVrR/JjWMtx6nn+vJkyfLhg0bYpW0yb5zfv7RQ3+UBsha6fq///u/pqpSWZXWlj//+c/mvdSqZv3Mv/baayZ81FB59OjRCe9VS/yZAAAAAKBri6uwzNg0b8calpmq3OwiCCy7OK1g01BJww4NhX7605/GhWTabmkFR0orDnXNOK12s9OqJw0nlFYLakCnIZ+29Wq4ouGR12Twiy66SM466ywzREPDJA1SrNBGqzM17NAwQisftaJO2z2t9fL0OfXYreotK3zS4EIDDzcLFiwwoZa2orrRx2mAY4VjSve/fft2WbNmjQwdOtTcpq20Ft2ftiHr+bJoO6tK1upr0ZBJg9pnnnnGVAhqxZgGfs2l505/LFVVVaaq7dxzz43dphVs1mtKN+S2n6NU/Hx2mvqZU1rRaVXhKW0NX7hwoa/3XN17771mmJAG6Hqe9LOWarq5VaFpfVb1s2m/TasYH3jgAUlFq/+0bfmqq64yYb/z86ifhX322Sd2m37WtG3d/hnXc2b/TFrst1mfSa/PqQaWqb5zflmhu3737SGhBqMa9GvYrM+pz6fVoXrerfdKq12tsNKpJf5MAAAAANC1xQ/dydAgYlrCm4XAsgUUZueaSsd0/GD23bJ46/pYZaUKSEB2Lekv/z3qvLSeOx26dqRWI2nYoeGiMyTTajc7De20HVNDSLfBG0qrtzRwfOKJJ0yb9HPPPZd00IsGpBqUaounrouo06X1sccff7wZAKRVh7o+noYsejy6bmRzhrFY1V/NZbWtW6xJ2vbryu/wE62y1NBMA0S/7bepnH322XEVghoma6XrCSecELtN3/em0PBHKxH98vPZaepnzuv9sM59qvdcP29atTdr1iwTVms4qp+9999/P+njNFyz6LZarahBnEXXZPVLqyz1uZtaAaiv0S1AdvtMJvucZuI7p6Gitobr69cKSjttB9d1KPU5dE1NXW9TX7e1/1TvVUv8mQAAAACga4uEW6DCksCyWQgsW4AGAOm2ZV+9+zSzZqWGlBGJxC719qa0ePulf9nX9d380qEruh6lro+XLIzRYEwDJq2U0hZqrbJKRqup9EdbYnVNP2351cBS22B1OIhWqlmhirb36mARpcGohq26nYYfSqurdD1MDTHcaMih+9EWVKs92G6XXXYx69/ZKwh1/xpi6etpKRraamim1ZbW62suHVCjP84J7em8527eeOMNU72o71emPzuZelw677nVbv3rX/86dpu9etOL/Txq9a0G/k09t1oBqEGyruHq/DzqwCcNRK2WcA38dJ3PTH1O7FJ95/zQz4V+PnTdTR1649y/tq5rq7o1UEmHTtkrQvVc6nO6VVm2xJ8JAAAAALq26tVvxn6vWv2GVHzznHQbdXyz9ulsAaclPD0M3WknThg+Xp4+eIaM7zVA8rOyzeUzh8yQ44c1tm62BxpE6jqNGhjoAJQVK1aYijKdyKshg307HXah055POukkU0XlRltvtT1Z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HSdLly6N26a6ulrOOecc6d27t3Tv3l1OPPFE2bBhQ+z+zz77TH7yk5/IkCFDpKCgQHbZZRe58847E55r3rx5sscee0heXp6MGjVKHnrooVZ5jUB711rfw3Xr1slPf/pTGT16tASDQbngggta7TUC7VlrfQefffZZOfzww6Vv375SXFwskydPljlz5rTa6wTas9b6Hv7nP/+R/fbbz+xDt9l5553l9ttvb7XXCbRXrfn3Qst///tfyc7OlokTJ7boawM6itb6Hs6bN08CgUDCz/r166UzILDsJN566y3zYZ8/f768+uqrUldXJ1OnTpWKiorYNhdeeKG89NJL8vTTT5vt165dKyeccELs/o8//th8mR555BFZvHix/P73v5crrrhC7rnnntg2K1askKOOOkoOPvhgWbBggQlKzjrrLP6iBrTi97CmpsYEJVdeeaVMmDCBcw+08n8L3377bRNY/utf/zLb638Tjz76aPn00095L9Dltdb3sFu3bnLuueea7+MXX3xh/puoP3/+85+7/HuArq21voOWrVu3yhlnnCGHHnpoq71GoL1r7e/h0qVLTVGL9aOP6xQi6JQ2btwY0bf3rbfeMte3bt0aycnJiTz99NOxbb744guzzXvvvee5n1//+teRgw8+OHb9sssui4wbNy5um1NOOSUybdq0FnkdQEfWUt9Du4MOOijym9/8pgWOHuj4WuM7aBk7dmzk2muvzeDRA51Da34Pjz/++Mhpp52WwaMHOr6W/g7q3wWvvPLKyNVXXx2ZMGFCC70KoGNrqe/hm2++aR5TWloa6YyosOyktm3bZi579eoVS+c11T/ssMNi22jrzNChQ+W9995Luh9rH0q3te9DTZs2Lek+gK6qpb6HANrXdzAcDkt5eTnfU6ANv4da4fzuu+/KQQcdxPsAtNJ38MEHH5Tly5fL1VdfzTkH2vC/hRMnTpSBAweaDiBdoqGzyG7rA0Dm6V+ctFVb1/XZddddzW26hkFubq707Nkzbtv+/ft7rm+g/6fvySeflJdffjl2m26rj3Huo6ysTKqqqszaCgBa9nsIoG3/W+h06623yvbt2+VHP/oRbw3Qyt/DwYMHy6ZNm6S+vl6uueYas1QRgJb/Dn799ddy+eWXyzvvvGPWrwTQ+t/DgQMHygMPPCB77rmnWTbsr3/9q0yZMkXef/99M3eko+NPlk5I10pYtGiRWYy8qfTxxx57rPnXMl1rAQDfQ6Ajaa3/Fj722GNy7bXXygsvvNB51gsCOtD3UMMS/QcDXSdMwxMdCKlDCgC03HcwFAqZAZD63z8dAgmgbf5bOGbMGPNj+cEPfiDLli0zQ+j+8Y9/dPi3hcCyk9HFx2fPnm0WINd/cbYMGDBAamtrzaLI9hRfp1DpfXZLliwxiyb/8pe/NIuX2+m29slV1j50SirVlUDrfA8BtO1/Cy1PPPGEqebSxdKdy6UAXV1rfQ9HjBhhLsePH2/2oVWWBJZAy34HdRmUjz76yCzFoM9jVZFFIhFTbTl37lw55JBDeBvQ5bXF3wv33nvvZoWj7QlrWHYS+h8H/TI899xz8sYbb8T+z5tl0qRJkpOTI6+//nrcJKlVq1bJ5MmTY7fp9Cmddjpjxgz5wx/+kPA8uq19H0qnXtn3AXRVrfU9BND238HHH39cfv7zn5vLo446ircEaAf/LdTARFvigK6sNb6DWqyycOFCWbBgQezn7LPPNpVe+vs+++zTCq8UaL/a8r+FCxYsMK3inUJbT/1BZvzqV7+K9OjRIzJv3rzIunXrYj+VlZWxbc4+++zI0KFDI2+88Ubko48+ikyePNn8WBYuXBjp27evma5o34dOtLIsX748UlhYGLn00kvNFKt77703kpWVFXnllVd4K9Hltdb3UH366afmZ9KkSZGf/vSn5vfFixd3+fcAXVtrfQcfffTRSHZ2tvlvoH0bnfgIdHWt9T285557Ii+++GLkq6++Mj9//etfI0VFRZHf//73rf6aga76/0ftmBIOtP738Pbbb488//zzka+//tps/5vf/CYSDAYjr732Wqd4OwgsOwnNnt1+Hnzwwdg2VVVVkV//+teRkpISEzoef/zx5gNv/4+M2z6GDRsW91xvvvlmZOLEiZHc3NzIjjvuGPccQFfWmt9DP9sAXU1rfQcPOugg121mzJjR6q8Z6Krfw7vuuisybtw48/ji4uLI7rvvHrnvvvsioVCo1V8z0FX//6gdgSXQ+t/Dm2++OTJy5MhIfn5+pFevXpEpU6aYALSzCOj/tHWVJwAAAAAAAAAo1rAEAAAAAAAA0G4QWAIAAAAAAABoNwgsAQAAAAAAALQbBJYAAAAAAAAA2g0CSwAAAAAAAADtBoElAAAAAAAAgHaDwBIAAAAAAABAu0FgCQAAAAAAAKDdILAEAAAAAAAA0G4QWAIAAAAAAABoNwgsAQAAAAAAAEh78f8Bp84fOOYVIKQAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_series(\n", - " y_train,\n", - " y_test,\n", - " y_pred,\n", - " labels=[\"Treino\", \"Teste\", \"Previsão com ML + Diferença + Normalização\"],\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "tsbook-py3.11", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file From 410a89e54f5204019fee413bb9f8b074b7621984 Mon Sep 17 00:00:00 2001 From: felipeangelimvieira Date: Tue, 21 Oct 2025 08:19:52 -0300 Subject: [PATCH 10/10] update --- .github/workflows/docs.yml | 100 + book/content/pt/extra/sktime_custom.qmd | 22 + book/poetry.lock | 3324 ----------------- book/pyproject.toml | 21 - convert_qmd_to_ipynb.sh | 21 +- notebooks/extra/img/private_methods.png | Bin 0 -> 175551 bytes notebooks/extra/sktime_custom.ipynb | 547 +++ notebooks/part1/balls1.png | Bin 0 -> 2423849 bytes notebooks/part1/components_and_diff.ipynb | 486 +++ notebooks/part1/ets_and_ar.ipynb | 284 ++ notebooks/part1/index.ipynb | 72 + notebooks/part1/metricas.ipynb | 302 ++ notebooks/part1/naive.ipynb | 226 ++ notebooks/part2/deep_learning.ipynb | 239 ++ notebooks/part2/exog_variables.ipynb | 359 ++ .../part2/hierarchical_forecasting.ipynb | 470 +++ notebooks/part2/img/coherent_plane.png | Bin 0 -> 73996 bytes notebooks/part2/img/global_reduction.png | Bin 0 -> 33718 bytes notebooks/part2/img/hierarchical_bottomup.png | Bin 0 -> 71541 bytes .../img/hierarchical_reconciled_vs_not.png | Bin 0 -> 215254 bytes notebooks/part2/img/hierarchical_td_fcst.png | Bin 0 -> 242685 bytes notebooks/part2/img/hierarchical_topdown.png | Bin 0 -> 76105 bytes notebooks/part2/img/nbeats_simplified.png | Bin 0 -> 187315 bytes notebooks/part2/img/reduction.png | Bin 0 -> 44380 bytes notebooks/part2/ml_models.ipynb | 374 ++ notebooks/part2/panel_data.ipynb | 724 ++++ notebooks/tmp.ipynb | 0 27 files changed, 4224 insertions(+), 3347 deletions(-) create mode 100644 .github/workflows/docs.yml delete mode 100644 book/poetry.lock delete mode 100644 book/pyproject.toml mode change 100644 => 100755 convert_qmd_to_ipynb.sh create mode 100644 notebooks/extra/img/private_methods.png create mode 100644 notebooks/extra/sktime_custom.ipynb create mode 100644 notebooks/part1/balls1.png create mode 100644 notebooks/part1/components_and_diff.ipynb create mode 100644 notebooks/part1/ets_and_ar.ipynb create mode 100644 notebooks/part1/index.ipynb create mode 100644 notebooks/part1/metricas.ipynb create mode 100644 notebooks/part1/naive.ipynb create mode 100644 notebooks/part2/deep_learning.ipynb create mode 100644 notebooks/part2/exog_variables.ipynb create mode 100644 notebooks/part2/hierarchical_forecasting.ipynb create mode 100644 notebooks/part2/img/coherent_plane.png create mode 100644 notebooks/part2/img/global_reduction.png create mode 100644 notebooks/part2/img/hierarchical_bottomup.png create mode 100644 notebooks/part2/img/hierarchical_reconciled_vs_not.png create mode 100644 notebooks/part2/img/hierarchical_td_fcst.png create mode 100644 notebooks/part2/img/hierarchical_topdown.png create mode 100644 notebooks/part2/img/nbeats_simplified.png create mode 100644 notebooks/part2/img/reduction.png create mode 100644 notebooks/part2/ml_models.ipynb create mode 100644 notebooks/part2/panel_data.ipynb create mode 100644 notebooks/tmp.ipynb diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..41c67a4 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,100 @@ +name: Quarto Documentation + +on: + push: + branches: [main] + tags: [v*] + workflow_dispatch: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + actions: write + contents: write # needed for gh-pages + +jobs: + build-docs: + name: Build and Deploy Documentation + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ".[dev]" + + - name: Set PYTHONPATH + run: echo "PYTHONPATH=$GITHUB_WORKSPACE/src" >> $GITHUB_ENV + + - name: Install Quarto + uses: quarto-dev/quarto-actions/setup@v2 + + - name: Check Quarto installation + run: | + quarto check + + - name: Render Quarto site + run: | + quarto render book + + # Deploy Preview for PRs + - name: Publish PR Preview + if: github.event_name == 'pull_request' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: previews/PR${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Deploy Dev Site from main + - name: Publish Dev Site + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: dev + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Deploy Versioned Release + - name: Publish Versioned Site + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: ${{ github.ref_name }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create 'latest' alias for stable release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-') + run: | + version="${GITHUB_REF#refs/tags/}" + echo "Detected version: $version" + mkdir -p ./latest + cp -r ./docs/_site/* ./latest/ + + - name: Publish stable release to 'latest' + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-') + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./latest + destination_dir: latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/book/content/pt/extra/sktime_custom.qmd b/book/content/pt/extra/sktime_custom.qmd index 0799f0e..cb8d193 100644 --- a/book/content/pt/extra/sktime_custom.qmd +++ b/book/content/pt/extra/sktime_custom.qmd @@ -227,6 +227,7 @@ Abaixo, implementamos o `CustomNaiveForecaster` seguindo as regras do sktime (cl from sktime.forecasting.base import BaseForecaster import pandas as pd + class CustomNaiveForecaster(BaseForecaster): """ A simple naive forecaster @@ -275,8 +276,17 @@ class CustomNaiveForecaster(BaseForecaster): index=index, data=[self.value_ for _ in range(len(index))], ) + y_pred.name = self._y.name return y_pred + + # Veremos mais tarde como usar esse método + @classmethod + def get_test_params(cls, parameter_set="default"): + return [ + {"n": 1}, + {"n": 2}, + ] ``` ### Definindo o método `__init__` @@ -356,3 +366,15 @@ fig, _ = plot_series( fig.show() ``` +## Testes unitários + +O sktime também fornece uma funcionalidade que traz testes unitários prontos para validar se o modelo customizado está funcionando corretamente. + +Ele usa os hiperparâmetros retornados pelo método `get_test_params` para criar instâncias do modelo e executar uma série de testes. + +```{python} +from sktime.utils.estimator_checks import check_estimator + + +check_estimator(CustomNaiveForecaster, tests_to_exclude=["test_doctest_examples"]) +``` \ No newline at end of file diff --git a/book/poetry.lock b/book/poetry.lock deleted file mode 100644 index 6ce369e..0000000 --- a/book/poetry.lock +++ /dev/null @@ -1,3324 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. - -[[package]] -name = "anyio" -version = "4.11.0" -description = "High-level concurrency and networking framework on top of asyncio or Trio" -optional = false -python-versions = ">=3.9" -files = [ - {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, - {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -trio = ["trio (>=0.31.0)"] - -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, -] - -[[package]] -name = "argon2-cffi" -version = "25.1.0" -description = "Argon2 for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741"}, - {file = "argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" - -[[package]] -name = "argon2-cffi-bindings" -version = "25.1.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.9" -files = [ - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6"}, - {file = "argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98"}, - {file = "argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94"}, - {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e"}, - {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d"}, - {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584"}, - {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690"}, - {file = "argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520"}, - {file = "argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d"}, -] - -[package.dependencies] -cffi = {version = ">=1.0.1", markers = "python_version < \"3.14\""} - -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] - -[[package]] -name = "asttokens" -version = "3.0.0" -description = "Annotate AST trees with source code positions" -optional = false -python-versions = ">=3.8" -files = [ - {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, - {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, -] - -[package.extras] -astroid = ["astroid (>=2,<4)"] -test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "async-lru" -version = "2.0.5" -description = "Simple LRU cache for asyncio" -optional = false -python-versions = ">=3.9" -files = [ - {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, - {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, -] - -[[package]] -name = "attrs" -version = "25.4.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.9" -files = [ - {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, - {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, -] - -[[package]] -name = "babel" -version = "2.17.0" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.8" -files = [ - {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, - {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, -] - -[package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] - -[[package]] -name = "beautifulsoup4" -version = "4.14.2" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515"}, - {file = "beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e"}, -] - -[package.dependencies] -soupsieve = ">1.2" -typing-extensions = ">=4.0.0" - -[package.extras] -cchardet = ["cchardet"] -chardet = ["chardet"] -charset-normalizer = ["charset-normalizer"] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "bleach" -version = "6.2.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.9" -files = [ - {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, - {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, -] - -[package.dependencies] -tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.5)"] - -[[package]] -name = "certifi" -version = "2025.10.5" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -files = [ - {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, - {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, -] - -[[package]] -name = "cffi" -version = "2.0.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.9" -files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, -] - -[package.dependencies] -pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} - -[[package]] -name = "charset-normalizer" -version = "3.4.3" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -files = [ - {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, - {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, - {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "comm" -version = "0.2.3" -description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = false -python-versions = ">=3.8" -files = [ - {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, - {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, -] - -[package.extras] -test = ["pytest"] - -[[package]] -name = "contourpy" -version = "1.3.3" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.11" -files = [ - {file = "contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1"}, - {file = "contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381"}, - {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7"}, - {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1"}, - {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a"}, - {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db"}, - {file = "contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620"}, - {file = "contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f"}, - {file = "contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff"}, - {file = "contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42"}, - {file = "contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470"}, - {file = "contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb"}, - {file = "contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6"}, - {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7"}, - {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8"}, - {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea"}, - {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1"}, - {file = "contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7"}, - {file = "contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411"}, - {file = "contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69"}, - {file = "contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b"}, - {file = "contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc"}, - {file = "contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5"}, - {file = "contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1"}, - {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286"}, - {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5"}, - {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67"}, - {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9"}, - {file = "contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659"}, - {file = "contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7"}, - {file = "contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d"}, - {file = "contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263"}, - {file = "contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9"}, - {file = "contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d"}, - {file = "contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216"}, - {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae"}, - {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20"}, - {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99"}, - {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b"}, - {file = "contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a"}, - {file = "contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e"}, - {file = "contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3"}, - {file = "contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8"}, - {file = "contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301"}, - {file = "contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a"}, - {file = "contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77"}, - {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5"}, - {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4"}, - {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36"}, - {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3"}, - {file = "contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b"}, - {file = "contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36"}, - {file = "contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d"}, - {file = "contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd"}, - {file = "contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339"}, - {file = "contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772"}, - {file = "contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77"}, - {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13"}, - {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe"}, - {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f"}, - {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0"}, - {file = "contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4"}, - {file = "contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f"}, - {file = "contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae"}, - {file = "contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc"}, - {file = "contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b"}, - {file = "contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497"}, - {file = "contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8"}, - {file = "contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e"}, - {file = "contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989"}, - {file = "contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77"}, - {file = "contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880"}, -] - -[package.dependencies] -numpy = ">=1.25" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.17.0)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "debugpy" -version = "1.8.17" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542"}, - {file = "debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3"}, - {file = "debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4"}, - {file = "debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a"}, - {file = "debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840"}, - {file = "debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f"}, - {file = "debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da"}, - {file = "debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4"}, - {file = "debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d"}, - {file = "debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc"}, - {file = "debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf"}, - {file = "debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464"}, - {file = "debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464"}, - {file = "debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088"}, - {file = "debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83"}, - {file = "debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420"}, - {file = "debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1"}, - {file = "debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f"}, - {file = "debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670"}, - {file = "debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c"}, - {file = "debugpy-1.8.17-cp38-cp38-macosx_15_0_x86_64.whl", hash = "sha256:8deb4e31cd575c9f9370042876e078ca118117c1b5e1f22c32befcfbb6955f0c"}, - {file = "debugpy-1.8.17-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:b75868b675949a96ab51abc114c7163f40ff0d8f7d6d5fd63f8932fd38e9c6d7"}, - {file = "debugpy-1.8.17-cp38-cp38-win32.whl", hash = "sha256:17e456da14848d618662354e1dccfd5e5fb75deec3d1d48dc0aa0baacda55860"}, - {file = "debugpy-1.8.17-cp38-cp38-win_amd64.whl", hash = "sha256:e851beb536a427b5df8aa7d0c7835b29a13812f41e46292ff80b2ef77327355a"}, - {file = "debugpy-1.8.17-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e"}, - {file = "debugpy-1.8.17-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7"}, - {file = "debugpy-1.8.17-cp39-cp39-win32.whl", hash = "sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1"}, - {file = "debugpy-1.8.17-cp39-cp39-win_amd64.whl", hash = "sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f"}, - {file = "debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef"}, - {file = "debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e"}, -] - -[[package]] -name = "decorator" -version = "5.2.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.8" -files = [ - {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, - {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "executing" -version = "2.2.1" -description = "Get the currently executing AST node of a frame, and other information" -optional = false -python-versions = ">=3.8" -files = [ - {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, - {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, -] - -[package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] - -[[package]] -name = "fastjsonschema" -version = "2.21.2" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, - {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "fonttools" -version = "4.60.1" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.9" -files = [ - {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, - {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, - {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c"}, - {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea"}, - {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652"}, - {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a"}, - {file = "fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce"}, - {file = "fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038"}, - {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b4c32e232a71f63a5d00259ca3d88345ce2a43295bb049d21061f338124246f"}, - {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3630e86c484263eaac71d117085d509cbcf7b18f677906824e4bace598fb70d2"}, - {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914"}, - {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1"}, - {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d"}, - {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa"}, - {file = "fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258"}, - {file = "fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf"}, - {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7b0c6d57ab00dae9529f3faf187f2254ea0aa1e04215cf2f1a8ec277c96661bc"}, - {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:839565cbf14645952d933853e8ade66a463684ed6ed6c9345d0faf1f0e868877"}, - {file = "fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c"}, - {file = "fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401"}, - {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903"}, - {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed"}, - {file = "fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6"}, - {file = "fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383"}, - {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f68576bb4bbf6060c7ab047b1574a1ebe5c50a17de62830079967b211059ebb"}, - {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eedacb5c5d22b7097482fa834bda0dafa3d914a4e829ec83cdea2a01f8c813c4"}, - {file = "fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c"}, - {file = "fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77"}, - {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199"}, - {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c"}, - {file = "fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272"}, - {file = "fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac"}, - {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a884aef09d45ba1206712c7dbda5829562d3fea7726935d3289d343232ecb0d3"}, - {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8a44788d9d91df72d1a5eac49b31aeb887a5f4aab761b4cffc4196c74907ea85"}, - {file = "fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537"}, - {file = "fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003"}, - {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08"}, - {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99"}, - {file = "fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6"}, - {file = "fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987"}, - {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b6379e7546ba4ae4b18f8ae2b9bc5960936007a1c0e30b342f662577e8bc3299"}, - {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9d0ced62b59e0430b3690dbc5373df1c2aa7585e9a8ce38eff87f0fd993c5b01"}, - {file = "fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801"}, - {file = "fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc"}, - {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc"}, - {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed"}, - {file = "fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259"}, - {file = "fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c"}, - {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:122e1a8ada290423c493491d002f622b1992b1ab0b488c68e31c413390dc7eb2"}, - {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a140761c4ff63d0cb9256ac752f230460ee225ccef4ad8f68affc723c88e2036"}, - {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eae96373e4b7c9e45d099d7a523444e3554360927225c1cdae221a58a45b856"}, - {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:596ecaca36367027d525b3b426d8a8208169d09edcf8c7506aceb3a38bfb55c7"}, - {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ee06fc57512144d8b0445194c2da9f190f61ad51e230f14836286470c99f854"}, - {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b42d86938e8dda1cd9a1a87a6d82f1818eaf933348429653559a458d027446da"}, - {file = "fonttools-4.60.1-cp39-cp39-win32.whl", hash = "sha256:8b4eb332f9501cb1cd3d4d099374a1e1306783ff95489a1026bde9eb02ccc34a"}, - {file = "fonttools-4.60.1-cp39-cp39-win_amd64.whl", hash = "sha256:7473a8ed9ed09aeaa191301244a5a9dbe46fe0bf54f9d6cd21d83044c3321217"}, - {file = "fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb"}, - {file = "fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[[package]] -name = "h11" -version = "0.16.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.8" -files = [ - {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, - {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, - {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.16" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httpx" -version = "0.28.1" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "ipykernel" -version = "6.30.1" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4"}, - {file = "ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b"}, -] - -[package.dependencies] -appnope = {version = ">=0.1.2", markers = "platform_system == \"Darwin\""} -comm = ">=0.1.1" -debugpy = ">=1.6.5" -ipython = ">=7.23.1" -jupyter-client = ">=8.0.0" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -matplotlib-inline = ">=0.1" -nest-asyncio = ">=1.4" -packaging = ">=22" -psutil = ">=5.7" -pyzmq = ">=25" -tornado = ">=6.2" -traitlets = ">=5.4.0" - -[package.extras] -cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"] -docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] -pyqt5 = ["pyqt5"] -pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "9.6.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.11" -files = [ - {file = "ipython-9.6.0-py3-none-any.whl", hash = "sha256:5f77efafc886d2f023442479b8149e7d86547ad0a979e9da9f045d252f648196"}, - {file = "ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -ipython-pygments-lexers = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} -prompt_toolkit = ">=3.0.41,<3.1.0" -pygments = ">=2.4.0" -stack_data = "*" -traitlets = ">=5.13.0" -typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} - -[package.extras] -all = ["ipython[doc,matplotlib,test,test-extra]"] -black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[matplotlib,test]", "setuptools (>=61.2)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinx_toml (==0.0.4)", "typing_extensions"] -matplotlib = ["matplotlib (>3.7)"] -test = ["packaging", "pytest", "pytest-asyncio", "testpath"] -test-extra = ["curio", "ipykernel", "ipython[matplotlib]", "ipython[test]", "jupyter_ai", "nbclient", "nbformat", "numpy (>=1.25)", "pandas (>2.0)", "trio"] - -[[package]] -name = "ipython-pygments-lexers" -version = "1.1.1" -description = "Defines a variety of Pygments lexers for highlighting IPython code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, - {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, -] - -[package.dependencies] -pygments = "*" - -[[package]] -name = "ipywidgets" -version = "8.1.7" -description = "Jupyter interactive widgets" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, - {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, -] - -[package.dependencies] -comm = ">=0.1.3" -ipython = ">=6.1.0" -jupyterlab_widgets = ">=3.0.15,<3.1.0" -traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.14,<4.1.0" - -[package.extras] -test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "jedi" -version = "0.19.2" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, - {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, -] - -[package.dependencies] -parso = ">=0.8.4,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] - -[[package]] -name = "jinja2" -version = "3.1.6" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, - {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "joblib" -version = "1.5.2" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.9" -files = [ - {file = "joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241"}, - {file = "joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55"}, -] - -[[package]] -name = "json5" -version = "0.12.1" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5"}, - {file = "json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990"}, -] - -[package.extras] -dev = ["build (==1.2.2.post1)", "coverage (==7.5.4)", "coverage (==7.8.0)", "mypy (==1.14.1)", "mypy (==1.15.0)", "pip (==25.0.1)", "pylint (==3.2.7)", "pylint (==3.3.6)", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - -[[package]] -name = "jsonschema" -version = "4.25.1" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, - {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -rfc3987-syntax = {version = ">=1.1.0", optional = true, markers = "extra == \"format-nongpl\""} -rpds-py = ">=0.7.1" -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.9" -files = [ - {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, - {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - -[[package]] -name = "jupyter" -version = "1.1.1" -description = "Jupyter metapackage. Install all the Jupyter components in one go." -optional = false -python-versions = "*" -files = [ - {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, - {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, -] - -[package.dependencies] -ipykernel = "*" -ipywidgets = "*" -jupyter-console = "*" -jupyterlab = "*" -nbconvert = "*" -notebook = "*" - -[[package]] -name = "jupyter-client" -version = "8.6.3" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, - {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, -] - -[package.dependencies] -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = ">=5.3" - -[package.extras] -docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] - -[[package]] -name = "jupyter-console" -version = "6.6.3" -description = "Jupyter terminal console" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, - {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, -] - -[package.dependencies] -ipykernel = ">=6.14" -ipython = "*" -jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -prompt-toolkit = ">=3.0.30" -pygments = "*" -pyzmq = ">=17" -traitlets = ">=5.4" - -[package.extras] -test = ["flaky", "pexpect", "pytest"] - -[[package]] -name = "jupyter-core" -version = "5.8.1" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0"}, - {file = "jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941"}, -] - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.12.0" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.9" -files = [ - {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, - {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, -] - -[package.dependencies] -jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} -packaging = "*" -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -referencing = "*" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] -test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] - -[[package]] -name = "jupyter-lsp" -version = "2.3.0" -description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f"}, - {file = "jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245"}, -] - -[package.dependencies] -jupyter_server = ">=1.1.2" - -[[package]] -name = "jupyter-server" -version = "2.17.0" -description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = false -python-versions = ">=3.9" -files = [ - {file = "jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f"}, - {file = "jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5"}, -] - -[package.dependencies] -anyio = ">=3.1.0" -argon2-cffi = ">=21.1" -jinja2 = ">=3.0.3" -jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.11.0" -jupyter-server-terminals = ">=0.4.4" -nbconvert = ">=6.4.4" -nbformat = ">=5.3.0" -overrides = {version = ">=5.0", markers = "python_version < \"3.12\""} -packaging = ">=22.0" -prometheus-client = ">=0.9" -pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} -pyzmq = ">=24" -send2trash = ">=1.8.2" -terminado = ">=0.8.3" -tornado = ">=6.2.0" -traitlets = ">=5.6.0" -websocket-client = ">=1.7" - -[package.extras] -docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.3" -description = "A Jupyter Server Extension Providing Terminals." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, - {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, -] - -[package.dependencies] -pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} -terminado = ">=0.8.3" - -[package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] - -[[package]] -name = "jupyterlab" -version = "4.4.9" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.9" -files = [ - {file = "jupyterlab-4.4.9-py3-none-any.whl", hash = "sha256:394c902827350c017430a8370b9f40c03c098773084bc53930145c146d3d2cb2"}, - {file = "jupyterlab-4.4.9.tar.gz", hash = "sha256:ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2"}, -] - -[package.dependencies] -async-lru = ">=1.0.0" -httpx = ">=0.25.0,<1" -ipykernel = ">=6.5.0,<6.30.0 || >6.30.0" -jinja2 = ">=3.0.3" -jupyter-core = "*" -jupyter-lsp = ">=2.0.0" -jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.27.1,<3" -notebook-shim = ">=0.2" -packaging = "*" -setuptools = ">=41.1.0" -tornado = ">=6.2.0" -traitlets = "*" - -[package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.4)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.5.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)", "vega-datasets (==0.9.0)"] -test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] -upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, - {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, -] - -[[package]] -name = "jupyterlab-server" -version = "2.27.3" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, - {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, -] - -[package.dependencies] -babel = ">=2.10" -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.18.0" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.31" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - -[[package]] -name = "jupyterlab-widgets" -version = "3.0.15" -description = "Jupyter interactive widgets for JupyterLab" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, - {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, -] - -[[package]] -name = "kiwisolver" -version = "1.4.9" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.10" -files = [ - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84fd60810829c27ae375114cd379da1fa65e6918e1da405f356a775d49a62bcf"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d1d9e582ad4d63062d34077a9a1e9f3c34088a2ec5135b1f7190c07cf366527"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:deed0c7258ceb4c44ad5ec7d9918f9f14fd05b2be86378d86cf50e63d1e7b771"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1"}, - {file = "kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d"}, -] - -[[package]] -name = "lark" -version = "1.3.0" -description = "a modern parsing library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "lark-1.3.0-py3-none-any.whl", hash = "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831"}, - {file = "lark-1.3.0.tar.gz", hash = "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48"}, -] - -[package.extras] -atomic-cache = ["atomicwrites"] -interegular = ["interegular (>=0.3.1,<0.4.0)"] -nearley = ["js2py"] -regex = ["regex"] - -[[package]] -name = "markupsafe" -version = "3.0.3" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -files = [ - {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, - {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, - {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, - {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, - {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, - {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, - {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, - {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, - {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, - {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, - {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, - {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, - {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, - {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, - {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, - {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, - {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, - {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, - {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, - {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, - {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, - {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, - {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, - {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, - {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, - {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, - {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, - {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, - {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, - {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, - {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, - {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, - {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, - {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, - {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, -] - -[[package]] -name = "matplotlib" -version = "3.10.7" -description = "Python plotting package" -optional = false -python-versions = ">=3.10" -files = [ - {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, - {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, - {file = "matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1c51b846aca49a5a8b44fbba6a92d583a35c64590ad9e1e950dc88940a4297"}, - {file = "matplotlib-3.10.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a11c2e9e72e7de09b7b72e62f3df23317c888299c875e2b778abf1eda8c0a42"}, - {file = "matplotlib-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f19410b486fdd139885ace124e57f938c1e6a3210ea13dd29cab58f5d4bc12c7"}, - {file = "matplotlib-3.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:b498e9e4022f93de2d5a37615200ca01297ceebbb56fe4c833f46862a490f9e3"}, - {file = "matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a"}, - {file = "matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6"}, - {file = "matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a"}, - {file = "matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1"}, - {file = "matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc"}, - {file = "matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e"}, - {file = "matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9"}, - {file = "matplotlib-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a0edb7209e21840e8361e91ea84ea676658aa93edd5f8762793dec77a4a6748"}, - {file = "matplotlib-3.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c380371d3c23e0eadf8ebff114445b9f970aff2010198d498d4ab4c3b41eea4f"}, - {file = "matplotlib-3.10.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5f256d49fea31f40f166a5e3131235a5d2f4b7f44520b1cf0baf1ce568ccff0"}, - {file = "matplotlib-3.10.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11ae579ac83cdf3fb72573bb89f70e0534de05266728740d478f0f818983c695"}, - {file = "matplotlib-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c14b6acd16cddc3569a2d515cfdd81c7a68ac5639b76548cfc1a9e48b20eb65"}, - {file = "matplotlib-3.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:0d8c32b7ea6fb80b1aeff5a2ceb3fb9778e2759e899d9beff75584714afcc5ee"}, - {file = "matplotlib-3.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:5f3f6d315dcc176ba7ca6e74c7768fb7e4cf566c49cb143f6bc257b62e634ed8"}, - {file = "matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f"}, - {file = "matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c"}, - {file = "matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1"}, - {file = "matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632"}, - {file = "matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84"}, - {file = "matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815"}, - {file = "matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7"}, - {file = "matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355"}, - {file = "matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b"}, - {file = "matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67"}, - {file = "matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67"}, - {file = "matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84"}, - {file = "matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2"}, - {file = "matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf"}, - {file = "matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100"}, - {file = "matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f"}, - {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715"}, - {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1"}, - {file = "matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722"}, - {file = "matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866"}, - {file = "matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb"}, - {file = "matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1"}, - {file = "matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4"}, - {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318"}, - {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca"}, - {file = "matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc"}, - {file = "matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8"}, - {file = "matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5c09cf8f2793f81368f49f118b6f9f937456362bee282eac575cca7f84cda537"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:de66744b2bb88d5cd27e80dfc2ec9f0517d0a46d204ff98fe9e5f2864eb67657"}, - {file = "matplotlib-3.10.7-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53cc80662dd197ece414dd5b66e07370201515a3eaf52e7c518c68c16814773b"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68"}, - {file = "matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91"}, - {file = "matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.3.1" -numpy = ">=1.23" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=3" -python-dateutil = ">=2.7" - -[package.extras] -dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.8" -files = [ - {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, - {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mistune" -version = "3.1.4" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d"}, - {file = "mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164"}, -] - -[[package]] -name = "nbclient" -version = "0.10.2" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.9.0" -files = [ - {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, - {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.4" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.16.6" -description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, - {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = {version = "!=5.0.0", extras = ["css"]} -defusedxml = "*" -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -traitlets = ">=5.1" - -[package.extras] -all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["pyqtwebengine (>=5.15)"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] -webpdf = ["playwright"] - -[[package]] -name = "nbformat" -version = "5.10.4" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, - {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, -] - -[package.dependencies] -fastjsonschema = ">=2.15" -jsonschema = ">=2.6" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -files = [ - {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, - {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, -] - -[[package]] -name = "notebook" -version = "7.4.7" -description = "Jupyter Notebook - A web-based notebook environment for interactive computing" -optional = false -python-versions = ">=3.8" -files = [ - {file = "notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6"}, - {file = "notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a"}, -] - -[package.dependencies] -jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.4.9,<4.5" -jupyterlab-server = ">=2.27.1,<3" -notebook-shim = ">=0.2,<0.3" -tornado = ">=6.2.0" - -[package.extras] -dev = ["hatch", "pre-commit"] -docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] - -[[package]] -name = "notebook-shim" -version = "0.2.4" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, - {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - -[[package]] -name = "numpy" -version = "2.3.3" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.11" -files = [ - {file = "numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125"}, - {file = "numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48"}, - {file = "numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6"}, - {file = "numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa"}, - {file = "numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30"}, - {file = "numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57"}, - {file = "numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa"}, - {file = "numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b"}, - {file = "numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8"}, - {file = "numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20"}, - {file = "numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea"}, - {file = "numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7"}, - {file = "numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf"}, - {file = "numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb"}, - {file = "numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7"}, - {file = "numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c"}, - {file = "numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93"}, - {file = "numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae"}, - {file = "numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86"}, - {file = "numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8"}, - {file = "numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf"}, - {file = "numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19"}, - {file = "numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30"}, - {file = "numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e"}, - {file = "numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3"}, - {file = "numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea"}, - {file = "numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd"}, - {file = "numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d"}, - {file = "numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a"}, - {file = "numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe"}, - {file = "numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421"}, - {file = "numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021"}, - {file = "numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf"}, - {file = "numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0"}, - {file = "numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8"}, - {file = "numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a"}, - {file = "numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54"}, - {file = "numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e"}, - {file = "numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097"}, - {file = "numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970"}, - {file = "numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5"}, - {file = "numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f"}, - {file = "numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc"}, - {file = "numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029"}, -] - -[[package]] -name = "overrides" -version = "7.7.0" -description = "A decorator to automatically detect mismatch when overriding a method." -optional = false -python-versions = ">=3.6" -files = [ - {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, - {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, -] - -[[package]] -name = "packaging" -version = "25.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, -] - -[[package]] -name = "pandas" -version = "2.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, - {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, - {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, - {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, - {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, - {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, - {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, - {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, - {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - -[[package]] -name = "pandocfilters" -version = "1.5.1" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, - {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, -] - -[[package]] -name = "parso" -version = "0.8.5" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887"}, - {file = "parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a"}, -] - -[package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["docopt", "pytest"] - -[[package]] -name = "patsy" -version = "1.0.1" -description = "A Python package for describing statistical models and for building design matrices." -optional = false -python-versions = ">=3.6" -files = [ - {file = "patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"}, - {file = "patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4"}, -] - -[package.dependencies] -numpy = ">=1.4" - -[package.extras] -test = ["pytest", "pytest-cov", "scipy"] - -[[package]] -name = "pexpect" -version = "4.9.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, - {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pillow" -version = "11.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860"}, - {file = "pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50"}, - {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae"}, - {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9"}, - {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e"}, - {file = "pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6"}, - {file = "pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f"}, - {file = "pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f"}, - {file = "pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722"}, - {file = "pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58"}, - {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f"}, - {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e"}, - {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94"}, - {file = "pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0"}, - {file = "pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac"}, - {file = "pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd"}, - {file = "pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4"}, - {file = "pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7"}, - {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024"}, - {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809"}, - {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d"}, - {file = "pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149"}, - {file = "pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d"}, - {file = "pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8"}, - {file = "pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f"}, - {file = "pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c"}, - {file = "pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805"}, - {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8"}, - {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2"}, - {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b"}, - {file = "pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3"}, - {file = "pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51"}, - {file = "pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580"}, - {file = "pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e"}, - {file = "pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8"}, - {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59"}, - {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe"}, - {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c"}, - {file = "pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788"}, - {file = "pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31"}, - {file = "pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e"}, - {file = "pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12"}, - {file = "pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027"}, - {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77"}, - {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874"}, - {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a"}, - {file = "pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214"}, - {file = "pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635"}, - {file = "pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6"}, - {file = "pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae"}, - {file = "pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b"}, - {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477"}, - {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50"}, - {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b"}, - {file = "pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12"}, - {file = "pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db"}, - {file = "pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa"}, - {file = "pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f"}, - {file = "pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06"}, - {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a"}, - {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978"}, - {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d"}, - {file = "pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71"}, - {file = "pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada"}, - {file = "pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a"}, - {file = "pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7"}, - {file = "pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8"}, - {file = "pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -test-arrow = ["pyarrow"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "platformdirs" -version = "4.5.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.10" -files = [ - {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, - {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, -] - -[package.extras] -docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] -type = ["mypy (>=1.18.2)"] - -[[package]] -name = "prometheus-client" -version = "0.23.1" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.9" -files = [ - {file = "prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99"}, - {file = "prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.52" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, - {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "7.1.0" -description = "Cross-platform lib for process and system monitoring." -optional = false -python-versions = ">=3.6" -files = [ - {file = "psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13"}, - {file = "psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5"}, - {file = "psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3"}, - {file = "psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3"}, - {file = "psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d"}, - {file = "psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca"}, - {file = "psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d"}, - {file = "psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07"}, - {file = "psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2"}, -] - -[package.extras] -dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pyreadline", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel", "wheel", "wmi"] -test = ["pytest", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32", "setuptools", "wheel", "wmi"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -description = "Safely evaluate AST nodes without side effects" -optional = false -python-versions = "*" -files = [ - {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, - {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, -] - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "pycparser" -version = "2.23" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, - {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, -] - -[[package]] -name = "pygments" -version = "2.19.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, - {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pyparsing" -version = "3.2.5" -description = "pyparsing - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, - {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-json-logger" -version = "4.0.0" -description = "JSON Log Formatter for the Python Logging Package" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"}, - {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, -] - -[package.extras] -dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] - -[[package]] -name = "pytz" -version = "2025.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - -[[package]] -name = "pywin32" -version = "311" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, - {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, - {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, - {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, - {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, - {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, - {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, - {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, - {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, - {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, - {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, - {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, - {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, - {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, - {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, - {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, - {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, - {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, - {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, - {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, -] - -[[package]] -name = "pywinpty" -version = "3.0.2" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.9" -files = [ - {file = "pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558"}, - {file = "pywinpty-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:327790d70e4c841ebd9d0f295a780177149aeb405bca44c7115a3de5c2054b23"}, - {file = "pywinpty-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:99fdd9b455f0ad6419aba6731a7a0d2f88ced83c3c94a80ff9533d95fa8d8a9e"}, - {file = "pywinpty-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:18f78b81e4cfee6aabe7ea8688441d30247b73e52cd9657138015c5f4ee13a51"}, - {file = "pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b"}, - {file = "pywinpty-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:28297cecc37bee9f24d8889e47231972d6e9e84f7b668909de54f36ca785029a"}, - {file = "pywinpty-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:34b55ae9a1b671fe3eae071d86618110538e8eaad18fcb1531c0830b91a82767"}, - {file = "pywinpty-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3962daf801bc38dd4de872108c424b5338c9a46c6efca5761854cd66370a9022"}, - {file = "pywinpty-3.0.2.tar.gz", hash = "sha256:1505cc4cb248af42cb6285a65c9c2086ee9e7e574078ee60933d5d7fa86fb004"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.3" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, - {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, - {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, - {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, - {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, - {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, - {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, - {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, - {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, - {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, - {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, - {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, - {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, - {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, - {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, - {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, - {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, - {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, - {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, - {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, - {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, - {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, - {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, - {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, - {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, - {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, - {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, - {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, - {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, - {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, - {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, - {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, - {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, - {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, - {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, - {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, - {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, - {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, - {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, - {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, - {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, - {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, - {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, - {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, - {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, - {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, - {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, - {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, - {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, - {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, - {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, - {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, - {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, - {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, - {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, - {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, -] - -[[package]] -name = "pyzmq" -version = "27.1.0" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, - {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, - {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b"}, - {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e"}, - {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526"}, - {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1"}, - {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386"}, - {file = "pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda"}, - {file = "pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f"}, - {file = "pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32"}, - {file = "pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86"}, - {file = "pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581"}, - {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f"}, - {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e"}, - {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e"}, - {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2"}, - {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394"}, - {file = "pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f"}, - {file = "pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97"}, - {file = "pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07"}, - {file = "pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc"}, - {file = "pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113"}, - {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233"}, - {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31"}, - {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28"}, - {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856"}, - {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496"}, - {file = "pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd"}, - {file = "pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf"}, - {file = "pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f"}, - {file = "pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5"}, - {file = "pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6"}, - {file = "pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7"}, - {file = "pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05"}, - {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9"}, - {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128"}, - {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39"}, - {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97"}, - {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db"}, - {file = "pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c"}, - {file = "pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2"}, - {file = "pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e"}, - {file = "pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a"}, - {file = "pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea"}, - {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96"}, - {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d"}, - {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146"}, - {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd"}, - {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a"}, - {file = "pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92"}, - {file = "pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0"}, - {file = "pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7"}, - {file = "pyzmq-27.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18339186c0ed0ce5835f2656cdfb32203125917711af64da64dbaa3d949e5a1b"}, - {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:753d56fba8f70962cd8295fb3edb40b9b16deaa882dd2b5a3a2039f9ff7625aa"}, - {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b721c05d932e5ad9ff9344f708c96b9e1a485418c6618d765fca95d4daacfbef"}, - {file = "pyzmq-27.1.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be883ff3d722e6085ee3f4afc057a50f7f2e0c72d289fd54df5706b4e3d3a50"}, - {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e592db3a93128daf567de9650a2f3859017b3f7a66bc4ed6e4779d6034976f"}, - {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad68808a61cbfbbae7ba26d6233f2a4aa3b221de379ce9ee468aa7a83b9c36b0"}, - {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e2687c2d230e8d8584fbea433c24382edfeda0c60627aca3446aa5e58d5d1831"}, - {file = "pyzmq-27.1.0-cp38-cp38-win32.whl", hash = "sha256:a1aa0ee920fb3825d6c825ae3f6c508403b905b698b6460408ebd5bb04bbb312"}, - {file = "pyzmq-27.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:df7cd397ece96cf20a76fae705d40efbab217d217897a5053267cd88a700c266"}, - {file = "pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb"}, - {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429"}, - {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d"}, - {file = "pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345"}, - {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968"}, - {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098"}, - {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f"}, - {file = "pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78"}, - {file = "pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db"}, - {file = "pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc"}, - {file = "pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6"}, - {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90"}, - {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62"}, - {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74"}, - {file = "pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba"}, - {file = "pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066"}, - {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604"}, - {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c"}, - {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271"}, - {file = "pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355"}, - {file = "pyzmq-27.1.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:50081a4e98472ba9f5a02850014b4c9b629da6710f8f14f3b15897c666a28f1b"}, - {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:510869f9df36ab97f89f4cff9d002a89ac554c7ac9cadd87d444aa4cf66abd27"}, - {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f8426a01b1c4098a750973c37131cf585f61c7911d735f729935a0c701b68d3"}, - {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726b6a502f2e34c6d2ada5e702929586d3ac948a4dbbb7fed9854ec8c0466027"}, - {file = "pyzmq-27.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd67e7c8f4654bef471c0b1ca6614af0b5202a790723a58b79d9584dc8022a78"}, - {file = "pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f"}, - {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8"}, - {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381"}, - {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172"}, - {file = "pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9"}, - {file = "pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "referencing" -version = "0.36.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, - {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" -typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} - -[[package]] -name = "requests" -version = "2.32.5" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.9" -files = [ - {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, - {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset_normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "rfc3987-syntax" -version = "1.1.0" -description = "Helper functions to syntactically validate strings according to RFC 3987." -optional = false -python-versions = ">=3.9" -files = [ - {file = "rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f"}, - {file = "rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d"}, -] - -[package.dependencies] -lark = ">=1.2.2" - -[package.extras] -testing = ["pytest (>=8.3.5)"] - -[[package]] -name = "rpds-py" -version = "0.27.1" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef"}, - {file = "rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9"}, - {file = "rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4"}, - {file = "rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948"}, - {file = "rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998"}, - {file = "rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002"}, - {file = "rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675"}, - {file = "rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b"}, - {file = "rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52"}, - {file = "rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859"}, - {file = "rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8"}, -] - -[[package]] -name = "scikit-base" -version = "0.12.6" -description = "Base classes for sklearn-like parametric objects" -optional = false -python-versions = "<3.14,>=3.9" -files = [ - {file = "scikit_base-0.12.6-py3-none-any.whl", hash = "sha256:68369cf633502e7649c6e029a78e30063154ee2eaccad34a48e19e64272a820f"}, - {file = "scikit_base-0.12.6.tar.gz", hash = "sha256:553e2bafaf30cd91d873bf424a9d16772d7638ea02ded6fb649b5d4b4c236d14"}, -] - -[package.extras] -all-extras = ["numpy", "pandas"] -binder = ["jupyter"] -dev = ["pre-commit", "pytest", "pytest-cov", "scikit-learn (>=0.24.0)"] -docs = ["Sphinx (!=7.2.0,<9.0.0)", "jupyter", "myst-parser", "nbsphinx (>=0.8.6)", "numpydoc", "pydata-sphinx-theme", "sphinx-design (<0.7.0)", "sphinx-gallery (<0.20.0)", "sphinx-issues (<6.0.0)", "sphinx-panels", "tabulate"] -linters = ["black", "doc8", "flake8", "flake8-bugbear", "flake8-builtins", "flake8-comprehensions", "flake8-print", "flake8-quotes", "isort", "mypy", "nbqa", "pandas-vet", "pep8-naming", "pydocstyle"] -test = ["coverage", "numpy", "pandas", "pytest", "pytest-cov", "safety", "scikit-learn (>=0.24.0)", "scipy"] - -[[package]] -name = "scikit-learn" -version = "1.7.2" -description = "A set of python modules for machine learning and data mining" -optional = false -python-versions = ">=3.10" -files = [ - {file = "scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f"}, - {file = "scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c"}, - {file = "scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8"}, - {file = "scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18"}, - {file = "scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5"}, - {file = "scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e"}, - {file = "scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1"}, - {file = "scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d"}, - {file = "scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1"}, - {file = "scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1"}, - {file = "scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96"}, - {file = "scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476"}, - {file = "scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b"}, - {file = "scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44"}, - {file = "scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290"}, - {file = "scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7"}, - {file = "scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe"}, - {file = "scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f"}, - {file = "scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0"}, - {file = "scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c"}, - {file = "scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8"}, - {file = "scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a"}, - {file = "scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c"}, - {file = "scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c"}, - {file = "scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973"}, - {file = "scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33"}, - {file = "scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615"}, - {file = "scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106"}, - {file = "scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61"}, - {file = "scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8"}, - {file = "scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda"}, -] - -[package.dependencies] -joblib = ">=1.2.0" -numpy = ">=1.22.0" -scipy = ">=1.8.0" -threadpoolctl = ">=3.1.0" - -[package.extras] -benchmark = ["matplotlib (>=3.5.0)", "memory_profiler (>=0.57.0)", "pandas (>=1.4.0)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.17.1)", "numpy (>=1.22.0)", "scipy (>=1.8.0)"] -docs = ["Pillow (>=8.4.0)", "matplotlib (>=3.5.0)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.4.0)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.19.0)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] -examples = ["matplotlib (>=3.5.0)", "pandas (>=1.4.0)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.19.0)", "seaborn (>=0.9.0)"] -install = ["joblib (>=1.2.0)", "numpy (>=1.22.0)", "scipy (>=1.8.0)", "threadpoolctl (>=3.1.0)"] -maintenance = ["conda-lock (==3.0.1)"] -tests = ["matplotlib (>=3.5.0)", "mypy (>=1.15)", "numpydoc (>=1.2.0)", "pandas (>=1.4.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.2.1)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.11.7)", "scikit-image (>=0.19.0)"] - -[[package]] -name = "scipy" -version = "1.16.2" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.11" -files = [ - {file = "scipy-1.16.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ab88ea43a57da1af33292ebd04b417e8e2eaf9d5aa05700be8d6e1b6501cd92"}, - {file = "scipy-1.16.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c95e96c7305c96ede73a7389f46ccd6c659c4da5ef1b2789466baeaed3622b6e"}, - {file = "scipy-1.16.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:87eb178db04ece7c698220d523c170125dbffebb7af0345e66c3554f6f60c173"}, - {file = "scipy-1.16.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:4e409eac067dcee96a57fbcf424c13f428037827ec7ee3cb671ff525ca4fc34d"}, - {file = "scipy-1.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e574be127bb760f0dad24ff6e217c80213d153058372362ccb9555a10fc5e8d2"}, - {file = "scipy-1.16.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5db5ba6188d698ba7abab982ad6973265b74bb40a1efe1821b58c87f73892b9"}, - {file = "scipy-1.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec6e74c4e884104ae006d34110677bfe0098203a3fec2f3faf349f4cb05165e3"}, - {file = "scipy-1.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:912f46667d2d3834bc3d57361f854226475f695eb08c08a904aadb1c936b6a88"}, - {file = "scipy-1.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:91e9e8a37befa5a69e9cacbe0bcb79ae5afb4a0b130fd6db6ee6cc0d491695fa"}, - {file = "scipy-1.16.2-cp311-cp311-win_arm64.whl", hash = "sha256:f3bf75a6dcecab62afde4d1f973f1692be013110cad5338007927db8da73249c"}, - {file = "scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d"}, - {file = "scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371"}, - {file = "scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0"}, - {file = "scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232"}, - {file = "scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1"}, - {file = "scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f"}, - {file = "scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef"}, - {file = "scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1"}, - {file = "scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e"}, - {file = "scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851"}, - {file = "scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70"}, - {file = "scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9"}, - {file = "scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5"}, - {file = "scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925"}, - {file = "scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9"}, - {file = "scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7"}, - {file = "scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb"}, - {file = "scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e"}, - {file = "scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c"}, - {file = "scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104"}, - {file = "scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1"}, - {file = "scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a"}, - {file = "scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f"}, - {file = "scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4"}, - {file = "scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21"}, - {file = "scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7"}, - {file = "scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8"}, - {file = "scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472"}, - {file = "scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351"}, - {file = "scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d"}, - {file = "scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77"}, - {file = "scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70"}, - {file = "scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88"}, - {file = "scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f"}, - {file = "scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb"}, - {file = "scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7"}, - {file = "scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548"}, - {file = "scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936"}, - {file = "scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff"}, - {file = "scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d"}, - {file = "scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8"}, - {file = "scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4"}, - {file = "scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831"}, - {file = "scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3"}, - {file = "scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac"}, - {file = "scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374"}, - {file = "scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6"}, - {file = "scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c"}, - {file = "scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9"}, - {file = "scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779"}, - {file = "scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b"}, -] - -[package.dependencies] -numpy = ">=1.25.2,<2.6" - -[package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "seaborn" -version = "0.13.2" -description = "Statistical data visualization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, - {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, -] - -[package.dependencies] -matplotlib = ">=3.4,<3.6.1 || >3.6.1" -numpy = ">=1.20,<1.24.0 || >1.24.0" -pandas = ">=1.2" - -[package.extras] -dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] -docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] -stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] - -[[package]] -name = "send2trash" -version = "1.8.3" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, - {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - -[[package]] -name = "setuptools" -version = "80.9.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.9" -files = [ - {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, - {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] - -[[package]] -name = "sktime" -version = "0.39.0" -description = "A unified framework for machine learning with time series" -optional = false -python-versions = "<3.14,>=3.10" -files = [ - {file = "sktime-0.39.0-py3-none-any.whl", hash = "sha256:4fa722866336d7f43f82c9239cd2c9d3a89aab553aa5c59ce4bfbc212d4d56bd"}, - {file = "sktime-0.39.0.tar.gz", hash = "sha256:1ab976faa55b2a118f93d15828d1a13be3d963f693fdd05fdf82f882405b9d13"}, -] - -[package.dependencies] -joblib = ">=1.2.0,<1.6" -numpy = ">=1.21,<2.4" -packaging = "*" -pandas = ">=1.1,<2.4.0" -scikit-base = ">=0.6.1,<0.13.0" -scikit-learn = ">=0.24,<1.8.0" -scipy = ">=1.2,<2.0.0" - -[package.extras] -alignment = ["dtaidistance (<2.4)", "dtw-python (>=1.3,<1.6)", "numba (>=0.53,<0.63)"] -all-extras = ["arch (>=5.6,<7.3.0)", "autots (>=0.6.1,<0.7)", "cloudpickle", "dash (!=2.9.0)", "dask (>2024.8.2,<2025.2.1)", "dtw-python", "gluonts (>=0.9)", "h5py", "hmmlearn (>=0.2.7)", "holidays", "matplotlib (>=3.3.2,!=3.9.1)", "numba (>=0.53,<0.63)", "optuna (<4.5)", "pmdarima (>=1.8,!=1.8.1,<3.0.0)", "polars[pandas] (>=0.20,<2.0)", "prophet (>=1.1)", "pycatch22 (<0.4.6)", "pyod (>=0.8)", "pyts (<0.14.0)", "ray (>=2.40.0)", "scikit-optimize", "scikit_posthocs (>=0.6.5)", "seaborn (>=0.11)", "simdkalman", "skforecast (>=0.12.1,<0.15)", "skpro (>=2,<2.10.0)", "statsforecast (>=1.0.0,<2.1.0)", "statsmodels (>=0.12.1)", "tensorflow (>=2,<2.20)", "tsfresh (>=0.17)", "tslearn (>=0.5.2,!=0.6.0,<0.7.0)", "xarray"] -all-extras-pandas2 = ["arch (>=5.6,<7.1.0)", "autots (>=0.6.1,<0.7)", "cloudpickle", "dash (!=2.9.0)", "dask (>2024.8.2,<2025.2.1)", "dtw-python", "gluonts (>=0.9)", "h5py", "hmmlearn (>=0.2.7)", "holidays", "matplotlib (>=3.3.2,!=3.9.1)", "numba (>=0.53,<0.63)", "optuna (<4.5)", "pmdarima (>=1.8,!=1.8.1,<3.0.0)", "polars[pandas] (>=0.20,<2.0)", "prophet (>=1.1)", "pycatch22 (<0.4.6)", "pyod (>=0.8)", "ray (>=2.40.0)", "scikit_posthocs (>=0.6.5)", "seaborn (>=0.11)", "simdkalman", "skforecast (>=0.12.1,<0.15)", "skpro (>=2,<2.10.0)", "statsforecast (>=1.0.0,<2.1.0)", "statsmodels (>=0.12.1)", "tensorflow (>=2,<2.20)", "tsfresh (>=0.17)", "tslearn (>=0.5.2,!=0.6.0,<0.7.0)", "xarray"] -annotation = ["hmmlearn (>=0.2.7,<0.4)", "numba (>=0.53,<0.63)", "pyod (>=0.8,<1.2)"] -binder = ["jupyter", "skchange"] -classification = ["numba (>=0.53,<0.63)", "tensorflow (>=2,<2.20)", "tsfresh (>=0.17,<0.21)"] -clustering = ["networkx (<3.5)", "numba (>=0.53,<0.63)", "ts2vg (<1.3)", "tslearn (>=0.5.2,!=0.6.0,<0.7.0)"] -compatibility-tests = ["catboost"] -cython-extras = ["mrseql (<0.0.3)", "mrsqm", "numba (<0.63)"] -dataframe = ["dask (>2024.8.2,<2025.2.1)", "dask (>2024.8.2,<2025.2.1)"] -datasets = ["huggingface-hub", "rdata", "requests"] -dependencies-lower = ["numpy (==1.25.0)", "pandas (==2.0.2)", "scikit-learn (==1.3.0)", "scipy (==1.10.1)"] -dependencies-lowest = ["numpy (==1.21.0)", "pandas (==1.1.0)", "scikit-learn (==0.24.0)", "scipy (==1.4.0)"] -detection = ["hmmlearn (>=0.2.7,<0.4)", "numba (>=0.53,<0.63)", "pyod (>=0.8,<1.2)"] -dev = ["backoff", "httpx", "pre-commit", "pytest", "pytest-randomly", "pytest-timeout", "pytest-xdist", "wheel"] -dl = ["FrEIA", "accelerate", "einops (>0.7.0)", "gluonts (>=0.14.3)", "huggingface-hub (>=0.23.0)", "hydra-core", "lightning (>=2.0)", "neuralforecast (>=1.6.4,<1.8.0)", "peft (>=0.10.0,<0.14.0)", "pykan (>=0.2.1,<0.2.9)", "pytorch-forecasting (>=1.0.0,<1.5.0)", "tensorflow (>=2,<2.20)", "torch", "tqdm", "transformers[torch] (<4.41.0)"] -docs = ["Sphinx (!=7.2.0,<9.0.0)", "jupyter", "myst-parser", "nbsphinx (>=0.8.6)", "numpydoc", "pydata-sphinx-theme", "sphinx-copybutton", "sphinx-design (<0.7.0)", "sphinx-gallery (<0.20.0)", "sphinx-issues (<6.0.0)", "tabulate"] -forecasting = ["arch (>=5.6,<7.1)", "autots (>=0.6.1,<0.7)", "pmdarima (>=1.8,!=1.8.1,<2.1)", "prophet (>=1.1,<1.2)", "skforecast (>=0.12.1,<0.15)", "skpro (>=2,<2.10.0)", "statsforecast (>=1.0.0,<2.1.0)", "statsmodels (>=0.12.1,<0.15)"] -mlflow = ["mlflow (<4.0)"] -mlflow-tests = ["boto3", "botocore", "mlflow (<4.0)", "moto"] -mlflow2 = ["mlflow (<3.0)"] -networks = ["tensorflow (>=2,<2.20)"] -notebooks = ["dtw-python", "matplotlib", "numpy (<2)", "pmdarima", "prophet", "pytorch-forecasting", "seaborn", "skpro", "statsforecast", "tbats"] -numpy1 = ["numpy (<2.0.0)"] -pandas1 = ["pandas (<2.0.0)"] -param-est = ["seasonal (>=0.3.1,<0.4)", "statsmodels (>=0.12.1,<0.15)"] -regression = ["numba (>=0.53,<0.63)", "tensorflow (>=2,<2.20)"] -tests = ["pytest (>=7.4,<8.5)", "pytest-randomly (>=3.15,<4.1)", "pytest-timeout (>=2.1,<2.5)", "pytest-xdist (>=3.3,<3.9)"] -transformations = ["holidays (>=0.29,<0.59)", "numba (>=0.53,<0.63)", "pycatch22 (>=0.4,<0.4.6)", "simdkalman", "statsmodels (>=0.12.1,<0.15)", "tsfresh (>=0.17,<0.21)"] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "soupsieve" -version = "2.8" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.9" -files = [ - {file = "soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c"}, - {file = "soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f"}, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -description = "Extract data from python stack frames and tracebacks for informative displays" -optional = false -python-versions = "*" -files = [ - {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, - {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, -] - -[package.dependencies] -asttokens = ">=2.1.0" -executing = ">=1.2.0" -pure-eval = "*" - -[package.extras] -tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] - -[[package]] -name = "statsmodels" -version = "0.14.5" -description = "Statistical computations and models for Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "statsmodels-0.14.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9fc2b5cdc0c95cba894849651fec1fa1511d365e3eb72b0cc75caac44077cd48"}, - {file = "statsmodels-0.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b8d96b0bbaeabd3a557c35cc7249baa9cfbc6dd305c32a9f2cbdd7f46c037e7f"}, - {file = "statsmodels-0.14.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:145bc39b2cb201efb6c83cc3f2163c269e63b0d4809801853dec6f440bd3bc37"}, - {file = "statsmodels-0.14.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7c14fb2617bb819fb2532e1424e1da2b98a3419a80e95f33365a72d437d474e"}, - {file = "statsmodels-0.14.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1e9742d8a5ac38a3bfc4b7f4b0681903920f20cbbf466d72b1fd642033846108"}, - {file = "statsmodels-0.14.5-cp310-cp310-win_amd64.whl", hash = "sha256:1cab9e6fce97caf4239cdb2df375806937da5d0b7ba2699b13af33a07f438464"}, - {file = "statsmodels-0.14.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b7091a8442076c708c926de3603653a160955e80a2b6d931475b7bb8ddc02e5"}, - {file = "statsmodels-0.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:128872be8f3208f4446d91ea9e4261823902fc7997fee7e1a983eb62fd3b7c6e"}, - {file = "statsmodels-0.14.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f2ad5aee04ae7196c429df2174df232c057e478c5fa63193d01c8ec9aae04d31"}, - {file = "statsmodels-0.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f402fc793458dd6d96e099acb44cd1de1428565bf7ef3030878a8daff091f08a"}, - {file = "statsmodels-0.14.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:26c028832730aebfbfd4e7501694e1f9ad31ec8536e776716673f4e7afd4059a"}, - {file = "statsmodels-0.14.5-cp311-cp311-win_amd64.whl", hash = "sha256:ec56f771d9529cdc17ed2fb2a950d100b6e83a7c5372aae8ac5bb065c474b856"}, - {file = "statsmodels-0.14.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:37e7364a39f9aa3b51d15a208c2868b90aadb8412f868530f5cba9197cb00eaa"}, - {file = "statsmodels-0.14.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4263d7f4d0f1d5ac6eb4db22e1ee34264a14d634b9332c975c9d9109b6b46e12"}, - {file = "statsmodels-0.14.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86224f6e36f38486e471e75759d241fe2912d8bc25ab157d54ee074c6aedbf45"}, - {file = "statsmodels-0.14.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3dd760a6fa80cd5e0371685c697bb9c2c0e6e1f394d975e596a1e6d0bbb9372"}, - {file = "statsmodels-0.14.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6264fb00e02f858b86bd01ef2dc05055a71d4a0cc7551b9976b07b0f0e6cf24f"}, - {file = "statsmodels-0.14.5-cp312-cp312-win_amd64.whl", hash = "sha256:b2ed065bfbaf8bb214c7201656df840457c2c8c65e1689e3eb09dc7440f9c61c"}, - {file = "statsmodels-0.14.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:906263134dd1a640e55ecb01fda4a9be7b9e08558dba9e4c4943a486fdb0c9c8"}, - {file = "statsmodels-0.14.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9118f76344f77cffbb3a9cbcff8682b325be5eed54a4b3253e09da77a74263d3"}, - {file = "statsmodels-0.14.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dc4ee159070557c9a6c000625d85f653de437772fe7086857cff68f501afe45"}, - {file = "statsmodels-0.14.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a085d47c8ef5387279a991633883d0e700de2b0acc812d7032d165888627bef"}, - {file = "statsmodels-0.14.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f866b2ebb2904b47c342d00def83c526ef2eb1df6a9a3c94ba5fe63d0005aec"}, - {file = "statsmodels-0.14.5-cp313-cp313-win_amd64.whl", hash = "sha256:2a06bca03b7a492f88c8106103ab75f1a5ced25de90103a89f3a287518017939"}, - {file = "statsmodels-0.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b23b8f646dd78ef5e8d775d879208f8dc0a73418b41c16acac37361ff9ab7738"}, - {file = "statsmodels-0.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e5e26b21d2920905764fb0860957d08b5ba2fae4466ef41b1f7c53ecf9fc7fa"}, - {file = "statsmodels-0.14.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a060c7e0841c549c8ce2825fd6687e6757e305d9c11c9a73f6c5a0ce849bb69"}, - {file = "statsmodels-0.14.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56da20def5350d676388213a330fd40ed15d0e8dd0bb1b92c0e4b0f2a65d3ad2"}, - {file = "statsmodels-0.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:afb37ca1d70d99b5fd876e8574ea46372298ae0f0a8b17e4cf0a9afd2373ae62"}, - {file = "statsmodels-0.14.5.tar.gz", hash = "sha256:de260e58cccfd2ceddf835b55a357233d6ca853a1aa4f90f7553a52cc71c6ddf"}, -] - -[package.dependencies] -numpy = ">=1.22.3,<3" -packaging = ">=21.3" -pandas = ">=1.4,<2.1.0 || >2.1.0" -patsy = ">=0.5.6" -scipy = ">=1.8,<1.9.2 || >1.9.2" - -[package.extras] -build = ["cython (>=3.0.10)"] -develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "jinja2", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools_scm[toml] (>=8.0,<9.0)"] -docs = ["ipykernel", "jupyter_client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] - -[[package]] -name = "terminado" -version = "0.18.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, - {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] -typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] - -[[package]] -name = "threadpoolctl" -version = "3.6.0" -description = "threadpoolctl" -optional = false -python-versions = ">=3.9" -files = [ - {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, - {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, -] - -[[package]] -name = "tinycss2" -version = "1.4.0" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, - {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["pytest", "ruff"] - -[[package]] -name = "tornado" -version = "6.5.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">=3.9" -files = [ - {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"}, - {file = "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882"}, - {file = "tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4"}, - {file = "tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04"}, - {file = "tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0"}, - {file = "tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f"}, - {file = "tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af"}, - {file = "tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0"}, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.8" -files = [ - {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, - {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20251008" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.9" -files = [ - {file = "types_python_dateutil-2.9.0.20251008-py3-none-any.whl", hash = "sha256:b9a5232c8921cf7661b29c163ccc56055c418ab2c6eabe8f917cbcc73a4c4157"}, - {file = "types_python_dateutil-2.9.0.20251008.tar.gz", hash = "sha256:c3826289c170c93ebd8360c3485311187df740166dbab9dd3b792e69f2bc1f9c"}, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - -[[package]] -name = "tzdata" -version = "2025.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, - {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "urllib3" -version = "2.5.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -files = [ - {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, - {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "wcwidth" -version = "0.2.14" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = ">=3.6" -files = [ - {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, - {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, -] - -[[package]] -name = "webcolors" -version = "24.11.1" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.9" -files = [ - {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, - {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -version = "1.9.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.9" -files = [ - {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"}, - {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"}, -] - -[package.extras] -docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx_rtd_theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["pytest", "websockets"] - -[[package]] -name = "widgetsnbextension" -version = "4.0.14" -description = "Jupyter interactive widgets for Jupyter Notebook" -optional = false -python-versions = ">=3.7" -files = [ - {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, - {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, -] - -[metadata] -lock-version = "2.0" -python-versions = ">=3.11,<3.14" -content-hash = "0b0f10243c7edd4afae8d07f31aaeee639180c5f6a892894660486a702655036" diff --git a/book/pyproject.toml b/book/pyproject.toml deleted file mode 100644 index db8d036..0000000 --- a/book/pyproject.toml +++ /dev/null @@ -1,21 +0,0 @@ -[tool.poetry] -name = "tsbook" -version = "0.1.0" -description = "" -authors = ["felipeangelimvieira "] -license = "Apache License 2.0" -readme = "README.md" - -[tool.poetry.dependencies] -python = ">=3.11,<3.14" -sktime = "^0.39.0" -matplotlib = "^3.10.7" -seaborn = "^0.13.2" -jupyter = "^1.1.1" -statsmodels = "^0.14.5" -scikit-learn = "^1.7.2" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/convert_qmd_to_ipynb.sh b/convert_qmd_to_ipynb.sh old mode 100644 new mode 100755 index b9f759f..64eef38 --- a/convert_qmd_to_ipynb.sh +++ b/convert_qmd_to_ipynb.sh @@ -2,7 +2,9 @@ # Converts every .qmd file under book/content/pt/ into an equivalent .ipynb # notebook, preserving the relative folder structure inside the notebooks/ -# directory. Requires Quarto to be installed and available on the PATH. +# directory. Also copies image assets referenced by the notebooks so inline +# media continues to work. Requires Quarto to be installed and available on +# the PATH. set -euo pipefail @@ -19,6 +21,7 @@ if [ ! -d "$INPUT_ROOT" ]; then exit 1 fi +find "$INPUT_ROOT" -type f -name '*.qmd' -print0 | while IFS= read -r -d '' qmd_file; do rel_path="${qmd_file#$INPUT_ROOT/}" rel_dir="$(dirname "$rel_path")" @@ -29,4 +32,18 @@ while IFS= read -r -d '' qmd_file; do mkdir -p "$target_dir" quarto convert "$qmd_file" --output "$target_file" echo "Converted $qmd_file -> $target_file" -done < <(find "$INPUT_ROOT" -type f -name '*.qmd' -print0) +done + +# Copy supporting image assets; extend patterns below if needed. +find "$INPUT_ROOT" -type f \ + \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.gif' \ + -o -iname '*.svg' -o -iname '*.webp' -o -iname '*.bmp' \) -print0 | +while IFS= read -r -d '' asset_file; do + rel_path="${asset_file#$INPUT_ROOT/}" + target_path="$OUTPUT_ROOT/$rel_path" + target_dir="$(dirname "$target_path")" + + mkdir -p "$target_dir" + cp -p "$asset_file" "$target_path" + echo "Copied asset $asset_file -> $target_path" +done diff --git a/notebooks/extra/img/private_methods.png b/notebooks/extra/img/private_methods.png new file mode 100644 index 0000000000000000000000000000000000000000..fa12ee20baa330b75aa86eaf05791e31521acd95 GIT binary patch literal 175551 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%0A~&aMjI|uk$kf4dXiD8lS6I``u$m$5 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

Ieao*zx8c2R@vN)Urw}yhOIQvu+^e|MioN} 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

?KXf#V*sBZw) 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 N^llhlM{C+V`9BCXVru{Z literal 0 HcmV?d00001 diff --git a/notebooks/extra/sktime_custom.ipynb b/notebooks/extra/sktime_custom.ipynb new file mode 100644 index 0000000..23fad13 --- /dev/null +++ b/notebooks/extra/sktime_custom.ipynb @@ -0,0 +1,547 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Criando modelos customizados com sktime\n", + "\n", + "O sktime oferece um ecossistema robusto, mas em cenarios reais frequentemente precisamos ajustar comportamentos, incorporar dados hierarquicos ou adicionar pre-processamentos especificos. Felizmente, o sktime torna relativamente simples a criacao de modelos customizados, desde que sigamos algumas regras.\n", + "\n", + "Acredito que essa e uma das grandes vantagens da biblioteca: o foco em ser extensivel e customizavel.\n", + "\n", + "## O sistema de tags\n", + "\n", + "Entre a chamada dos metodos publicos e privados existe uma camada de validacoes e conversões controlada pelas tags. Elas sinalizam ao `BaseForecaster` e ao `BaseTransformer` o que precisa ser garantido antes de executar a implementacao customizada.\n", + "\n", + "As tags mais importantes para um forecaster podem ser definidas assim:\n", + "\n", + "```python\n", + "_tags = {\n", + "\t\"capability:exogenous\": True,\n", + "\t\"requires-fh-in-fit\": False,\n", + "\t\"X_inner_mtype\": [\n", + "\t\t\"pd.Series\",\n", + "\t\t\"pd.DataFrame\",\n", + "\t\t\"pd-multiindex\",\n", + "\t\t\"pd_multiindex_hier\",\n", + "\t],\n", + "\t\"y_inner_mtype\": [\n", + "\t\t\"pd.Series\",\n", + "\t\t\"pd.DataFrame\",\n", + "\t\t\"pd-multiindex\",\n", + "\t\t\"pd_multiindex_hier\",\n", + "\t]\n", + "}\n", + "```\n", + "\n", + "Cada uma delas indica o que o modelo é capaz de fazer nos seus métodos privados\n", + "`_fit` e `_predict`:\n", + "\n", + "* `capability:exogenous`: Indica se o modelo suporta variáveis exógenas (X) durante o ajuste e a previsão.\n", + "* `requires-fh-in-fit`: Indica se o modelo precisa do horizonte de previsão (fh) durante o ajuste. Alguns modelos precisam devido a sua implementação interna.\n", + "* `y_inner_mtype`: Define os tipos de dados aceitos para a variável dependente (y) durante o ajuste e a previsão.\n", + "* `X_inner_mtype`: Define os tipos de dados aceitos para as variáveis exógenas (X) durante o ajuste e a previsão.\n", + " \n", + "Os machine-types (**mtypes**), ou tipos para máquina, são a peça mais crucial nesse sistema.\n", + "\n", + "### Machine-types disponiveis\n", + "\n", + "Os `mtypes` definem qual a estrutura de dados que o modelo aceita como entrada e produz como saída. Os principais mtypes para séries temporais são:\n", + "\n", + "- `np.ndarray`\n", + "- `pd.Series`\n", + "- `pd.DataFrame`\n", + "- `pd-multiindex` (ideia de painel)\n", + "- `pd_multiindex_hier` (dados hierarquicos)\n", + "\n", + "Se o modelo suporta um `mtype` hierárquico e passamos um dado hierárquico, o \n", + "dado chegará normalmente ao método privado `_fit` ou `_predict`. Caso contrário, o sktime tentará converter o dado para um mtype suportado.\n", + "\n", + "#### Baixando exemplos por mtype\n", + "\n", + "Para entender melhor cada mtype, podemos baixar exemplos práticos usando a função `get_examples` do sktime:" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.datatypes import get_examples\n", + "\n", + "get_examples(mtype=\"np.ndarray\", as_scitype=\"Series\")[0]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "get_examples(mtype=\"pd.DataFrame\", as_scitype=\"Series\")[0].head()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "get_examples(mtype=\"pd-multiindex\", as_scitype=\"Panel\")[0].head()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "get_examples(mtype=\"pd_multiindex_hier\", as_scitype=\"Hierarchical\")[0].head()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alguns mtypes tem limitações: uma `pd.Series` simples nao representa problemas hierarquicos, sendo necessario recorrer ao `pd_multiindex_hier`.\n", + "\n", + "#### Exemplo prático\n", + "\n", + "Vamos criar o nosso primeiro esqueleto de forecaster customizado. Para isso, baixamos uma série de exemplo:" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# | echo: false\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.forecasting.base import BaseForecaster\n", + "from sktime.utils._testing.series import _make_series\n", + "\n", + "y = _make_series(4)\n", + "y" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nosso protótipo irá apenas printar os dados recebidos no método `_fit`. O `__init__` recebe um dicionário de tags para definir as capacidades do modelo." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "class Logger(BaseForecaster):\n", + "\n", + " _tags = {\n", + " \"requires-fh-in-fit\": False,\n", + " }\n", + "\n", + " def __init__(self, tags_to_set):\n", + " self.tags_to_set = tags_to_set\n", + " super().__init__()\n", + "\n", + " self.set_tags(**tags_to_set)\n", + " \n", + " def _fit(self, y, X=None, fh=None):\n", + " print(\"Inside fit:\")\n", + " print(y)\n", + " return self" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"pd.Series\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"np.ndarray\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"pd.DataFrame\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "try:\n", + " logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"pd_multiindex_hier\"] })\n", + " logger.fit(y)\n", + "except ValueError as e:\n", + " print(e)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "try:\n", + " logger = Logger(tags_to_set={\"y_inner_mtype\": [\"pd.DataFrame\", \"pd_multiindex_hier\"]})\n", + " logger.fit(y)\n", + "except ValueError as e:\n", + " print(e)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Input hierárquico\n", + "\n", + "Agora veremos como o modelo se comporta com dados hierárquicos. Note que, nos casos onde o modelo não suporta dados hierárquicos, o sktime tentará convertê-los para um mtype suportado." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.utils._testing.hierarchical import _make_hierarchical\n", + "\n", + "y = _make_hierarchical((1,2), max_timepoints=4, min_timepoints=2)\n", + "y" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"pd.Series\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"np.ndarray\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "logger = Logger(tags_to_set={\"y_inner_mtype\" : [\"pd.DataFrame\"] })\n", + "logger.fit(y)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "try:\n", + " logger = Logger(tags_to_set={\"y_inner_mtype\": [\"pd_multiindex_hier\"]})\n", + " logger.fit(y)\n", + "except ValueError as e:\n", + " print(e)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Criando um modelo naive\n", + "\n", + "Agora, vamos implementar um modelo simples de previsão, o `CustomNaiveForecaster`, que prevê o valor médio dos últimos n pontos da série temporal.\n", + "\n", + "É um exemplo simples, mas que ilustra bem como criar um forecaster customizado com sktime." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from tsbook.datasets.retail import SyntheticRetail\n", + "\n", + "dataset = SyntheticRetail(\"panel\")\n", + "y_train, y_test = dataset.load(\"y_train\", \"y_test\")\n", + "y_train" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.utils.plotting import plot_series\n", + "\n", + "plot_series(\n", + " y_train.loc[0],\n", + " y_train.loc[24],\n", + " labels=[\n", + " \"SKU 0\",\n", + " \"SKU 24\",\n", + " ],\n", + ")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Abaixo, implementamos o `CustomNaiveForecaster` seguindo as regras do sktime (clique para expandir). Em seguida, explicamos passo a passo." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# | code-fold: true\n", + "from sktime.forecasting.base import BaseForecaster\n", + "import pandas as pd\n", + "\n", + "\n", + "class CustomNaiveForecaster(BaseForecaster):\n", + " \"\"\"\n", + " A simple naive forecaster\n", + "\n", + " Parameters\n", + " ----------\n", + " n : int\n", + " Number of past values to use.\n", + " \"\"\"\n", + "\n", + " _tags = {\n", + " \"requires-fh-in-fit\": False,\n", + " \"y_inner_mtype\": [\n", + " \"pd.Series\",\n", + " ],\n", + " }\n", + "\n", + " # Add hyperparameters in init!\n", + " def __init__(self, n=1):\n", + " # 1. Set hyper-parameters\n", + " self.n = n\n", + "\n", + " # 2. Initialize parent class\n", + " super().__init__()\n", + "\n", + " # 3. Check hyper-parameters\n", + " assert self.n > 0, \"n must be greater than 0\"\n", + "\n", + " def _fit(self, y, X, fh):\n", + " \"\"\"\n", + " Fit necessary parameters.\n", + " \"\"\"\n", + "\n", + " self.value_ = y.iloc[-self.n :].mean()\n", + " return self\n", + "\n", + " def _predict(self, fh, X):\n", + " \"\"\"\n", + " Use forecasting horizon and optionally X to predict y\n", + " \"\"\"\n", + "\n", + " # During fit, BaseForecaster sets\n", + " # self.cutoff to the latest cutoff time point\n", + " index = fh.to_absolute_index(self.cutoff)\n", + " y_pred = pd.Series(\n", + " index=index,\n", + " data=[self.value_ for _ in range(len(index))],\n", + " )\n", + " y_pred.name = self._y.name\n", + "\n", + " return y_pred\n", + "\n", + " # Veremos mais tarde como usar esse método\n", + " @classmethod\n", + " def get_test_params(cls, parameter_set=\"default\"):\n", + " return [\n", + " {\"n\": 1},\n", + " {\"n\": 2},\n", + " ]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Definindo o método `__init__`\n", + "\n", + "O método `__init__` possui 3 etapas:\n", + "\n", + "1. A definição dos hiperparametros e seus atributos com mesmo nome.\n", + "2. A chamada do `super().__init__()` para inicializar a classe pai.\n", + "3. A validação dos hiperparâmetros.\n", + " \n", + "\n", + "\n", + "```python\n", + "# Add hyperparameters in init!\n", + "def __init__(self, n=1):\n", + " # 1. Set hyper-parameters\n", + " self.n = n\n", + "\n", + " # 2. Initialize parent class\n", + " super().__init__()\n", + "\n", + " # 3. Check hyper-parameters\n", + " assert self.n > 0, \"n must be greater than 0\"\n", + "```\n", + "\n", + "No caso de algum preprocessamento dos hiperparâmetros no `__init__`, devemos guardar em uma variável com nome diferente do hiperparâmetro. Por exemplo, se tivéssemos interesse em ter um atributo `n` diferente do passado no `__init__`, poderíamos fazer:\n", + "\n", + "```\n", + "self._n = n + 1\n", + "```\n", + "\n", + "O `self.n` funciona como uma digital do modelo, e deve ser exatamente o que foi passado no `__init__`.\n", + "\n", + "### Definindo o método `_fit`\n", + "\n", + "No método `_fit`, devemos implementar a lógica de ajuste do modelo. No nosso caso, calculamos a média dos últimos `n` valores e armazenamos em `self.value_`.\n", + "\n", + "O `_` após o nome do atributo indica que é um atributo aprendido durante o ajuste, e será retornado quando chamarmos `get_fitted_params()`.\n", + "\n", + "Note que podemos supor que `y` é do tipo definido na tag `y_inner_mtype`, ou seja, uma `pd.Series`.\n", + "\n", + "### Definindo o método `_predict`\n", + "\n", + "No método `_predict`, implementamos a lógica de previsão. Usamos o horizonte de previsão `fh` para determinar os índices futuros e retornamos uma série com o valor previsto para cada ponto no horizonte.\n", + "\n", + "O `fh` é um objeto do tipo `ForecastingHorizon`, que possui o método `to_absolute_index(cutoff)` para converter o horizonte relativo em índices absolutos, considerando o último ponto conhecido (`self.cutoff`).\n", + "\n", + "Retornamos um `pd.Series` com os índices e os valores previstos.\n", + "\n", + "### Usando o `CustomNaiveForecaster`\n", + "\n", + "Agora, já podemos usar o nosso modelo customizado para fazer previsões." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "custom_naive_model = CustomNaiveForecaster()\n", + "custom_naive_model.fit(y_train)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Como passamos um dado hierárquico, o sktime converteu automaticamente para `pd.Series`, que é o mtype suportado pelo nosso modelo. Os modelos internos, para cada série, ficam disponíveis em `forecasters_`." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "custom_naive_model.forecasters_" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "y_pred = custom_naive_model.predict(fh=y_test.index.get_level_values(-1).unique())\n", + "\n", + "fig, _ = plot_series(\n", + " y_train.loc[0],\n", + " y_pred.loc[0],\n", + " labels=[\n", + " \"SKU 0\",\n", + " \"Previsão SKU 0\",\n", + " ],\n", + ")\n", + "fig.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Testes unitários\n", + "\n", + "O sktime também fornece uma funcionalidade que traz testes unitários prontos para validar se o modelo customizado está funcionando corretamente.\n", + "\n", + "Ele usa os hiperparâmetros retornados pelo método `get_test_params` para criar instâncias do modelo e executar uma série de testes." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from sktime.utils.estimator_checks import check_estimator\n", + "\n", + "\n", + "check_estimator(CustomNaiveForecaster, tests_to_exclude=[\"test_doctest_examples\"])" + ], + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)", + "path": "/Users/felipeangelim/Workspace/python_brasil_2025/.venv/share/jupyter/kernels/python3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/notebooks/part1/balls1.png b/notebooks/part1/balls1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8bcab9be1d87b60b87424549829172e710f3f5 GIT binary patch literal 2423849 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