TP1:Méthodes traditionnelles de calcul de la VaR et Expected Shortfall (ES)

paper
risques-fin
ensai-gdr
Author

Cheryl Kouadio

Published

February 28, 2025

Ce TP est fait dans le but de modéliser la Value at Risk qui est une mesure de risque financier. La Value at Risk (VaR) est une mesure essentielle du risque de marché qui estime la perte potentielle maximale d’un portefeuille sur un horizon h donné, avec un certain niveau de confiance \(\alpha\). La VaR est utilisée par les institutions financières et les gestionnaires de risques pour évaluer l’exposition aux pertes extrêmes et ajuster leurs stratégies d’investissement. Elle est définie comme suit :

\[VaR_{\alpha}(h) = inf \{ l \in \mathbb{R} | P(PnL \geq -l) \geq 1 - \alpha \}\]

Le PnL représente le profit and loss, c’est-à-dire la variation de la valeur du portefeuille. Dans notre cas, nous utilserons les rendements logarithmiques des actifs financiers, qui est stationnaire, pour calculer la VaR. Les rendements logarithmiques sont calculés comme suit :

\[r_t = log(\frac{P_t}{P_{t-1}}) \approx \frac{P_t - P_{t-1}}{P_{t-1}}.\]

Cette mesure est préférée aux rendements simples car sa décomposition en termes additifs permet de mieux modéliser les variations de prix des actifs financiers. De plus, en supposant la distribution identique et indépendante des rendements, on peut facilement déterminer sa loi de probabilité et calculer la VaR.

Dans ce projet, nous explorerons plusieurs méthodes pour calculer la VaR, en tenant compte de la nature des rendements financiers et des hypothèses sous-jacentes :

# Définition des librairies
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
import warnings
from tqdm import tqdm
from scipy.stats import bootstrap

warnings.filterwarnings("ignore")
# Import des données du CAC 40
data = yf.download("^FCHI",start="2008-01-01")

# Calcul des rendements logarithmiques
data['log_return'] = np.log(data['Close'] / data['Close'].shift(1))

# Retirer la première ligne
data = data.dropna()
data.columns = data.columns.get_level_values(0)
[*********************100%***********************]  1 of 1 completed
data.head()
Price Close High Low Open Volume log_return
Date
2008-01-03 5546.080078 5559.049805 5515.609863 5538.200195 117504500 -0.000771
2008-01-04 5446.790039 5567.089844 5417.529785 5543.689941 162947200 -0.018065
2008-01-07 5452.830078 5475.250000 5429.319824 5432.000000 181161800 0.001108
2008-01-08 5495.669922 5533.930176 5471.140137 5476.509766 174857100 0.007826
2008-01-09 5435.419922 5463.069824 5420.060059 5459.399902 198041500 -0.011024

I. Data wrangling

Le jeu de données est constitué de 6 variables, à savoir, le prix de clôture (Close), le volume des transactions (Volume), le prix d’ouverture (Open), le prix le plus bas (Low), le prix le plus élevé (High) et les rendements logarithmiques (log-return). Pour calculer les rendements sur lesquels nous nous sommes baser pour mesurer le risque du portefeuille, nous avons utilisé le prix de clôture. Il aurait été idéal de disposer des prix de clôture ajustés, i.e. les prix de clôture qui tiennent compte des dividendes et des éventuels splits. Cependant, en raison de l’indispobilité de ces données, nous avons utilisé les prix de clôture bruts.

Sur tout l’historique du CAC 40, nous n’observons aucune donnée manquante et aucune valeur aberrante (i.e. Prix de clôture négatif). Nous avons donc pu calculer les rendements logarithmiques sans problème.

data.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4630 entries, 2008-01-03 to 2026-02-10
Data columns (total 6 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   Close       4630 non-null   float64
 1   High        4630 non-null   float64
 2   Low         4630 non-null   float64
 3   Open        4630 non-null   float64
 4   Volume      4630 non-null   int64  
 5   log_return  4630 non-null   float64
dtypes: float64(5), int64(1)
memory usage: 253.2 KB
data.describe()
Price Close High Low Open Volume log_return
count 4630.000000 4630.000000 4630.000000 4630.000000 4.630000e+03 4630.000000
mean 5159.397158 5191.392396 5122.058257 5158.404029 1.059394e+08 0.000088
std 1461.767094 1464.656510 1461.496378 1462.353717 5.310210e+07 0.013605
min 2519.290039 0.000000 0.000000 0.000000 0.000000e+00 -0.130983
25% 3994.122559 4019.992432 3965.000000 3995.302490 6.965910e+07 -0.005908
50% 4917.965088 4952.119873 4880.074951 4923.284912 9.485980e+07 0.000465
75% 6231.207642 6266.062378 6175.047607 6217.902588 1.333100e+08 0.006684
max 8362.089844 8396.719727 8327.219727 8368.990234 5.312476e+08 0.105946
# check na
print("="*80)
print(data.isna().sum())
print("="*80)
================================================================================
Price
Close         0
High          0
Low           0
Open          0
Volume        0
log_return    0
dtype: int64
================================================================================

Sur tout l’historique du CAC40, i.e. entre 1990 jusqu’à récemment, nous avons enregistré 5 périodes de crise financière. Ces périodes sont les suivantes :

  • 1994 : Crise obligataire
  • 2000 : Bulle Internet
  • 2008 : Crise des subprimes
  • 2011 : Crise de la dette souveraine
  • 2020 : Crise du Covid-19

Cela peut se réperer par les clusters de rendements observables sur le graphique ci-dessous. Comme on peut l’observer, ces clusters de volatilité sont généralement associés à des périodes où le rendement journalier chute brutalemment. Pour mesurer le risque de marché, il peut être utile de modéliser ces clusters de volatilité et de prendre en compte les queues de distribution à travers des modèles GARCH par exemple.

Pour modéliser la VaR comme mesure de risque, il serait utile également de prendre les événements extrêmes en considération. En effet, en observant la densité des rendements, on peut voir que la distribution des rendements est leptokurtique, c’est-à-dire que les queues de distribution sont plus épaisses que celles d’une distribution normale (kurtosis > 3). Cela signifie que les événements extrêmes sont plus fréquents que ce que la distribution normale ne le suggère. De plus, le coefficient d’asytmmétrie est négatif, ce qui signifie que la distribution des rendements est asymétrique. Cela peut être problématique pour les méthodes paramétriques qui supposent, parfois, une distribution symétrique des rendements.

fig, ax1 = plt.subplots(figsize=(12, 6))

ax1.plot(data['log_return'], label='Rendements logarithmiques', color='red')
ax1.set_xlabel('Date')
ax1.set_ylabel('Rendements logarithmiques', color='red')
ax1.tick_params(axis='y', labelcolor='red')

ax2 = ax1.twinx()
ax2.plot(data['Close'], label='Prix historiques', color='blue')
ax2.set_ylabel('Prix historiques', color='blue')
ax2.tick_params(axis='y', labelcolor='blue')

fig.legend(loc='upper left', bbox_to_anchor=(0.12,0.89))
plt.title("Evolution des prix de clôture, rendements logarithmiques du CAC 40")
plt.show()

# Densité des rendements logarithmiques
plt.figure(figsize=(8, 6))
data['log_return'].plot(kind='kde', color='red')
plt.title("Densité des rendements logarithmiques du CAC 40")
plt.show()

# Skewness
skewness = data['log_return'].skew()
print(f"Skewness: {skewness:.2f}")

# Kurtosis
kurtosis = data['log_return'].kurtosis()
print(f"Kurtosis: {kurtosis:.2f}")
Skewness: -0.28
Kurtosis: 8.48
# Autocorrélation et pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

plot_acf(data['log_return'], lags=10, ax=ax1)
plot_pacf(data['log_return'], lags=10, ax=ax2)

plt.suptitle("Autocorrélation et PACF des rendements logarithmiques du CAC 40")
plt.show()

# check for stationarity
from statsmodels.tsa.stattools import adfuller
import pandas as pd

def adf_test(series, title=''):
    """
    Pass in a time series and an optional title, returns an Adataset report
    """
    print('Augmented Dickey-Fuller Test: {}\n'.format(title))
    # .dropna() handles differenced data
    result = adfuller(series.dropna(),autolag='AIC')

    labels = ['Adataset test statistic','p-value','# lags used','# observations']
    out = pd.Series(result[0:4],index=labels)

    for key,val in result[4].items():
        out['critical value ({})'.format(key)]=val

    # .to_string() removes the line "dtype: float64"
    print(f'{out.to_string()}\n')

    if result[1] <= 0.05:
        print("Strong evidence against the null hypothesis")
        print("Reject the null hypothesis")
        print("Data has no unit root and is stationary")
    else:
        print("Weak evidence against the null hypothesis")
        print("Fail to reject the null hypothesis")
        print("Data has a unit root and is non-stationary")

print("="*80)
adf_test(data["Close"], title='Prix de clôture')
print("="*80)
adf_test(data["log_return"], title='Log-rendements')
print("="*80)
================================================================================
Augmented Dickey-Fuller Test: Prix de clôture

Adataset test statistic      -0.664665
p-value                       0.855691
# lags used                   0.000000
# observations             4629.000000
critical value (1%)          -3.431763
critical value (5%)          -2.862165
critical value (10%)         -2.567102

Weak evidence against the null hypothesis
Fail to reject the null hypothesis
Data has a unit root and is non-stationary
================================================================================
Augmented Dickey-Fuller Test: Log-rendements

Adataset test statistic   -1.238290e+01
p-value                    4.982874e-23
# lags used                2.900000e+01
# observations             4.600000e+03
critical value (1%)       -3.431772e+00
critical value (5%)       -2.862169e+00
critical value (10%)      -2.567105e+00

Strong evidence against the null hypothesis
Reject the null hypothesis
Data has no unit root and is stationary
================================================================================

II. Implémentation de la VaR

On va prendre comme période d’apprentissage où la BCE fait baisser ses taux directeurs et comme période de (back-)test où la BCE fait augmenter ses taux directeurs. De ce fait, nous avons le découpage suivant : - Train : 15 octobre 2008 - 26 juillet 2022 - Test : 28 juillet 2022 - 11 juin 2024

On va implémenter les différentes méthodes de calcul de la VaR et de l’ES sur le jeu de données du CAC 40. On va comparer les performances de ces méthodes en utilisant la période de test. On s’attend à ce que les méthodes paramétriques soient moins performantes que les méthodes non paramétriques, car elles supposent une distribution des rendements qui n’est pas toujours vérifiée. De plus, les méthodes avancées, comme l’EWMA et la diffusion d’actifs, devraient être plus performantes que les méthodes non paramétriques, car elles prennent en compte la dynamique des rendements et les corrélations entre les actifs. En général, le backtest devrait être vérifié puisque la période de test ne comporte aucune crise financière.

train = data[['log_return',"Close"]]['15-10-2008':'26-07-2022']
data_train = train['log_return']

test = data[['log_return',"Close"]]['27-07-2022':'11-06-2024']
data_test = test['log_return']

II.1. Statistiques descriptives

Nous constatons que dans la période d’entrainement est plus volatile (std=1.39%). Cela s’explique par le fait que la période d’entrainement prend en compte deux crises majeures : la crise des subprimes et la crise du Covid-19. Cela peut également se voir à travers les clusters de volatilité observables à la suite de ces crises. Dans la période de test, aucun évènement majeur n’est observé, avec une plus faible volatilité observée (std=0.08%).

On s’attend à ce que la VaR entrainée sur la période d’entrainement performe très bien sur la période de test, mais on s’attend également à ce que la VaR entrainée sur la période de test performe moins bien sur la période d’entrainement.

plt.figure(figsize=(10, 4))
plt.plot(data_train, label='Train', color='grey')
plt.plot(data_test, label='Test', color='red')
plt.legend(loc='upper left')
plt.title("Données d'entrainement et de test")
plt.show()

data_train.describe()
count    3523.000000
mean        0.000153
std         0.013953
min        -0.130983
25%        -0.006099
50%         0.000580
75%         0.006855
max         0.096169
Name: log_return, dtype: float64
data_test.describe()
count    586.000000
mean       0.000292
std        0.008947
min       -0.036484
25%       -0.004763
50%        0.000642
75%        0.005612
max        0.041504
Name: log_return, dtype: float64

II.2. VaR non paramétrique

La VaR est une mesure de risque qui donne une estimation de la perte maximale que l’on peut subir avec un certain niveau de confiance \(\alpha\) sur un horizon de temps donné. Par exemple, une VaR à 5% sur 1 jour de 1000 euros signifie que 95% du temps, on ne perdra pas plus de 1000 euros sur un jour.

\[P(\text{Loss} < \text{VaR}) = \alpha.\]

On peut également raisonner en terme de gain, i.e. Profit and Loss (PnL).

\[P(\text{PnL} > - \text{VaR}) = \alpha.\]

La VaR peut se calculer suivant trois approches : 1. Approche historique : On se base sur les rendements passés selon l’horizon fixé pour estimer la VaR, à l’aide d’un quantile empirique d’ordre \(\alpha\). Autrement, on peut se baser sur les rendements journaliers et utiliser la méthode de scaling. 2. Approche bootstrap : On tire aléatoirement des échantillons de rendements passés avec remise, puis on prend le quantile empirique d’ordre \(\alpha\) pour calculer la VaR de chaque échantillon. La VaR finale est la moyenne des VaR obtenues.

II.2.1. Historique

# Objectif : implémenter une fonction calculant la VaR historique

def historical_var(data, alpha=0.99):
    """
    Calcul de la VaR historique
    data : les rendements logarithmiques
    alpha : le niveau de confiance
    """
    return -np.percentile(data, 100*(1- alpha))
# Calcul de la VaR historique sur l'échantillon d'entrainement pour h=1j et alpha=0.99
alpha = 0.99
var_hist_train = historical_var(data_train, alpha=alpha)
print(f"La VaR historique pour h=1j et alpha=0.99 est : {var_hist_train:.4%}")
La VaR historique pour h=1j et alpha=0.99 est : 4.0850%

On constate que la VaR historique pour une horizon de 1 jour et un niveau de confiance de 99% est de -4,09%. De ce fait, la perte maximale que l’on peut subir avec un niveau de confiance de 99% sur un jour est de 4,09%. Autrement dit, il y a 1 chance sur 100 que la perte soit supérieure à 4,09%. Cette perte peut se produire 2 à 3 ans fois en une année (252 jours de trading).

II.2.2. Bootstrap

Pour l’implémentation de la VaR bootstrap, nous faisons le choix de faire un tirage de taille n=la taille de la série des rendements, avec remise. Ce choix est fait pour des raisons de simplicité. En ce qui concerne le choix du nombre d’échantillons, nous allons observer l’évolution de de l’estimation de la VaR en fonction du nombre d’échantillons. Nous limiterons à des échantillons compris entre 1000 et 10000, pour des raisons de temps computationnels, en ayant conscience que plus le nombre d’échantillons est grand, plus l’estimation de la VaR sera précise.

# Objectif : implémenter une fonction calculant la VaR bootstrap et un IC

def bootstrap_var(data, alpha=0.99, M=1000, seuil=0.05):
    """
    Calcul de la VaR bootstrap
    data : les rendements logarithmiques
    alpha : le niveau de confiance de la VaR
    n : le nombre de simulations
    seuil : le seuil de l'intervalle de confiance
    """
    # set seed
    np.random.seed(42)

    # Initialisation du vecteur des VaR
    var = np.zeros(M)

    # Calcul de la VaR bootstrap
    for i in range(M):
        sample = np.random.choice(data, size=len(data), replace=True)
        var[i] = -np.percentile(sample, 100*(1- alpha))

    # Calcul de l'intervalle de confiance
    lower = np.percentile(var, 100*(1-seuil)/2)
    upper = np.percentile(var, 100*(seuil + (1-seuil)/2))

    return np.mean(var), lower, upper
# Observer la variation de la VaR en fonction de M
M_values = np.arange(1000, 10000, 10)
var_bs_values = []

for M in tqdm(M_values):
    var_bs_train, _, _ = bootstrap_var(data_train, alpha=alpha, M=M)
    var_bs_values.append(var_bs_train)
  0%|          | 0/900 [00:00<?, ?it/s]  0%|          | 2/900 [00:00<00:57, 15.54it/s]  0%|          | 4/900 [00:00<00:58, 15.20it/s]  1%|          | 6/900 [00:00<00:58, 15.25it/s]  1%|          | 8/900 [00:00<00:58, 15.17it/s]  1%|          | 10/900 [00:00<00:59, 15.02it/s]  1%|▏         | 12/900 [00:00<01:00, 14.72it/s]  2%|▏         | 14/900 [00:00<01:01, 14.52it/s]  2%|▏         | 16/900 [00:01<01:01, 14.34it/s]  2%|▏         | 18/900 [00:01<01:02, 14.16it/s]  2%|▏         | 20/900 [00:01<01:03, 13.92it/s]  2%|▏         | 22/900 [00:01<01:03, 13.73it/s]  3%|▎         | 24/900 [00:01<01:05, 13.47it/s]  3%|▎         | 26/900 [00:01<01:05, 13.29it/s]  3%|▎         | 28/900 [00:01<01:06, 13.10it/s]  3%|▎         | 30/900 [00:02<01:07, 12.88it/s]  4%|▎         | 32/900 [00:02<01:08, 12.70it/s]  4%|▍         | 34/900 [00:02<01:09, 12.52it/s]  4%|▍         | 36/900 [00:02<01:10, 12.26it/s]  4%|▍         | 38/900 [00:02<01:11, 12.07it/s]  4%|▍         | 40/900 [00:03<01:12, 11.91it/s]  5%|▍         | 42/900 [00:03<01:13, 11.72it/s]  5%|▍         | 44/900 [00:03<01:14, 11.57it/s]  5%|▌         | 46/900 [00:03<01:15, 11.38it/s]  5%|▌         | 48/900 [00:03<01:15, 11.22it/s]  6%|▌         | 50/900 [00:03<01:16, 11.05it/s]  6%|▌         | 52/900 [00:04<01:17, 10.90it/s]  6%|▌         | 54/900 [00:04<01:18, 10.75it/s]  6%|▌         | 56/900 [00:04<01:19, 10.62it/s]  6%|▋         | 58/900 [00:04<01:20, 10.47it/s]  7%|▋         | 60/900 [00:04<01:21, 10.32it/s]  7%|▋         | 62/900 [00:05<01:22, 10.18it/s]  7%|▋         | 64/900 [00:05<01:23, 10.04it/s]  7%|▋         | 66/900 [00:05<01:24,  9.92it/s]  7%|▋         | 67/900 [00:05<01:24,  9.87it/s]  8%|▊         | 68/900 [00:05<01:25,  9.78it/s]  8%|▊         | 69/900 [00:05<01:25,  9.72it/s]  8%|▊         | 70/900 [00:05<01:26,  9.63it/s]  8%|▊         | 71/900 [00:06<01:26,  9.56it/s]  8%|▊         | 72/900 [00:06<01:27,  9.50it/s]  8%|▊         | 73/900 [00:06<01:27,  9.41it/s]  8%|▊         | 74/900 [00:06<01:28,  9.36it/s]  8%|▊         | 75/900 [00:06<01:28,  9.31it/s]  8%|▊         | 76/900 [00:06<01:29,  9.24it/s]  9%|▊         | 77/900 [00:06<01:29,  9.17it/s]  9%|▊         | 78/900 [00:06<01:30,  9.12it/s]  9%|▉         | 79/900 [00:06<01:30,  9.08it/s]  9%|▉         | 80/900 [00:07<01:30,  9.01it/s]  9%|▉         | 81/900 [00:07<01:31,  8.98it/s]  9%|▉         | 82/900 [00:07<01:31,  8.90it/s]  9%|▉         | 83/900 [00:07<01:32,  8.87it/s]  9%|▉         | 84/900 [00:07<01:32,  8.82it/s]  9%|▉         | 85/900 [00:07<01:32,  8.77it/s] 10%|▉         | 86/900 [00:07<01:33,  8.70it/s] 10%|▉         | 87/900 [00:07<01:34,  8.64it/s] 10%|▉         | 88/900 [00:07<01:34,  8.59it/s] 10%|▉         | 89/900 [00:08<01:34,  8.54it/s] 10%|█         | 90/900 [00:08<01:35,  8.49it/s] 10%|█         | 91/900 [00:08<01:35,  8.47it/s] 10%|█         | 92/900 [00:08<01:35,  8.45it/s] 10%|█         | 93/900 [00:08<01:35,  8.41it/s] 10%|█         | 94/900 [00:08<01:36,  8.37it/s] 11%|█         | 95/900 [00:08<01:36,  8.32it/s] 11%|█         | 96/900 [00:08<01:37,  8.25it/s] 11%|█         | 97/900 [00:09<01:37,  8.20it/s] 11%|█         | 98/900 [00:09<01:38,  8.17it/s] 11%|█         | 99/900 [00:09<01:38,  8.10it/s] 11%|█         | 100/900 [00:09<01:38,  8.08it/s] 11%|█         | 101/900 [00:09<01:39,  8.03it/s] 11%|█▏        | 102/900 [00:09<01:39,  8.01it/s] 11%|█▏        | 103/900 [00:09<01:39,  7.98it/s] 12%|█▏        | 104/900 [00:09<01:40,  7.95it/s] 12%|█▏        | 105/900 [00:10<01:40,  7.90it/s] 12%|█▏        | 106/900 [00:10<01:40,  7.87it/s] 12%|█▏        | 107/900 [00:10<01:41,  7.81it/s] 12%|█▏        | 108/900 [00:10<01:42,  7.70it/s] 12%|█▏        | 109/900 [00:10<01:43,  7.66it/s] 12%|█▏        | 110/900 [00:10<01:43,  7.63it/s] 12%|█▏        | 111/900 [00:10<01:44,  7.58it/s] 12%|█▏        | 112/900 [00:10<01:44,  7.56it/s] 13%|█▎        | 113/900 [00:11<01:45,  7.48it/s] 13%|█▎        | 114/900 [00:11<01:45,  7.43it/s] 13%|█▎        | 115/900 [00:11<01:49,  7.18it/s] 13%|█▎        | 116/900 [00:11<01:48,  7.23it/s] 13%|█▎        | 117/900 [00:11<01:47,  7.28it/s] 13%|█▎        | 118/900 [00:11<01:48,  7.19it/s] 13%|█▎        | 119/900 [00:11<01:48,  7.22it/s] 13%|█▎        | 120/900 [00:12<01:48,  7.18it/s] 13%|█▎        | 121/900 [00:12<01:48,  7.20it/s] 14%|█▎        | 122/900 [00:12<01:48,  7.16it/s] 14%|█▎        | 123/900 [00:12<01:49,  7.09it/s] 14%|█▍        | 124/900 [00:12<01:49,  7.11it/s] 14%|█▍        | 125/900 [00:12<01:50,  6.98it/s] 14%|█▍        | 126/900 [00:12<01:50,  7.01it/s] 14%|█▍        | 127/900 [00:13<01:51,  6.95it/s] 14%|█▍        | 128/900 [00:13<01:51,  6.92it/s] 14%|█▍        | 129/900 [00:13<01:53,  6.82it/s] 14%|█▍        | 130/900 [00:13<01:53,  6.81it/s] 15%|█▍        | 131/900 [00:13<01:52,  6.81it/s] 15%|█▍        | 132/900 [00:13<01:53,  6.79it/s] 15%|█▍        | 133/900 [00:13<01:52,  6.81it/s] 15%|█▍        | 134/900 [00:14<01:53,  6.75it/s] 15%|█▌        | 135/900 [00:14<01:53,  6.72it/s] 15%|█▌        | 136/900 [00:14<01:54,  6.66it/s] 15%|█▌        | 137/900 [00:14<01:56,  6.56it/s] 15%|█▌        | 138/900 [00:14<01:55,  6.61it/s] 15%|█▌        | 139/900 [00:14<01:56,  6.53it/s] 16%|█▌        | 140/900 [00:15<01:56,  6.53it/s] 16%|█▌        | 141/900 [00:15<01:55,  6.56it/s] 16%|█▌        | 142/900 [00:15<01:56,  6.48it/s] 16%|█▌        | 143/900 [00:15<01:56,  6.49it/s] 16%|█▌        | 144/900 [00:15<01:57,  6.44it/s] 16%|█▌        | 145/900 [00:15<01:57,  6.43it/s] 16%|█▌        | 146/900 [00:15<01:57,  6.44it/s] 16%|█▋        | 147/900 [00:16<01:58,  6.37it/s] 16%|█▋        | 148/900 [00:16<01:58,  6.33it/s] 17%|█▋        | 149/900 [00:16<02:02,  6.11it/s] 17%|█▋        | 150/900 [00:16<02:03,  6.09it/s] 17%|█▋        | 151/900 [00:16<02:01,  6.15it/s] 17%|█▋        | 152/900 [00:16<02:00,  6.21it/s] 17%|█▋        | 153/900 [00:17<02:01,  6.12it/s] 17%|█▋        | 154/900 [00:17<02:01,  6.14it/s] 17%|█▋        | 155/900 [00:17<02:00,  6.19it/s] 17%|█▋        | 156/900 [00:17<02:00,  6.20it/s] 17%|█▋        | 157/900 [00:17<02:01,  6.13it/s] 18%|█▊        | 158/900 [00:17<02:00,  6.14it/s] 18%|█▊        | 159/900 [00:18<02:00,  6.16it/s] 18%|█▊        | 160/900 [00:18<02:03,  5.99it/s] 18%|█▊        | 161/900 [00:18<02:03,  5.97it/s] 18%|█▊        | 162/900 [00:18<02:03,  5.98it/s] 18%|█▊        | 163/900 [00:18<02:02,  6.02it/s] 18%|█▊        | 164/900 [00:18<02:01,  6.05it/s] 18%|█▊        | 165/900 [00:19<02:02,  6.02it/s] 18%|█▊        | 166/900 [00:19<02:02,  5.99it/s] 19%|█▊        | 167/900 [00:19<02:02,  6.00it/s] 19%|█▊        | 168/900 [00:19<02:02,  6.00it/s] 19%|█▉        | 169/900 [00:19<02:02,  5.99it/s] 19%|█▉        | 170/900 [00:19<02:02,  5.98it/s] 19%|█▉        | 171/900 [00:20<02:02,  5.97it/s] 19%|█▉        | 172/900 [00:20<02:03,  5.92it/s] 19%|█▉        | 173/900 [00:20<02:03,  5.89it/s] 19%|█▉        | 174/900 [00:20<02:04,  5.85it/s] 19%|█▉        | 175/900 [00:20<02:03,  5.85it/s] 20%|█▉        | 176/900 [00:21<02:13,  5.42it/s] 20%|█▉        | 177/900 [00:21<02:11,  5.49it/s] 20%|█▉        | 178/900 [00:21<02:09,  5.56it/s] 20%|█▉        | 179/900 [00:21<02:08,  5.60it/s] 20%|██        | 180/900 [00:21<02:10,  5.53it/s] 20%|██        | 181/900 [00:21<02:16,  5.27it/s] 20%|██        | 182/900 [00:22<02:13,  5.38it/s] 20%|██        | 183/900 [00:22<02:11,  5.46it/s] 20%|██        | 184/900 [00:22<02:09,  5.52it/s] 21%|██        | 185/900 [00:22<02:09,  5.51it/s] 21%|██        | 186/900 [00:22<02:09,  5.51it/s] 21%|██        | 187/900 [00:23<02:09,  5.51it/s] 21%|██        | 188/900 [00:23<02:08,  5.53it/s] 21%|██        | 189/900 [00:23<02:08,  5.53it/s] 21%|██        | 190/900 [00:23<02:08,  5.53it/s] 21%|██        | 191/900 [00:23<02:08,  5.53it/s] 21%|██▏       | 192/900 [00:23<02:08,  5.49it/s] 21%|██▏       | 193/900 [00:24<02:08,  5.48it/s] 22%|██▏       | 194/900 [00:24<02:08,  5.48it/s] 22%|██▏       | 195/900 [00:24<02:08,  5.47it/s] 22%|██▏       | 196/900 [00:24<02:11,  5.35it/s] 22%|██▏       | 197/900 [00:24<02:11,  5.35it/s] 22%|██▏       | 198/900 [00:25<02:11,  5.35it/s] 22%|██▏       | 199/900 [00:25<02:11,  5.35it/s] 22%|██▏       | 200/900 [00:25<02:10,  5.36it/s] 22%|██▏       | 201/900 [00:25<02:10,  5.36it/s] 22%|██▏       | 202/900 [00:25<02:10,  5.35it/s] 23%|██▎       | 203/900 [00:25<02:10,  5.34it/s] 23%|██▎       | 204/900 [00:26<02:10,  5.33it/s] 23%|██▎       | 205/900 [00:26<02:14,  5.16it/s] 23%|██▎       | 206/900 [00:26<02:17,  5.05it/s] 23%|██▎       | 207/900 [00:26<02:16,  5.07it/s] 23%|██▎       | 208/900 [00:26<02:15,  5.11it/s] 23%|██▎       | 209/900 [00:27<02:15,  5.12it/s] 23%|██▎       | 210/900 [00:27<02:14,  5.11it/s] 23%|██▎       | 211/900 [00:27<02:14,  5.13it/s] 24%|██▎       | 212/900 [00:27<02:22,  4.83it/s] 24%|██▎       | 213/900 [00:27<02:22,  4.84it/s] 24%|██▍       | 214/900 [00:28<02:19,  4.91it/s] 24%|██▍       | 215/900 [00:28<02:23,  4.77it/s] 24%|██▍       | 216/900 [00:28<02:25,  4.69it/s] 24%|██▍       | 217/900 [00:28<02:23,  4.75it/s] 24%|██▍       | 218/900 [00:29<02:24,  4.72it/s] 24%|██▍       | 219/900 [00:29<02:25,  4.67it/s] 24%|██▍       | 220/900 [00:29<02:23,  4.74it/s] 25%|██▍       | 221/900 [00:29<02:20,  4.82it/s] 25%|██▍       | 222/900 [00:29<02:31,  4.47it/s] 25%|██▍       | 223/900 [00:30<02:28,  4.55it/s] 25%|██▍       | 224/900 [00:30<02:25,  4.63it/s] 25%|██▌       | 225/900 [00:30<02:33,  4.41it/s] 25%|██▌       | 226/900 [00:30<02:31,  4.44it/s] 25%|██▌       | 227/900 [00:31<02:27,  4.55it/s] 25%|██▌       | 228/900 [00:31<02:25,  4.63it/s] 25%|██▌       | 229/900 [00:31<02:23,  4.69it/s] 26%|██▌       | 230/900 [00:31<02:29,  4.48it/s] 26%|██▌       | 231/900 [00:31<02:28,  4.51it/s] 26%|██▌       | 232/900 [00:32<02:25,  4.59it/s] 26%|██▌       | 233/900 [00:32<02:23,  4.65it/s] 26%|██▌       | 234/900 [00:32<02:21,  4.70it/s] 26%|██▌       | 235/900 [00:32<02:20,  4.73it/s] 26%|██▌       | 236/900 [00:32<02:19,  4.75it/s] 26%|██▋       | 237/900 [00:33<02:20,  4.72it/s] 26%|██▋       | 238/900 [00:33<02:28,  4.45it/s] 27%|██▋       | 239/900 [00:33<02:27,  4.48it/s] 27%|██▋       | 240/900 [00:33<02:25,  4.55it/s] 27%|██▋       | 241/900 [00:34<02:30,  4.36it/s] 27%|██▋       | 242/900 [00:34<02:30,  4.38it/s] 27%|██▋       | 243/900 [00:34<02:27,  4.44it/s] 27%|██▋       | 244/900 [00:34<02:25,  4.51it/s] 27%|██▋       | 245/900 [00:34<02:24,  4.53it/s] 27%|██▋       | 246/900 [00:35<02:24,  4.54it/s] 27%|██▋       | 247/900 [00:35<02:22,  4.57it/s] 28%|██▊       | 248/900 [00:35<02:22,  4.59it/s] 28%|██▊       | 249/900 [00:35<02:21,  4.59it/s] 28%|██▊       | 250/900 [00:36<02:21,  4.59it/s] 28%|██▊       | 251/900 [00:36<02:25,  4.47it/s] 28%|██▊       | 252/900 [00:36<02:33,  4.21it/s] 28%|██▊       | 253/900 [00:36<02:32,  4.23it/s] 28%|██▊       | 254/900 [00:37<02:29,  4.32it/s] 28%|██▊       | 255/900 [00:37<02:28,  4.36it/s] 28%|██▊       | 256/900 [00:37<02:27,  4.38it/s] 29%|██▊       | 257/900 [00:37<02:26,  4.39it/s] 29%|██▊       | 258/900 [00:37<02:32,  4.22it/s] 29%|██▉       | 259/900 [00:38<02:37,  4.07it/s] 29%|██▉       | 260/900 [00:38<02:34,  4.15it/s] 29%|██▉       | 261/900 [00:38<02:30,  4.24it/s] 29%|██▉       | 262/900 [00:38<02:35,  4.10it/s] 29%|██▉       | 263/900 [00:39<02:37,  4.05it/s] 29%|██▉       | 264/900 [00:39<02:34,  4.11it/s] 29%|██▉       | 265/900 [00:39<02:37,  4.03it/s] 30%|██▉       | 266/900 [00:39<02:36,  4.06it/s] 30%|██▉       | 267/900 [00:40<02:32,  4.14it/s] 30%|██▉       | 268/900 [00:40<02:34,  4.09it/s] 30%|██▉       | 269/900 [00:40<02:39,  3.97it/s] 30%|███       | 270/900 [00:40<02:36,  4.02it/s] 30%|███       | 271/900 [00:41<02:38,  3.96it/s] 30%|███       | 272/900 [00:41<02:40,  3.92it/s] 30%|███       | 273/900 [00:41<02:35,  4.02it/s] 30%|███       | 274/900 [00:41<02:33,  4.07it/s] 31%|███       | 275/900 [00:42<02:31,  4.13it/s] 31%|███       | 276/900 [00:42<02:30,  4.16it/s] 31%|███       | 277/900 [00:42<02:39,  3.90it/s] 31%|███       | 278/900 [00:42<02:37,  3.94it/s] 31%|███       | 279/900 [00:43<02:34,  4.01it/s] 31%|███       | 280/900 [00:43<02:32,  4.06it/s] 31%|███       | 281/900 [00:43<02:30,  4.10it/s] 31%|███▏      | 282/900 [00:43<02:29,  4.13it/s] 31%|███▏      | 283/900 [00:44<02:37,  3.91it/s] 32%|███▏      | 284/900 [00:44<02:36,  3.95it/s] 32%|███▏      | 285/900 [00:44<02:33,  4.01it/s] 32%|███▏      | 286/900 [00:44<02:31,  4.04it/s] 32%|███▏      | 287/900 [00:45<02:33,  3.99it/s] 32%|███▏      | 288/900 [00:45<02:36,  3.90it/s] 32%|███▏      | 289/900 [00:45<02:34,  3.94it/s] 32%|███▏      | 290/900 [00:45<02:32,  3.99it/s] 32%|███▏      | 291/900 [00:46<02:45,  3.67it/s] 32%|███▏      | 292/900 [00:46<02:41,  3.76it/s] 33%|███▎      | 293/900 [00:46<02:38,  3.83it/s] 33%|███▎      | 294/900 [00:47<02:39,  3.80it/s] 33%|███▎      | 295/900 [00:47<02:41,  3.75it/s] 33%|███▎      | 296/900 [00:47<02:38,  3.82it/s] 33%|███▎      | 297/900 [00:47<02:35,  3.87it/s] 33%|███▎      | 298/900 [00:48<02:33,  3.92it/s] 33%|███▎      | 299/900 [00:48<02:41,  3.73it/s] 33%|███▎      | 300/900 [00:48<02:39,  3.75it/s] 33%|███▎      | 301/900 [00:48<02:36,  3.83it/s] 34%|███▎      | 302/900 [00:49<02:44,  3.65it/s] 34%|███▎      | 303/900 [00:49<02:43,  3.65it/s] 34%|███▍      | 304/900 [00:49<02:39,  3.73it/s] 34%|███▍      | 305/900 [00:49<02:40,  3.70it/s] 34%|███▍      | 306/900 [00:50<02:37,  3.76it/s] 34%|███▍      | 307/900 [00:50<02:39,  3.72it/s] 34%|███▍      | 308/900 [00:50<02:43,  3.62it/s] 34%|███▍      | 309/900 [00:51<02:40,  3.69it/s] 34%|███▍      | 310/900 [00:51<02:37,  3.75it/s] 35%|███▍      | 311/900 [00:51<02:38,  3.73it/s] 35%|███▍      | 312/900 [00:51<02:36,  3.76it/s] 35%|███▍      | 313/900 [00:52<02:35,  3.78it/s] 35%|███▍      | 314/900 [00:52<02:40,  3.65it/s] 35%|███▌      | 315/900 [00:52<02:42,  3.60it/s] 35%|███▌      | 316/900 [00:52<02:39,  3.66it/s] 35%|███▌      | 317/900 [00:53<02:42,  3.59it/s] 35%|███▌      | 318/900 [00:53<02:41,  3.60it/s] 35%|███▌      | 319/900 [00:53<02:38,  3.67it/s] 36%|███▌      | 320/900 [00:54<02:37,  3.68it/s] 36%|███▌      | 321/900 [00:54<02:35,  3.72it/s] 36%|███▌      | 322/900 [00:54<02:34,  3.75it/s] 36%|███▌      | 323/900 [00:54<02:39,  3.62it/s] 36%|███▌      | 324/900 [00:55<02:40,  3.59it/s] 36%|███▌      | 325/900 [00:55<02:38,  3.64it/s] 36%|███▌      | 326/900 [00:55<02:36,  3.66it/s] 36%|███▋      | 327/900 [00:55<02:35,  3.67it/s] 36%|███▋      | 328/900 [00:56<02:34,  3.69it/s] 37%|███▋      | 329/900 [00:56<02:34,  3.70it/s] 37%|███▋      | 330/900 [00:56<02:33,  3.71it/s] 37%|███▋      | 331/900 [00:57<02:35,  3.67it/s] 37%|███▋      | 332/900 [00:57<02:34,  3.68it/s] 37%|███▋      | 333/900 [00:57<02:34,  3.67it/s] 37%|███▋      | 334/900 [00:57<02:41,  3.50it/s] 37%|███▋      | 335/900 [00:58<02:39,  3.53it/s] 37%|███▋      | 336/900 [00:58<02:38,  3.56it/s] 37%|███▋      | 337/900 [00:58<02:37,  3.58it/s] 38%|███▊      | 338/900 [00:58<02:37,  3.57it/s] 38%|███▊      | 339/900 [00:59<02:41,  3.48it/s] 38%|███▊      | 340/900 [00:59<02:39,  3.52it/s] 38%|███▊      | 341/900 [00:59<02:44,  3.41it/s] 38%|███▊      | 342/900 [01:00<02:41,  3.45it/s] 38%|███▊      | 343/900 [01:00<02:46,  3.35it/s] 38%|███▊      | 344/900 [01:00<02:46,  3.34it/s] 38%|███▊      | 345/900 [01:01<02:42,  3.41it/s] 38%|███▊      | 346/900 [01:01<02:50,  3.25it/s] 39%|███▊      | 347/900 [01:01<02:48,  3.28it/s] 39%|███▊      | 348/900 [01:01<02:44,  3.36it/s] 39%|███▉      | 349/900 [01:02<02:49,  3.24it/s] 39%|███▉      | 350/900 [01:02<02:46,  3.31it/s] 39%|███▉      | 351/900 [01:02<02:42,  3.38it/s] 39%|███▉      | 352/900 [01:03<02:40,  3.42it/s] 39%|███▉      | 353/900 [01:03<02:38,  3.45it/s] 39%|███▉      | 354/900 [01:03<02:37,  3.48it/s] 39%|███▉      | 355/900 [01:04<02:36,  3.48it/s] 40%|███▉      | 356/900 [01:04<02:35,  3.49it/s] 40%|███▉      | 357/900 [01:04<02:38,  3.43it/s] 40%|███▉      | 358/900 [01:04<02:37,  3.43it/s] 40%|███▉      | 359/900 [01:05<02:43,  3.31it/s] 40%|████      | 360/900 [01:05<02:44,  3.28it/s] 40%|████      | 361/900 [01:05<02:41,  3.34it/s] 40%|████      | 362/900 [01:06<02:39,  3.37it/s] 40%|████      | 363/900 [01:06<02:45,  3.24it/s] 40%|████      | 364/900 [01:06<02:47,  3.21it/s] 41%|████      | 365/900 [01:07<02:43,  3.27it/s] 41%|████      | 366/900 [01:07<02:41,  3.31it/s] 41%|████      | 367/900 [01:07<02:39,  3.35it/s] 41%|████      | 368/900 [01:08<02:47,  3.18it/s] 41%|████      | 369/900 [01:08<02:43,  3.24it/s] 41%|████      | 370/900 [01:08<02:49,  3.13it/s] 41%|████      | 371/900 [01:08<02:44,  3.21it/s] 41%|████▏     | 372/900 [01:09<02:42,  3.25it/s] 41%|████▏     | 373/900 [01:09<02:49,  3.11it/s] 42%|████▏     | 374/900 [01:09<02:47,  3.15it/s] 42%|████▏     | 375/900 [01:10<02:43,  3.21it/s] 42%|████▏     | 376/900 [01:10<02:41,  3.24it/s] 42%|████▏     | 377/900 [01:10<02:39,  3.28it/s] 42%|████▏     | 378/900 [01:11<02:38,  3.30it/s] 42%|████▏     | 379/900 [01:11<02:36,  3.32it/s] 42%|████▏     | 380/900 [01:11<02:38,  3.28it/s] 42%|████▏     | 381/900 [01:12<02:37,  3.30it/s] 42%|████▏     | 382/900 [01:12<02:36,  3.31it/s] 43%|████▎     | 383/900 [01:12<02:36,  3.31it/s] 43%|████▎     | 384/900 [01:12<02:35,  3.31it/s] 43%|████▎     | 385/900 [01:13<02:36,  3.30it/s] 43%|████▎     | 386/900 [01:13<02:35,  3.30it/s] 43%|████▎     | 387/900 [01:13<02:35,  3.30it/s] 43%|████▎     | 388/900 [01:14<02:35,  3.30it/s] 43%|████▎     | 389/900 [01:14<02:35,  3.29it/s] 43%|████▎     | 390/900 [01:14<02:34,  3.29it/s] 43%|████▎     | 391/900 [01:15<02:41,  3.15it/s] 44%|████▎     | 392/900 [01:15<02:40,  3.16it/s] 44%|████▎     | 393/900 [01:15<02:39,  3.18it/s] 44%|████▍     | 394/900 [01:16<02:38,  3.19it/s] 44%|████▍     | 395/900 [01:16<02:38,  3.19it/s] 44%|████▍     | 396/900 [01:16<02:44,  3.06it/s] 44%|████▍     | 397/900 [01:17<02:44,  3.07it/s] 44%|████▍     | 398/900 [01:17<02:41,  3.11it/s] 44%|████▍     | 399/900 [01:17<02:49,  2.96it/s] 44%|████▍     | 400/900 [01:18<02:46,  3.00it/s] 45%|████▍     | 401/900 [01:18<02:49,  2.95it/s] 45%|████▍     | 402/900 [01:18<02:46,  3.00it/s] 45%|████▍     | 403/900 [01:19<02:43,  3.04it/s] 45%|████▍     | 404/900 [01:19<02:50,  2.91it/s] 45%|████▌     | 405/900 [01:19<02:46,  2.97it/s] 45%|████▌     | 406/900 [01:20<02:43,  3.02it/s] 45%|████▌     | 407/900 [01:20<02:41,  3.05it/s] 45%|████▌     | 408/900 [01:20<02:40,  3.07it/s] 45%|████▌     | 409/900 [01:20<02:38,  3.10it/s] 46%|████▌     | 410/900 [01:21<02:39,  3.07it/s] 46%|████▌     | 411/900 [01:21<02:38,  3.09it/s] 46%|████▌     | 412/900 [01:21<02:37,  3.10it/s] 46%|████▌     | 413/900 [01:22<02:37,  3.10it/s] 46%|████▌     | 414/900 [01:22<02:36,  3.11it/s] 46%|████▌     | 415/900 [01:22<02:35,  3.11it/s] 46%|████▌     | 416/900 [01:23<02:35,  3.10it/s] 46%|████▋     | 417/900 [01:23<02:35,  3.11it/s] 46%|████▋     | 418/900 [01:23<02:35,  3.10it/s] 47%|████▋     | 419/900 [01:24<02:35,  3.09it/s] 47%|████▋     | 420/900 [01:24<02:35,  3.08it/s] 47%|████▋     | 421/900 [01:24<02:35,  3.08it/s] 47%|████▋     | 422/900 [01:25<02:34,  3.08it/s] 47%|████▋     | 423/900 [01:25<02:35,  3.07it/s] 47%|████▋     | 424/900 [01:25<02:35,  3.06it/s] 47%|████▋     | 425/900 [01:26<02:36,  3.04it/s] 47%|████▋     | 426/900 [01:26<02:36,  3.03it/s] 47%|████▋     | 427/900 [01:26<02:36,  3.03it/s] 48%|████▊     | 428/900 [01:27<02:36,  3.02it/s] 48%|████▊     | 429/900 [01:27<02:37,  3.00it/s] 48%|████▊     | 430/900 [01:27<02:36,  3.00it/s] 48%|████▊     | 431/900 [01:28<02:36,  3.00it/s] 48%|████▊     | 432/900 [01:28<02:36,  3.00it/s] 48%|████▊     | 433/900 [01:28<02:35,  3.00it/s] 48%|████▊     | 434/900 [01:29<02:35,  2.99it/s] 48%|████▊     | 435/900 [01:29<02:35,  2.99it/s] 48%|████▊     | 436/900 [01:29<02:35,  2.98it/s] 49%|████▊     | 437/900 [01:30<02:34,  2.99it/s] 49%|████▊     | 438/900 [01:30<02:35,  2.97it/s] 49%|████▉     | 439/900 [01:30<02:35,  2.96it/s] 49%|████▉     | 440/900 [01:31<02:35,  2.96it/s] 49%|████▉     | 441/900 [01:31<02:35,  2.95it/s] 49%|████▉     | 442/900 [01:31<02:35,  2.95it/s] 49%|████▉     | 443/900 [01:32<02:35,  2.94it/s] 49%|████▉     | 444/900 [01:32<02:35,  2.93it/s] 49%|████▉     | 445/900 [01:32<02:35,  2.94it/s] 50%|████▉     | 446/900 [01:33<02:34,  2.93it/s] 50%|████▉     | 447/900 [01:33<02:35,  2.92it/s] 50%|████▉     | 448/900 [01:33<02:36,  2.89it/s] 50%|████▉     | 449/900 [01:34<02:38,  2.85it/s] 50%|█████     | 450/900 [01:34<02:39,  2.83it/s] 50%|█████     | 451/900 [01:35<02:39,  2.82it/s] 50%|█████     | 452/900 [01:35<02:37,  2.84it/s] 50%|█████     | 453/900 [01:35<02:36,  2.85it/s] 50%|█████     | 454/900 [01:36<02:36,  2.86it/s] 51%|█████     | 455/900 [01:36<02:35,  2.87it/s] 51%|█████     | 456/900 [01:36<02:36,  2.84it/s] 51%|█████     | 457/900 [01:37<02:35,  2.85it/s] 51%|█████     | 458/900 [01:37<02:35,  2.85it/s] 51%|█████     | 459/900 [01:37<02:34,  2.85it/s] 51%|█████     | 460/900 [01:38<02:34,  2.85it/s] 51%|█████     | 461/900 [01:38<02:34,  2.85it/s] 51%|█████▏    | 462/900 [01:38<02:33,  2.85it/s] 51%|█████▏    | 463/900 [01:39<02:33,  2.86it/s] 52%|█████▏    | 464/900 [01:39<02:32,  2.86it/s] 52%|█████▏    | 465/900 [01:39<02:33,  2.84it/s] 52%|█████▏    | 466/900 [01:40<02:35,  2.78it/s] 52%|█████▏    | 467/900 [01:40<02:35,  2.78it/s] 52%|█████▏    | 468/900 [01:41<02:34,  2.79it/s] 52%|█████▏    | 469/900 [01:41<02:43,  2.63it/s] 52%|█████▏    | 470/900 [01:41<02:42,  2.65it/s] 52%|█████▏    | 471/900 [01:42<02:39,  2.69it/s] 52%|█████▏    | 472/900 [01:42<02:41,  2.65it/s] 53%|█████▎    | 473/900 [01:42<02:40,  2.66it/s] 53%|█████▎    | 474/900 [01:43<02:43,  2.61it/s] 53%|█████▎    | 475/900 [01:43<02:40,  2.64it/s] 53%|█████▎    | 476/900 [01:44<02:44,  2.58it/s] 53%|█████▎    | 477/900 [01:44<02:41,  2.62it/s] 53%|█████▎    | 478/900 [01:44<02:43,  2.59it/s] 53%|█████▎    | 479/900 [01:45<02:44,  2.56it/s] 53%|█████▎    | 480/900 [01:45<02:41,  2.60it/s] 53%|█████▎    | 481/900 [01:46<02:46,  2.52it/s] 54%|█████▎    | 482/900 [01:46<02:47,  2.50it/s] 54%|█████▎    | 483/900 [01:46<02:42,  2.56it/s] 54%|█████▍    | 484/900 [01:47<02:44,  2.52it/s] 54%|█████▍    | 485/900 [01:47<02:42,  2.56it/s] 54%|█████▍    | 486/900 [01:48<02:39,  2.60it/s] 54%|█████▍    | 487/900 [01:48<02:36,  2.63it/s] 54%|█████▍    | 488/900 [01:48<02:37,  2.61it/s] 54%|█████▍    | 489/900 [01:49<02:35,  2.64it/s] 54%|█████▍    | 490/900 [01:49<02:34,  2.66it/s] 55%|█████▍    | 491/900 [01:49<02:33,  2.67it/s] 55%|█████▍    | 492/900 [01:50<02:32,  2.68it/s] 55%|█████▍    | 493/900 [01:50<02:35,  2.61it/s] 55%|█████▍    | 494/900 [01:51<02:34,  2.63it/s] 55%|█████▌    | 495/900 [01:51<02:33,  2.64it/s] 55%|█████▌    | 496/900 [01:51<02:32,  2.65it/s] 55%|█████▌    | 497/900 [01:52<02:31,  2.66it/s] 55%|█████▌    | 498/900 [01:52<02:30,  2.67it/s] 55%|█████▌    | 499/900 [01:52<02:30,  2.67it/s] 56%|█████▌    | 500/900 [01:53<02:30,  2.66it/s] 56%|█████▌    | 501/900 [01:53<02:29,  2.66it/s] 56%|█████▌    | 502/900 [01:54<02:29,  2.65it/s] 56%|█████▌    | 503/900 [01:54<02:29,  2.65it/s] 56%|█████▌    | 504/900 [01:54<02:29,  2.65it/s] 56%|█████▌    | 505/900 [01:55<02:28,  2.65it/s] 56%|█████▌    | 506/900 [01:55<02:28,  2.65it/s] 56%|█████▋    | 507/900 [01:55<02:28,  2.65it/s] 56%|█████▋    | 508/900 [01:56<02:28,  2.64it/s] 57%|█████▋    | 509/900 [01:56<02:28,  2.64it/s] 57%|█████▋    | 510/900 [01:57<02:27,  2.64it/s] 57%|█████▋    | 511/900 [01:57<02:28,  2.63it/s] 57%|█████▋    | 512/900 [01:57<02:27,  2.63it/s] 57%|█████▋    | 513/900 [01:58<02:27,  2.62it/s] 57%|█████▋    | 514/900 [01:58<02:27,  2.62it/s] 57%|█████▋    | 515/900 [01:58<02:27,  2.62it/s] 57%|█████▋    | 516/900 [01:59<02:27,  2.60it/s] 57%|█████▋    | 517/900 [01:59<02:27,  2.60it/s] 58%|█████▊    | 518/900 [02:00<02:27,  2.59it/s] 58%|█████▊    | 519/900 [02:00<02:27,  2.58it/s] 58%|█████▊    | 520/900 [02:00<02:27,  2.58it/s] 58%|█████▊    | 521/900 [02:01<02:26,  2.58it/s] 58%|█████▊    | 522/900 [02:01<02:26,  2.58it/s] 58%|█████▊    | 523/900 [02:02<02:26,  2.57it/s] 58%|█████▊    | 524/900 [02:02<02:26,  2.57it/s] 58%|█████▊    | 525/900 [02:02<02:26,  2.56it/s] 58%|█████▊    | 526/900 [02:03<02:26,  2.56it/s] 59%|█████▊    | 527/900 [02:03<02:25,  2.56it/s] 59%|█████▊    | 528/900 [02:04<02:26,  2.55it/s] 59%|█████▉    | 529/900 [02:04<02:25,  2.54it/s] 59%|█████▉    | 530/900 [02:04<02:25,  2.54it/s] 59%|█████▉    | 531/900 [02:05<02:25,  2.53it/s] 59%|█████▉    | 532/900 [02:05<02:25,  2.54it/s] 59%|█████▉    | 533/900 [02:06<02:25,  2.53it/s] 59%|█████▉    | 534/900 [02:06<02:24,  2.52it/s] 59%|█████▉    | 535/900 [02:06<02:24,  2.52it/s] 60%|█████▉    | 536/900 [02:07<02:24,  2.52it/s] 60%|█████▉    | 537/900 [02:07<02:24,  2.52it/s] 60%|█████▉    | 538/900 [02:08<02:23,  2.52it/s] 60%|█████▉    | 539/900 [02:08<02:23,  2.52it/s] 60%|██████    | 540/900 [02:08<02:23,  2.51it/s] 60%|██████    | 541/900 [02:09<02:22,  2.51it/s] 60%|██████    | 542/900 [02:09<02:22,  2.51it/s] 60%|██████    | 543/900 [02:10<02:22,  2.51it/s] 60%|██████    | 544/900 [02:10<02:22,  2.49it/s] 61%|██████    | 545/900 [02:10<02:23,  2.48it/s] 61%|██████    | 546/900 [02:11<02:23,  2.47it/s] 61%|██████    | 547/900 [02:11<02:25,  2.43it/s] 61%|██████    | 548/900 [02:12<02:29,  2.36it/s] 61%|██████    | 549/900 [02:12<02:27,  2.38it/s] 61%|██████    | 550/900 [02:12<02:25,  2.40it/s] 61%|██████    | 551/900 [02:13<02:25,  2.41it/s] 61%|██████▏   | 552/900 [02:13<02:24,  2.41it/s] 61%|██████▏   | 553/900 [02:14<02:23,  2.41it/s] 62%|██████▏   | 554/900 [02:14<02:23,  2.41it/s] 62%|██████▏   | 555/900 [02:15<02:22,  2.41it/s] 62%|██████▏   | 556/900 [02:15<02:22,  2.41it/s] 62%|██████▏   | 557/900 [02:15<02:22,  2.41it/s] 62%|██████▏   | 558/900 [02:16<02:22,  2.40it/s] 62%|██████▏   | 559/900 [02:16<02:22,  2.40it/s] 62%|██████▏   | 560/900 [02:17<02:22,  2.39it/s] 62%|██████▏   | 561/900 [02:17<02:21,  2.39it/s] 62%|██████▏   | 562/900 [02:17<02:21,  2.39it/s] 63%|██████▎   | 563/900 [02:18<02:21,  2.39it/s] 63%|██████▎   | 564/900 [02:18<02:20,  2.39it/s] 63%|██████▎   | 565/900 [02:19<02:20,  2.39it/s] 63%|██████▎   | 566/900 [02:19<02:19,  2.39it/s] 63%|██████▎   | 567/900 [02:20<02:19,  2.39it/s] 63%|██████▎   | 568/900 [02:20<02:19,  2.37it/s] 63%|██████▎   | 569/900 [02:20<02:19,  2.37it/s] 63%|██████▎   | 570/900 [02:21<02:19,  2.37it/s] 63%|██████▎   | 571/900 [02:21<02:19,  2.36it/s] 64%|██████▎   | 572/900 [02:22<02:19,  2.36it/s] 64%|██████▎   | 573/900 [02:22<02:19,  2.35it/s] 64%|██████▍   | 574/900 [02:23<02:22,  2.29it/s] 64%|██████▍   | 575/900 [02:23<02:21,  2.29it/s] 64%|██████▍   | 576/900 [02:23<02:20,  2.31it/s] 64%|██████▍   | 577/900 [02:24<02:18,  2.33it/s] 64%|██████▍   | 578/900 [02:24<02:18,  2.33it/s] 64%|██████▍   | 579/900 [02:25<02:18,  2.31it/s] 64%|██████▍   | 580/900 [02:25<02:18,  2.31it/s] 65%|██████▍   | 581/900 [02:26<02:17,  2.31it/s] 65%|██████▍   | 582/900 [02:26<02:17,  2.32it/s] 65%|██████▍   | 583/900 [02:26<02:16,  2.32it/s] 65%|██████▍   | 584/900 [02:27<02:16,  2.31it/s] 65%|██████▌   | 585/900 [02:27<02:16,  2.31it/s] 65%|██████▌   | 586/900 [02:28<02:17,  2.29it/s] 65%|██████▌   | 587/900 [02:28<02:16,  2.29it/s] 65%|██████▌   | 588/900 [02:29<02:15,  2.30it/s] 65%|██████▌   | 589/900 [02:29<02:15,  2.30it/s] 66%|██████▌   | 590/900 [02:29<02:15,  2.29it/s] 66%|██████▌   | 591/900 [02:30<02:14,  2.29it/s] 66%|██████▌   | 592/900 [02:30<02:14,  2.29it/s] 66%|██████▌   | 593/900 [02:31<02:15,  2.26it/s] 66%|██████▌   | 594/900 [02:31<02:14,  2.27it/s] 66%|██████▌   | 595/900 [02:32<02:14,  2.27it/s] 66%|██████▌   | 596/900 [02:32<02:14,  2.27it/s] 66%|██████▋   | 597/900 [02:33<02:15,  2.23it/s] 66%|██████▋   | 598/900 [02:33<02:14,  2.24it/s] 67%|██████▋   | 599/900 [02:33<02:13,  2.25it/s] 67%|██████▋   | 600/900 [02:34<02:15,  2.22it/s] 67%|██████▋   | 601/900 [02:34<02:13,  2.24it/s] 67%|██████▋   | 602/900 [02:35<02:12,  2.24it/s] 67%|██████▋   | 603/900 [02:35<02:16,  2.18it/s] 67%|██████▋   | 604/900 [02:36<02:14,  2.20it/s] 67%|██████▋   | 605/900 [02:36<02:15,  2.18it/s] 67%|██████▋   | 606/900 [02:37<02:17,  2.14it/s] 67%|██████▋   | 607/900 [02:37<02:16,  2.15it/s] 68%|██████▊   | 608/900 [02:38<02:13,  2.18it/s] 68%|██████▊   | 609/900 [02:38<02:11,  2.21it/s] 68%|██████▊   | 610/900 [02:39<02:12,  2.19it/s] 68%|██████▊   | 611/900 [02:39<02:11,  2.20it/s] 68%|██████▊   | 612/900 [02:40<02:18,  2.07it/s] 68%|██████▊   | 613/900 [02:40<02:18,  2.07it/s] 68%|██████▊   | 614/900 [02:40<02:18,  2.07it/s] 68%|██████▊   | 615/900 [02:41<02:14,  2.11it/s] 68%|██████▊   | 616/900 [02:41<02:14,  2.12it/s] 69%|██████▊   | 617/900 [02:42<02:12,  2.14it/s] 69%|██████▊   | 618/900 [02:42<02:10,  2.16it/s] 69%|██████▉   | 619/900 [02:43<02:09,  2.17it/s] 69%|██████▉   | 620/900 [02:43<02:09,  2.17it/s] 69%|██████▉   | 621/900 [02:44<02:08,  2.18it/s] 69%|██████▉   | 622/900 [02:44<02:07,  2.18it/s] 69%|██████▉   | 623/900 [02:45<02:07,  2.17it/s] 69%|██████▉   | 624/900 [02:45<02:06,  2.18it/s] 69%|██████▉   | 625/900 [02:46<02:05,  2.19it/s] 70%|██████▉   | 626/900 [02:46<02:05,  2.18it/s] 70%|██████▉   | 627/900 [02:46<02:04,  2.18it/s] 70%|██████▉   | 628/900 [02:47<02:04,  2.19it/s] 70%|██████▉   | 629/900 [02:47<02:03,  2.19it/s] 70%|███████   | 630/900 [02:48<02:04,  2.17it/s] 70%|███████   | 631/900 [02:48<02:03,  2.18it/s] 70%|███████   | 632/900 [02:49<02:03,  2.18it/s] 70%|███████   | 633/900 [02:49<02:02,  2.18it/s] 70%|███████   | 634/900 [02:50<02:01,  2.18it/s] 71%|███████   | 635/900 [02:50<02:01,  2.18it/s] 71%|███████   | 636/900 [02:51<02:01,  2.17it/s] 71%|███████   | 637/900 [02:51<02:01,  2.17it/s] 71%|███████   | 638/900 [02:52<02:00,  2.17it/s] 71%|███████   | 639/900 [02:52<02:00,  2.17it/s] 71%|███████   | 640/900 [02:52<02:00,  2.16it/s] 71%|███████   | 641/900 [02:53<02:00,  2.16it/s] 71%|███████▏  | 642/900 [02:53<02:00,  2.15it/s] 71%|███████▏  | 643/900 [02:54<02:00,  2.14it/s] 72%|███████▏  | 644/900 [02:54<01:59,  2.14it/s] 72%|███████▏  | 645/900 [02:55<01:59,  2.14it/s] 72%|███████▏  | 646/900 [02:55<01:58,  2.14it/s] 72%|███████▏  | 647/900 [02:56<01:58,  2.14it/s] 72%|███████▏  | 648/900 [02:56<01:58,  2.13it/s] 72%|███████▏  | 649/900 [02:57<01:57,  2.14it/s] 72%|███████▏  | 650/900 [02:57<01:57,  2.13it/s] 72%|███████▏  | 651/900 [02:58<01:56,  2.13it/s] 72%|███████▏  | 652/900 [02:58<01:56,  2.13it/s] 73%|███████▎  | 653/900 [02:59<01:56,  2.13it/s] 73%|███████▎  | 654/900 [02:59<01:56,  2.12it/s] 73%|███████▎  | 655/900 [02:59<01:55,  2.12it/s] 73%|███████▎  | 656/900 [03:00<01:55,  2.11it/s] 73%|███████▎  | 657/900 [03:00<01:54,  2.11it/s] 73%|███████▎  | 658/900 [03:01<01:54,  2.11it/s] 73%|███████▎  | 659/900 [03:01<01:54,  2.11it/s] 73%|███████▎  | 660/900 [03:02<01:53,  2.11it/s] 73%|███████▎  | 661/900 [03:02<01:53,  2.11it/s] 74%|███████▎  | 662/900 [03:03<01:53,  2.10it/s] 74%|███████▎  | 663/900 [03:03<01:52,  2.10it/s] 74%|███████▍  | 664/900 [03:04<01:52,  2.10it/s] 74%|███████▍  | 665/900 [03:04<01:52,  2.10it/s] 74%|███████▍  | 666/900 [03:05<01:52,  2.09it/s] 74%|███████▍  | 667/900 [03:05<01:51,  2.08it/s] 74%|███████▍  | 668/900 [03:06<01:51,  2.08it/s] 74%|███████▍  | 669/900 [03:06<01:51,  2.07it/s] 74%|███████▍  | 670/900 [03:07<01:51,  2.07it/s] 75%|███████▍  | 671/900 [03:07<01:50,  2.07it/s] 75%|███████▍  | 672/900 [03:08<01:50,  2.07it/s] 75%|███████▍  | 673/900 [03:08<01:49,  2.07it/s] 75%|███████▍  | 674/900 [03:09<01:49,  2.06it/s] 75%|███████▌  | 675/900 [03:09<01:49,  2.06it/s] 75%|███████▌  | 676/900 [03:10<01:49,  2.05it/s] 75%|███████▌  | 677/900 [03:10<01:48,  2.05it/s] 75%|███████▌  | 678/900 [03:11<01:48,  2.05it/s] 75%|███████▌  | 679/900 [03:11<01:47,  2.05it/s] 76%|███████▌  | 680/900 [03:12<01:47,  2.05it/s] 76%|███████▌  | 681/900 [03:12<01:46,  2.05it/s] 76%|███████▌  | 682/900 [03:13<01:46,  2.04it/s] 76%|███████▌  | 683/900 [03:13<01:46,  2.04it/s] 76%|███████▌  | 684/900 [03:13<01:45,  2.04it/s] 76%|███████▌  | 685/900 [03:14<01:45,  2.04it/s] 76%|███████▌  | 686/900 [03:14<01:45,  2.03it/s] 76%|███████▋  | 687/900 [03:15<01:44,  2.04it/s] 76%|███████▋  | 688/900 [03:15<01:44,  2.04it/s] 77%|███████▋  | 689/900 [03:16<01:44,  2.03it/s] 77%|███████▋  | 690/900 [03:16<01:43,  2.03it/s] 77%|███████▋  | 691/900 [03:17<01:43,  2.03it/s] 77%|███████▋  | 692/900 [03:17<01:43,  2.02it/s] 77%|███████▋  | 693/900 [03:18<01:43,  2.01it/s] 77%|███████▋  | 694/900 [03:18<01:42,  2.01it/s] 77%|███████▋  | 695/900 [03:19<01:42,  2.00it/s] 77%|███████▋  | 696/900 [03:19<01:41,  2.00it/s] 77%|███████▋  | 697/900 [03:20<01:41,  2.00it/s] 78%|███████▊  | 698/900 [03:20<01:41,  2.00it/s] 78%|███████▊  | 699/900 [03:21<01:40,  2.00it/s] 78%|███████▊  | 700/900 [03:21<01:40,  2.00it/s] 78%|███████▊  | 701/900 [03:22<01:39,  1.99it/s] 78%|███████▊  | 702/900 [03:22<01:39,  1.99it/s] 78%|███████▊  | 703/900 [03:23<01:38,  1.99it/s] 78%|███████▊  | 704/900 [03:23<01:38,  1.99it/s] 78%|███████▊  | 705/900 [03:24<01:38,  1.99it/s] 78%|███████▊  | 706/900 [03:24<01:38,  1.98it/s] 79%|███████▊  | 707/900 [03:25<01:37,  1.98it/s] 79%|███████▊  | 708/900 [03:25<01:37,  1.97it/s] 79%|███████▉  | 709/900 [03:26<01:36,  1.97it/s] 79%|███████▉  | 710/900 [03:27<01:36,  1.97it/s] 79%|███████▉  | 711/900 [03:27<01:35,  1.97it/s] 79%|███████▉  | 712/900 [03:28<01:35,  1.97it/s] 79%|███████▉  | 713/900 [03:28<01:34,  1.97it/s] 79%|███████▉  | 714/900 [03:29<01:34,  1.97it/s] 79%|███████▉  | 715/900 [03:29<01:34,  1.96it/s] 80%|███████▉  | 716/900 [03:30<01:33,  1.96it/s] 80%|███████▉  | 717/900 [03:30<01:33,  1.96it/s] 80%|███████▉  | 718/900 [03:31<01:33,  1.95it/s] 80%|███████▉  | 719/900 [03:31<01:32,  1.95it/s] 80%|████████  | 720/900 [03:32<01:32,  1.94it/s] 80%|████████  | 721/900 [03:32<01:32,  1.94it/s] 80%|████████  | 722/900 [03:33<01:31,  1.95it/s] 80%|████████  | 723/900 [03:33<01:30,  1.95it/s] 80%|████████  | 724/900 [03:34<01:30,  1.94it/s] 81%|████████  | 725/900 [03:34<01:30,  1.93it/s] 81%|████████  | 726/900 [03:35<01:29,  1.93it/s] 81%|████████  | 727/900 [03:35<01:29,  1.94it/s] 81%|████████  | 728/900 [03:36<01:28,  1.94it/s] 81%|████████  | 729/900 [03:36<01:28,  1.93it/s] 81%|████████  | 730/900 [03:37<01:28,  1.93it/s] 81%|████████  | 731/900 [03:37<01:27,  1.92it/s] 81%|████████▏ | 732/900 [03:38<01:27,  1.92it/s] 81%|████████▏ | 733/900 [03:38<01:27,  1.91it/s] 82%|████████▏ | 734/900 [03:39<01:27,  1.90it/s] 82%|████████▏ | 735/900 [03:39<01:26,  1.90it/s] 82%|████████▏ | 736/900 [03:40<01:26,  1.90it/s] 82%|████████▏ | 737/900 [03:40<01:25,  1.91it/s] 82%|████████▏ | 738/900 [03:41<01:25,  1.90it/s] 82%|████████▏ | 739/900 [03:42<01:24,  1.90it/s] 82%|████████▏ | 740/900 [03:42<01:24,  1.90it/s] 82%|████████▏ | 741/900 [03:43<01:23,  1.90it/s] 82%|████████▏ | 742/900 [03:43<01:23,  1.90it/s] 83%|████████▎ | 743/900 [03:44<01:22,  1.90it/s] 83%|████████▎ | 744/900 [03:44<01:22,  1.90it/s] 83%|████████▎ | 745/900 [03:45<01:21,  1.90it/s] 83%|████████▎ | 746/900 [03:45<01:21,  1.89it/s] 83%|████████▎ | 747/900 [03:46<01:21,  1.89it/s] 83%|████████▎ | 748/900 [03:46<01:21,  1.87it/s] 83%|████████▎ | 749/900 [03:47<01:20,  1.87it/s] 83%|████████▎ | 750/900 [03:47<01:20,  1.87it/s] 83%|████████▎ | 751/900 [03:48<01:19,  1.87it/s] 84%|████████▎ | 752/900 [03:48<01:19,  1.87it/s] 84%|████████▎ | 753/900 [03:49<01:18,  1.87it/s] 84%|████████▍ | 754/900 [03:50<01:18,  1.87it/s] 84%|████████▍ | 755/900 [03:50<01:17,  1.86it/s] 84%|████████▍ | 756/900 [03:51<01:17,  1.86it/s] 84%|████████▍ | 757/900 [03:51<01:16,  1.86it/s] 84%|████████▍ | 758/900 [03:52<01:16,  1.86it/s] 84%|████████▍ | 759/900 [03:52<01:15,  1.86it/s] 84%|████████▍ | 760/900 [03:53<01:15,  1.86it/s] 85%|████████▍ | 761/900 [03:53<01:14,  1.86it/s] 85%|████████▍ | 762/900 [03:54<01:14,  1.85it/s] 85%|████████▍ | 763/900 [03:54<01:13,  1.85it/s] 85%|████████▍ | 764/900 [03:55<01:13,  1.85it/s] 85%|████████▌ | 765/900 [03:55<01:13,  1.83it/s] 85%|████████▌ | 766/900 [03:56<01:12,  1.84it/s] 85%|████████▌ | 767/900 [03:57<01:12,  1.84it/s] 85%|████████▌ | 768/900 [03:57<01:11,  1.84it/s] 85%|████████▌ | 769/900 [03:58<01:12,  1.81it/s] 86%|████████▌ | 770/900 [03:58<01:11,  1.82it/s] 86%|████████▌ | 771/900 [03:59<01:11,  1.81it/s] 86%|████████▌ | 772/900 [03:59<01:10,  1.81it/s] 86%|████████▌ | 773/900 [04:00<01:10,  1.81it/s] 86%|████████▌ | 774/900 [04:00<01:09,  1.81it/s] 86%|████████▌ | 775/900 [04:01<01:08,  1.81it/s] 86%|████████▌ | 776/900 [04:02<01:08,  1.81it/s] 86%|████████▋ | 777/900 [04:02<01:07,  1.81it/s] 86%|████████▋ | 778/900 [04:03<01:07,  1.81it/s] 87%|████████▋ | 779/900 [04:03<01:06,  1.81it/s] 87%|████████▋ | 780/900 [04:04<01:06,  1.80it/s] 87%|████████▋ | 781/900 [04:04<01:05,  1.81it/s] 87%|████████▋ | 782/900 [04:05<01:05,  1.80it/s] 87%|████████▋ | 783/900 [04:05<01:04,  1.80it/s] 87%|████████▋ | 784/900 [04:06<01:04,  1.80it/s] 87%|████████▋ | 785/900 [04:07<01:03,  1.81it/s] 87%|████████▋ | 786/900 [04:07<01:03,  1.80it/s] 87%|████████▋ | 787/900 [04:08<01:02,  1.81it/s] 88%|████████▊ | 788/900 [04:08<01:02,  1.80it/s] 88%|████████▊ | 789/900 [04:09<01:01,  1.80it/s] 88%|████████▊ | 790/900 [04:09<01:01,  1.80it/s] 88%|████████▊ | 791/900 [04:10<01:00,  1.79it/s] 88%|████████▊ | 792/900 [04:10<01:00,  1.79it/s] 88%|████████▊ | 793/900 [04:11<00:59,  1.79it/s] 88%|████████▊ | 794/900 [04:12<00:59,  1.79it/s] 88%|████████▊ | 795/900 [04:12<00:58,  1.79it/s] 88%|████████▊ | 796/900 [04:13<00:58,  1.79it/s] 89%|████████▊ | 797/900 [04:13<00:57,  1.79it/s] 89%|████████▊ | 798/900 [04:14<00:57,  1.79it/s] 89%|████████▉ | 799/900 [04:14<00:56,  1.79it/s] 89%|████████▉ | 800/900 [04:15<00:56,  1.78it/s] 89%|████████▉ | 801/900 [04:15<00:55,  1.77it/s] 89%|████████▉ | 802/900 [04:16<00:55,  1.77it/s] 89%|████████▉ | 803/900 [04:17<00:54,  1.76it/s] 89%|████████▉ | 804/900 [04:17<00:54,  1.76it/s] 89%|████████▉ | 805/900 [04:18<00:53,  1.76it/s] 90%|████████▉ | 806/900 [04:18<00:53,  1.76it/s] 90%|████████▉ | 807/900 [04:19<00:52,  1.76it/s] 90%|████████▉ | 808/900 [04:19<00:52,  1.76it/s] 90%|████████▉ | 809/900 [04:20<00:51,  1.75it/s] 90%|█████████ | 810/900 [04:21<00:51,  1.75it/s] 90%|█████████ | 811/900 [04:21<00:50,  1.75it/s] 90%|█████████ | 812/900 [04:22<00:50,  1.76it/s] 90%|█████████ | 813/900 [04:22<00:49,  1.75it/s] 90%|█████████ | 814/900 [04:23<00:49,  1.75it/s] 91%|█████████ | 815/900 [04:23<00:48,  1.75it/s] 91%|█████████ | 816/900 [04:24<00:48,  1.75it/s] 91%|█████████ | 817/900 [04:25<00:47,  1.74it/s] 91%|█████████ | 818/900 [04:25<00:46,  1.74it/s] 91%|█████████ | 819/900 [04:26<00:46,  1.74it/s] 91%|█████████ | 820/900 [04:26<00:45,  1.74it/s] 91%|█████████ | 821/900 [04:27<00:45,  1.73it/s] 91%|█████████▏| 822/900 [04:27<00:45,  1.73it/s] 91%|█████████▏| 823/900 [04:28<00:44,  1.73it/s] 92%|█████████▏| 824/900 [04:29<00:43,  1.73it/s] 92%|█████████▏| 825/900 [04:29<00:43,  1.73it/s] 92%|█████████▏| 826/900 [04:30<00:42,  1.73it/s] 92%|█████████▏| 827/900 [04:30<00:42,  1.72it/s] 92%|█████████▏| 828/900 [04:31<00:41,  1.72it/s] 92%|█████████▏| 829/900 [04:32<00:41,  1.72it/s] 92%|█████████▏| 830/900 [04:32<00:40,  1.72it/s] 92%|█████████▏| 831/900 [04:33<00:40,  1.72it/s] 92%|█████████▏| 832/900 [04:33<00:39,  1.72it/s] 93%|█████████▎| 833/900 [04:34<00:39,  1.72it/s] 93%|█████████▎| 834/900 [04:34<00:38,  1.71it/s] 93%|█████████▎| 835/900 [04:35<00:37,  1.71it/s] 93%|█████████▎| 836/900 [04:36<00:37,  1.71it/s] 93%|█████████▎| 837/900 [04:36<00:36,  1.71it/s] 93%|█████████▎| 838/900 [04:37<00:36,  1.71it/s] 93%|█████████▎| 839/900 [04:37<00:35,  1.70it/s] 93%|█████████▎| 840/900 [04:38<00:35,  1.71it/s] 93%|█████████▎| 841/900 [04:39<00:34,  1.71it/s] 94%|█████████▎| 842/900 [04:39<00:33,  1.71it/s] 94%|█████████▎| 843/900 [04:40<00:33,  1.71it/s] 94%|█████████▍| 844/900 [04:40<00:32,  1.70it/s] 94%|█████████▍| 845/900 [04:41<00:32,  1.70it/s] 94%|█████████▍| 846/900 [04:41<00:31,  1.70it/s] 94%|█████████▍| 847/900 [04:42<00:31,  1.70it/s] 94%|█████████▍| 848/900 [04:43<00:30,  1.70it/s] 94%|█████████▍| 849/900 [04:43<00:30,  1.70it/s] 94%|█████████▍| 850/900 [04:44<00:29,  1.69it/s] 95%|█████████▍| 851/900 [04:44<00:29,  1.69it/s] 95%|█████████▍| 852/900 [04:45<00:28,  1.68it/s] 95%|█████████▍| 853/900 [04:46<00:28,  1.67it/s] 95%|█████████▍| 854/900 [04:46<00:27,  1.66it/s] 95%|█████████▌| 855/900 [04:47<00:27,  1.67it/s] 95%|█████████▌| 856/900 [04:47<00:26,  1.66it/s] 95%|█████████▌| 857/900 [04:48<00:25,  1.67it/s] 95%|█████████▌| 858/900 [04:49<00:25,  1.67it/s] 95%|█████████▌| 859/900 [04:49<00:24,  1.67it/s] 96%|█████████▌| 860/900 [04:50<00:23,  1.67it/s] 96%|█████████▌| 861/900 [04:50<00:23,  1.67it/s] 96%|█████████▌| 862/900 [04:51<00:22,  1.67it/s] 96%|█████████▌| 863/900 [04:52<00:22,  1.67it/s] 96%|█████████▌| 864/900 [04:52<00:21,  1.66it/s] 96%|█████████▌| 865/900 [04:53<00:21,  1.66it/s] 96%|█████████▌| 866/900 [04:53<00:20,  1.65it/s] 96%|█████████▋| 867/900 [04:54<00:19,  1.66it/s] 96%|█████████▋| 868/900 [04:55<00:19,  1.65it/s] 97%|█████████▋| 869/900 [04:55<00:18,  1.65it/s] 97%|█████████▋| 870/900 [04:56<00:18,  1.65it/s] 97%|█████████▋| 871/900 [04:57<00:17,  1.64it/s] 97%|█████████▋| 872/900 [04:57<00:17,  1.65it/s] 97%|█████████▋| 873/900 [04:58<00:16,  1.64it/s] 97%|█████████▋| 874/900 [04:58<00:15,  1.64it/s] 97%|█████████▋| 875/900 [04:59<00:15,  1.63it/s] 97%|█████████▋| 876/900 [05:00<00:14,  1.64it/s] 97%|█████████▋| 877/900 [05:00<00:14,  1.63it/s] 98%|█████████▊| 878/900 [05:01<00:13,  1.63it/s] 98%|█████████▊| 879/900 [05:01<00:12,  1.63it/s] 98%|█████████▊| 880/900 [05:02<00:12,  1.63it/s] 98%|█████████▊| 881/900 [05:03<00:11,  1.63it/s] 98%|█████████▊| 882/900 [05:03<00:11,  1.62it/s] 98%|█████████▊| 883/900 [05:04<00:10,  1.62it/s] 98%|█████████▊| 884/900 [05:05<00:09,  1.62it/s] 98%|█████████▊| 885/900 [05:05<00:09,  1.62it/s] 98%|█████████▊| 886/900 [05:06<00:08,  1.62it/s] 99%|█████████▊| 887/900 [05:06<00:08,  1.62it/s] 99%|█████████▊| 888/900 [05:07<00:07,  1.62it/s] 99%|█████████▉| 889/900 [05:08<00:06,  1.62it/s] 99%|█████████▉| 890/900 [05:08<00:06,  1.62it/s] 99%|█████████▉| 891/900 [05:09<00:05,  1.61it/s] 99%|█████████▉| 892/900 [05:09<00:04,  1.61it/s] 99%|█████████▉| 893/900 [05:10<00:04,  1.61it/s] 99%|█████████▉| 894/900 [05:11<00:03,  1.61it/s] 99%|█████████▉| 895/900 [05:11<00:03,  1.60it/s]100%|█████████▉| 896/900 [05:12<00:02,  1.61it/s]100%|█████████▉| 897/900 [05:13<00:01,  1.60it/s]100%|█████████▉| 898/900 [05:13<00:01,  1.60it/s]100%|█████████▉| 899/900 [05:14<00:00,  1.60it/s]100%|██████████| 900/900 [05:14<00:00,  1.59it/s]100%|██████████| 900/900 [05:14<00:00,  2.86it/s]
plt.figure(figsize=(10, 4))
plt.plot(M_values, var_bs_values, marker='o', color='red')
plt.xlabel('Nombre de simulations')
plt.ylabel('VaR bootstrap')
plt.title("Variation de la VaR bootstrap en fonction du nombre de simulations")
Text(0.5, 1.0, 'Variation de la VaR bootstrap en fonction du nombre de simulations')

Pour la taille de l’echantillon bootstrap, nous allons prendre M=8000 étant donné que la courbe semble se stabiliser à partir de cette valeur. Avec ce choix, la VaR estimé est de 4.11%% avec un intervalle de confiance à 5% de [4.05%, 4.09%]. De plus, en ce qui concerne la VaR historique, nous constatons que l’estimation est contenu dans l’intervalle de confiance.

M=8000
var_bs_train, lower_ic,upper_ic = bootstrap_var(data_train, alpha=alpha, M=M)
print(f"La VaR bootstrap pour h=1j et alpha=0.99 est : {var_bs_train:.4%}")
print(f"L'intervalle de confiance est : [{lower_ic:.4%}, {upper_ic:.4%}]")
La VaR bootstrap pour h=1j et alpha=0.99 est : 4.1065%
L'intervalle de confiance est : [4.0536%, 4.0939%]

II.2.3. Backtest

Pour l’exercice de backtest, il s’agit de : 1. Déterminer si la proportion \(p\) de violations de la VaR est cohérente avec le niveau de confiance, i.e. égale à \(1-\alpha\). Cela permet de vérifier si la mesure de risque est bien calibrée. Pour cela, nous pouvons avoir recours à un test de proportion ou un test de ratio de vraisemblance.

**Unconditional coverage test** :
Soit I la variable indicatrice de violation de la VaR, i.e. $I=1$ si la perte est supérieure à la VaR, et $I=0$ sinon. La proportion de violations de la VaR est donnée par :

$$p = \frac{1}{n} \sum_{i=1}^{n} I_i = \frac{Z}{n}$$

Sous H0, i.e. p=1-$\alpha$, Z $\sim$ Binomiale(n, 1-$\alpha$). En supposant que n est suffisamment grand, on peut approximer Z par une loi normale. Ainsi donc :
$$\frac{Z - n (1-\alpha)}{\sqrt{\alpha (1-\alpha) n}} \sim \mathcal{N}(n(1-\alpha), n\alpha(1-\alpha))$$

Sous cette hypothèse asymptotique, on peut calculer la statistique du ratio de vraisemblance suivant :
$$LR = -2 ln \left( \frac{L(H1)}{L(H0)} \right) =-2 ln \left( 1- (1-\alpha))^{n-e}(1-\alpha)^e \right) + 2 ln \left( (1-\frac{e}{n})^{n-e} (\frac{e}{n})^e  \right)  \sim \chi^2(1)$$

où e est le nombre de violations de la VaR. On rejette H0 si LR > $\chi^2(1-\alpha)$.

**Test de proportion** :
$$
H_0 : p = p_0 = 1-\alpha \\ H_1 : p > 1-\alpha
$$
On peut également utiliser un test binomial pour tester si la proportion de violations de la VaR est égale à $1-\alpha$. On peut calculer la statistique du test suivant :
$$Z = \frac{p - p_0}{\sqrt{p_0 (1-p_0) / n}} \sim \mathcal{N}(0,1)$$

On rejette H0 si Z > $p_0+ \phi^{-1}(1-\alpha) \sqrt{p_0 (1-p_0)/n}$, où $\phi$ est la quantile de la loi normale standard.
  1. Déterminer si, lorsqu’il y en a, les violations de VaR à deux différents jours sont indépendantes. Cela permet si la mesure de risque est capable de réagir aux chocs de marché affectant la volatilité des rendements. Pour cela, nous utilisons un conditional coverage test.

    Conditional coverage test : y revenir

import scipy.stats as stats

# Objectif : implémenter une fonction calculant le nombre d'exception sur l'échantillon test
def exceptions(data, var):
    """
    Calcul du nombre d'exception
    data : les rendements logarithmiques
    var : la VaR
    """
    return np.sum(data < -var)


# Objectif : test de proportion binomiale

def binomial_test(n, p, p0 = 0.01, alpha=0.05):
    """
    Test de proportion binomiale
    H0 : p = p0
    H1 : p > p0
    n : le nombre d'essais
    p : la proportion
    alpha : le niveau de confiance
    """

    z = (p - p0) / np.sqrt(p0 * (1 - p0) / n)
    #reject_zone = p0 + stats.norm.ppf(1 - alpha) * np.sqrt(p0 * (1 - p0) / n)
    p_value = 1 - stats.norm.cdf(z)
    reject = p_value < alpha

    # Calcul des IC
    lower = p - stats.norm.ppf(1 - alpha) * np.sqrt(p * (1 - p) / n)
    upper = p + stats.norm.ppf(1 - alpha) * np.sqrt(p * (1 - p) / n)

    return p_value, reject, lower, upper

# Unconditionnal coverage test ==> to do.
# Backtest de la VaR historique

exceptions_test = exceptions(data_test, var_hist_train)
print(f"Le nombre d'exceptions sur l'échantillon de test est : {exceptions_test}")

print("="*80)
n = len(data_test)
p = exceptions_test / n
p_value, reject, lower,upper = binomial_test(n, p)
print(f"H0 : le nombre d'exceptions est inférieur ou égale à {1-alpha:.2%}")
print(f"IC : [{lower:.2%},{upper:.2%}]")
print(f"La p-value du test de proportion binomiale est : {p_value:.4f}")
print(f"Rejet de l'hypothèse nulle : {reject}")
print("="*80)
Le nombre d'exceptions sur l'échantillon de test est : 0
================================================================================
H0 : le nombre d'exceptions est inférieur ou égale à 1.00%
IC : [0.00%,0.00%]
La p-value du test de proportion binomiale est : 0.9925
Rejet de l'hypothèse nulle : False
================================================================================

II.3. VaR paramétrique

II.3.1. Validation ex-ante

Visuellement, les données ne semblent pas suivre une loi normale. En effet, les quantiles théoriques d’une loi normale ne collent pas avec les quantiles empiriques des rendements. Cela peut être dû à la présence de queues épaisses observables sur l’estimation de la densité des rendements sur l’échantillon d’apprentissage, de pics, de clusters de volatilité que nous avons observées plus haut. De plus, le skewness est négatif ce qui indique une asymétrie négative des rendements. Enfin, le kurtosis est supérieur à 3, ce qui indique une distribution leptokurtique des rendements.

Nous allons tout de même implémenter une VaR gaussienne pour voir comment elle se comporte dans le backtest.

# Test visuel d'adéquation de la loi normale

# Créer un Q-Q plot
fig, ax = plt.subplots(figsize=(10, 6))
stats.probplot(data_train, dist="norm", plot=ax)

# Personnalisation du graphique
ax.set_title("Q-Q Plot (Normal Distribution)")
ax.set_xlabel("Theoretical Quantiles")
ax.set_ylabel("Sample Quantiles")

# Afficher le graphique
plt.show()

# Densité de l'echantillon train et l'échantillon de test

plt.figure(figsize=(10, 4))
data_train.plot(kind='kde', label='Train', color='red')
plt.legend(loc='upper left')
plt.title("Densité de l'échantillon d'entrainement")
plt.show()

# Skewness et kurtosis
print("="*80)
print("Skewness de l'échantillon d'entrainement : ", data_train.skew())
print("Kurtosis de l'échantillon d'entrainement : ", data_train.kurt())
print("="*80)
================================================================================
Skewness de l'échantillon d'entrainement :  -0.2981820421484688
Kurtosis de l'échantillon d'entrainement :  7.353960005618779
================================================================================
from scipy.stats import kstest

# Test de Kolmogorov-Smirnov
ks_stat, ks_p_value = kstest(data_train, 'norm')
print("="*80)
print("H0 : Les données suivent une loi normale")
print(f"Statistique de test : {ks_stat:.4f}")
print(f"P-value : {ks_p_value:.4f}")
print("="*80)
================================================================================
H0 : Les données suivent une loi normale
Statistique de test : 0.4775
P-value : 0.0000
================================================================================

II.3.2. Implémentation de la VaR

a. Méthode scaling

# Objectif : écrire une fonction qui calcule la VaR gaussienne

def gaussian_var(data, alpha):
    """
    Calcul de la VaR gaussienne
    data : les rendements logarithmiques
    alpha : le niveau de confiance
    """
    from scipy.stats import norm

    mu = np.mean(data)
    sigma = np.std(data)
    return -(mu + sigma * norm.ppf(1 - alpha))
var_gauss_train = gaussian_var(data_train, alpha=alpha)
print(f"La VaR gaussienne pour h=1j et alpha={alpha} est : {var_gauss_train:.4%}")
print(f"La VaR historique pour h=10j et alpha={alpha} est : {np.sqrt(10)*var_gauss_train:.4%}")
La VaR gaussienne pour h=1j et alpha=0.99 est : 3.2302%
La VaR historique pour h=10j et alpha=0.99 est : 10.2148%

b. Méthode de diffusion d’un actif

Pour calculer la VaR gaussienne à 10 jours par méthode de diffusion d’un actif, nous allons suivre les étapes suivantes :

L’évolution du prix d’un actif suit un processus de type mouvement brownien géométrique : \[ dS_t = \mu S_t dt + \sigma S_t dW_t <=> S_t = S_{t-1} e^{(\mu - \frac{1}{2} \sigma^2) + \sigma W_t} \] où $ S_t$ est le prix de l’actif à l’instant$ t$, $ $ est le rendement moyen estimé (drift), $ $ est la volatilité du rendement, $ dW_t$ est un mouvement brownien standard.

On peut de ce fait calculer plusieurs trajectoires de rendements de \(S_0\) et \(S_{10}\), puis calculer la VaR à partir de la série des rendements $ r_{10j} = (S_{10} / S_{0}) $ obtenus avec ces trajectoires.

En utilisant la méthode de scaling et la méthode de diffusion, nous obtenons sensiblement la même VaR.

import numpy as np

mu = np.mean(data_train)
sigma = np.std(data_train)

return_sim = []
T = 10
M = 1000
S0 = train['Close'].iloc[-1]

for i in range(M):
    S = np.zeros(T+1)
    S[0] = S0
    for t in range(1,T+1):
        Wt = np.random.normal()
        S[t] = S[t-1] * np.exp((mu - 0.5 * sigma**2) + sigma * Wt)

    return_sim.append(np.log(S[T]/S0))

var_gauss_diffusion = gaussian_var(return_sim, alpha=alpha)
print(f"La VaR gaussienne pour h=10j et alpha={alpha} est : {var_gauss_diffusion:.4%}")
La VaR gaussienne pour h=10j et alpha=0.99 est : 10.0053%

c. Méthode EWMA

La VaR EWMA est une méthode qui permet de calculer la VaR en surpondérant les rendements les plus récents. Cela permet de donner plus de poids aux rendements les plus récents, et donc de mieux capturer les changements de volatilité. La VaR EWMA est donnée par la formule suivante :

\[ VaR_{t+1} = \mu + \sigma \times z_{\alpha} \]

# VaR la méthode EWMA (Exponential Weighting Moving Average)

def gaussian_var_ewma(data, alpha, lambda_=0.94):
    """
    Calcul de la VaR gaussienne EWMA
    data : les rendements logarithmiques
    alpha : le niveau de confiance
    lambda_ : le paramètre de lissage
    """

    weights = np.array([(1-lambda_)*(lambda_**i) for i in range(len(data))])
    weights = weights / np.sum(weights)

    mu = np.sum(data[::-1] * weights)
    sigma = np.sqrt(np.sum(weights * (data[::-1] - mu)**2))

    return -(mu + sigma * stats.norm.ppf(1 - alpha)), mu, sigma

# y revenir
lambdas = [0.9, 0.95, 0.99]
alpha = 0.99
import scipy.stats as stats
for l in lambdas:
    print("="*80)
    print("Lambda : ", l)
    print("-"*15)
    var_gauss_emwa, mu, sigma = gaussian_var_ewma(data_train, alpha=alpha, lambda_=l)
    print(f"La VaR gaussienne EWMA pour h=1j et alpha={alpha} est : {var_gauss_emwa:.4%}")
    print(f"La moyenne est : {mu:.4%}")
    print(f"L'écart-type est : {sigma:.4%}")

    n_exceptions = exceptions(data_test, var_gauss_emwa)
    print(f"Le nombre d'exceptions sur l'échantillon de test est : {n_exceptions}")
================================================================================
Lambda :  0.9
---------------
La VaR gaussienne EWMA pour h=1j et alpha=0.99 est : 2.3751%
La moyenne est : 0.1898%
L'écart-type est : 1.1025%
Le nombre d'exceptions sur l'échantillon de test est : 5
================================================================================
Lambda :  0.95
---------------
La VaR gaussienne EWMA pour h=1j et alpha=0.99 est : 2.8969%
La moyenne est : 0.0735%
L'écart-type est : 1.2768%
Le nombre d'exceptions sur l'échantillon de test est : 4
================================================================================
Lambda :  0.99
---------------
La VaR gaussienne EWMA pour h=1j et alpha=0.99 est : 3.3511%
La moyenne est : -0.0321%
L'écart-type est : 1.4267%
Le nombre d'exceptions sur l'échantillon de test est : 1

Avec la méthode EWMA, nous observons une que la VaR diminue plus \(\lambda\) augmente. Cela est dû au fait que plus \(\lambda\) est grand, plus les rendements les plus récents sont surpondérés, et donc la volatilité est plus faible, en raison de la fin de la période d’apprentissage.

II.4. VaR skew-student

II.4.1. Validation ex-ante

# Ecrire une fonction permettant d’estimer les paramètres d’une loi de Skew Student par maximum de vraisemblance.

from scipy.optimize import minimize
from scipy.stats import t


def skew_student_pdf(x, mu, sigma, gamma, nu ):
    """
    Compute the Skew Student-t probability density function (PDF).
    """


    t_x = ((x - mu) * gamma / sigma) * np.sqrt((nu + 1) / (nu + ((x - mu) / sigma) ** 2))
    # PDF of the standard Student-t distribution
    pdf_t = t.pdf(x , df=nu,  loc=mu, scale=sigma)
    # CDF of the transformed Student-t distribution
    cdf_t = t.cdf(t_x, df=nu + 1,loc=0, scale=1)

    # Skew Student density function
    density = 2 * pdf_t * cdf_t

    return density


def skew_student_log_likelihood(params, data):
    """
    Calcul de la log-vraisemblance de la loi de Skew Student
    params [mu, sigma, gamma, nu]: les paramètres de la loi
    data : les rendements logarithmiques
    """
    mu, sigma, gamma, nu = params
    density = skew_student_pdf(data , mu, sigma, gamma, nu)
    # log-vraisemblance
    loglik = np.sum(np.log(density))

    return - loglik

# Optimisation des paramètres avec contraintes de positivité sur sigma et nu
def skew_student_fit(data):
    """
    Estimation des paramètres de la loi de Skew Student
    """
    # initial guess
    x0 = np.array([np.mean(data), np.std(data), 1, 4])

    # contraintes
    bounds = [(None, None), (0, None), (None, None), (None, None)]

    # optimisation
    res = minimize(skew_student_log_likelihood, x0, args=(data), bounds=bounds)

    return res.x

params = skew_student_fit(data_train)
print("="*80)
print("Les paramètres estimés de la loi de Skew Student sont : ")
print("-"*15)
print("Mu : ", params[0])
print("Sigma : ", params[1])
print("Gamma : ", params[2])
print("Nu : ", params[3])
print("="*80)


params_sstd = {
    "mu" : params[0],
    "sigma" : params[1],
    "gamma" : params[2],
    "nu" : params[3]
}
================================================================================
Les paramètres estimés de la loi de Skew Student sont : 
---------------
Mu :  0.0023247899830732325
Sigma :  0.008823850410822238
Gamma :  -0.23183614178494735
Nu :  2.9618421112435653
================================================================================
# Superposition de la densité théorique et des données

x_values = np.linspace(min(data_train), max(data_train), 1000)

theoretical_density = skew_student_pdf(x_values, **params_sstd)
plt.figure(figsize = (10,4))
plt.hist(data_train, bins=30, density=True, alpha=0.5, label='Données empiriques')
plt.plot(x_values, theoretical_density, label='Densité Skew Student', color='red')
# Densité normale
plt.plot(x_values, stats.norm.pdf(x_values, np.mean(data_train), np.std(data_train)), label='Densité normale', color='blue')
plt.xlabel('Rendements logarithmiques')
plt.ylabel('Densité')
plt.title("Comparaison entre les données et la densité théorique d'une loi de Skew Student")
plt.legend()

plt.show()

Le graphique ci-dessus est satisfaisant. La densité théorique de la skew-student semble bien s’ajuster aux données. La loi skew-student de paramètres (\(\mu = 0.002, \sigma = 0.009, \gamma = -0.23, \nu = 2.96\)). Le \(\mu\) est le rendement moyen, \(\sigma\) est l’écart-type, \(\gamma\) est le coefficient d’asymétrie et \(\nu\) est le degré de liberté. Le skewness est négatif, ce qui indique une asymétrie négative des rendements, comme ce qu’on a observé plus haut.

Nous allons appuyer cette validation en utilisant le QQ-plot. La fonction quantile d’une loi skew-student n’est pas analytique. Pour ce faire, nous allons construire la fonction de repartition de la skew-student ainsi que la fonction quantile qui est l’inverse de cette fonction de repartition. Nous allons ensuite comparer les quantiles théoriques de la skew-student avec les quantiles empiriques des rendements.

En observant le QQ-plot, on constate que les quantiles théoriques de la skew-student collent bien avec les quantiles empiriques des rendements. Cela confirme que la skew-student est une bonne approximation de la distribution des rendements. Pour une validation plus rigoureuse, on peut utiliser un test de Kolmogorov-Smirnov pour tester si les rendements suivent une loi skew-student.

## Intégration de la fonction de densité
from scipy import integrate
from scipy.optimize import minimize_scalar

def integrale_SkewStudent(x,params):
    borne_inf = -np.inf
    resultat_integration, erreur = integrate.quad(lambda x: skew_student_pdf(x, **params), borne_inf, x)
    return resultat_integration

def fonc_minimize(x, alpha,params):
    value = integrale_SkewStudent(x,params)-alpha
    return abs(value)

def skew_student_quantile(alpha,mu, sigma, gamma, nu ):
    params = {
    "mu" : mu ,
    "sigma" : sigma,
    "gamma" : gamma,
    "nu" : nu
    }

    if alpha <0 or alpha >1:
        raise Exception("Veuillez entrer un niveau alpha entre 0 et 1")
    else:
        resultat_minimisation = minimize_scalar(lambda x: fonc_minimize(x, alpha,params))
        return resultat_minimisation.x
niveaux_quantiles = np.arange(0.001, 1, 0.001)
quantiles_empiriques = np.quantile(data_train, niveaux_quantiles)
quantiles_theoriques = [skew_student_quantile(alpha,**params_sstd) for alpha in tqdm(niveaux_quantiles)]
  0%|          | 0/999 [00:00<?, ?it/s]  0%|          | 1/999 [00:00<04:09,  3.99it/s]  0%|          | 2/999 [00:00<04:01,  4.13it/s]  0%|          | 3/999 [00:00<04:07,  4.02it/s]  0%|          | 4/999 [00:01<04:47,  3.47it/s]  1%|          | 5/999 [00:01<05:03,  3.28it/s]  1%|          | 6/999 [00:01<05:04,  3.26it/s]  1%|          | 7/999 [00:02<05:03,  3.26it/s]  1%|          | 8/999 [00:02<05:09,  3.21it/s]  1%|          | 9/999 [00:02<05:07,  3.22it/s]  1%|          | 10/999 [00:03<05:12,  3.16it/s]  1%|          | 11/999 [00:03<05:03,  3.25it/s]  1%|          | 12/999 [00:03<05:08,  3.19it/s]  1%|▏         | 13/999 [00:03<05:15,  3.13it/s]  1%|▏         | 14/999 [00:04<05:22,  3.05it/s]  2%|▏         | 15/999 [00:04<05:07,  3.20it/s]  2%|▏         | 16/999 [00:04<05:09,  3.18it/s]  2%|▏         | 17/999 [00:05<05:10,  3.17it/s]  2%|▏         | 18/999 [00:05<05:13,  3.13it/s]  2%|▏         | 19/999 [00:05<05:18,  3.08it/s]  2%|▏         | 20/999 [00:06<05:10,  3.15it/s]  2%|▏         | 21/999 [00:06<05:10,  3.15it/s]  2%|▏         | 22/999 [00:06<05:17,  3.08it/s]  2%|▏         | 23/999 [00:07<05:10,  3.14it/s]  2%|▏         | 24/999 [00:07<05:07,  3.17it/s]  3%|▎         | 25/999 [00:07<05:08,  3.15it/s]  3%|▎         | 26/999 [00:08<05:14,  3.09it/s]  3%|▎         | 27/999 [00:08<05:12,  3.11it/s]  3%|▎         | 28/999 [00:08<05:12,  3.11it/s]  3%|▎         | 29/999 [00:09<05:19,  3.04it/s]  3%|▎         | 30/999 [00:09<05:15,  3.07it/s]  3%|▎         | 31/999 [00:09<05:23,  2.99it/s]  3%|▎         | 32/999 [00:10<05:31,  2.91it/s]  3%|▎         | 33/999 [00:10<05:36,  2.87it/s]  3%|▎         | 34/999 [00:10<05:40,  2.83it/s]  4%|▎         | 35/999 [00:11<05:44,  2.80it/s]  4%|▎         | 36/999 [00:11<05:56,  2.70it/s]  4%|▎         | 37/999 [00:12<06:03,  2.65it/s]  4%|▍         | 38/999 [00:12<06:13,  2.58it/s]  4%|▍         | 39/999 [00:12<06:19,  2.53it/s]  4%|▍         | 40/999 [00:13<06:07,  2.61it/s]  4%|▍         | 41/999 [00:13<06:08,  2.60it/s]  4%|▍         | 42/999 [00:13<06:12,  2.57it/s]  4%|▍         | 43/999 [00:14<06:13,  2.56it/s]  4%|▍         | 44/999 [00:14<06:09,  2.59it/s]  5%|▍         | 45/999 [00:15<06:03,  2.63it/s]  5%|▍         | 46/999 [00:15<05:58,  2.66it/s]  5%|▍         | 47/999 [00:15<05:45,  2.75it/s]  5%|▍         | 48/999 [00:16<05:49,  2.72it/s]  5%|▍         | 49/999 [00:16<06:01,  2.62it/s]  5%|▌         | 50/999 [00:16<05:54,  2.68it/s]  5%|▌         | 51/999 [00:17<05:52,  2.69it/s]  5%|▌         | 52/999 [00:17<05:54,  2.67it/s]  5%|▌         | 53/999 [00:18<05:54,  2.67it/s]  5%|▌         | 54/999 [00:18<05:42,  2.76it/s]  6%|▌         | 55/999 [00:18<05:40,  2.78it/s]  6%|▌         | 56/999 [00:19<05:44,  2.73it/s]  6%|▌         | 57/999 [00:19<05:54,  2.66it/s]  6%|▌         | 58/999 [00:19<05:51,  2.68it/s]  6%|▌         | 59/999 [00:20<05:42,  2.75it/s]  6%|▌         | 60/999 [00:20<05:45,  2.71it/s]  6%|▌         | 61/999 [00:21<05:42,  2.74it/s]  6%|▌         | 62/999 [00:21<05:49,  2.68it/s]  6%|▋         | 63/999 [00:21<05:50,  2.67it/s]  6%|▋         | 64/999 [00:22<05:54,  2.64it/s]  7%|▋         | 65/999 [00:22<05:47,  2.69it/s]  7%|▋         | 66/999 [00:22<05:45,  2.70it/s]  7%|▋         | 67/999 [00:23<05:49,  2.66it/s]  7%|▋         | 68/999 [00:23<05:48,  2.67it/s]  7%|▋         | 69/999 [00:24<05:58,  2.59it/s]  7%|▋         | 70/999 [00:24<05:54,  2.62it/s]  7%|▋         | 71/999 [00:24<06:05,  2.54it/s]  7%|▋         | 72/999 [00:25<05:56,  2.60it/s]  7%|▋         | 73/999 [00:25<05:58,  2.59it/s]  7%|▋         | 74/999 [00:25<05:55,  2.60it/s]  8%|▊         | 75/999 [00:26<05:56,  2.59it/s]  8%|▊         | 76/999 [00:26<06:00,  2.56it/s]  8%|▊         | 77/999 [00:27<05:56,  2.59it/s]  8%|▊         | 78/999 [00:27<05:59,  2.56it/s]  8%|▊         | 79/999 [00:27<06:04,  2.53it/s]  8%|▊         | 80/999 [00:28<06:01,  2.54it/s]  8%|▊         | 81/999 [00:28<05:58,  2.56it/s]  8%|▊         | 82/999 [00:29<05:57,  2.56it/s]  8%|▊         | 83/999 [00:29<05:51,  2.61it/s]  8%|▊         | 84/999 [00:29<05:48,  2.63it/s]  9%|▊         | 85/999 [00:30<05:41,  2.67it/s]  9%|▊         | 86/999 [00:30<05:41,  2.67it/s]  9%|▊         | 87/999 [00:30<05:47,  2.63it/s]  9%|▉         | 88/999 [00:31<05:48,  2.62it/s]  9%|▉         | 89/999 [00:31<05:43,  2.65it/s]  9%|▉         | 90/999 [00:32<05:34,  2.72it/s]  9%|▉         | 91/999 [00:32<05:35,  2.70it/s]  9%|▉         | 92/999 [00:32<05:31,  2.73it/s]  9%|▉         | 93/999 [00:33<05:22,  2.81it/s]  9%|▉         | 94/999 [00:33<05:24,  2.79it/s] 10%|▉         | 95/999 [00:33<05:35,  2.70it/s] 10%|▉         | 96/999 [00:34<05:36,  2.69it/s] 10%|▉         | 97/999 [00:34<05:44,  2.62it/s] 10%|▉         | 98/999 [00:35<05:42,  2.63it/s] 10%|▉         | 99/999 [00:35<05:38,  2.66it/s] 10%|█         | 100/999 [00:35<05:27,  2.74it/s] 10%|█         | 101/999 [00:36<05:27,  2.74it/s] 10%|█         | 102/999 [00:36<05:24,  2.77it/s] 10%|█         | 103/999 [00:36<05:26,  2.74it/s] 10%|█         | 104/999 [00:37<05:23,  2.77it/s] 11%|█         | 105/999 [00:37<05:20,  2.79it/s] 11%|█         | 106/999 [00:37<05:28,  2.72it/s] 11%|█         | 107/999 [00:38<05:30,  2.70it/s] 11%|█         | 108/999 [00:38<05:37,  2.64it/s] 11%|█         | 109/999 [00:39<05:36,  2.64it/s] 11%|█         | 110/999 [00:39<05:40,  2.61it/s] 11%|█         | 111/999 [00:39<05:45,  2.57it/s] 11%|█         | 112/999 [00:40<05:50,  2.53it/s] 11%|█▏        | 113/999 [00:40<05:56,  2.49it/s] 11%|█▏        | 114/999 [00:41<05:52,  2.51it/s] 12%|█▏        | 115/999 [00:41<05:52,  2.51it/s] 12%|█▏        | 116/999 [00:41<05:49,  2.52it/s] 12%|█▏        | 117/999 [00:42<05:52,  2.50it/s] 12%|█▏        | 118/999 [00:42<05:49,  2.52it/s] 12%|█▏        | 119/999 [00:43<05:52,  2.49it/s] 12%|█▏        | 120/999 [00:43<05:48,  2.52it/s] 12%|█▏        | 121/999 [00:43<05:50,  2.50it/s] 12%|█▏        | 122/999 [00:44<06:05,  2.40it/s] 12%|█▏        | 123/999 [00:44<05:59,  2.44it/s] 12%|█▏        | 124/999 [00:45<05:57,  2.45it/s] 13%|█▎        | 125/999 [00:45<05:58,  2.44it/s] 13%|█▎        | 126/999 [00:46<05:58,  2.44it/s] 13%|█▎        | 127/999 [00:46<05:57,  2.44it/s] 13%|█▎        | 128/999 [00:46<05:54,  2.45it/s] 13%|█▎        | 129/999 [00:47<05:55,  2.44it/s] 13%|█▎        | 130/999 [00:47<05:53,  2.46it/s] 13%|█▎        | 131/999 [00:48<05:48,  2.49it/s] 13%|█▎        | 132/999 [00:48<05:40,  2.55it/s] 13%|█▎        | 133/999 [00:48<05:36,  2.58it/s] 13%|█▎        | 134/999 [00:49<05:29,  2.63it/s] 14%|█▎        | 135/999 [00:49<05:30,  2.61it/s] 14%|█▎        | 136/999 [00:49<05:32,  2.59it/s] 14%|█▎        | 137/999 [00:50<05:36,  2.56it/s] 14%|█▍        | 138/999 [00:50<05:34,  2.57it/s] 14%|█▍        | 139/999 [00:51<05:45,  2.49it/s] 14%|█▍        | 140/999 [00:51<05:50,  2.45it/s] 14%|█▍        | 141/999 [00:51<05:40,  2.52it/s] 14%|█▍        | 142/999 [00:52<05:34,  2.56it/s] 14%|█▍        | 143/999 [00:52<05:40,  2.51it/s] 14%|█▍        | 144/999 [00:53<05:31,  2.58it/s] 15%|█▍        | 145/999 [00:53<05:25,  2.62it/s] 15%|█▍        | 146/999 [00:53<05:19,  2.67it/s] 15%|█▍        | 147/999 [00:54<05:25,  2.62it/s] 15%|█▍        | 148/999 [00:54<05:46,  2.46it/s] 15%|█▍        | 149/999 [00:55<05:50,  2.43it/s] 15%|█▌        | 150/999 [00:55<05:54,  2.40it/s] 15%|█▌        | 151/999 [00:55<05:46,  2.45it/s] 15%|█▌        | 152/999 [00:56<05:38,  2.50it/s] 15%|█▌        | 153/999 [00:56<05:42,  2.47it/s] 15%|█▌        | 154/999 [00:57<05:47,  2.43it/s] 16%|█▌        | 155/999 [00:57<05:50,  2.41it/s] 16%|█▌        | 156/999 [00:57<05:53,  2.39it/s] 16%|█▌        | 157/999 [00:58<05:53,  2.38it/s] 16%|█▌        | 158/999 [00:58<05:47,  2.42it/s] 16%|█▌        | 159/999 [00:59<05:57,  2.35it/s] 16%|█▌        | 160/999 [00:59<06:03,  2.31it/s] 16%|█▌        | 161/999 [01:00<05:58,  2.34it/s] 16%|█▌        | 162/999 [01:00<06:08,  2.27it/s] 16%|█▋        | 163/999 [01:01<06:10,  2.25it/s] 16%|█▋        | 164/999 [01:01<06:17,  2.21it/s] 17%|█▋        | 165/999 [01:01<06:13,  2.23it/s] 17%|█▋        | 166/999 [01:02<06:08,  2.26it/s] 17%|█▋        | 167/999 [01:02<06:04,  2.28it/s] 17%|█▋        | 168/999 [01:03<06:09,  2.25it/s] 17%|█▋        | 169/999 [01:03<06:07,  2.26it/s] 17%|█▋        | 170/999 [01:04<06:06,  2.26it/s] 17%|█▋        | 171/999 [01:04<05:58,  2.31it/s] 17%|█▋        | 172/999 [01:05<06:04,  2.27it/s] 17%|█▋        | 173/999 [01:05<06:04,  2.27it/s] 17%|█▋        | 174/999 [01:05<05:58,  2.30it/s] 18%|█▊        | 175/999 [01:06<05:55,  2.32it/s] 18%|█▊        | 176/999 [01:06<06:04,  2.26it/s] 18%|█▊        | 177/999 [01:07<06:04,  2.25it/s] 18%|█▊        | 178/999 [01:07<05:53,  2.32it/s] 18%|█▊        | 179/999 [01:08<05:45,  2.37it/s] 18%|█▊        | 180/999 [01:08<05:50,  2.34it/s] 18%|█▊        | 181/999 [01:08<05:52,  2.32it/s] 18%|█▊        | 182/999 [01:09<06:00,  2.26it/s] 18%|█▊        | 183/999 [01:09<06:10,  2.20it/s] 18%|█▊        | 184/999 [01:10<06:03,  2.24it/s] 19%|█▊        | 185/999 [01:10<06:11,  2.19it/s] 19%|█▊        | 186/999 [01:11<06:19,  2.14it/s] 19%|█▊        | 187/999 [01:11<06:18,  2.14it/s] 19%|█▉        | 188/999 [01:12<06:17,  2.15it/s] 19%|█▉        | 189/999 [01:12<06:02,  2.23it/s] 19%|█▉        | 190/999 [01:13<06:02,  2.23it/s] 19%|█▉        | 191/999 [01:13<05:41,  2.37it/s] 19%|█▉        | 192/999 [01:13<05:49,  2.31it/s] 19%|█▉        | 193/999 [01:14<05:46,  2.32it/s] 19%|█▉        | 194/999 [01:14<05:45,  2.33it/s] 20%|█▉        | 195/999 [01:15<05:42,  2.35it/s] 20%|█▉        | 196/999 [01:15<05:42,  2.35it/s] 20%|█▉        | 197/999 [01:15<05:45,  2.32it/s] 20%|█▉        | 198/999 [01:16<05:42,  2.34it/s] 20%|█▉        | 199/999 [01:16<05:47,  2.30it/s] 20%|██        | 200/999 [01:17<05:49,  2.28it/s] 20%|██        | 201/999 [01:17<05:45,  2.31it/s] 20%|██        | 202/999 [01:18<05:50,  2.27it/s] 20%|██        | 203/999 [01:18<05:47,  2.29it/s] 20%|██        | 204/999 [01:19<05:39,  2.34it/s] 21%|██        | 205/999 [01:19<05:35,  2.37it/s] 21%|██        | 206/999 [01:19<05:29,  2.41it/s] 21%|██        | 207/999 [01:20<05:36,  2.35it/s] 21%|██        | 208/999 [01:20<05:40,  2.32it/s] 21%|██        | 209/999 [01:21<05:47,  2.28it/s] 21%|██        | 210/999 [01:21<05:45,  2.28it/s] 21%|██        | 211/999 [01:22<05:58,  2.20it/s] 21%|██        | 212/999 [01:22<05:53,  2.23it/s] 21%|██▏       | 213/999 [01:22<05:43,  2.29it/s] 21%|██▏       | 214/999 [01:23<05:46,  2.26it/s] 22%|██▏       | 215/999 [01:23<05:49,  2.24it/s] 22%|██▏       | 216/999 [01:24<05:43,  2.28it/s] 22%|██▏       | 217/999 [01:24<05:43,  2.28it/s] 22%|██▏       | 218/999 [01:25<05:43,  2.28it/s] 22%|██▏       | 219/999 [01:25<05:25,  2.39it/s] 22%|██▏       | 220/999 [01:25<05:27,  2.38it/s] 22%|██▏       | 221/999 [01:26<05:31,  2.35it/s] 22%|██▏       | 222/999 [01:26<05:40,  2.28it/s] 22%|██▏       | 223/999 [01:27<05:46,  2.24it/s] 22%|██▏       | 224/999 [01:27<05:44,  2.25it/s] 23%|██▎       | 225/999 [01:28<05:50,  2.21it/s] 23%|██▎       | 226/999 [01:28<05:42,  2.25it/s] 23%|██▎       | 227/999 [01:29<05:42,  2.26it/s] 23%|██▎       | 228/999 [01:29<05:44,  2.24it/s] 23%|██▎       | 229/999 [01:30<05:55,  2.17it/s] 23%|██▎       | 230/999 [01:30<06:04,  2.11it/s] 23%|██▎       | 231/999 [01:31<06:10,  2.07it/s] 23%|██▎       | 232/999 [01:31<06:01,  2.12it/s] 23%|██▎       | 233/999 [01:31<05:50,  2.19it/s] 23%|██▎       | 234/999 [01:32<05:43,  2.22it/s] 24%|██▎       | 235/999 [01:32<05:39,  2.25it/s] 24%|██▎       | 236/999 [01:33<05:49,  2.18it/s] 24%|██▎       | 237/999 [01:33<05:58,  2.13it/s] 24%|██▍       | 238/999 [01:34<06:08,  2.06it/s] 24%|██▍       | 239/999 [01:34<06:19,  2.00it/s] 24%|██▍       | 240/999 [01:35<06:23,  1.98it/s] 24%|██▍       | 241/999 [01:35<06:23,  1.98it/s] 24%|██▍       | 242/999 [01:36<06:25,  1.96it/s] 24%|██▍       | 243/999 [01:36<06:32,  1.92it/s] 24%|██▍       | 244/999 [01:37<06:36,  1.90it/s] 25%|██▍       | 245/999 [01:37<06:31,  1.92it/s] 25%|██▍       | 246/999 [01:38<06:34,  1.91it/s] 25%|██▍       | 247/999 [01:39<06:32,  1.92it/s] 25%|██▍       | 248/999 [01:39<06:45,  1.85it/s] 25%|██▍       | 249/999 [01:40<06:53,  1.81it/s] 25%|██▌       | 250/999 [01:40<06:50,  1.82it/s] 25%|██▌       | 251/999 [01:41<06:54,  1.81it/s] 25%|██▌       | 252/999 [01:41<06:45,  1.84it/s] 25%|██▌       | 253/999 [01:42<06:51,  1.81it/s] 25%|██▌       | 254/999 [01:42<06:58,  1.78it/s] 26%|██▌       | 255/999 [01:43<06:59,  1.77it/s] 26%|██▌       | 256/999 [01:44<06:55,  1.79it/s] 26%|██▌       | 257/999 [01:44<06:35,  1.87it/s] 26%|██▌       | 258/999 [01:45<06:27,  1.91it/s] 26%|██▌       | 259/999 [01:45<06:28,  1.90it/s] 26%|██▌       | 260/999 [01:46<06:20,  1.94it/s] 26%|██▌       | 261/999 [01:46<06:12,  1.98it/s] 26%|██▌       | 262/999 [01:47<05:59,  2.05it/s] 26%|██▋       | 263/999 [01:47<05:55,  2.07it/s] 26%|██▋       | 264/999 [01:47<05:50,  2.10it/s] 27%|██▋       | 265/999 [01:48<05:47,  2.11it/s] 27%|██▋       | 266/999 [01:48<05:46,  2.12it/s] 27%|██▋       | 267/999 [01:49<05:42,  2.13it/s] 27%|██▋       | 268/999 [01:49<05:49,  2.09it/s] 27%|██▋       | 269/999 [01:50<05:48,  2.10it/s] 27%|██▋       | 270/999 [01:50<05:52,  2.07it/s] 27%|██▋       | 271/999 [01:51<05:49,  2.08it/s] 27%|██▋       | 272/999 [01:51<05:58,  2.03it/s] 27%|██▋       | 273/999 [01:52<05:59,  2.02it/s] 27%|██▋       | 274/999 [01:52<05:55,  2.04it/s] 28%|██▊       | 275/999 [01:53<05:55,  2.03it/s] 28%|██▊       | 276/999 [01:53<06:01,  2.00it/s] 28%|██▊       | 277/999 [01:54<05:53,  2.04it/s] 28%|██▊       | 278/999 [01:54<05:59,  2.01it/s] 28%|██▊       | 279/999 [01:55<06:01,  1.99it/s] 28%|██▊       | 280/999 [01:55<06:07,  1.96it/s] 28%|██▊       | 281/999 [01:56<06:07,  1.95it/s] 28%|██▊       | 282/999 [01:56<06:14,  1.91it/s] 28%|██▊       | 283/999 [01:57<06:15,  1.91it/s] 28%|██▊       | 284/999 [01:58<06:32,  1.82it/s] 29%|██▊       | 285/999 [01:58<06:44,  1.76it/s] 29%|██▊       | 286/999 [01:59<06:34,  1.81it/s] 29%|██▊       | 287/999 [01:59<06:41,  1.78it/s] 29%|██▉       | 288/999 [02:00<06:31,  1.81it/s] 29%|██▉       | 289/999 [02:00<06:35,  1.80it/s] 29%|██▉       | 290/999 [02:01<06:26,  1.83it/s] 29%|██▉       | 291/999 [02:01<06:34,  1.79it/s] 29%|██▉       | 292/999 [02:02<06:23,  1.84it/s] 29%|██▉       | 293/999 [02:02<06:15,  1.88it/s] 29%|██▉       | 294/999 [02:03<06:25,  1.83it/s] 30%|██▉       | 295/999 [02:04<06:16,  1.87it/s] 30%|██▉       | 296/999 [02:04<06:26,  1.82it/s] 30%|██▉       | 297/999 [02:05<06:19,  1.85it/s] 30%|██▉       | 298/999 [02:05<06:23,  1.83it/s] 30%|██▉       | 299/999 [02:06<06:19,  1.85it/s] 30%|███       | 300/999 [02:06<06:27,  1.80it/s] 30%|███       | 301/999 [02:07<06:31,  1.78it/s] 30%|███       | 302/999 [02:07<06:30,  1.78it/s] 30%|███       | 303/999 [02:08<06:39,  1.74it/s] 30%|███       | 304/999 [02:09<06:29,  1.79it/s] 31%|███       | 305/999 [02:09<06:18,  1.83it/s] 31%|███       | 306/999 [02:10<06:08,  1.88it/s] 31%|███       | 307/999 [02:10<06:05,  1.89it/s] 31%|███       | 308/999 [02:11<05:53,  1.95it/s] 31%|███       | 309/999 [02:11<05:59,  1.92it/s] 31%|███       | 310/999 [02:12<06:05,  1.89it/s] 31%|███       | 311/999 [02:12<06:11,  1.85it/s] 31%|███       | 312/999 [02:13<06:12,  1.84it/s] 31%|███▏      | 313/999 [02:13<06:14,  1.83it/s] 31%|███▏      | 314/999 [02:14<06:08,  1.86it/s] 32%|███▏      | 315/999 [02:14<05:59,  1.90it/s] 32%|███▏      | 316/999 [02:15<05:59,  1.90it/s] 32%|███▏      | 317/999 [02:15<05:59,  1.90it/s] 32%|███▏      | 318/999 [02:16<05:55,  1.92it/s] 32%|███▏      | 319/999 [02:16<06:00,  1.89it/s] 32%|███▏      | 320/999 [02:17<06:01,  1.88it/s] 32%|███▏      | 321/999 [02:18<06:20,  1.78it/s] 32%|███▏      | 322/999 [02:18<06:07,  1.84it/s] 32%|███▏      | 323/999 [02:19<06:21,  1.77it/s] 32%|███▏      | 324/999 [02:19<06:19,  1.78it/s] 33%|███▎      | 325/999 [02:20<06:11,  1.81it/s] 33%|███▎      | 326/999 [02:20<06:06,  1.84it/s] 33%|███▎      | 327/999 [02:21<06:21,  1.76it/s] 33%|███▎      | 328/999 [02:22<06:11,  1.81it/s] 33%|███▎      | 329/999 [02:22<06:22,  1.75it/s] 33%|███▎      | 330/999 [02:23<06:13,  1.79it/s] 33%|███▎      | 331/999 [02:23<06:11,  1.80it/s] 33%|███▎      | 332/999 [02:24<06:11,  1.79it/s] 33%|███▎      | 333/999 [02:24<06:11,  1.79it/s] 33%|███▎      | 334/999 [02:25<06:02,  1.84it/s] 34%|███▎      | 335/999 [02:25<06:01,  1.83it/s] 34%|███▎      | 336/999 [02:26<06:03,  1.82it/s] 34%|███▎      | 337/999 [02:26<06:02,  1.83it/s] 34%|███▍      | 338/999 [02:27<06:04,  1.81it/s] 34%|███▍      | 339/999 [02:28<05:54,  1.86it/s] 34%|███▍      | 340/999 [02:28<05:47,  1.90it/s] 34%|███▍      | 341/999 [02:29<05:49,  1.88it/s] 34%|███▍      | 342/999 [02:29<05:48,  1.88it/s] 34%|███▍      | 343/999 [02:30<05:48,  1.88it/s] 34%|███▍      | 344/999 [02:30<05:50,  1.87it/s] 35%|███▍      | 345/999 [02:31<05:45,  1.89it/s] 35%|███▍      | 346/999 [02:31<05:45,  1.89it/s] 35%|███▍      | 347/999 [02:32<05:47,  1.88it/s] 35%|███▍      | 348/999 [02:32<05:46,  1.88it/s] 35%|███▍      | 349/999 [02:33<05:40,  1.91it/s] 35%|███▌      | 350/999 [02:33<05:38,  1.92it/s] 35%|███▌      | 351/999 [02:34<05:44,  1.88it/s] 35%|███▌      | 352/999 [02:34<05:46,  1.87it/s] 35%|███▌      | 353/999 [02:35<05:47,  1.86it/s] 35%|███▌      | 354/999 [02:36<05:43,  1.88it/s] 36%|███▌      | 355/999 [02:36<05:40,  1.89it/s] 36%|███▌      | 356/999 [02:37<05:40,  1.89it/s] 36%|███▌      | 357/999 [02:37<05:37,  1.90it/s] 36%|███▌      | 358/999 [02:38<05:43,  1.86it/s] 36%|███▌      | 359/999 [02:38<05:47,  1.84it/s] 36%|███▌      | 360/999 [02:39<05:40,  1.87it/s] 36%|███▌      | 361/999 [02:39<05:40,  1.87it/s] 36%|███▌      | 362/999 [02:40<05:36,  1.89it/s] 36%|███▋      | 363/999 [02:40<05:29,  1.93it/s] 36%|███▋      | 364/999 [02:41<05:23,  1.97it/s] 37%|███▋      | 365/999 [02:41<05:30,  1.92it/s] 37%|███▋      | 366/999 [02:42<05:29,  1.92it/s] 37%|███▋      | 367/999 [02:42<05:26,  1.93it/s] 37%|███▋      | 368/999 [02:43<05:23,  1.95it/s] 37%|███▋      | 369/999 [02:43<05:18,  1.98it/s] 37%|███▋      | 370/999 [02:44<05:17,  1.98it/s] 37%|███▋      | 371/999 [02:44<05:14,  2.00it/s] 37%|███▋      | 372/999 [02:45<05:17,  1.98it/s] 37%|███▋      | 373/999 [02:45<05:17,  1.97it/s] 37%|███▋      | 374/999 [02:46<05:16,  1.98it/s] 38%|███▊      | 375/999 [02:46<05:07,  2.03it/s] 38%|███▊      | 376/999 [02:47<05:04,  2.05it/s] 38%|███▊      | 377/999 [02:47<05:09,  2.01it/s] 38%|███▊      | 378/999 [02:48<05:05,  2.03it/s] 38%|███▊      | 379/999 [02:48<05:08,  2.01it/s] 38%|███▊      | 380/999 [02:49<05:14,  1.97it/s] 38%|███▊      | 381/999 [02:49<05:13,  1.97it/s] 38%|███▊      | 382/999 [02:50<05:07,  2.01it/s] 38%|███▊      | 383/999 [02:50<05:02,  2.04it/s] 38%|███▊      | 384/999 [02:51<05:07,  2.00it/s] 39%|███▊      | 385/999 [02:51<05:08,  1.99it/s] 39%|███▊      | 386/999 [02:52<05:11,  1.97it/s] 39%|███▊      | 387/999 [02:52<04:56,  2.06it/s] 39%|███▉      | 388/999 [02:53<05:05,  2.00it/s] 39%|███▉      | 389/999 [02:53<05:03,  2.01it/s] 39%|███▉      | 390/999 [02:54<05:04,  2.00it/s] 39%|███▉      | 391/999 [02:54<05:11,  1.95it/s] 39%|███▉      | 392/999 [02:55<05:14,  1.93it/s] 39%|███▉      | 393/999 [02:55<05:16,  1.91it/s] 39%|███▉      | 394/999 [02:56<05:13,  1.93it/s] 40%|███▉      | 395/999 [02:56<05:09,  1.95it/s] 40%|███▉      | 396/999 [02:57<05:13,  1.92it/s] 40%|███▉      | 397/999 [02:57<05:14,  1.91it/s] 40%|███▉      | 398/999 [02:58<05:12,  1.92it/s] 40%|███▉      | 399/999 [02:59<05:21,  1.87it/s] 40%|████      | 400/999 [02:59<05:18,  1.88it/s] 40%|████      | 401/999 [03:00<05:18,  1.88it/s] 40%|████      | 402/999 [03:00<05:15,  1.89it/s] 40%|████      | 403/999 [03:01<05:14,  1.90it/s] 40%|████      | 404/999 [03:01<05:10,  1.92it/s] 41%|████      | 405/999 [03:02<05:04,  1.95it/s] 41%|████      | 406/999 [03:02<05:02,  1.96it/s] 41%|████      | 407/999 [03:03<05:02,  1.96it/s] 41%|████      | 408/999 [03:03<04:57,  1.98it/s] 41%|████      | 409/999 [03:04<04:57,  1.98it/s] 41%|████      | 410/999 [03:04<05:00,  1.96it/s] 41%|████      | 411/999 [03:05<05:04,  1.93it/s] 41%|████      | 412/999 [03:05<04:59,  1.96it/s] 41%|████▏     | 413/999 [03:06<04:59,  1.96it/s] 41%|████▏     | 414/999 [03:06<04:56,  1.97it/s] 42%|████▏     | 415/999 [03:07<05:01,  1.93it/s] 42%|████▏     | 416/999 [03:07<05:05,  1.91it/s] 42%|████▏     | 417/999 [03:08<05:09,  1.88it/s] 42%|████▏     | 418/999 [03:08<05:03,  1.92it/s] 42%|████▏     | 419/999 [03:09<05:07,  1.89it/s] 42%|████▏     | 420/999 [03:09<05:08,  1.88it/s] 42%|████▏     | 421/999 [03:10<05:14,  1.84it/s] 42%|████▏     | 422/999 [03:11<05:17,  1.82it/s] 42%|████▏     | 423/999 [03:11<05:19,  1.80it/s] 42%|████▏     | 424/999 [03:12<05:13,  1.84it/s] 43%|████▎     | 425/999 [03:12<05:13,  1.83it/s] 43%|████▎     | 426/999 [03:13<05:11,  1.84it/s] 43%|████▎     | 427/999 [03:13<05:13,  1.82it/s] 43%|████▎     | 428/999 [03:14<05:11,  1.83it/s] 43%|████▎     | 429/999 [03:14<05:23,  1.76it/s] 43%|████▎     | 430/999 [03:15<05:17,  1.79it/s] 43%|████▎     | 431/999 [03:16<05:08,  1.84it/s] 43%|████▎     | 432/999 [03:16<05:06,  1.85it/s] 43%|████▎     | 433/999 [03:17<05:00,  1.88it/s] 43%|████▎     | 434/999 [03:17<04:56,  1.91it/s] 44%|████▎     | 435/999 [03:18<05:06,  1.84it/s] 44%|████▎     | 436/999 [03:18<05:14,  1.79it/s] 44%|████▎     | 437/999 [03:19<05:20,  1.75it/s] 44%|████▍     | 438/999 [03:19<05:18,  1.76it/s] 44%|████▍     | 439/999 [03:20<05:10,  1.80it/s] 44%|████▍     | 440/999 [03:20<05:10,  1.80it/s] 44%|████▍     | 441/999 [03:21<05:00,  1.86it/s] 44%|████▍     | 442/999 [03:22<04:57,  1.87it/s] 44%|████▍     | 443/999 [03:22<04:58,  1.86it/s] 44%|████▍     | 444/999 [03:23<04:53,  1.89it/s] 45%|████▍     | 445/999 [03:23<04:54,  1.88it/s] 45%|████▍     | 446/999 [03:24<04:49,  1.91it/s] 45%|████▍     | 447/999 [03:24<04:54,  1.87it/s] 45%|████▍     | 448/999 [03:25<04:52,  1.89it/s] 45%|████▍     | 449/999 [03:25<04:52,  1.88it/s] 45%|████▌     | 450/999 [03:26<04:57,  1.84it/s] 45%|████▌     | 451/999 [03:26<05:00,  1.82it/s] 45%|████▌     | 452/999 [03:27<05:03,  1.80it/s] 45%|████▌     | 453/999 [03:27<05:04,  1.79it/s] 45%|████▌     | 454/999 [03:28<05:02,  1.80it/s] 46%|████▌     | 455/999 [03:29<05:00,  1.81it/s] 46%|████▌     | 456/999 [03:29<04:54,  1.84it/s] 46%|████▌     | 457/999 [03:30<04:53,  1.85it/s] 46%|████▌     | 458/999 [03:30<04:52,  1.85it/s] 46%|████▌     | 459/999 [03:31<05:03,  1.78it/s] 46%|████▌     | 460/999 [03:31<05:03,  1.77it/s] 46%|████▌     | 461/999 [03:32<05:02,  1.78it/s] 46%|████▌     | 462/999 [03:32<05:00,  1.79it/s] 46%|████▋     | 463/999 [03:33<05:00,  1.78it/s] 46%|████▋     | 464/999 [03:34<05:04,  1.76it/s] 47%|████▋     | 465/999 [03:34<04:55,  1.81it/s] 47%|████▋     | 466/999 [03:35<04:57,  1.79it/s] 47%|████▋     | 467/999 [03:35<04:48,  1.84it/s] 47%|████▋     | 468/999 [03:36<04:43,  1.87it/s] 47%|████▋     | 469/999 [03:36<04:45,  1.86it/s] 47%|████▋     | 470/999 [03:37<04:46,  1.85it/s] 47%|████▋     | 471/999 [03:37<04:48,  1.83it/s] 47%|████▋     | 472/999 [03:38<04:55,  1.78it/s] 47%|████▋     | 473/999 [03:39<04:57,  1.77it/s] 47%|████▋     | 474/999 [03:39<04:44,  1.84it/s] 48%|████▊     | 475/999 [03:40<04:42,  1.85it/s] 48%|████▊     | 476/999 [03:40<04:39,  1.87it/s] 48%|████▊     | 477/999 [03:41<04:42,  1.84it/s] 48%|████▊     | 478/999 [03:41<04:47,  1.81it/s] 48%|████▊     | 479/999 [03:42<04:51,  1.79it/s] 48%|████▊     | 480/999 [03:42<04:41,  1.84it/s] 48%|████▊     | 481/999 [03:43<04:43,  1.83it/s] 48%|████▊     | 482/999 [03:43<04:39,  1.85it/s] 48%|████▊     | 483/999 [03:44<04:46,  1.80it/s] 48%|████▊     | 484/999 [03:45<04:39,  1.84it/s] 49%|████▊     | 485/999 [03:45<04:35,  1.87it/s] 49%|████▊     | 486/999 [03:46<04:31,  1.89it/s] 49%|████▊     | 487/999 [03:46<04:30,  1.90it/s] 49%|████▉     | 488/999 [03:47<04:26,  1.91it/s] 49%|████▉     | 489/999 [03:47<04:22,  1.94it/s] 49%|████▉     | 490/999 [03:48<04:21,  1.95it/s] 49%|████▉     | 491/999 [03:48<04:15,  1.99it/s] 49%|████▉     | 492/999 [03:49<04:15,  1.99it/s] 49%|████▉     | 493/999 [03:49<04:19,  1.95it/s] 49%|████▉     | 494/999 [03:50<04:22,  1.92it/s] 50%|████▉     | 495/999 [03:50<04:22,  1.92it/s] 50%|████▉     | 496/999 [03:51<04:20,  1.93it/s] 50%|████▉     | 497/999 [03:51<04:24,  1.90it/s] 50%|████▉     | 498/999 [03:52<04:24,  1.89it/s] 50%|████▉     | 499/999 [03:52<04:14,  1.97it/s] 50%|█████     | 500/999 [03:53<04:14,  1.96it/s] 50%|█████     | 501/999 [03:53<04:05,  2.03it/s] 50%|█████     | 502/999 [03:54<04:13,  1.96it/s] 50%|█████     | 503/999 [03:54<04:11,  1.97it/s] 50%|█████     | 504/999 [03:55<04:09,  1.98it/s] 51%|█████     | 505/999 [03:55<04:10,  1.97it/s] 51%|█████     | 506/999 [03:56<04:15,  1.93it/s] 51%|█████     | 507/999 [03:56<04:12,  1.95it/s] 51%|█████     | 508/999 [03:57<03:59,  2.05it/s] 51%|█████     | 509/999 [03:57<03:57,  2.06it/s] 51%|█████     | 510/999 [03:58<04:00,  2.03it/s] 51%|█████     | 511/999 [03:58<03:56,  2.06it/s] 51%|█████▏    | 512/999 [03:59<03:52,  2.09it/s] 51%|█████▏    | 513/999 [03:59<03:52,  2.09it/s] 51%|█████▏    | 514/999 [04:00<03:54,  2.07it/s] 52%|█████▏    | 515/999 [04:00<04:03,  1.99it/s] 52%|█████▏    | 516/999 [04:01<04:00,  2.01it/s] 52%|█████▏    | 517/999 [04:01<04:01,  2.00it/s] 52%|█████▏    | 518/999 [04:02<04:03,  1.98it/s] 52%|█████▏    | 519/999 [04:02<04:00,  1.99it/s] 52%|█████▏    | 520/999 [04:03<04:00,  1.99it/s] 52%|█████▏    | 521/999 [04:03<03:58,  2.00it/s] 52%|█████▏    | 522/999 [04:04<03:56,  2.02it/s] 52%|█████▏    | 523/999 [04:04<04:01,  1.97it/s] 52%|█████▏    | 524/999 [04:05<04:03,  1.95it/s] 53%|█████▎    | 525/999 [04:05<04:09,  1.90it/s] 53%|█████▎    | 526/999 [04:06<04:08,  1.90it/s] 53%|█████▎    | 527/999 [04:06<04:01,  1.95it/s] 53%|█████▎    | 528/999 [04:07<04:06,  1.91it/s] 53%|█████▎    | 529/999 [04:07<03:55,  2.00it/s] 53%|█████▎    | 530/999 [04:08<04:03,  1.93it/s] 53%|█████▎    | 531/999 [04:08<04:03,  1.92it/s] 53%|█████▎    | 532/999 [04:09<04:05,  1.90it/s] 53%|█████▎    | 533/999 [04:09<04:04,  1.91it/s] 53%|█████▎    | 534/999 [04:10<04:00,  1.93it/s] 54%|█████▎    | 535/999 [04:10<03:57,  1.95it/s] 54%|█████▎    | 536/999 [04:11<03:58,  1.94it/s] 54%|█████▍    | 537/999 [04:11<03:55,  1.96it/s] 54%|█████▍    | 538/999 [04:12<03:54,  1.97it/s] 54%|█████▍    | 539/999 [04:12<03:56,  1.95it/s] 54%|█████▍    | 540/999 [04:13<03:54,  1.96it/s] 54%|█████▍    | 541/999 [04:13<03:53,  1.96it/s] 54%|█████▍    | 542/999 [04:14<03:53,  1.96it/s] 54%|█████▍    | 543/999 [04:14<03:52,  1.96it/s] 54%|█████▍    | 544/999 [04:15<03:57,  1.91it/s] 55%|█████▍    | 545/999 [04:16<04:00,  1.89it/s] 55%|█████▍    | 546/999 [04:16<03:57,  1.90it/s] 55%|█████▍    | 547/999 [04:17<03:56,  1.91it/s] 55%|█████▍    | 548/999 [04:17<03:58,  1.89it/s] 55%|█████▍    | 549/999 [04:18<03:54,  1.92it/s] 55%|█████▌    | 550/999 [04:18<03:50,  1.95it/s] 55%|█████▌    | 551/999 [04:19<03:55,  1.90it/s] 55%|█████▌    | 552/999 [04:19<03:51,  1.93it/s] 55%|█████▌    | 553/999 [04:20<03:53,  1.91it/s] 55%|█████▌    | 554/999 [04:20<03:51,  1.92it/s] 56%|█████▌    | 555/999 [04:21<03:52,  1.91it/s] 56%|█████▌    | 556/999 [04:21<03:52,  1.91it/s] 56%|█████▌    | 557/999 [04:22<03:50,  1.92it/s] 56%|█████▌    | 558/999 [04:22<03:49,  1.92it/s] 56%|█████▌    | 559/999 [04:23<03:47,  1.93it/s] 56%|█████▌    | 560/999 [04:23<03:48,  1.92it/s] 56%|█████▌    | 561/999 [04:24<03:46,  1.93it/s] 56%|█████▋    | 562/999 [04:24<03:43,  1.96it/s] 56%|█████▋    | 563/999 [04:25<03:52,  1.88it/s] 56%|█████▋    | 564/999 [04:26<03:55,  1.85it/s] 57%|█████▋    | 565/999 [04:26<04:02,  1.79it/s] 57%|█████▋    | 566/999 [04:27<03:58,  1.82it/s] 57%|█████▋    | 567/999 [04:27<03:52,  1.86it/s] 57%|█████▋    | 568/999 [04:28<03:59,  1.80it/s] 57%|█████▋    | 569/999 [04:28<04:08,  1.73it/s] 57%|█████▋    | 570/999 [04:29<04:03,  1.77it/s] 57%|█████▋    | 571/999 [04:29<03:56,  1.81it/s] 57%|█████▋    | 572/999 [04:30<03:53,  1.83it/s] 57%|█████▋    | 573/999 [04:31<03:54,  1.82it/s] 57%|█████▋    | 574/999 [04:31<03:54,  1.81it/s] 58%|█████▊    | 575/999 [04:32<03:47,  1.86it/s] 58%|█████▊    | 576/999 [04:32<03:42,  1.90it/s] 58%|█████▊    | 577/999 [04:33<03:44,  1.88it/s] 58%|█████▊    | 578/999 [04:33<03:42,  1.89it/s] 58%|█████▊    | 579/999 [04:34<03:35,  1.94it/s] 58%|█████▊    | 580/999 [04:34<03:37,  1.93it/s] 58%|█████▊    | 581/999 [04:35<03:43,  1.87it/s] 58%|█████▊    | 582/999 [04:35<03:35,  1.93it/s] 58%|█████▊    | 583/999 [04:36<03:35,  1.93it/s] 58%|█████▊    | 584/999 [04:36<03:35,  1.92it/s] 59%|█████▊    | 585/999 [04:37<03:36,  1.91it/s] 59%|█████▊    | 586/999 [04:37<03:40,  1.87it/s] 59%|█████▉    | 587/999 [04:38<03:41,  1.86it/s] 59%|█████▉    | 588/999 [04:38<03:40,  1.87it/s] 59%|█████▉    | 589/999 [04:39<03:34,  1.91it/s] 59%|█████▉    | 590/999 [04:39<03:35,  1.90it/s] 59%|█████▉    | 591/999 [04:40<03:40,  1.85it/s] 59%|█████▉    | 592/999 [04:41<03:33,  1.91it/s] 59%|█████▉    | 593/999 [04:41<03:36,  1.88it/s] 59%|█████▉    | 594/999 [04:42<03:39,  1.84it/s] 60%|█████▉    | 595/999 [04:42<03:42,  1.82it/s] 60%|█████▉    | 596/999 [04:43<03:43,  1.80it/s] 60%|█████▉    | 597/999 [04:43<03:47,  1.77it/s] 60%|█████▉    | 598/999 [04:44<03:44,  1.79it/s] 60%|█████▉    | 599/999 [04:45<03:44,  1.78it/s] 60%|██████    | 600/999 [04:45<03:42,  1.80it/s] 60%|██████    | 601/999 [04:46<03:37,  1.83it/s] 60%|██████    | 602/999 [04:46<03:34,  1.85it/s] 60%|██████    | 603/999 [04:47<03:33,  1.86it/s] 60%|██████    | 604/999 [04:47<03:31,  1.87it/s] 61%|██████    | 605/999 [04:48<03:30,  1.87it/s] 61%|██████    | 606/999 [04:48<03:36,  1.82it/s] 61%|██████    | 607/999 [04:49<03:31,  1.86it/s] 61%|██████    | 608/999 [04:49<03:26,  1.89it/s] 61%|██████    | 609/999 [04:50<03:23,  1.92it/s] 61%|██████    | 610/999 [04:50<03:20,  1.94it/s] 61%|██████    | 611/999 [04:51<03:18,  1.96it/s] 61%|██████▏   | 612/999 [04:51<03:21,  1.92it/s] 61%|██████▏   | 613/999 [04:52<03:17,  1.96it/s] 61%|██████▏   | 614/999 [04:52<03:20,  1.92it/s] 62%|██████▏   | 615/999 [04:53<03:11,  2.00it/s] 62%|██████▏   | 616/999 [04:53<03:18,  1.93it/s] 62%|██████▏   | 617/999 [04:54<03:17,  1.93it/s] 62%|██████▏   | 618/999 [04:54<03:18,  1.92it/s] 62%|██████▏   | 619/999 [04:55<03:13,  1.96it/s] 62%|██████▏   | 620/999 [04:55<03:16,  1.93it/s] 62%|██████▏   | 621/999 [04:56<03:13,  1.96it/s] 62%|██████▏   | 622/999 [04:56<03:11,  1.97it/s] 62%|██████▏   | 623/999 [04:57<03:12,  1.96it/s] 62%|██████▏   | 624/999 [04:57<03:10,  1.97it/s] 63%|██████▎   | 625/999 [04:58<03:12,  1.94it/s] 63%|██████▎   | 626/999 [04:59<03:12,  1.94it/s] 63%|██████▎   | 627/999 [04:59<03:10,  1.96it/s] 63%|██████▎   | 628/999 [05:00<03:11,  1.93it/s] 63%|██████▎   | 629/999 [05:00<03:12,  1.92it/s] 63%|██████▎   | 630/999 [05:01<03:12,  1.91it/s] 63%|██████▎   | 631/999 [05:01<03:10,  1.94it/s] 63%|██████▎   | 632/999 [05:02<03:02,  2.01it/s] 63%|██████▎   | 633/999 [05:02<03:02,  2.00it/s] 63%|██████▎   | 634/999 [05:03<03:02,  2.00it/s] 64%|██████▎   | 635/999 [05:03<03:01,  2.00it/s] 64%|██████▎   | 636/999 [05:04<03:03,  1.97it/s] 64%|██████▍   | 637/999 [05:04<02:59,  2.01it/s] 64%|██████▍   | 638/999 [05:05<03:02,  1.98it/s] 64%|██████▍   | 639/999 [05:05<03:02,  1.97it/s] 64%|██████▍   | 640/999 [05:06<03:02,  1.96it/s] 64%|██████▍   | 641/999 [05:06<03:07,  1.91it/s] 64%|██████▍   | 642/999 [05:07<03:08,  1.90it/s] 64%|██████▍   | 643/999 [05:07<03:06,  1.91it/s] 64%|██████▍   | 644/999 [05:08<03:05,  1.92it/s] 65%|██████▍   | 645/999 [05:08<03:01,  1.95it/s] 65%|██████▍   | 646/999 [05:09<03:04,  1.91it/s] 65%|██████▍   | 647/999 [05:09<03:03,  1.92it/s] 65%|██████▍   | 648/999 [05:10<02:56,  1.98it/s] 65%|██████▍   | 649/999 [05:10<02:53,  2.01it/s] 65%|██████▌   | 650/999 [05:11<02:48,  2.07it/s] 65%|██████▌   | 651/999 [05:11<02:50,  2.04it/s] 65%|██████▌   | 652/999 [05:12<02:50,  2.03it/s] 65%|██████▌   | 653/999 [05:12<02:53,  1.99it/s] 65%|██████▌   | 654/999 [05:13<02:48,  2.05it/s] 66%|██████▌   | 655/999 [05:13<02:44,  2.10it/s] 66%|██████▌   | 656/999 [05:14<02:48,  2.03it/s] 66%|██████▌   | 657/999 [05:14<02:49,  2.01it/s] 66%|██████▌   | 658/999 [05:15<02:46,  2.05it/s] 66%|██████▌   | 659/999 [05:15<02:44,  2.07it/s] 66%|██████▌   | 660/999 [05:16<02:46,  2.04it/s] 66%|██████▌   | 661/999 [05:16<02:44,  2.05it/s] 66%|██████▋   | 662/999 [05:17<02:45,  2.04it/s] 66%|██████▋   | 663/999 [05:17<02:47,  2.00it/s] 66%|██████▋   | 664/999 [05:18<02:49,  1.97it/s] 67%|██████▋   | 665/999 [05:18<02:47,  2.00it/s] 67%|██████▋   | 666/999 [05:19<02:46,  1.99it/s] 67%|██████▋   | 667/999 [05:19<02:43,  2.03it/s] 67%|██████▋   | 668/999 [05:20<02:43,  2.02it/s] 67%|██████▋   | 669/999 [05:20<02:46,  1.98it/s] 67%|██████▋   | 670/999 [05:21<02:46,  1.97it/s] 67%|██████▋   | 671/999 [05:21<02:43,  2.01it/s] 67%|██████▋   | 672/999 [05:22<02:38,  2.07it/s] 67%|██████▋   | 673/999 [05:22<02:36,  2.08it/s] 67%|██████▋   | 674/999 [05:23<02:35,  2.09it/s] 68%|██████▊   | 675/999 [05:23<02:34,  2.09it/s] 68%|██████▊   | 676/999 [05:23<02:35,  2.08it/s] 68%|██████▊   | 677/999 [05:24<02:36,  2.05it/s] 68%|██████▊   | 678/999 [05:24<02:37,  2.04it/s] 68%|██████▊   | 679/999 [05:25<02:36,  2.05it/s] 68%|██████▊   | 680/999 [05:25<02:38,  2.02it/s] 68%|██████▊   | 681/999 [05:26<02:35,  2.04it/s] 68%|██████▊   | 682/999 [05:26<02:32,  2.08it/s] 68%|██████▊   | 683/999 [05:27<02:35,  2.04it/s] 68%|██████▊   | 684/999 [05:27<02:35,  2.02it/s] 69%|██████▊   | 685/999 [05:28<02:34,  2.04it/s] 69%|██████▊   | 686/999 [05:28<02:34,  2.02it/s] 69%|██████▉   | 687/999 [05:29<02:38,  1.97it/s] 69%|██████▉   | 688/999 [05:29<02:39,  1.94it/s] 69%|██████▉   | 689/999 [05:30<02:37,  1.96it/s] 69%|██████▉   | 690/999 [05:30<02:38,  1.95it/s] 69%|██████▉   | 691/999 [05:31<02:37,  1.95it/s] 69%|██████▉   | 692/999 [05:32<02:36,  1.96it/s] 69%|██████▉   | 693/999 [05:32<02:36,  1.96it/s] 69%|██████▉   | 694/999 [05:32<02:32,  1.99it/s] 70%|██████▉   | 695/999 [05:33<02:35,  1.96it/s] 70%|██████▉   | 696/999 [05:34<02:38,  1.91it/s] 70%|██████▉   | 697/999 [05:34<02:39,  1.90it/s] 70%|██████▉   | 698/999 [05:35<02:38,  1.90it/s] 70%|██████▉   | 699/999 [05:35<02:39,  1.88it/s] 70%|███████   | 700/999 [05:36<02:37,  1.90it/s] 70%|███████   | 701/999 [05:36<02:36,  1.91it/s] 70%|███████   | 702/999 [05:37<02:40,  1.85it/s] 70%|███████   | 703/999 [05:37<02:39,  1.85it/s] 70%|███████   | 704/999 [05:38<02:37,  1.87it/s] 71%|███████   | 705/999 [05:38<02:45,  1.77it/s] 71%|███████   | 706/999 [05:39<02:39,  1.84it/s] 71%|███████   | 707/999 [05:40<02:37,  1.85it/s] 71%|███████   | 708/999 [05:40<02:33,  1.89it/s] 71%|███████   | 709/999 [05:41<02:34,  1.87it/s] 71%|███████   | 710/999 [05:41<02:37,  1.83it/s] 71%|███████   | 711/999 [05:42<02:37,  1.83it/s] 71%|███████▏  | 712/999 [05:42<02:35,  1.85it/s] 71%|███████▏  | 713/999 [05:43<02:30,  1.90it/s] 71%|███████▏  | 714/999 [05:43<02:32,  1.87it/s] 72%|███████▏  | 715/999 [05:44<02:31,  1.87it/s] 72%|███████▏  | 716/999 [05:44<02:33,  1.84it/s] 72%|███████▏  | 717/999 [05:45<02:38,  1.78it/s] 72%|███████▏  | 718/999 [05:46<02:37,  1.79it/s] 72%|███████▏  | 719/999 [05:46<02:39,  1.75it/s] 72%|███████▏  | 720/999 [05:47<02:43,  1.70it/s] 72%|███████▏  | 721/999 [05:47<02:47,  1.66it/s] 72%|███████▏  | 722/999 [05:48<02:50,  1.62it/s] 72%|███████▏  | 723/999 [05:49<02:50,  1.62it/s] 72%|███████▏  | 724/999 [05:49<02:48,  1.63it/s] 73%|███████▎  | 725/999 [05:50<02:46,  1.65it/s] 73%|███████▎  | 726/999 [05:50<02:40,  1.70it/s] 73%|███████▎  | 727/999 [05:51<02:41,  1.68it/s] 73%|███████▎  | 728/999 [05:52<02:41,  1.67it/s] 73%|███████▎  | 729/999 [05:52<02:41,  1.67it/s] 73%|███████▎  | 730/999 [05:53<02:43,  1.64it/s] 73%|███████▎  | 731/999 [05:53<02:41,  1.66it/s] 73%|███████▎  | 732/999 [05:54<02:43,  1.64it/s] 73%|███████▎  | 733/999 [05:55<02:41,  1.65it/s] 73%|███████▎  | 734/999 [05:55<02:37,  1.69it/s] 74%|███████▎  | 735/999 [05:56<02:34,  1.71it/s] 74%|███████▎  | 736/999 [05:56<02:40,  1.64it/s] 74%|███████▍  | 737/999 [05:57<02:40,  1.63it/s] 74%|███████▍  | 738/999 [05:58<02:54,  1.49it/s] 74%|███████▍  | 739/999 [05:59<02:56,  1.47it/s] 74%|███████▍  | 740/999 [05:59<02:56,  1.47it/s] 74%|███████▍  | 741/999 [06:00<02:56,  1.46it/s] 74%|███████▍  | 742/999 [06:01<02:53,  1.48it/s] 74%|███████▍  | 743/999 [06:01<02:48,  1.52it/s] 74%|███████▍  | 744/999 [06:02<02:49,  1.51it/s] 75%|███████▍  | 745/999 [06:03<02:44,  1.54it/s] 75%|███████▍  | 746/999 [06:03<02:41,  1.57it/s] 75%|███████▍  | 747/999 [06:04<02:40,  1.57it/s] 75%|███████▍  | 748/999 [06:04<02:44,  1.53it/s] 75%|███████▍  | 749/999 [06:05<02:41,  1.55it/s] 75%|███████▌  | 750/999 [06:06<02:43,  1.52it/s] 75%|███████▌  | 751/999 [06:06<02:43,  1.52it/s] 75%|███████▌  | 752/999 [06:07<02:39,  1.54it/s] 75%|███████▌  | 753/999 [06:08<02:40,  1.53it/s] 75%|███████▌  | 754/999 [06:08<02:41,  1.52it/s] 76%|███████▌  | 755/999 [06:09<02:40,  1.52it/s] 76%|███████▌  | 756/999 [06:10<02:37,  1.55it/s] 76%|███████▌  | 757/999 [06:10<02:42,  1.49it/s] 76%|███████▌  | 758/999 [06:11<02:42,  1.48it/s] 76%|███████▌  | 759/999 [06:12<02:38,  1.51it/s] 76%|███████▌  | 760/999 [06:12<02:40,  1.49it/s] 76%|███████▌  | 761/999 [06:13<02:43,  1.46it/s] 76%|███████▋  | 762/999 [06:14<02:43,  1.45it/s] 76%|███████▋  | 763/999 [06:15<02:46,  1.42it/s] 76%|███████▋  | 764/999 [06:15<02:49,  1.38it/s] 77%|███████▋  | 765/999 [06:16<02:45,  1.41it/s] 77%|███████▋  | 766/999 [06:17<02:43,  1.43it/s] 77%|███████▋  | 767/999 [06:17<02:43,  1.42it/s] 77%|███████▋  | 768/999 [06:18<02:42,  1.42it/s] 77%|███████▋  | 769/999 [06:19<02:41,  1.43it/s] 77%|███████▋  | 770/999 [06:20<02:41,  1.42it/s] 77%|███████▋  | 771/999 [06:20<02:35,  1.46it/s] 77%|███████▋  | 772/999 [06:21<02:32,  1.49it/s] 77%|███████▋  | 773/999 [06:21<02:31,  1.50it/s] 77%|███████▋  | 774/999 [06:22<02:32,  1.48it/s] 78%|███████▊  | 775/999 [06:23<02:30,  1.49it/s] 78%|███████▊  | 776/999 [06:23<02:31,  1.47it/s] 78%|███████▊  | 777/999 [06:24<02:31,  1.47it/s] 78%|███████▊  | 778/999 [06:25<02:33,  1.44it/s] 78%|███████▊  | 779/999 [06:26<02:29,  1.47it/s] 78%|███████▊  | 780/999 [06:26<02:27,  1.48it/s] 78%|███████▊  | 781/999 [06:27<02:30,  1.44it/s] 78%|███████▊  | 782/999 [06:28<02:29,  1.46it/s] 78%|███████▊  | 783/999 [06:28<02:29,  1.45it/s] 78%|███████▊  | 784/999 [06:29<02:28,  1.45it/s] 79%|███████▊  | 785/999 [06:30<02:32,  1.41it/s] 79%|███████▊  | 786/999 [06:31<02:35,  1.37it/s] 79%|███████▉  | 787/999 [06:31<02:32,  1.39it/s] 79%|███████▉  | 788/999 [06:32<02:31,  1.39it/s] 79%|███████▉  | 789/999 [06:33<02:30,  1.39it/s] 79%|███████▉  | 790/999 [06:33<02:29,  1.39it/s] 79%|███████▉  | 791/999 [06:34<02:25,  1.43it/s] 79%|███████▉  | 792/999 [06:35<02:22,  1.45it/s] 79%|███████▉  | 793/999 [06:35<02:20,  1.47it/s] 79%|███████▉  | 794/999 [06:36<02:21,  1.45it/s] 80%|███████▉  | 795/999 [06:37<02:17,  1.48it/s] 80%|███████▉  | 796/999 [06:37<02:17,  1.48it/s] 80%|███████▉  | 797/999 [06:38<02:17,  1.47it/s] 80%|███████▉  | 798/999 [06:39<02:20,  1.43it/s] 80%|███████▉  | 799/999 [06:40<02:24,  1.38it/s] 80%|████████  | 800/999 [06:40<02:26,  1.36it/s] 80%|████████  | 801/999 [06:41<02:24,  1.37it/s] 80%|████████  | 802/999 [06:42<02:23,  1.37it/s] 80%|████████  | 803/999 [06:43<02:24,  1.36it/s] 80%|████████  | 804/999 [06:43<02:25,  1.34it/s] 81%|████████  | 805/999 [06:44<02:24,  1.34it/s] 81%|████████  | 806/999 [06:45<02:23,  1.34it/s] 81%|████████  | 807/999 [06:46<02:20,  1.37it/s] 81%|████████  | 808/999 [06:46<02:17,  1.38it/s] 81%|████████  | 809/999 [06:47<02:15,  1.40it/s] 81%|████████  | 810/999 [06:48<02:11,  1.44it/s] 81%|████████  | 811/999 [06:48<02:11,  1.43it/s] 81%|████████▏ | 812/999 [06:49<02:10,  1.43it/s] 81%|████████▏ | 813/999 [06:50<02:10,  1.42it/s] 81%|████████▏ | 814/999 [06:50<02:13,  1.39it/s] 82%|████████▏ | 815/999 [06:51<02:15,  1.36it/s] 82%|████████▏ | 816/999 [06:52<02:16,  1.34it/s] 82%|████████▏ | 817/999 [06:53<02:16,  1.33it/s] 82%|████████▏ | 818/999 [06:54<02:14,  1.35it/s] 82%|████████▏ | 819/999 [06:54<02:17,  1.31it/s] 82%|████████▏ | 820/999 [06:55<02:15,  1.32it/s] 82%|████████▏ | 821/999 [06:56<02:13,  1.33it/s] 82%|████████▏ | 822/999 [06:57<02:10,  1.35it/s] 82%|████████▏ | 823/999 [06:57<02:09,  1.35it/s] 82%|████████▏ | 824/999 [06:58<02:09,  1.35it/s] 83%|████████▎ | 825/999 [06:59<02:10,  1.33it/s] 83%|████████▎ | 826/999 [06:59<02:06,  1.37it/s] 83%|████████▎ | 827/999 [07:00<02:01,  1.42it/s] 83%|████████▎ | 828/999 [07:01<02:00,  1.41it/s] 83%|████████▎ | 829/999 [07:02<02:01,  1.39it/s] 83%|████████▎ | 830/999 [07:02<01:59,  1.42it/s] 83%|████████▎ | 831/999 [07:03<01:56,  1.44it/s] 83%|████████▎ | 832/999 [07:04<01:56,  1.43it/s] 83%|████████▎ | 833/999 [07:04<01:51,  1.48it/s] 83%|████████▎ | 834/999 [07:05<01:49,  1.51it/s] 84%|████████▎ | 835/999 [07:06<01:50,  1.48it/s] 84%|████████▎ | 836/999 [07:06<01:50,  1.48it/s] 84%|████████▍ | 837/999 [07:07<01:51,  1.45it/s] 84%|████████▍ | 838/999 [07:08<01:51,  1.44it/s] 84%|████████▍ | 839/999 [07:08<01:51,  1.43it/s] 84%|████████▍ | 840/999 [07:09<01:50,  1.44it/s] 84%|████████▍ | 841/999 [07:10<01:48,  1.46it/s] 84%|████████▍ | 842/999 [07:10<01:47,  1.46it/s] 84%|████████▍ | 843/999 [07:11<01:45,  1.48it/s] 84%|████████▍ | 844/999 [07:12<01:43,  1.50it/s] 85%|████████▍ | 845/999 [07:12<01:40,  1.53it/s] 85%|████████▍ | 846/999 [07:13<01:43,  1.48it/s] 85%|████████▍ | 847/999 [07:14<01:42,  1.49it/s] 85%|████████▍ | 848/999 [07:14<01:41,  1.48it/s] 85%|████████▍ | 849/999 [07:15<01:42,  1.46it/s] 85%|████████▌ | 850/999 [07:16<01:40,  1.48it/s] 85%|████████▌ | 851/999 [07:16<01:41,  1.46it/s] 85%|████████▌ | 852/999 [07:17<01:40,  1.46it/s] 85%|████████▌ | 853/999 [07:18<01:38,  1.49it/s] 85%|████████▌ | 854/999 [07:18<01:34,  1.53it/s] 86%|████████▌ | 855/999 [07:19<01:34,  1.52it/s] 86%|████████▌ | 856/999 [07:20<01:32,  1.55it/s] 86%|████████▌ | 857/999 [07:20<01:29,  1.58it/s] 86%|████████▌ | 858/999 [07:21<01:29,  1.57it/s] 86%|████████▌ | 859/999 [07:22<01:29,  1.57it/s] 86%|████████▌ | 860/999 [07:22<01:31,  1.52it/s] 86%|████████▌ | 861/999 [07:23<01:32,  1.50it/s] 86%|████████▋ | 862/999 [07:24<01:29,  1.54it/s] 86%|████████▋ | 863/999 [07:24<01:29,  1.52it/s] 86%|████████▋ | 864/999 [07:25<01:30,  1.48it/s] 87%|████████▋ | 865/999 [07:26<01:31,  1.47it/s] 87%|████████▋ | 866/999 [07:26<01:30,  1.48it/s] 87%|████████▋ | 867/999 [07:27<01:30,  1.46it/s] 87%|████████▋ | 868/999 [07:28<01:27,  1.50it/s] 87%|████████▋ | 869/999 [07:28<01:26,  1.51it/s] 87%|████████▋ | 870/999 [07:29<01:24,  1.53it/s] 87%|████████▋ | 871/999 [07:30<01:24,  1.51it/s] 87%|████████▋ | 872/999 [07:30<01:24,  1.50it/s] 87%|████████▋ | 873/999 [07:31<01:24,  1.48it/s] 87%|████████▋ | 874/999 [07:32<01:23,  1.50it/s] 88%|████████▊ | 875/999 [07:32<01:23,  1.49it/s] 88%|████████▊ | 876/999 [07:33<01:22,  1.48it/s] 88%|████████▊ | 877/999 [07:34<01:23,  1.47it/s] 88%|████████▊ | 878/999 [07:34<01:22,  1.47it/s] 88%|████████▊ | 879/999 [07:35<01:21,  1.47it/s] 88%|████████▊ | 880/999 [07:36<01:20,  1.47it/s] 88%|████████▊ | 881/999 [07:36<01:20,  1.47it/s] 88%|████████▊ | 882/999 [07:37<01:20,  1.46it/s] 88%|████████▊ | 883/999 [07:38<01:18,  1.47it/s] 88%|████████▊ | 884/999 [07:38<01:17,  1.48it/s] 89%|████████▊ | 885/999 [07:39<01:15,  1.52it/s] 89%|████████▊ | 886/999 [07:40<01:14,  1.51it/s] 89%|████████▉ | 887/999 [07:40<01:14,  1.51it/s] 89%|████████▉ | 888/999 [07:41<01:16,  1.46it/s] 89%|████████▉ | 889/999 [07:42<01:14,  1.48it/s] 89%|████████▉ | 890/999 [07:42<01:12,  1.50it/s] 89%|████████▉ | 891/999 [07:43<01:10,  1.54it/s] 89%|████████▉ | 892/999 [07:44<01:08,  1.56it/s] 89%|████████▉ | 893/999 [07:44<01:07,  1.57it/s] 89%|████████▉ | 894/999 [07:45<01:07,  1.56it/s] 90%|████████▉ | 895/999 [07:46<01:06,  1.56it/s] 90%|████████▉ | 896/999 [07:46<01:05,  1.57it/s] 90%|████████▉ | 897/999 [07:47<01:05,  1.57it/s] 90%|████████▉ | 898/999 [07:48<01:04,  1.56it/s] 90%|████████▉ | 899/999 [07:48<01:03,  1.57it/s] 90%|█████████ | 900/999 [07:49<01:02,  1.57it/s] 90%|█████████ | 901/999 [07:49<01:02,  1.56it/s] 90%|█████████ | 902/999 [07:50<01:02,  1.56it/s] 90%|█████████ | 903/999 [07:51<01:00,  1.58it/s] 90%|█████████ | 904/999 [07:51<01:00,  1.58it/s] 91%|█████████ | 905/999 [07:52<01:00,  1.55it/s] 91%|█████████ | 906/999 [07:53<00:59,  1.56it/s] 91%|█████████ | 907/999 [07:53<00:58,  1.56it/s] 91%|█████████ | 908/999 [07:54<00:57,  1.57it/s] 91%|█████████ | 909/999 [07:55<00:58,  1.54it/s] 91%|█████████ | 910/999 [07:55<00:59,  1.51it/s] 91%|█████████ | 911/999 [07:56<00:58,  1.51it/s] 91%|█████████▏| 912/999 [07:57<00:58,  1.50it/s] 91%|█████████▏| 913/999 [07:57<00:57,  1.49it/s] 91%|█████████▏| 914/999 [07:58<00:56,  1.52it/s] 92%|█████████▏| 915/999 [07:59<00:55,  1.51it/s] 92%|█████████▏| 916/999 [07:59<00:55,  1.51it/s] 92%|█████████▏| 917/999 [08:00<00:54,  1.49it/s] 92%|█████████▏| 918/999 [08:01<00:54,  1.49it/s] 92%|█████████▏| 919/999 [08:01<00:53,  1.48it/s] 92%|█████████▏| 920/999 [08:02<00:52,  1.51it/s] 92%|█████████▏| 921/999 [08:03<00:50,  1.55it/s] 92%|█████████▏| 922/999 [08:03<00:49,  1.56it/s] 92%|█████████▏| 923/999 [08:04<00:48,  1.56it/s] 92%|█████████▏| 924/999 [08:04<00:47,  1.57it/s] 93%|█████████▎| 925/999 [08:05<00:47,  1.56it/s] 93%|█████████▎| 926/999 [08:06<00:47,  1.55it/s] 93%|█████████▎| 927/999 [08:06<00:46,  1.54it/s] 93%|█████████▎| 928/999 [08:07<00:46,  1.54it/s] 93%|█████████▎| 929/999 [08:08<00:45,  1.53it/s] 93%|█████████▎| 930/999 [08:08<00:45,  1.53it/s] 93%|█████████▎| 931/999 [08:09<00:44,  1.53it/s] 93%|█████████▎| 932/999 [08:10<00:43,  1.54it/s] 93%|█████████▎| 933/999 [08:10<00:43,  1.52it/s] 93%|█████████▎| 934/999 [08:11<00:42,  1.53it/s] 94%|█████████▎| 935/999 [08:12<00:41,  1.55it/s] 94%|█████████▎| 936/999 [08:12<00:40,  1.54it/s] 94%|█████████▍| 937/999 [08:13<00:39,  1.56it/s] 94%|█████████▍| 938/999 [08:13<00:37,  1.61it/s] 94%|█████████▍| 939/999 [08:14<00:37,  1.58it/s] 94%|█████████▍| 940/999 [08:15<00:36,  1.60it/s] 94%|█████████▍| 941/999 [08:15<00:35,  1.62it/s] 94%|█████████▍| 942/999 [08:16<00:35,  1.60it/s] 94%|█████████▍| 943/999 [08:17<00:35,  1.59it/s] 94%|█████████▍| 944/999 [08:17<00:34,  1.58it/s] 95%|█████████▍| 945/999 [08:18<00:34,  1.58it/s] 95%|█████████▍| 946/999 [08:19<00:33,  1.59it/s] 95%|█████████▍| 947/999 [08:19<00:30,  1.68it/s] 95%|█████████▍| 948/999 [08:20<00:30,  1.65it/s] 95%|█████████▍| 949/999 [08:20<00:30,  1.65it/s] 95%|█████████▌| 950/999 [08:21<00:30,  1.62it/s] 95%|█████████▌| 951/999 [08:22<00:30,  1.56it/s] 95%|█████████▌| 952/999 [08:22<00:30,  1.52it/s] 95%|█████████▌| 953/999 [08:23<00:30,  1.51it/s] 95%|█████████▌| 954/999 [08:24<00:30,  1.46it/s] 96%|█████████▌| 955/999 [08:24<00:30,  1.45it/s] 96%|█████████▌| 956/999 [08:25<00:29,  1.45it/s] 96%|█████████▌| 957/999 [08:26<00:29,  1.43it/s] 96%|█████████▌| 958/999 [08:27<00:28,  1.43it/s] 96%|█████████▌| 959/999 [08:27<00:28,  1.42it/s] 96%|█████████▌| 960/999 [08:28<00:26,  1.45it/s] 96%|█████████▌| 961/999 [08:29<00:26,  1.44it/s] 96%|█████████▋| 962/999 [08:29<00:25,  1.44it/s] 96%|█████████▋| 963/999 [08:30<00:25,  1.41it/s] 96%|█████████▋| 964/999 [08:31<00:25,  1.37it/s] 97%|█████████▋| 965/999 [08:32<00:24,  1.39it/s] 97%|█████████▋| 966/999 [08:32<00:23,  1.41it/s] 97%|█████████▋| 967/999 [08:33<00:22,  1.44it/s] 97%|█████████▋| 968/999 [08:34<00:21,  1.45it/s] 97%|█████████▋| 969/999 [08:34<00:21,  1.41it/s] 97%|█████████▋| 970/999 [08:35<00:20,  1.44it/s] 97%|█████████▋| 971/999 [08:36<00:19,  1.44it/s] 97%|█████████▋| 972/999 [08:36<00:18,  1.42it/s] 97%|█████████▋| 973/999 [08:37<00:18,  1.42it/s] 97%|█████████▋| 974/999 [08:38<00:18,  1.35it/s] 98%|█████████▊| 975/999 [08:39<00:17,  1.36it/s] 98%|█████████▊| 976/999 [08:39<00:16,  1.41it/s] 98%|█████████▊| 977/999 [08:40<00:16,  1.36it/s] 98%|█████████▊| 978/999 [08:41<00:15,  1.34it/s] 98%|█████████▊| 979/999 [08:42<00:14,  1.37it/s] 98%|█████████▊| 980/999 [08:42<00:13,  1.40it/s] 98%|█████████▊| 981/999 [08:43<00:13,  1.38it/s] 98%|█████████▊| 982/999 [08:44<00:12,  1.38it/s] 98%|█████████▊| 983/999 [08:44<00:11,  1.41it/s] 98%|█████████▊| 984/999 [08:45<00:10,  1.40it/s] 99%|█████████▊| 985/999 [08:46<00:10,  1.39it/s] 99%|█████████▊| 986/999 [08:46<00:09,  1.43it/s] 99%|█████████▉| 987/999 [08:47<00:08,  1.42it/s] 99%|█████████▉| 988/999 [08:48<00:07,  1.40it/s] 99%|█████████▉| 989/999 [08:49<00:07,  1.42it/s] 99%|█████████▉| 990/999 [08:49<00:06,  1.43it/s] 99%|█████████▉| 991/999 [08:50<00:05,  1.41it/s] 99%|█████████▉| 992/999 [08:51<00:04,  1.42it/s] 99%|█████████▉| 993/999 [08:51<00:04,  1.38it/s] 99%|█████████▉| 994/999 [08:52<00:03,  1.39it/s]100%|█████████▉| 995/999 [08:53<00:02,  1.42it/s]100%|█████████▉| 996/999 [08:54<00:02,  1.41it/s]100%|█████████▉| 997/999 [08:54<00:01,  1.39it/s]100%|█████████▉| 998/999 [08:55<00:00,  1.34it/s]100%|██████████| 999/999 [08:56<00:00,  1.39it/s]100%|██████████| 999/999 [08:56<00:00,  1.86it/s]
plt.figure(figsize=(10, 6))
plt.scatter(quantiles_theoriques, quantiles_empiriques)
plt.plot(quantiles_theoriques, quantiles_theoriques, color='red', label='Première bissectrice')
plt.title('QQ Plot - Quantiles empiriques vs Quantiles théoriques')
plt.xlabel('Quantiles théoriques (distribution Skew Student)')
plt.ylabel('Quantiles empiriques')
plt.grid(True)
plt.show()

# # kstest y revenir
# ks_stat, ks_p_value = kstest(data_train, skew_student_pdf, args=(**params_sstd,))

# print("="*80)
# print("H0 : Les données suivent une loi de Skew Student")
# print(f"Statistique de test : {ks_stat:.4f}")
# print(f"P-value : {ks_p_value:.4f}")
# print("="*80)
# A revoir

II.4.2. Calcul de la VaR Skew Student

# Objectif : écrire une fonction qui calcule la VaR skew-student

def sstd_var_fct(alpha, params):
    """
    Calcul de la VaR skew student
    data : les rendements logarithmiques
    alpha : le niveau de confiance
    """

    return -skew_student_quantile(1-alpha, **params)
sstd_var = sstd_var_fct(alpha, params_sstd)
print(f"La VaR skew student pour h=1j et alpha={alpha} est : {sstd_var:.4%}")
La VaR skew student pour h=1j et alpha=0.99 est : 4.2575%

III. Implémentation de l’ES

L’expected shortfall (ES) est une mesure de risque qui donne une estimation de la perte moyenne au-delà du seuil de la VaR. Par exemple, un ES à 5% sur 1 jour de 1000 euros signifie que si la perte dépasse 1000 euros, alors la perte moyenne sera de 1500 euros. L’ES est une mesure plus robuste que la VaR, car elle prend en compte les queues de distribution et est particulièrement utile pour évaluer les risques extrêmes. Elle est définie comme suit :

\[ES_{\alpha}(h) = E(PnL | PnL \leq -VaR_{\alpha}(h))\]

/! La ES du cours est différente de celle ci. Elle est définie comme suit : \[ES_{\alpha}(h) = E(PnL - VaR | PnL \leq -VaR_{\alpha}(h)) = CTE - VaR\]

Voir ce qui est fait dans le cadre réglementaire.

# Expected Shortfall pour la VaR historique, bootstrap et gaussienne, et skew-student

def expected_shortfall(data, var):
    """
    Calcul de l'Expected Shortfall
    data : les rendements logarithmiques
    var : la VaR
    """
    return -data[data < -var].mean()

es_hist_train = expected_shortfall(data_train, var_hist_train)
es_bs_train = expected_shortfall(data_train, var_bs_train)
es_gauss_train = expected_shortfall(data_train, var_gauss_train)
es_sstd_train = expected_shortfall(data_train, sstd_var)

# in a df
es = pd.DataFrame({
    'Historique': [es_hist_train],
    'Bootstrap': [es_bs_train],
    'Gaussienne': [es_gauss_train],
    'Skew Student': [es_sstd_train]
})

print("="*80)
print("Expected Shortfall empirique (en %) pour h=1j")
print(round(100*es,2))
print("="*80)
================================================================================
Expected Shortfall empirique (en %) pour h=1j
   Historique  Bootstrap  Gaussienne  Skew Student
0        5.47       5.51        4.47          5.68
================================================================================
import scipy.stats as stats
import scipy.integrate as integrate

def expected_shortfall_theoretical(alpha, quantile_function, density_function,params):
    """
    Computes the Expected Shortfall (Conditional VaR) for a given distribution.

    Parameters:
    - alpha (float): Confidence level (e.g., 0.99 for 99%)
    - quantile_function (callable): Function to compute quantiles (e.g., skew_student_quantile)
    - params (dict): Parameters of the distribution

    Returns:
    - float: Expected Shortfall value
    """

    # Compute the Value at Risk (VaR) at level alpha
    var_alpha = quantile_function(1-alpha, **params)

    # Expected Shortfall integral
    integral_value, _ = integrate.quad(lambda x: x * density_function(x, **params), -float("inf"), var_alpha)

    # Compute Expected Shortfall
    es_alpha = -integral_value / (1 - alpha)

    return es_alpha

# Compute Expected Shortfall using the corrected function
alpha = 0.99
es_sstd_theoretical = expected_shortfall_theoretical(alpha,skew_student_quantile,skew_student_pdf, params_sstd)

params_norm = {
    "loc" : np.mean(data_train),
    "scale" : np.std(data_train)
}

es_gauss_theoretical = expected_shortfall_theoretical(alpha,stats.norm.ppf,stats.norm.pdf, params_norm)

es_theoretical = pd.DataFrame({
    'Gaussienne': [es_gauss_theoretical],
    'Skew Student': [es_sstd_theoretical]
})

print("="*80)
print("Expected Shortfall théorique (en %) pour h=1j")
print(round(100*es_theoretical,2))
print("="*80)
================================================================================
Expected Shortfall théorique (en %) pour h=1j
   Gaussienne  Skew Student
0         3.7          6.71
================================================================================

IV.Protocole de Backtesting

L’exercice de backtesting consiste à vérifier la capacité d’adaptation du modèle et sa viabilité en dehors de son cadre d’entraînement. Il permet d’évaluer la performance des modèles dans le temps. Idéalement, il faudrait le realiser quotidiennement afin d’évaluer s’il est utile ou non de recalibrer le modèle.

Dans le cadre de TP, nous n’avons pas observé d’exceptions avec l’utilisation de la VaR historique. Cela est probablement du à la période d’apprentissage trop stricte. Notre modèle était donc trop restrictif/conservateur ce qui peut témoigner de son incapacité d’adaptation. Pour ce faire, il aurait été necessaire de le recalibrer.

Sachant que les modèles sont évalués quotidiennement, à quel moment doit-on considérer qu’il est nécessaire de recalibrer le modèle ? Quels indicateurs pourrait-on mettre en place pour déterminer si tout est sous contrôle (VaR trop haute, trop basse) ou si un recalibrage est requis, sachant que le modèle est backtesté chaque jour ?

Pour repondre à ces questions, nous proposons le protocole de backtest ci-dessous :

  • Dans la réglementation baloise, il est demandé de tester les performances de la VaR sur les 250 jours suivants la date de réalisation du modèle. Dans ces 250 jours, on est censé observé 2 à 3 exceptions, soit 1%. Lorsqu’il n’y a aucune exception sur cette période de temps, nous jugerons que le modèle est mal calibré.

  • Lorsqu’il y a des exceptions, nous pouvons comparer ces exceptions théoriques aux exceptions observées à l’aide d’un test de Kupiec/Unconditionnal coverage [1], une variante du test binomiale qui permet de tester sous l’hypothèse nulle que le taux d’exception(p) est égal au niveau de confiance de la VaR (1-\(\alpha\)). La statistique de test suit une loi de khi-deux à 1 degré de liberté. Lorsque cette hypothèse est rejetée, cela signifie que le modèle est mal calibré. En effet, si une banque a trop d’exceptions, i.e. \(p \geq 1 - \alpha\), cela signifie que son modèle sous-estime le risque, ce qui peut conduire à une exigence de recalibrage ou une augmentation du capital réglementaire. Si une banque a trop peu d’exceptions (voire 0), i.e. \(p \leq 1 - \alpha\), cela peut indiquer que son modèle est trop conservateur, ce qui immobilise trop de capital inutilement.

  • Puisqu’un seul test de backtesting n’est pas suffisant[2] pour juger la qualité d’un modèle de VaR, il serait préférable de combiner différentes méthodes. Pour ce faire, un autre test a été utilisé pour juger de la necessité de recalibrage du modèle. Il s’agit du test de Christoffersen’s Interval Forecast/Independance test [3]. Ce test permet de vérifier si les exceptions sont indépendantes et donc bien réparties dans le temps. En effet, si les exceptions sont concentrées dans un intervalle de temps, cela peut indiquer que le modèle est mal calibré. Sous l’hypothèse nulle, la statistique de test suit asymptotiquement une loi de khi-deux à 1 degré de liberté.

  • En couplant le test de Kupiec au test de Christoffersen [3], nous avons le test de conditional coverage mixte[3] qui suit une loi de khi-deux à 2 degrés de liberté.

Pour la mise en place de ces tests statistiques, nous avons besoin d’une échantillon de taille suffisamment grande, i.e \(N=30\). Pour ce faire, nous ne pourrons mettre en place ce protocole qu’à partir du 30ème jour de backtesting. Pour le backtest, nous avons fait le choix d’utiliser un expanding window, i.e. une fenêtre d’apprentissage qui s’agrandit à chaque période de recalibrage. Il aurait été plus pertinent de privilégier un rolling window, i.e. une fenêtre d’apprentissage qui se déplace à chaque période de recalibrage, pour éviter de bruiter les données.

PROBLÈME : au bout de 30j, s’il n’y a pas d’exceptions, on ne recalibre pas le modèle mais si au 31e jour il y a une exception, le test de kupiec echoue=> recalibrage. References: - [1] Kupiec, P. “Techniques for Verifying the Accuracy of Risk Management Models.” Journal of Derivatives. Vol. 3, 1995, pp. 73–84. - [2] Haas, M. “New Methods in Backtesting.” Financial Engineering, Research Center Caesar, Bonn, 2001. - [3] Christoffersen, P. “Evaluating Interval Forecasts.” International Economic Review. Vol. 39, 1998, pp. 841–862.

import numpy as np
import pandas as pd
from scipy.stats import chi2

class Backtest:
    def __init__(self, actual, forecast, alpha, alpha_test):
        self.index = actual.index
        self.actual = actual.values
        self.forecast = forecast
        self.alpha = alpha
        self.alpha_test = alpha_test

    def hit_series(self):
        """ Returns a series of 1s (VaR breaches) and 0s (no breach) """
        return (self.actual < - self.forecast).astype(int)
    
    def lr_bt(self):
        """ Back-test protocol """
        hits = self.hit_series()  # Série des violations de la VaR (1 si violation, 0 sinon)
        transitions = hits[1:] - hits[:-1]  # Différences entre valeurs successives (1 si passage de 0 à 1, -1 si passage de 1 à 0)

        # Transition counts
        n01 = np.sum(transitions == 1)  # 0 -> 1
        n10 = np.sum(transitions == -1) # 1 -> 0
        n11 = np.sum((transitions == 0) & (hits[1:] == 1)) # 1 -> 1
        n00 = np.sum((transitions == 0) & (hits[1:] == 0)) # 0 -> 0
        
        # Number of observations in each state
        n0, n1 = n01 + n00, n10 + n11
        total_n = n0 + n1
        
        # Probability estimates
        p01 = n01 / (n00 + n01) if (n00 + n01) > 0 else 0
        p11 = n11 / (n11 + n10) if (n11 + n10) > 0 else 0
        p = n1 / total_n if total_n > 0 else 0
        
        if n1 > 0:
            #

            # Unconditional Coverage Test/Kupiec
            uc_h0 = n0 * np.log(1 - self.alpha) + n1 * np.log(self.alpha)
            uc_h1 = n0 * np.log(1 - p) + n1 * np.log(p)
            uc_stat = -2 * (uc_h0 - uc_h1)
            # uc_critical_val = chi2.ppf(self.alpha_test, 1)
            uc_pval = 1 - chi2.cdf(uc_stat, 1)
            
            # Independence Test/Christoffersen
            ind_h0 = (n00 + n01) * np.log(1 - p) + (n01 + n11) * np.log(p)
            ind_h1 = 0
            if p01 > 0: ind_h1 += n01 * np.log(p01)
            if (1 - p01) > 0: ind_h1 += n00 * np.log(1 - p01)
            if p11 > 0: ind_h1 += n11 * np.log(p11)
            if (1 - p11) > 0: ind_h1 += n10 * np.log(1 - p11)
            ind_stat = -2 * (ind_h0 - ind_h1)
            # ind_critical_val = chi2.ppf(self.alpha_test, 1)
            ind_pval = 1 - chi2.cdf(ind_stat, 1)
            
            # Conditional Coverage Test/ Christoffersen & Kupiec mixture
            cc_stat = uc_stat + ind_stat
            # cc_critical_val = chi2.ppf(self.alpha_test, 2)
            cc_pval = 1 - chi2.cdf(cc_stat, 2)
            
            # Store results in a DataFrame
            df = pd.DataFrame({
                "Statistic": [uc_stat, cc_stat, ind_stat],
                # "Critical Value": [uc_critical_val, ind_critical_val, cc_critical_val],
                "p-value": [uc_pval, cc_pval, ind_pval]
            }, index=["Unconditional", "Conditional","Independence"])

            binomial_test = stats.binomtest(n1, total_n, 1-self.alpha, alternative='two-sided')
            df.loc["Binomial"] = [binomial_test.statistic, binomial_test.pvalue]
        else:
            df = pd.DataFrame(np.nan, index=["Unconditional", "Conditional", "Independence"], columns=["Statistic", "p-value"])
            binomial_test = stats.binomtest(n1, total_n, 1-self.alpha, alternative='two-sided')
            df.loc["Binomial"] = [binomial_test.statistic, binomial_test.pvalue]
        
        
        return df
def daily_backtest(actual, forecast, alpha=0.99, alpha_test = 0.95,min_days=30, max_days=250):
    """ Runs a growing backtest daily, starting at min_days up to max_days """
    recalibration_needed = False
    end_test = min(max_days,len(actual))
    for end in range(min_days, end_test +1):
        data_to_test = actual[:end]
        var_to_test = forecast
        if len(data_to_test) < 30:
            continue
        
        bt = Backtest(actual=data_to_test, forecast=var_to_test, alpha=alpha, alpha_test=alpha_test)
        result = bt.lr_bt()
        
        nb_exceptions = bt.hit_series().sum()
        
        # res=bootstrap((data_to_test,), statistic=lambda x: exceptions(x, var_to_test)/len(x), method='percentile', n_resamples=1000)
        # ci_lower, ci_upper = res.confidence_interval

        # if ci_lower <= 1-alpha <= ci_upper:
        #     print(f"Recalibration needed at {end} days: The conditional test failed.")
        #     recalibration_needed = True
        #     return recalibration_needed, end

        # if "conditional" in result.index and result.loc["Independence", "p-value"] < 0.05:
        #     print(f"Recalibration needed at {end} days: The Independence test failed.")
        #     recalibration_needed = True
        #     return recalibration_needed, end
        # failed_tests = result.iloc[2:][result.iloc[2:]["p-value"] < 0.05].index.tolist()
        failed_tests = result[result["p-value"] < 0.05].index.tolist()

        if failed_tests:
            print(f"Recalibration needed at {end} days: The following tests failed: {', '.join(failed_tests)}")
            recalibration_needed = True
            return recalibration_needed, end
            
        if end == max_days and nb_exceptions == 0:
            print(f"Recalibration needed at {end} days: No exceptions observed in the test window.")
            recalibration_needed = True
            return recalibration_needed, end
    
    if not recalibration_needed:
        print("No recalibration needed in the tested period.")
def iterative_backtest(data_train, data_test, var_model, alpha):
    """ Runs an iterative backtest with recalibration """
    data_train = data_train.copy()
    data_test = data_test.copy()

    var_result = var_model(data_train, alpha=alpha)
    var_to_test = var_result[0] if isinstance(var_result, (list, tuple)) else var_result 
    
    recalibration_points = [0]
    vars_stored = [var_to_test]
    
    while len(data_test) > 0 and len(data_test) >= 250:
        print("="*80)
        print(f"Old VaR to test: {var_to_test:.4%}")

        # Run daily backtest correctly
        res_backtest, index = daily_backtest(data_test, var_to_test, alpha=alpha, alpha_test=0.95, min_days=30, max_days=250)

        # Find the index of recalibration
        if res_backtest:
            print(len(data_test))
            recalibration_points.append(index)

            # Expand training data and shrink test data
            data_train = pd.concat([data_train, data_test.iloc[:index,]])
            data_test = data_test.iloc[index:,]
            var_result = var_model(data_train, alpha=alpha)
            var_to_test = var_result[0] if isinstance(var_result, (list, tuple)) else var_result 
            vars_stored.append(var_to_test)

            print(f"New VaR to test: {var_to_test:.4%}")
        else:
            print("No recalibration needed.")
            break

    return recalibration_points, vars_stored

# Execute iterative backtest
recalibration_points, vars_stored = iterative_backtest(data_train, data_test, gaussian_var_ewma, alpha=alpha)
================================================================================
Old VaR to test: 2.7763%
Recalibration needed at 103 days: The following tests failed: Unconditional, Conditional
586
New VaR to test: 2.5925%
================================================================================
Old VaR to test: 2.5925%
Recalibration needed at 61 days: The following tests failed: Unconditional, Conditional
483
New VaR to test: 2.6675%
================================================================================
Old VaR to test: 2.6675%
Recalibration needed at 30 days: The following tests failed: Unconditional, Conditional
422
New VaR to test: 1.8885%
================================================================================
Old VaR to test: 1.8885%
Recalibration needed at 50 days: The following tests failed: Unconditional, Conditional
392
New VaR to test: 2.5369%
================================================================================
Old VaR to test: 2.5369%
Recalibration needed at 240 days: The following tests failed: Unconditional, Conditional
342
New VaR to test: 2.7075%
import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(12, 6))
data_test.reset_index(drop=True, inplace=True)
plt.plot(data_test, label="Returns", color='blue')
recab = np.cumsum(np.array(recalibration_points))
vars_stored_neg = -np.array(vars_stored)

plt.scatter(recab, vars_stored_neg, color='black', label="Recalibration points", zorder=3)
if len(recab) > 0:
    plt.step(recab, vars_stored_neg, where='post', color='red', linestyle='solid', label="VaR Adjusted")
    plt.hlines(vars_stored_neg[-1], xmin=recab[-1], xmax=len(data_test), color='red', linestyle='solid')

plt.xlabel("Time")
plt.ylabel("VaR / Returns")
plt.title("Backtesting VaR with Recalibration Points")
plt.legend()
plt.grid(True)

plt.show()