diff --git a/README.md b/README.md index 46662364..b3d2f0f0 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Open Bandit Pipeline consists of the following main modules. - [**dataset module**](./obp/dataset/): This module provides a data loader for Open Bandit Dataset and a flexible interface for handling logged bandit data. It also provides tools to generate synthetic bandit data and transform multi-class classification data to bandit data. - [**policy module**](./obp/policy/): This module provides interfaces for implementing new online and offline bandit policies. It also implements several standard policy learning methods. -- [**simulator module**](./obp/simulator/): This module provides functions for conducting offline bandit simulation. This module is necessary only when you use the ReplayMethod to evaluate online bandit policies. Please refer to [examples/quickstart/online.ipynb](./examples/quickstart/online.ipynb) for a quickstart guide of implementing OPE of online bandit algorithms. +- [**simulator module**](./obp/simulator/): This module provides functions for conducting offline bandit simulation. This module is necessary only when you use the ReplayMethod to evaluate online bandit policies. Please refer to [examples/quickstart/online.ipynb](./examples/quickstart/replay.ipynb) for a quickstart guide of implementing OPE of online bandit algorithms. - [**ope module**](./obp/ope/): This module provides generic abstract interfaces to support custom implementations so that researchers can evaluate their own estimators easily. It also implements several basic and advanced OPE estimators. ### Supported Bandit Algorithms and OPE Estimators diff --git a/examples/README.md b/examples/README.md index 595998fe..b67a1597 100644 --- a/examples/README.md +++ b/examples/README.md @@ -5,6 +5,6 @@ This page contains a list of examples written with Open Bandit Pipeline. - [`obd/`](./obd/): example implementations for evaluating standard off-policy estimators with the small sample Open Bandit Dataset. - [`synthetic/`](./synthetic/): example implementations for evaluating several off-policy estimators with synthetic bandit datasets. - [`multiclass/`](./multiclass/): example implementations for evaluating several off-policy estimators with multi-class classification datasets. -- [`online/`](./online/): example implementations for evaluating Replay Method with online bandit algorithms. +- [`replay/`](./replay/): example implementations for evaluating Replay Method with online bandit algorithms. - [`opl/`](./opl/): example implementations for comparing the performance of several off-policy learners with synthetic bandit datasets. - [`quickstart/`](./quickstart/): some quickstart notebooks to guide the usage of Open Bandit Pipeline. diff --git a/examples/quickstart/README.md b/examples/quickstart/README.md index 6b45f932..53e1b111 100644 --- a/examples/quickstart/README.md +++ b/examples/quickstart/README.md @@ -5,6 +5,6 @@ This page contains a list of quickstart notebooks written with Open Bandit Pipel - [`obd.ipynb`](./obd.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/obd.ipynb): a quickstart guide of using Open Bandit Dataset and Pipeline to conduct some OPE experiments. - [`synthetic.ipynb`](./synthetic.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/synthetic.ipynb): a quickstart guide to implement the standard off-policy learning, OPE, and the evaluation of OPE on synthetic bandit data with Open Bandit Pipeline. - [`multiclass.ipynb`](./multiclass.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/multiclass.ipynb): a quickstart guide to handle multi-class classification data as logged bandit data for the standard off-policy learning, OPE, and the evaluation of OPE with Open Bandit Pipeline. -- [`online.ipynb`](./online.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/online.ipynb): a quickstart guide to implement OPE and the evaluation of OPE for online bandit algorithms with Open Bandit Pipeline. +- [`online.ipynb`](./replay.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/online.ipynb): a quickstart guide to implement OPE and the evaluation of OPE for online bandit algorithms with Open Bandit Pipeline. - [`opl.ipynb`](./opl.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/opl.ipynb): a quickstart guide to implement off-policy learners and the evaluation of off-policy learners with Open Bandit Pipeline. - [`synthetic_slate.ipynb`](./synthetic_slate.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/st-tech/zr-obp/blob/master/examples/quickstart/synthetic_slate.ipynb): a quickstart guide to implement OPE and the evaluation of OPE for the slate recommendation setting with Open Bandit Pipeline. diff --git a/examples/quickstart/online-bandit-vs-opl-simulation.ipynb b/examples/quickstart/online-bandit-vs-opl-simulation.ipynb new file mode 100644 index 00000000..89ec46ce --- /dev/null +++ b/examples/quickstart/online-bandit-vs-opl-simulation.ipynb @@ -0,0 +1,1620 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# On-policy bandit vs Greedy off-policy optimised policies\n", + "This notebook shows an empirical experiment comparing selection of bandit algorithms with off-policy optimised policies.\n", + "\n", + "We present two experiments that try to answer the following research questions\n", + "1. What is the effect of the number of rounds (training data) on the difference in reward of on-policy vs off-policy?\n", + "2. What is the difference between reward between different types of bandit algorithms when used as logged data for an Inverse Propensity Weighting (IPW) learner.\n", + "\n", + "Both experiments in this notebook have the following setup.\n", + "- The environment is stationary\n", + "- Feedback is instant (no delay)\n", + "- Bandit algorithms keep exploring / learning during the evaluation cycle\n", + "- Propensities for the IPW are learned by fitting a classifier predicting $P(A=a|c)$ on the training or evaluation dataset. Note that we fit a separate propensity model for the training and evaluation data and predict on the same dataset as it was trained on." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [ + "import copy\n", + "\n", + "import numpy as np\n", + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "from obp.policy.offline import IPWLearner\n", + "from obp.dataset import logistic_sparse_reward_function\n", + "from obp.policy import Random, EpsilonGreedy, BernoulliTS, LinTS\n", + "\n", + "from sklearn.ensemble import RandomForestClassifier as RandomForest\n", + "\n", + "from obp.simulator.simulator import BanditEnvironmentSimulator, BanditPolicySimulator\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### Off-policy vs on-policy at different number of rounds\n", + "In this section, we show how various bandit algorithms can be compared to an IPW learning given the amount of training and evaluation rounds." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [00:00<00:00, 71107.98it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 62524.10it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 41594.07it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 41387.62it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 3733.33it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 2261.46it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 72191.12it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 74326.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 18544.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 27509.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 29930.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 21766.09it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4331.40it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4737.45it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 74643.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 75466.98it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26941.14it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 28371.14it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23014.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35251.29it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4133.55it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4631.43it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 75249.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 71325.64it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 50579.49it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 62065.20it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 16328.38it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35920.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 3539.61it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4786.43it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 79674.49it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 84617.17it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 25811.10it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 90927.51it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 42778.94it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 50236.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4131.76it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4882.14it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 76728.82it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 79668.43it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35534.11it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 17749.61it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 45804.35it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 33578.34it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4020.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4633.56it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 61207.48it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 56076.58it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 54733.78it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 51546.71it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 36036.02it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 28116.67it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 3781.21it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4924.77it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 85845.06it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 84175.64it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 30837.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 34989.56it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 19203.81it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 25137.12it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4065.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4776.98it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 91107.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 80443.11it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 46294.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 47454.39it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 36234.32it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 27203.41it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4133.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4806.86it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 83536.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 80001.22it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 69798.04it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 56420.55it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24037.78it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 34633.04it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 2292.01it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4601.36it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 74041.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 85829.25it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35902.76it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 50591.69it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 31273.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23204.62it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 3895.19it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5207.01it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 96365.40it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 100181.62it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 34358.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23197.04it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26888.29it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 41850.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4318.20it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5368.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 105152.03it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 102425.01it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 51172.51it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24376.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 22060.54it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26079.76it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4278.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5329.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 92652.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 97703.28it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 40528.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 18429.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35920.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 30259.10it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4201.83it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5292.04it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 95758.18it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 94752.27it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 41173.91it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 36722.56it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 13265.22it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26905.54it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4689.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5330.69it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 94160.92it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 106657.44it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24212.48it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 48870.99it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 58569.03it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 43915.73it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 3704.40it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5232.85it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 92346.90it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 92998.03it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 49045.86it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 29521.14it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 28941.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 43935.06it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4531.74it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5275.77it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 78080.05it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 79428.55it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24876.95it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 66942.85it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 9167.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26286.69it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4863.95it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5183.44it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 82711.58it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 90564.29it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 29106.29it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 20519.17it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 17148.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 61720.88it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4514.00it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5297.54it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 94984.01it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 99334.60it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 52319.58it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 42889.18it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 32028.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 33229.05it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4136.73it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5302.98it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 105673.93it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 99947.67it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 41588.37it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 83669.21it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63242.76it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62533.98it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5235.78it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5218.14it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114962.52it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 110670.86it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 42194.99it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 77898.64it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63686.89it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62580.44it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5338.83it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5382.39it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114187.89it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114518.68it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 46767.43it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 85419.01it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64737.90it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64525.67it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5431.24it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5351.08it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 113584.90it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 120437.03it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 37788.22it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 85580.40it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 66150.27it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 65314.75it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5340.48it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5281.06it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 110338.67it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 104751.54it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 40686.12it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 87049.82it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63905.12it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64238.48it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5273.75it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4117.27it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 103564.85it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114510.87it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 37788.91it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 81710.14it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 58567.56it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61200.25it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5288.68it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5230.10it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 107634.57it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 101431.25it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 43174.11it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 72039.85it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 59916.49it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61308.31it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4996.90it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4991.65it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 108472.44it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 108634.55it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 52500.86it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64569.77it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63328.32it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 60316.11it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5228.31it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4869.45it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 108129.04it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 88605.38it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 46349.54it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 77567.44it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61436.37it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62741.55it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5360.50it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5248.47it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114992.46it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 117937.12it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 39768.05it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 83591.67it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62480.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61806.19it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4800.24it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5176.17it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 110405.77it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 116860.65it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 42126.33it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 75767.99it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62039.77it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63640.89it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5268.36it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5321.78it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 119850.95it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 110988.02it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 46005.96it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 77145.14it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 59916.57it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 60829.15it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5242.65it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5246.00it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 115238.90it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 108199.34it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 44603.27it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 77523.14it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64042.61it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 62469.53it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4843.53it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5258.26it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 109979.63it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 116189.89it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 35496.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 84844.83it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61452.66it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61858.97it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5266.60it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5326.52it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 107583.50it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 115835.95it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 38256.28it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 82661.69it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 58550.39it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61353.15it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5223.12it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5241.39it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 103692.61it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 108274.19it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 46193.03it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 73881.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63770.75it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64335.14it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5212.76it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5250.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 121867.92it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 113397.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 60568.70it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 69276.61it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64596.52it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64564.80it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5331.46it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4959.83it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 111483.63it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 121331.37it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 41648.09it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 83804.12it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 59838.27it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61995.11it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5384.63it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5331.86it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 112103.70it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 120111.11it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 40536.35it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 85497.89it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63655.67it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64796.11it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4635.08it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5254.46it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 113579.36it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 117464.47it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 41121.80it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 84685.00it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64443.28it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63973.74it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5292.28it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5396.45it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 109452.41it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 102721.00it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80844.72it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86888.15it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65295.28it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66037.73it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5224.77it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5230.21it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120718.71it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123657.28it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 67091.04it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86110.77it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66535.06it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64994.19it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5217.92it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5300.88it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 105755.30it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 117501.79it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 82205.89it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86265.65it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 57269.44it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 67035.49it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5278.93it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5312.67it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123252.73it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 124270.67it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 78416.85it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 85422.42it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66924.90it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64341.29it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5233.95it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5220.02it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 125678.81it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120258.95it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81906.59it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 87087.07it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65777.61it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65798.42it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5064.07it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5217.12it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120520.68it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122089.25it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 79017.02it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80694.93it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64330.64it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 63133.15it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5025.01it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5132.86it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 121774.80it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123144.68it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 83586.81it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 85931.68it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64137.43it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64637.27it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5186.42it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5222.09it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 116659.00it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 121473.33it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 71388.18it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 84924.19it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65890.71it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64362.28it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5213.84it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5245.70it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 102729.91it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 118182.33it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80849.42it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 73515.20it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64309.83it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66069.27it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5199.00it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5258.08it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 124933.47it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 97743.40it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81551.11it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86576.17it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 63869.49it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66821.03it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5240.42it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5227.93it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 125935.56it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 124014.71it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 82247.19it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86833.07it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 56871.05it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66530.95it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5286.47it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5241.78it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122634.26it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123095.85it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80225.01it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86266.54it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66644.85it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 56181.04it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5272.49it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5189.57it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123020.61it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 121131.25it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81712.48it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 87205.78it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65694.95it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66348.28it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5222.50it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5213.11it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 126041.45it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 125530.83it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81303.54it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86919.50it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64838.28it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65648.11it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5213.12it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5200.08it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 119641.93it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 124819.29it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80129.44it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86704.98it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65270.92it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64907.71it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5193.13it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5167.46it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120544.51it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122220.99it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 68141.15it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 83382.43it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66138.40it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65400.94it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5109.01it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5063.46it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 119566.73it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 121223.15it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81883.97it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86030.83it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64462.23it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65545.02it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5210.54it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5189.36it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120772.35it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123340.62it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 80505.45it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86540.54it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 60354.03it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64152.74it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5276.95it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5223.78it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122448.20it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120764.17it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 82463.28it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 85601.80it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65378.11it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66430.62it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5272.22it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5295.28it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 124919.56it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123839.90it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 73319.75it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 84553.09it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66251.40it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 65569.27it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5213.16it/s]\n", + "100%|██████████| 100000/100000 [00:19<00:00, 5261.67it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 96357.96it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 119114.67it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86347.70it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 83673.58it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63763.41it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 66017.87it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5193.01it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5187.82it/s]\n", + "100%|██████████| 500000/500000 [00:03<00:00, 125294.85it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 120853.69it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 78214.02it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85901.81it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63749.70it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63055.69it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5205.26it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5217.87it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 114329.86it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 120642.37it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 84003.06it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85279.51it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63566.12it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63047.32it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5153.69it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5141.90it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 124015.02it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 119479.80it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86609.69it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85828.10it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63950.54it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63293.34it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5201.99it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5197.81it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 115560.26it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 124222.30it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 82774.64it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 76918.40it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 62322.69it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 60655.53it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5188.68it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5214.03it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 124153.30it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 118002.15it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 83227.78it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86791.78it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63841.54it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 64071.31it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5225.73it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5222.09it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 117669.98it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122589.78it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 84414.43it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85719.21it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63491.90it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63775.89it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5214.39it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5197.34it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123150.50it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 119012.06it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 80131.52it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86045.21it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63762.87it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 62982.10it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5193.69it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5188.46it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123920.31it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 117779.85it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 84557.29it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85360.75it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 62488.41it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 65258.49it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5190.03it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5203.37it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122933.39it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123991.34it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 83471.76it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86043.81it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63363.62it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 62089.17it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5153.87it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5159.88it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122697.90it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 116719.49it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86560.68it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 84334.33it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63030.73it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 64963.13it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5174.19it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5136.84it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122605.64it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 117194.11it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 81181.06it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86635.91it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63666.51it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63358.27it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5223.64it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5207.36it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123051.72it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 115655.01it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85207.55it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86229.04it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63358.46it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 64591.02it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5181.24it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5192.40it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123472.46it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 124574.33it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 82328.19it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86207.70it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63752.76it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63432.97it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5207.02it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5197.79it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123436.43it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 116687.25it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86110.51it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 83839.67it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 61873.42it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 65480.83it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5208.03it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5210.08it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123395.74it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122616.07it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86638.44it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 82815.12it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 64711.65it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63626.23it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5127.15it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5166.52it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 117759.63it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123414.70it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86155.08it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86556.98it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 60705.89it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63587.92it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5254.50it/s]\n", + "100%|██████████| 500000/500000 [01:35<00:00, 5228.20it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 119981.65it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 119961.84it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 83975.27it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85731.13it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63449.90it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 65156.38it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5171.00it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5147.19it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 123398.47it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 121213.83it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 82114.49it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 86144.43it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 63861.96it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 62968.21it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5157.77it/s]\n", + "100%|██████████| 500000/500000 [01:37<00:00, 5150.31it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 121825.44it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 115650.98it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 85680.30it/s]\n", + "100%|██████████| 500000/500000 [00:05<00:00, 84211.76it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 62214.68it/s]\n", + "100%|██████████| 500000/500000 [00:07<00:00, 64961.56it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5173.64it/s]\n", + "100%|██████████| 500000/500000 [01:36<00:00, 5158.55it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122484.18it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 122330.71it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85010.72it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85102.85it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64025.00it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63448.40it/s]\n", + "100%|██████████| 1000000/1000000 [03:13<00:00, 5170.31it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5188.26it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121399.00it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 119281.24it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85746.22it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84953.13it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64576.23it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63743.67it/s]\n", + "100%|██████████| 1000000/1000000 [03:10<00:00, 5239.70it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5201.21it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 123398.80it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120849.98it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85776.79it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85223.47it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64334.39it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63635.26it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5203.59it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5198.03it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124294.97it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122749.07it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 83821.57it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86877.32it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64028.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64814.22it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5219.39it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5201.59it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 114605.02it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 113468.56it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85045.24it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85551.26it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64149.11it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64946.41it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5220.71it/s]\n", + "100%|██████████| 1000000/1000000 [03:10<00:00, 5239.00it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122734.59it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121020.44it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84742.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85639.51it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64750.54it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63984.68it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5191.73it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5186.10it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120266.04it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 118935.58it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84842.79it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85774.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64560.75it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64030.11it/s]\n", + "100%|██████████| 1000000/1000000 [03:13<00:00, 5177.71it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5186.08it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121147.42it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120445.66it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85077.01it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85527.35it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64372.79it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64068.61it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5212.12it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5229.48it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 123945.15it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121813.86it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 83913.58it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86620.55it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63773.92it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64122.13it/s]\n", + "100%|██████████| 1000000/1000000 [03:13<00:00, 5157.11it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5188.56it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124746.22it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121423.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85295.45it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84712.78it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64167.18it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 65040.19it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5212.20it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5187.24it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120167.91it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124485.34it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 87153.96it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 83805.99it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 65210.94it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 65020.84it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5213.58it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5217.41it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122360.26it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120748.44it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84827.33it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85416.54it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 65073.45it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64193.66it/s]\n", + "100%|██████████| 1000000/1000000 [03:10<00:00, 5236.48it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5225.93it/s]\n", + "100%|██████████| 1000000/1000000 [00:07<00:00, 125185.96it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122298.41it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85957.72it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84979.07it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64478.98it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64960.46it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5195.05it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5212.72it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122441.67it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122384.63it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86309.05it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84199.23it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64715.42it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64551.44it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5190.31it/s]\n", + "100%|██████████| 1000000/1000000 [03:13<00:00, 5174.18it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 123104.09it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121177.74it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85958.16it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 87128.16it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63790.04it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63598.23it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5208.13it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5215.34it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120054.32it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124759.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86829.84it/s]\n", + "100%|██████████| 1000000/1000000 [00:12<00:00, 83278.55it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64746.13it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64468.20it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5194.95it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5206.09it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124457.94it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120729.72it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84320.42it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86543.14it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63987.29it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64921.31it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5199.88it/s]\n", + "100%|██████████| 1000000/1000000 [03:13<00:00, 5175.28it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 120467.13it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 124672.05it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 86992.54it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84002.60it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64882.16it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64709.99it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5210.94it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5199.03it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 123731.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121437.10it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85154.88it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 84966.66it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 63147.67it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64871.97it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5209.33it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5226.36it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 122616.98it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121568.31it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85571.63it/s]\n", + "100%|██████████| 1000000/1000000 [00:11<00:00, 85540.01it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64839.87it/s]\n", + "100%|██████████| 1000000/1000000 [00:15<00:00, 64033.11it/s]\n", + "100%|██████████| 1000000/1000000 [03:11<00:00, 5209.70it/s]\n", + "100%|██████████| 1000000/1000000 [03:12<00:00, 5191.02it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 121686.26it/s]\n", + "100%|██████████| 1000000/1000000 [00:08<00:00, 123562.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4h 51min 1s, sys: 16min 43s, total: 5h 7min 44s\n", + "Wall time: 4h 41min 52s\n" + ] + } + ], + "source": [ + "%%time\n", + "experiment_round_size = [1000, 10000, 100000, 500000, 1000000]\n", + "n_runs_per_round_size = 20\n", + "n_actions = 5\n", + "dim_context = 5\n", + "\n", + "bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinTS, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in bandit_policies]\n", + "train_rewards = {policy.policy_name: [] for policy in dummy_policies}\n", + "eval_rewards = {**copy.deepcopy(train_rewards), **{IPWLearner.__name__: []}}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []\n", + "\n", + "# In this setting the dataset is static, so we can use the same dataset class and redraw batches\n", + "# for different settings. When drift or delay is added the dataset object needs to be reinitiated with a new seed\n", + "# for each experiment.\n", + "env = BanditEnvironmentSimulator(\n", + " n_actions=10,\n", + " dim_context=5,\n", + " reward_type=\"binary\", # \"binary\" or \"continuous\"\n", + " reward_function=logistic_sparse_reward_function,\n", + " random_state=12345,\n", + ")\n", + "\n", + "for n_rounds in experiment_round_size:\n", + " for experiment in range(n_runs_per_round_size):\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=n_rounds)\n", + " evaluation_bandit_batch = env.next_bandit_round_batch(n_rounds=n_rounds)\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + "\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + "\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + " train_rewards[policy.policy_name].append(training_simulator.total_reward)\n", + "\n", + " eval_simulator = BanditPolicySimulator(policy=policy)\n", + "\n", + " eval_simulator.steps(batch_bandit_rounds=evaluation_bandit_batch)\n", + " eval_rewards[policy.policy_name].append(eval_simulator.total_reward)\n", + "\n", + " # Train a propensity model on the actions in the training period to get propensities per round\n", + " propensity_model = LogisticRegression(random_state=12345)\n", + " propensity_model.fit(training_simulator.contexts, training_simulator.selected_actions)\n", + " pscores = propensity_model.predict_proba(training_simulator.contexts)\n", + "\n", + " # Train an IPW learning from the logged data and learned propensities\n", + " ipw_learner = IPWLearner(n_actions=env.n_actions,\n", + " base_classifier=RandomForest(n_estimators=30, min_samples_leaf=10, random_state=12345))\n", + "\n", + " ipw_learner.fit(\n", + " context=training_simulator.contexts,\n", + " action=training_simulator.selected_actions,\n", + " reward=training_simulator.obtained_rewards,\n", + " pscore=np.choose(training_simulator.selected_actions, pscores.T)\n", + " )\n", + " eval_action_dists = ipw_learner.predict(\n", + " context=eval_simulator.contexts\n", + " )\n", + "\n", + " eval_rewards[ipw_learner.policy_name].append(\n", + " np.sum(eval_action_dists.squeeze(axis=2) * evaluation_bandit_batch.rewards)\n", + " )\n", + "\n", + " train_rewards[\"n_rounds\"].append(n_rounds)\n", + " eval_rewards[\"n_rounds\"].append(n_rounds)\n", + "\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import pandas as pd" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "The plot below compares the off-policy model to different on-policy bandit algorithms on the evaluation dataset.\n", + "\n", + "IPWLearning has been allowed to learn from n_rounds of samples from the logged training data, the other policies have been exploring on n_rounds and can now exploit (and learn) on the evaluation data.\n", + "\n", + "The plot compares the average reward per model. We clearly see that after $10^4$ IPWLearning start outperforming all on-policy models reaching an average reward of around .65 vs the highest on-policy reward of .56. Additionally, the on-policy models do not seem to increase their performance after $10^4$ rounds.\n", + "\n", + "This seems to indicate that using an off-policy method to optimise your bandit model can yield higher performance than continious learning with on-policy models." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhAAAAERCAYAAAAqtJ6xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABzc0lEQVR4nO39eZwdVZ3/jz/fVXW33vfsG1lJgACJQRARVLZxAcxHZRdmWGQGR3FgxllUBkdHPjJ+BxkUkR8q6EdQBxGQxY1FkS0EAiEkIQkJJITsvfddqur8/qi6t2/f3E66k9zuvt3vZx43VXXqVNW5t27f86r3+33eR4wxKIqiKIqiDAZruBugKIqiKEr5oQJCURRFUZRBowJCURRFUZRBowJCURRFUZRBowJCURRFUZRBowJCURRFUZRB4wx3AxRFURSlGC+++GKL4zh3AEegD7xDjQ+sdF33skWLFm0vVkEFhKIoijIicRznjvHjxx/e3Ny8x7IsTVo0hPi+Lzt27Jj/7rvv3gF8vFgdVXSKoijKSOWI5ubmdhUPQ49lWaa5ubmNwPpTvE4pGyAiZ4jIGhFZJyJfKrL//xORl8PXWhFpDcuPFpFnROQ1EXlFRD5dynYqiqIoIxJLxcPwEX72/eqEkrkwRMQGbgVOBTYDL4jIA8aYVdk6xphr8up/Djgm3OwGLjbGvCEiE4EXReQxY0xrqdqrKIqiKMrAKaUFYgmwzhizwRiTBu4BztpH/fOAnwEYY9YaY94I198BtgPNJWyroiiKUub85NlNDUu+/vsjZ3zpN4uWfP33R/7k2U0Nw92mg2HSpElHbt26ddAP+u9///tnV1dXH33KKafM6q9OT0+PfOQjHzls6tSpRxx11FHz1qxZEx3sdUoZRDkJeDtvezNwXLGKIjINmAH8sci+JUAUWL+vizU1NZnp06cfaFsVRVHGJC+++OJOY0zZP6D95NlNDV97aNW0lOtbANs7UtGvPbRqGsCF7522e6jbk8lkiEQiQ31ZAK699tp3u7q6rB/84Af93tebb765qba21n3rrbdW3n777fVf/OIXJ//mN7/ZMJjrjJRRGOcCvzTGePmFIjIBuBv4jDHGLzxIRK4ArgCYOnUqy5YtG4q2KoqijBpEZNNwt2EgXPfLFVPWvttR0d/+VVvbKzOekfyylOtb//7ga9N/seztoh3pnPHV3d/6PwvfLrYvy3e/+92G733ve+MymYwce+yxXXfdddemW265penmm28eX11d7S1YsKA7Go2au+66662lS5dOj8Vi/sqVKyuWLFnSec011+z47Gc/O3X37t1OPB7377jjjk3HHHNM8p133nEuvfTSaVu2bIkCfPvb337rtNNO63r33XftpUuXHrZt27bookWLOrOzZX/hC1+Y2NDQ4H7lK1/ZDvC5z31uUktLS+bLX/5y0eGVZ511VsdDDz1Uva/39dBDD9Vdf/317wBceumle/7pn/5pqu/7WNbAHROldGFsAabkbU8Oy4pxLqH7IouI1AC/Af7VGPNssYOMMbcbYxYbYxY3N5e9gFYURVEOkELxsL/ygbB8+fL4L3/5y4Zly5atXr169SrLssxtt93WeNNNN0147rnnXl+2bNnqN954I55/zNatW6PLly9ffccdd2y+7LLLpn33u99967XXXnv9W9/61uarrrpqKsCVV1455Ytf/OK2lStXvv6rX/1q/Wc/+9npAF/60pcmHn/88Z3r1q177ZxzzmndunVrFOCqq67aec899zQCeJ7H/fffX3/55ZfvOtD3BbBt27bojBkz0gCRSISqqipv27ZtgzIqlNIC8QIwW0RmEAiHc4HzCyuJyDygHngmrywK/Aq4yxjzyxK2UVEURSkD9mcpWPL13x+5vSO1lx+/pTqW/vXVJ645kGs++uij1StXrqxYuHDh4QDJZNJatmxZ1XHHHdcxbtw4D+Ccc87Zs3bt2pyI+MQnPrHHcRza2tqsl156qeqTn/zkzOy+dDotAE8//XTNG2+8kciWd3Z22m1tbdazzz5bfd99960DOPfcc9uuvPJKD2Du3Lnpuro69+mnn05s3bo1smDBgu7x48f3sdgPByUTEMYYV0SuBh4DbOBOY8xrInIDsMwY80BY9VzgHpO11QR8CjgJaBSRS8KyS4wxL5eqvYqiKEr58vcfmr0lPwYCIOZY/t9/aHZ/lu/9YoyRT37yk7tuvfXW3Dnuvvvuul/96ld1/R1TVVXlQ2ApqK6udlevXr2qsI4xhuXLl79eUVEx4CGql1566c477rijafv27ZFLL730oKwPAOPGjUu/+eab0ZkzZ2YymQydnZ32uHHj3MGco6R5IIwxDxtj5hhjZhpjvh6WfSVPPGCMud4Y86WC435ijIkYY47Oe71cyrYqiqIo5cuF7522+8sfnb+ppTqWFgLLw5c/On/TwQRQnnHGGe0PPfRQ/ZYtWxyAbdu22ccdd1z3c889V71jxw47k8nw61//ur7YsQ0NDf7kyZPTd955Zz2A7/s888wzCYATTzyx/T//8z9bsnX/8pe/JADe+973dvzoRz9qBPj5z39e097ebmfrXHTRRa2PP/547YoVKyqXLl3adqDvKctHPvKR1jvvvLMR4Ic//GH98ccf3zGY+AcYOUGUiqIoinJQXPjeabsP5YiLRYsWJf/t3/5ty4c+9KE5vu8TiUTMd77znbeuueaarYsXLz68trbWnTVrVrK2traoO+FnP/vZhssvv3zajTfeOMF1XTnnnHN2H3/88T23337725dddtnUOXPmzPc8T4477riOE0444a1vfvOb7yxduvSwWbNmLVi8eHHnhAkT0tlzxeNxc8IJJ7TX1dV5jrPvrnvRokVzN2zYEO/p6bHHjRt31He/+92NS5cubf/CF74w8T3veU/XBRdc0Pb5z39+59KlS2dMnTr1iNraWu/ee+/d50jHYkhfz0H5snjxYqOjMBRFUQaHiLxojFk83O0oxooVKzYuXLhw53C3o5C2tjartrbWz2QynH766bMuueSSnRdffHFrKa/peR4LFiyY/4tf/GL9kUcemSrltfJZsWJF08KFC6cX26dzYSiKoijKILjuuusmzps3b/6cOXMWTJ06NXXhhRe2lvJ6L774YnzatGlHvv/9728fSvGwP9SFoSiKUmYY3+B5Pr5nMF6wXlETG+5mjRluv/32zUN5vUWLFiU3b978an7Z888/n7j44otn5JdFo1H/lVdeWT1U7VIBoSiKMoLICgPfDZae65NJe3jpYOlmgnKASNSiojbGn+5ZyykXzqOqIb6fsyujhSVLlvQUG+ExlKiAUBRFGQKMbwJB4PUKAy/j42Y83JSPG64bAwIYwv/EYFmCZVtYlhCJ2ViWYDsWdsTiof9ZQdv2Hu7/75c4+5pjqKpXEaEMDSogFEVRDgLjG/zsK7QcFLUauIEyECAbuy4WoTgIXrGIg0jxxIm+b2jb3sOuzZ3s3NzJMadN5eXfvUXb9h4A2rb38Pjdqzn1rxcQrxqeORiUsYUKCEVRlDyMCcSA8fJEgWfwvcBK4IUvNxQKvmsAA9mOP99qEFoOIjEbKzG4jMqZpMuud7oCwbClk93vdOGmgymBEtUR1jz/Lif8n1m03fYqbdt7qG1JcMpF81Q8KEOGCghFUUY9gRAIgw6zosA3eBkvdB2EwiAUBDn3AaE/IcSyBAmFgVhCNGYjgxQGxTDG0N2WZmdoXdi1pTNnWUCgrqWCaUc00jS5iqbJVSRqoogInuvz0asXBjEQF81T90UJWLNmTfSjH/3o7DfeeOO1/PIbbrih5ZprrtlZXV2910SPYwUVEIqilB2FboPsSATf7RUDrmfw0h6e62N88gILAkSCsnxR4ERtJEa/boRDhe/57Hm3m11bOtm5ObAyJLsyADhRi8ZJVUx+fz2Nk6pomFhJJJZLSIiX8Ul1uxjf4ERtElURPnTpfCqq95oGYuyx5pFqHvuXKXzmwbW8+2oit147eVApmgfC97///XGXX375bhUQiqIow0h/bgPP63UZ7NNtQLhpBZ2/ZYHYgu0ITrT/uIJDhe1YRBM26Z5AsBSS6nbZtaUzFAyd7N7aFb4HqKyL0jK9mqbJVTROrqK2KYFYfdvrZjwyKR+MIRJ3qGupIF4VIRKzS/7eyoY1j1Tzi8/MwnOFn3/mMLa9WonnCn+4YSKfuP2tgzm167p8/OMfn7Fy5cqKOXPm9Jx44omd27dvj3zgAx+YU19f7z799NNrP/3pT09/5ZVXKkXEXHDBBTu/+tWvFp1qezShAkJRlJLQn9vADa0CRd0GQG4YQkip3AaHCtuxcKI2T/xkDSedNxdjgmDHrCti5+ZOOnYlARBLqB9XwcxjWmiaXEnjpCoS/VgO3LRHJu2BgUjcoWFCZSAaonbR+qOe+/9uCttXVfS7f/uqCtxUkBxxy4vVOXPTq79sYmfvzJd9aJnfzdm37nOWT4CNGzfGv//972887bTTuj75yU9OT6fT0tLSknnyySfXTpgwwf3Tn/5UsXXr1kjWzbFz584xcZNUQCiKMmCCuAE/Zy0oJ7dBKQjEg8WDt7xM2/YeHrzlZU69dD7P3L+etu09ROI2TZOqcvEL9RMqcCLF+xZjDG46GMoJEKuI0NicIF4RwRmromEwNM7qYc/GOOkuu/dLJ1A39aAzN44fPz592mmndQFcdNFFu77zne+05O+fN29e6u2334595jOfmfKxj32s7Zxzzmk/2GuWAyogFEXpl2yOglR3hp7ONKmegjmDhtFtMBx4rk/rtm52b+1iz9ZuFn54Ci//tu9QyucffJMzLj+C1u3dVDfG9/k5GGNwUx5uJrC6JKoi1LUkiFdGsSM600Af9mcpyLow8hWr5RimvKeDT/zgoFwYhfewcLu5udlbuXLlql/96lc1t912W/O9997b8Itf/GLjwVyzHFABoSgKEAQmZtIemaRLT5dLsjONlwnMCGIFwX3xytEpDIrh+4b2HT2hWOhi99Zu2nb0YPygg4pXRlj153c4Yeks2nb2DqU86by5uGmPmqbiVnNjDJmkh+caRCBeFaF+QpxYhYPtqGg4YB77lyl4bvDltGM+xhf8jLD2t/XAQQmIrVu3Rn//+99XfvjDH+766U9/2nDCCSd0btq0KdbW1mZNmDCBrVu3OrFYzL/kkktaFyxYkLzooosOOxRvaaSjAkJRxiie65NJeaR6XHo6M6S7MrkER4EVwSIaHxs/EcYYOnen8sRCF63benIBkZG4Tf34CuYeN46GCZXUT6gkUR3JiamPfe5onvrZmpx4KAykNL4hk/JwXR9LhIraKJW1MaIVDratouGQ8JkH1/KHGyay9rF6Tv/6W7z5ZDVrf1vPObdtONhTT58+PXnLLbe0XHHFFRWzZ89OXnvttTui0ag544wz5owbNy793//932//zd/8zXTf9wXghhtuGNK5MoYLnc5bUcYAWeuCm/bp6UyT7Mzk0iZbluBEgrTIY8G6YIyhpyPTRyzs2dpNJhW4Z2zHom58BQ0TKnJioao+ts/PptgoDN83ZJIuvgviQGVtjMqaGNGEjTWCRINO563si31N513SxwsROQO4GbCBO4wx3yzY//8Bp4SbFUCLMaYu3PcZ4N/Cff9hjPlxKduqKKMJz/PJJEN3RGeGZM66YLDtIPAvEhsbeQNS3Rl2b+3OiYXdW7tIdQVpAcQSalsSTJnfQMOECuonVFLTlMCyBiekPNenp8PH93zSSQ/jGyzHoqouTqImSjThDPqcijLSKZmAEBEbuBU4FdgMvCAiDxhjcrOHGWOuyav/OeCYcL0B+CqwmCAi5sXw2D2laq+ilCvGGNxMIBhSXRl6OjO54X9iBUGNsYqxEbuQSXnsebfXqrB7axfdbenc/urGOONn1IaWhQrqxlUcdNxBVjT4nsGJWFQ3xqmojhKNO3vlc1CU0UQpLRBLgHXGmA0AInIPcBbQ3/Sj5xGIBoDTgd8ZY3aHx/4OOAP4WQnbqyhlge8FsQvppEdPRzq0LhgwYIXWhcQYmA8hOyIiKxR2b+3K5VuAIEFTw8RKZh3bQv2ECurH983oeDDkWxpsx6K6KU5ldYxIXBM7KWOHUgqISUD+sJvNwHHFKorINGAG8Md9HDupBG1UlBGNMUHehUzKI9mdoacjQybp5WZ1tCMWscTof9LNjogIrAuBYGjb3jsiIlYZJFqaOr8hZ12IVRxaEVXonqhuilNRHSOqokEZo4yUEOtzgV8aY7z91sxDRK4ArgCYOnVqKdqlKEOK7wd5AdJJl2Rnhp6uTG4aaMsCJ2ITrxrd7ojBjIion1BJQ8GIiENJ1trje6FoaIxTUaOiQVGgtAJiCzAlb3tyWFaMc4G/Kzj25IJjnyg8yBhzO3A7BKMwDrypijI8ZBM1JbszJDvTpHrccDpowXHkgKaBLicGOiLisGOaBjwi4mApFA1V9XEqajSmQVEKKaWAeAGYLSIzCATBucD5hZVEZB5QDzyTV/wY8A0RqQ+3TwP+uYRtVZSSkx1KmU66JPtN1FSaJ+mRwlCMiDgQskMuPS+IaVDRoCj7p2QCwhjjisjVBGLABu40xrwmIjcAy4wxD4RVzwXuMXkJKYwxu0XkawQiBOCGbEClopQLXsYnk/aCNNBdLulwumZjwI4EuRdGc6Km7IiI/CDHUo+IGAy5PA0eiA3VdXEqalU0KH2pqKg4pru7+6WNGzdGPvvZz0559NFHDzox1WC5++676+bPn59ctGhRcv+1h46S/noZYx4GHi4o+0rB9vX9HHsncGfJGqcoh5A+iZrCkRFuOgx2lEAsxEZBGuj+pq3e34iIitooDRNKMyJiMBQTDYma6JgIRB0LnHjPiQvbUm25fq02Vuv++dw/rzgU554+fXqm1OIhk8kQiewd/Hv//ffXua7bNqYEhKKMVrJpoNM9QbBjsjsTzj45ehM15U9b/f5Pz+bt1a1sXde2zxERQZDjoR8RMRiMb4I8Da5BHBUN5cqXn/7ylHV71vU/nTeQLx6y2+c9dN7c/urPqp/V/bX3fW2/03kDrFmzJvrRj3509htvvPHad77zncaHHnqorqenx3rrrbdiZ555Zuttt922GeC+++6rueGGGyam02mZNm1a6p577tlYW1vrX3vttRMeffTRulQqZS1evLjzpz/96SbLsliyZMncI444ovv555+vWrp06e5///d/35Z/3d/97neVv//97+ueffbZ6htvvHHC//7v/67/1a9+VfvDH/6w2bZtM2fOnORDDz005FYRUAGhKPslO81yJlUkUZOEQylHcaImz/Xp2JWkcWJVbtrqh259hQ9fMp/Vz7xLNG4PyYiIwZATDZ5B7DCNdG1MRYNyyFi1alXFihUrViUSCX/WrFlHXHvttdsqKyvNN77xjQlPPfXU2pqaGv9f//Vfx3/ta18bd9NNN2297rrrtt90001bAc4+++wZ99xzT+3555/fBpBOp2XlypWvF7vOqaee2vXhD3+49aMf/WjbpZdeugfglFNOGb9p06ZXE4mE2blz57DN9a4CQlEK6DdRE2BZoz9Rk+/57NnazfZN7Wzf1MHOzZ381VVH8pf71vWZtvqFh97kI1cdSU9nZphbHNCfaNA00qODgVgKjvzxkYsKy3720Z+tKUV7TjzxxPbGxkYPYNasWcn169fHdu/eba9fvz6+ZMmSeQCZTEYWLVrUCfDII49Uf/vb3x6fTCat1tZWZ/78+T1AG8B55503qBi/uXPn9pxzzjkzPv7xj7decMEFrYf2nQ0cFRDKmKbfRE2AWIHZfrQ/tRpjaN3W0ysY3u7ATQfxDbUtCWYe20JXW5qTzpvDg7es6DNtdTo5qNQth77t+bNc2qKiYYxTG6t1C2MgSnWtaDSaC/y3bdtkMhkxxnDiiSe2P/jgg2/m1+3u7pZ/+Id/mPbcc8+tmjVrVuaLX/zixGQymYsYrq6u7jt96354/PHH33jkkUeqf/3rX9fedNNNE9asWfNasdiJUqMCQhlT+GGHkz/JlO+G1gU7SNSUqB691gUIBEPHriTbN3WwfVM7OzZ15IRAdUOcaQsaaZleTfPU6j6xC27a3++01UPS/nzRYIWioU5FgwKHKmDyQDn55JO7/uEf/mHqypUrY0cccUSqvb3d2rhxY2TixIkuwPjx4922tjbrwQcfrP/Yxz424LmdqqqqvPb2dgvA8zzWr18f/djHPtZx2mmndU6ZMqWhra3NbmpqGnI1rwJCGdW4GS+IXeh2x2SipixdranAwrCxg+2bOkiGQ0oraqJMnFNHy7QaWqZVk6juP/AzKxZOvnDuXqMwSo0xhkyyQDTUxohWqGhQRg4TJ050v//9728899xzD0un0wLw1a9+dctRRx3VdsEFF+w4/PDDFzQ3N7sLFy7sGsx5L7jggt1XXXXV9Ntuu23cPffcs/6v//qvp3d0dNjGGLnsssu2D4d4AJC89AtlzeLFi82yZcuGuxnKMOL7BjcvUVNPRxrfy04yFQQ72o417AF+Q0FPRzq0MARWhmz+hXhlhJZp1aGFoYbKuuiI/TyyosFzfUSEyjoVDaVARF40xiwe7nYUY8WKFRsXLly4c7jbMZZZsWJF08KFC6cX26cWCKVsKUzUlOrKIPQmaopELSx76BITDSepbpcdb3Xk4hiyORgicZuWadXMPW48LdOqqW6Mj1jBAHuLhoraKJV1weiJsXIvFaVcUAGhlAXZRE2ZlBdOMpXGS/t9EjXFR0GipoGSSXnsfLvXwtC6LRgd4UQtmqZUM2NhEy3TaqhrSYz4AFAVDYoS8E//9E/jf/3rXzfkl5111lm7b7zxxneHq037QgWEMiIJhuS5YexC8URN0djY+fq6GY9dm7tyFoY9W7swBixbaJpcxREnTaRlWg31EyrKotM1JgiE9DIGEVQ0KApw4403vjtSxUIxxs4vsDLiyT6JdnWk6NydCjIHSvBUPZoTNRXD93x2v9OVszDs2tIV5DcQaJhYybzjJ9AyvZrGSVVDOn/EwVAoGhI1UarqYsQqVDQoSjmiAkIZdjKpIGFTx+4kbtpHLIjGbazE2OlUjG/Ys607N1Ji5+bOcKZOqBtfwazFLbRMq6FpctWwzCFxoBhjcFMeboFoiFY42CoaFKWsUQGhDAtexqenMxAN6R4XESESH/05GLIYY2jfmWT7xsAlseOtDjKpYCRWTVOcGUc10TItyMUQTZTXn2m+aABIVEdomBhX0aAoo4zy+mVSyhrP80l1uXTuSdLTGQwrjETtfeYeGC0YY+jak8q5JLZv6iDVHSTJq6yLMXlefTC8cloN8TJMk11MNNRPiBOrVNGgKKMVFRBKSfF9Q7rbpbM1SXdbGmOCmIZ45fBPuFRqutvTObGwfVMHPe1hLoaqCONm1NAyvYaWqdVU1sWGuaUHRnaSMTccDZOoUtGgDD9r33v8Qq+11bHr6tw5zz4zrJkpD5ZJkyYduWzZstcnTJgwqJTct9xyS+NNN900AeDaa6/d+rnPfW5XYZ0777yz/hvf+MbEDRs2xJ944onXTzrppO7Btk8FhHLIMcaQ7nHpbkvT0ZrE9wyOYxEb5cMsk12ZMBdDB9s3ttO5JwVANOEE1oXjx9MyrYaqhljZfg5FRcP4SmIVTtkEcyqjG6+11clfDheZTIbhmJ9i27Zt9o033jjxxRdfXGVZFsccc8z8c889t7W5ublPtsqjjz6653//93/XXX755dMP9FoqIJRDRjrp5oIhvUwwuVE0PnqzBqaTLjvf7szFMbTt6M3F0Dy1mpnHNtMyrYbalkTZCgbonXvCc42KBmXYeOdf/nVK6o03Kvrbn1y1qhLPE0SCbHIivD7v8EXYtonPn180dXRs9uzuid/4+j5n+fzud7/b8L3vfW9cJpORY489tuuuu+7adMsttzTdfPPN46urq70FCxZ0R6NRc9ddd721dOnS6bFYzF+5cmXFkiVLOq+55podn/3sZ6fu3r3bicfj/h133LHpmGOOSb7zzjvOpZdeOm3Lli1RgG9/+9tvnXbaaV3vvvuuvXTp0sO2bdsWXbRoUWc2U/QXvvCFiQ0NDe5XvvKV7QCf+9znJrW0tGS+/OUvby9s7/3331970kkntY8bN84DOOmkk9rvu+++2iuvvLLPjJ/HHntscj8f+X5RAaEcFG7ao6czQ8fuJJmki1gW0bhFND76vlpu2mPn5s5cHMOed7uDNNlOmIth/iRaplVTP6Gy7EVTdkpz3wtmJa2oiebSSKt7QhmReF7wR5edniG7zJYfAMuXL4//8pe/bFi2bNnqWCxmLrzwwqm33XZb40033TRh+fLlq+rq6vwTTjhhzoIFC3qyx2zdujW6fPny1Y7jcPzxx8+5/fbbNx155JGpP/7xj5VXXXXV1GeffXbtlVdeOeWLX/zittNPP73zjTfeiJ5++umzN2zY8NqXvvSliccff3znTTfdtPWee+6p/fnPf94EcNVVV+0855xzZn7lK1/Z7nke999/f/0LL7zwerE2b9myJTJ58uR0dnvSpEnpLVu2lMQUUtJfeRE5A7gZsIE7jDHfLFLnU8D1BFMcrTDGnB+W/1/gI4AF/A74vBktE3eUOZ7rk+xM07knFUzKJEI0NvqCIT03m4shsDDs2tKF8Q1iCY0TK5l/wgRaptfQMLFyVDyJB6nBfYxvsByhqj5Oojqqs1wqI4L9WQqysQ9EIoZMRrJLu67OnfGLn685kGs++uij1StXrqxYuHDh4QDJZNJatmxZ1XHHHdeRfcI/55xz9qxduzaePeYTn/jEHsdxaGtrs1566aWqT37ykzOz+7ITbD399NM1b7zxRiJb3tnZabe1tVnPPvts9X333bcO4Nxzz2278sorPYC5c+em6+rq3KeffjqxdevWyIIFC7rHjx8/LBNo5VMyASEiNnArcCqwGXhBRB4wxqzKqzMb+GfgfcaYPSLSEpafALwPOCqs+mfgA8ATpWqvsm98zyfV49K5O0V3RxqMwRllIyh839D6bpi8KZuLwQ18/fXjKpizZBwt06ppmlyFEy2fXAz9YYzJiQZMMG9GXUuCeFWESMwua7eLMvbIBky+Pu/wRQBkMnL46tdfPJhzGmPkk5/85K5bb711S7bs7rvvrvvVr35V198xVVVVPgTTbldXV7urV69eVVjHGMPy5ctfr6ioGPBD8aWXXrrzjjvuaNq+fXvk0ksv3SsoMsukSZMyTz75ZHV2e8uWLdEPfOADHQO9zmAo5WPTEmCdMWaDMSYN3AOcVVDncuBWY8weAGNM1p9jgDgQBWJABNhWwrYqRTC+IdmVYdc7nWxes4ftG9tJ9WSIVzokqqNlldCoGMYYWrd3s/b5bfz5F2/w6/9+mT/8eDWvPrGFnq4MM45u4oSlMznr80fz4Uvnc9Qpkxl/WG1ZiwdjTBirkiHZ5WJHbBonVjJxTh0TZ9VR05QgGh/dwa7K6Mauq3PzlwfDGWec0f7QQw/Vb9myxYEgQPG4447rfu6556p37NhhZzIZfv3rX9cXO7ahocGfPHly+s4776wH8H2fZ555JgFw4okntv/nf/5nS7buX/7ylwTAe9/73o4f/ehHjQA///nPa9rb23M/NhdddFHr448/XrtixYrKpUuXtvXX5rPPPrvtySefrNmxY4e9Y8cO+8knn6w5++yz+61/MJTShTEJyDc5bQaOK6gzB0BEniZwc1xvjHnUGPOMiDwObAUE+B9jzF7+HhG5ArgCYOrUqYf+HYxBiqWTtmwhlnBG/KRM+8MYQ+fuVJ+hleme4Demqj7G1MPraZlWQ/O0auKV5ZeLoT9835BJurl4hkR1EM+gQZDKaORQDt1ctGhR8t/+7d+2fOhDH5rj+z6RSMR85zvfeeuaa67Zunjx4sNra2vdWbNmJWtra4u6E372s59tuPzyy6fdeOONE1zXlXPOOWf38ccf33P77be/fdlll02dM2fOfM/z5Ljjjus44YQT3vrmN7/5ztKlSw+bNWvWgsWLF3dOmDAhF8sQj8fNCSec0F5XV+c5Tv9d97hx47zrrrvunUWLFh0O8I//+I/vZN0tn/70p6f93d/93Y6TTjqp+6677qq77rrrpu7Zs8c555xzZh9++OHdf/7zn98YzOcjpQorEJH/A5xhjLks3L4IOM4Yc3VenYeADPApYDLwFHAk0EQQO/HpsOrvgH80xvypv+stXrzYLFu2rBRvZUyQSXv0tKfp3J0ik/Z600mXecBcV1sqN6xy+6YOkp0ZIEh01DK9Jpe8qaJm9LhiIIjfyKR8jO9jORZVtTESNRrPoOyNiLxojFk83O0oxooVKzYuXLhw53C3o5C2tjartrbWz2QynH766bMuueSSnRdffHFrKa/peR4LFiyY/4tf/GL9kUcemSrltfJZsWJF08KFC6cX21dKC8QWYEre9uSwLJ/NwHPGmAzwpoisBWYDJwPPGmM6AUTkEeB4oF8BoQweL+PT05Wmc3eSVLeHCGWfTjrZmeljYehqDf7OYhVOTiy0TKumsr58czH0h5v2wngGQyTqUNscJ1EVJRLXeAZFOZRcd911E5966qmaVColH/jAB9ovvPDC1lJe78UXX4yfddZZs88888w9Qyke9kcpBcQLwGwRmUEgHM4Fzi+ocz9wHvBDEWkicGlsAA4DLheR/yRwYXwA+O8StnXM4Hs+yTCddHdHOhAN0fIVDeketzd506Z22ncGQ5sjMZvmqdXMXtxCy/Qaaprio64T7U0fHQR6xioiNDQmiFdGyj4+RVFGMrfffvvmobzeokWLkps3b341v+z5559PXHzxxTPyy6LRqP/KK6+sHqp2lUxAGGNcEbkaeIwgvuFOY8xrInIDsMwY80C47zQRWQV4wHXGmF0i8kvgg8CrBAGVjxpjHixVW0c7xjekul26WpN05aWTTlSN3HTStmMRTdike7xgJESIm/bY8XZnzsrQ+m6QfdWOWDRNrmLakY20TKuhflxF2cdsFCOIZ/DwPB9LhHg2fXTCwY6Ut7tJUZSBs2TJkp5iIzyGkpLmgTDGPAw8XFD2lbx1A3wxfOXX8YArS9m20U4Qbe/R3ZaiY08S44HtSFmkk7YdCydq88RP1nDSeXPYtaWTzav3sH1TO7u3dgd5CmyhcVIlC94/kZZp1TRMrCz7eI3+COIZvCAHhS1U1saorIkRTZR/jIqiKOXL6EsXOMYp93TSgXiwePCWl2nb3sODt6zgw5fM5511b2I7FnOPG0fLtBoaJ1fiREavmd5Ne7hpH2MMdtSipikRJHWK2aPSsqIoSvmhAmIU4GY8ejqCdNLppItlWURi5ZdOunVbNzVNCf7yv+to2x5khm3b3sMLD73Jx//+6CDr5SglN0lVxgMTBH3WTwjmm9CkToqijETU/lmmeK5PV1uKbW+2sWXNHna/0wUYKqqjxCvLZ3y/5/psWrmLP971Or+7cxV/vPt13nvOTGpbgiyvtS0JTjpvLpnUsGdtPeQYP5i1tKcjTarLJRKzaZpUxaS59Yw/rI7qhrgmdVKUYaaiouIYgDVr1kTj8fix8+bNmz9z5swF559//lTP8zj11FNn3n333XXZ+tOnTz/iH//xHydkt08//fSZP/7xj+seeuih6lNOOWXWMLyFklFej6hjHN83pLozdO5J0d0W5BdxohbxERwM2R9drSnWv7SDN1fsJN3jUlUfY+GHJjP9yCYsS/jY547mqZ+t4aTz5uKm+wZSljO+55NO5sUz1MSoqA3yM+gkVYpy8Lz5ys7qJ366evrJF8zbOOOopkOawnnKlCmp1atXr8pkMhx//PFzf/KTn9Qdf/zxnU8//XTVRRdd1Pruu+/aFRUV3vPPP1+ZPeall16q/MEPfrDplVdeSezr3AfCwU4ZfrDH6y/WCCebTnr3O11sXr2bbW+2k+rOEK9ySFSX15wFxjdsXdfKn37+Bg9/71XWPPcuzVOqOOnc2Zxx5RHMWTKeaMLBc33ctMfJF44O8eBmPJJdGXo6MrgZn+qmOOMPq2XK3AYaJ1WRqIqqeFCUQ8Cbr+ysfuz2lbO629LRx25fOevNV3ZW7/+owROJRFiyZEnnG2+8EXv/+9/f+cILL1QC/PGPf6w6/fTT23bt2hXxfZ/Vq1dHY7GYP3Xq1H7Tat933301Rx999Lz58+cffuaZZx7W1tZmAVx77bUTjjjiiMNnz5694Lzzzpvm+8Hv4JIlS+b+9V//9ZQjjjji8P/4j/8Yt2TJkrlXXXXVpCOPPPLw6dOnH/Hoo49WAbiuy5VXXjn5iCOOOHzOnDnzv/WtbzUBPPTQQ9WLFi2a+8EPfnDW7NmzjziYz0EtECMQYwyZlEdXezadtF/W6aRT3RneXLGT9S/toLstTbwywvz3TWDG0c39ZoD0XJ+ejvIUDoXxDJG4Q924ilx+hnIRfIoykvjDXa9P2b2ls6K//eke127d0ZMgO4u361sPf++VOXXNiZ5owinqA22YVNX9oYsP3+csn8Xo6OiwnnrqqZqvfOUrW0488cTutWvXJpLJpDz99NNVp5xySsebb74Ze+mll+LPP/98xaJFi7r6O8/WrVudb3zjGxOeeuqptTU1Nf6//uu/jv/a17427qabbtp63XXXbb/pppu2Apx99tkz7rnnntrzzz+/DYJZPVeuXPk6wCOPPFLnuq68+uqrr9977721N9xww8Qzzjhj7X//93831dbWeitXrny9p6dH3vOe98z72Mc+1g6watWqipdeeum1efPmpftr20BQATGCyKQ9ejrSdO4K0klblhCJW1iJ8rtNxhh2belk/fIdbF69B98zNE+r5qhTJjNpTt2oG35o/ED0eW7w65WojlDbkiBeESnrybcUpVxo35WMUzgzgwnKmyZX9duJD4a33347Nm/evPkiwplnntn6qU99qh1g9uzZyaeffrpi2bJllddff/2769atiz355JNVL730UsUJJ5zQ2d/5nnjiicr169fHlyxZMg8gk8nIokWLOgEeeeSR6m9/+9vjk8mk1dra6syfP78HaAM477zzduef55Of/OQegBNOOKHruuuuiwL8/ve/r1m9enXFAw88UA/Q0dFhr1q1Kh6NRs1RRx3VdbDiAVRADDujLZ20m/bY9Npu1i/fTtv2HpyYzWFHNzPz2GZqmg65C3BY8b0gP4PvgdhQEU5SFa3QeAZFOdTsz1KQdV94rp/747Mdyz/9iiPWHapYiGwMRGH5kiVLOh9//PGqrq4uu7m52TvxxBO7br755paVK1dWXH311Tv6O58xhhNPPLH9wQcffDO/vLu7W/7hH/5h2nPPPbdq1qxZmS9+8YsTk8lk7n1VV1f3Mc/G43ED4DgOnudJeG75r//6r7eWLl3anl/3oYceqq6oqDgk5l39lRsGfM+nuz3N9k3tbF67h11bOvE9Q6I6QrwqUjYjKPJp29HD8sc28eAtK1j+6CZEYNGZ0/jY1UdxzGlTR4148DJ+Lp4hk/apqo8zbkYNk+c20DS5mkS1xjMoynAw46imjtOvOGKd7Vg+HHrxsC/e9773df74xz9unj9/fjfAcccd1718+fLKrVu3RhcvXtzT33Enn3xy17Jly6pWrlwZA2hvb7de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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def plot_average_reward_per_n_rounds(rewards):\n", + " rewards_pd = pd.DataFrame(rewards)\n", + " rewards_pd = pd.melt(rewards_pd, ['n_rounds'])\n", + " rewards_pd[\"average reward\"] = rewards_pd[\"value\"] / rewards_pd[\"n_rounds\"]\n", + "\n", + " plot = sns.lineplot(data=rewards_pd, x=\"n_rounds\", y=\"average reward\", style=\"variable\", hue=\"variable\", markers=True, dashes=False)\n", + " plot.set(xscale='log')\n", + " plot.legend(bbox_to_anchor=(1.1, 1.05))\n", + "\n", + "plot_average_reward_per_n_rounds(eval_rewards)\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### Off-policy on different kinds of bandit policy logs\n", + "Understanding how counterfactual examples affect the performance of various off-policy optimisers can be useful in deciding which strategy for data collection to take.\n", + "\n", + "In this next section, we run a bandit algorithm in order to collect logs that can be used for off-policy learning. These logs are used to train a propensity model for fitting a IPW model to be used for evaluation." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 42, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [00:00<00:00, 81137.15it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 58612.41it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4992.29it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 51322.17it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26147.07it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 25413.71it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4780.59it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 96032.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 21132.66it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 54953.93it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5120.64it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 110802.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 34457.78it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24740.19it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5211.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 97981.73it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 32533.15it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26400.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4592.51it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 105873.99it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 29863.96it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 21680.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4555.45it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 89556.82it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 18315.42it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 24406.92it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5049.20it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 94760.83it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 38659.32it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23811.25it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4817.58it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 101500.47it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 12318.65it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26050.45it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4989.70it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 84322.87it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 18287.87it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 20186.86it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4877.02it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 93756.80it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 20838.57it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26484.54it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4651.21it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 103532.39it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 18442.66it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 21052.36it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5285.63it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 107400.30it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 40202.67it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 28427.67it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4411.49it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 97705.55it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23679.24it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 32725.81it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4830.78it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 94904.49it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 22103.44it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 30856.35it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5314.96it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 110521.84it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 49627.92it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 21243.97it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4730.21it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 97304.35it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 29210.89it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 38296.80it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5036.99it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 73947.53it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 19698.13it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 54353.60it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 5143.30it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 101699.82it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 23034.11it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 26207.52it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4030.16it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 100522.56it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 36952.27it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 35522.67it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 4778.77it/s]\n", + "100%|██████████| 1000/1000 [00:00<00:00, 71017.68it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 38964.95it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 57169.98it/s]\n", + "100%|██████████| 10000/10000 [00:02<00:00, 4799.38it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 109797.10it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63253.63it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63504.93it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5176.11it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 88393.07it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 37115.40it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 65228.61it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5278.39it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 115294.96it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 37645.10it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 61608.64it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5277.01it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 126602.92it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 39218.42it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67739.22it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5480.38it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 127344.78it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 33739.78it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67663.49it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5472.06it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 125279.02it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 42106.16it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67781.80it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5491.17it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 121995.89it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 36170.83it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67539.28it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5501.65it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 130203.70it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 41154.64it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67276.68it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5507.95it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 113839.23it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 41471.06it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 65751.85it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5193.88it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 122622.54it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 42233.82it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 67590.43it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5463.87it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 116817.04it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 40171.09it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 65286.08it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5355.93it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 125303.72it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 37740.42it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64486.98it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5248.05it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 122733.77it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 39806.05it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64557.85it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5340.55it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 114991.51it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 32428.49it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 56239.52it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5270.60it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 97931.63it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 47859.31it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64210.95it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5331.61it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 116148.38it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 43719.49it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 65433.96it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5170.83it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 117028.90it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 38670.22it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 64752.29it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5213.54it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 120283.34it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 40270.91it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 63540.14it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5359.26it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 87205.11it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 40721.75it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 60849.45it/s]\n", + "100%|██████████| 10000/10000 [00:01<00:00, 5289.94it/s]\n", + "100%|██████████| 10000/10000 [00:00<00:00, 118154.40it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 81671.92it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 63886.00it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5411.73it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 120091.27it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 82985.64it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 64953.80it/s]\n", + "100%|██████████| 100000/100000 [00:18<00:00, 5368.55it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122553.82it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 82725.10it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66641.92it/s]\n", + "100%|██████████| 100000/100000 [00:20<00:00, 4788.02it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 94266.16it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 66730.55it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 52196.40it/s]\n", + "100%|██████████| 100000/100000 [00:22<00:00, 4468.17it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104965.71it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 70921.90it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 58006.25it/s]\n", + "100%|██████████| 100000/100000 [00:22<00:00, 4530.24it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104562.06it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 71722.69it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 55597.72it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4580.62it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123793.74it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 77736.75it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 54608.08it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4630.63it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 105365.54it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 72593.75it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 56916.53it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4591.81it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104449.02it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 70947.79it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 60421.39it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4606.93it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104141.50it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 71139.14it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 57183.15it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4600.02it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 111226.96it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 70982.04it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 54671.28it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4623.27it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 102536.43it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 74249.86it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 60799.22it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4586.65it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 123245.45it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 72235.59it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 55358.91it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4598.01it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 102618.52it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 69808.90it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 54965.10it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4593.71it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104275.07it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 70504.26it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 56087.07it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4624.63it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 86509.16it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 60635.43it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 55871.17it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4566.98it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 103736.47it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 63213.80it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 56435.48it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4598.55it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 122619.96it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 70996.76it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 55064.74it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4609.54it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 104412.46it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 72994.31it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 59049.93it/s]\n", + "100%|██████████| 100000/100000 [00:21<00:00, 4653.38it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 103824.16it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 62885.29it/s]\n", + "100%|██████████| 100000/100000 [00:01<00:00, 55022.63it/s]\n", + "100%|██████████| 100000/100000 [00:22<00:00, 4521.83it/s]\n", + "100%|██████████| 100000/100000 [00:00<00:00, 102893.87it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 75165.63it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56968.06it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4556.04it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 103507.02it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 72688.56it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57039.22it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4583.16it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 102943.12it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 73901.21it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56486.14it/s]\n", + "100%|██████████| 500000/500000 [01:50<00:00, 4539.42it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 103971.01it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74103.23it/s]\n", + "100%|██████████| 500000/500000 [00:09<00:00, 55335.50it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4552.91it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 104465.42it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74315.36it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57102.72it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4573.79it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 102044.40it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 72657.50it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56878.59it/s]\n", + "100%|██████████| 500000/500000 [01:48<00:00, 4600.44it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 107524.22it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 73132.16it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56370.29it/s]\n", + "100%|██████████| 500000/500000 [01:48<00:00, 4609.48it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 102035.15it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74741.58it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 55914.64it/s]\n", + "100%|██████████| 500000/500000 [01:48<00:00, 4603.14it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 106117.98it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 71783.35it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57585.73it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4568.40it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 104112.05it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 72929.65it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57153.93it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4558.94it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 106893.12it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 75255.02it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 55985.29it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4571.53it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 109192.77it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74244.32it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57035.50it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4569.01it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 107228.46it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 72236.45it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56285.50it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4569.91it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 103641.25it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 73670.48it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56863.96it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4555.64it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 104828.37it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 75057.17it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 57342.69it/s]\n", + "100%|██████████| 500000/500000 [01:50<00:00, 4545.13it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 106638.21it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 72403.37it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 56600.23it/s]\n", + "100%|██████████| 500000/500000 [01:50<00:00, 4528.46it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 102839.25it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74319.27it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 55971.96it/s]\n", + "100%|██████████| 500000/500000 [01:48<00:00, 4616.09it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 106685.42it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 75026.80it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 55906.58it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4564.49it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 104061.36it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 71538.77it/s]\n", + "100%|██████████| 500000/500000 [00:09<00:00, 55267.10it/s]\n", + "100%|██████████| 500000/500000 [01:50<00:00, 4531.97it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 107447.55it/s]\n", + "100%|██████████| 500000/500000 [00:06<00:00, 74723.41it/s]\n", + "100%|██████████| 500000/500000 [00:08<00:00, 55835.32it/s]\n", + "100%|██████████| 500000/500000 [01:49<00:00, 4551.68it/s]\n", + "100%|██████████| 500000/500000 [00:04<00:00, 105378.54it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73982.39it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56034.47it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4539.97it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104890.12it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73680.31it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55713.56it/s]\n", + "100%|██████████| 1000000/1000000 [03:38<00:00, 4574.24it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 105033.24it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 72858.85it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55804.63it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4545.28it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104772.94it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74088.78it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56861.61it/s]\n", + "100%|██████████| 1000000/1000000 [03:38<00:00, 4575.95it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104047.74it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74986.29it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56324.54it/s]\n", + "100%|██████████| 1000000/1000000 [03:41<00:00, 4504.93it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 108134.17it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73597.05it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56497.77it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4555.45it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104815.27it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73821.40it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56995.00it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4561.80it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 105893.87it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73821.96it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56105.56it/s]\n", + "100%|██████████| 1000000/1000000 [03:38<00:00, 4576.11it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104575.48it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74579.36it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55736.35it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4536.31it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 107169.10it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73965.52it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 57079.41it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4542.45it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 105315.02it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74000.41it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56294.29it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4554.79it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 105013.70it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74950.96it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55734.16it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4543.29it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 108171.53it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74774.23it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55782.60it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4536.95it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 107271.59it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73906.88it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56243.38it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4547.37it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 105735.67it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74019.34it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55758.97it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4563.41it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 106704.45it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74004.59it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56940.02it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4555.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 106320.06it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73908.96it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56163.07it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4557.36it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 107776.56it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74857.69it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56242.00it/s]\n", + "100%|██████████| 1000000/1000000 [03:39<00:00, 4564.70it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104789.29it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 74154.89it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 55735.22it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4534.51it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104848.49it/s]\n", + "100%|██████████| 1000000/1000000 [00:13<00:00, 73587.11it/s]\n", + "100%|██████████| 1000000/1000000 [00:17<00:00, 56949.89it/s]\n", + "100%|██████████| 1000000/1000000 [03:40<00:00, 4529.46it/s]\n", + "100%|██████████| 1000000/1000000 [00:09<00:00, 104142.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4h 53min 32s, sys: 54min 7s, total: 5h 47min 40s\n", + "Wall time: 4h 30min 31s\n" + ] + } + ], + "source": [ + "%%time\n", + "experiment_round_size = [1000, 10000, 100000, 500000, 1000000]\n", + "n_runs_per_round_size = 20\n", + "n_actions = 5\n", + "dim_context = 5\n", + "\n", + "bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinTS, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in bandit_policies]\n", + "train_rewards = {policy.policy_name: [] for policy in dummy_policies}\n", + "eval_rewards = {f\"{IPWLearner.__name__} {policy.policy_name}\": [] for policy in dummy_policies}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []\n", + "\n", + "# In this setting the dataset is static, so we can use the same dataset class and redraw batches\n", + "# for different settings. When drift or delay is added the dataset object needs to be reinitiated with a new seed\n", + "# for each experiment.\n", + "env = BanditEnvironmentSimulator(\n", + " n_actions=10,\n", + " dim_context=5,\n", + " reward_type=\"binary\",\n", + " reward_function=logistic_sparse_reward_function,\n", + " random_state=12345,\n", + ")\n", + "\n", + "for n_rounds in experiment_round_size:\n", + " for experiment in range(n_runs_per_round_size):\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=n_rounds)\n", + " evaluation_bandit_batch = env.next_bandit_round_batch(n_rounds=n_rounds)\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + "\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + "\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + " train_rewards[policy.policy_name].append(training_simulator.total_reward)\n", + "\n", + " # Train a propensity model on the actions in the training period to get propensities per round\n", + " propensity_model = LogisticRegression(random_state=12345)\n", + " propensity_model.fit(training_simulator.contexts, training_simulator.selected_actions)\n", + " pscores = propensity_model.predict_proba(training_simulator.contexts)\n", + "\n", + " # Train an IPW learning from the logged data and learned propensities\n", + " ipw_learner = IPWLearner(n_actions=env.n_actions,\n", + " base_classifier=RandomForest(n_estimators=30, min_samples_leaf=10, random_state=12345))\n", + "\n", + " ipw_learner.fit(\n", + " context=training_simulator.contexts,\n", + " action=training_simulator.selected_actions,\n", + " reward=training_simulator.obtained_rewards,\n", + " pscore=np.choose(training_simulator.selected_actions, pscores.T)\n", + " )\n", + " eval_action_dists = ipw_learner.predict(\n", + " context=evaluation_bandit_batch.context\n", + " )\n", + "\n", + " eval_rewards[f\"{ipw_learner.policy_name} {policy.policy_name}\"].append(\n", + " np.sum(eval_action_dists.squeeze(axis=2) * evaluation_bandit_batch.rewards)\n", + " )\n", + "\n", + " train_rewards[\"n_rounds\"].append(n_rounds)\n", + " eval_rewards[\"n_rounds\"].append(n_rounds)\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "The plot below shows how the performance of the same IPW model setup can significantly differ when the underlying data collection process changes." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAERCAYAAABfOSISAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAACTdUlEQVR4nOy9eZxcVZn//z733tqruqq3pLuTXrIvZAE6JBCiEBwkzqCiKIZVUcGZwS/K5o+vzgjiOg4w6HwdRHBBiRMUN4hENBBAwpqFLGRfOklnT++13+X8/rjVneqkO+lOupPuznm/XvW6dc8999xze6n7qed5zvMIKSUKhUKhUCgUipNDO9MTUCgUCoVCoRjMKDGlUCgUCoVCcQooMaVQKBQKhUJxCigxpVAoFAqFQnEKKDGlUCgUCoVCcQooMaVQKBQKhUJxChhnegIKhUKhUPSGFStWDDMM4wlgCsoooOh/HGCdZVmfr62tPdhVByWmFAqFQjGoMAzjibKyskmlpaVNmqapZImKfsVxHHHo0KHJ+/fvfwL4SFd9lKJXKBQKxWBjSmlpaasSUorTgaZpsrS0tAXXEtp1n9M4H4VCoVAo+gJNCSnF6ST399atZlJiSqFQKBQKheIUUGJKoVAoFEOap97cWTTz20umjrr3z7Uzv71k6lNv7iw61TGDweB5AJs2bfL6/f7zJ06cOHnMmDHnXHfddVW2bXP55ZeP+dWvfhVr719TUzPlK1/5Snn7/hVXXDHmySefjC1atCgyd+7csac6n6HOzJkzJ7z66qvB3p73yU9+sqaoqGj6uHHjzumuj+M4fOYzn6msqqqaMn78+MmvvfZar69zVgSgl5SUyJqamjM9DYVCoRhUrFix4rCUsvRMz+NUeOrNnUXfXLS+OmM5GsDBtoz3m4vWVwPccGF1Y19co7KyMrNx48b1pmly0UUXTXjqqadiF110UXzZsmXhG2+8sXn//v16MBi033777VD7OatWrQo9/vjjO9esWRPoiznkY5omHo/njJ3f3+P1hs9+9rOHv/SlLx28+eabR3XX57e//W10+/bt/rq6unVLly4N/eu//mvVmjVrNvbmOmeFmKqpqWH58uVnehoKhUIxqBBC7DzTczgR9zyzunLz/rZuLQnr97WGTFuK/LaM5WjfeO69mt8u392lUBxfFkn+5yem7+7tXDweDzNnzoxv2bLFd8kll8TvvffekQAvvfRS+IorrmhZsmRJ1HEcNm/e7PX5fE5VVZW1Zs2aLsf6/e9/X/DAAw9UZLNZUV1dnVm4cGFdNBp17r777vK//OUvsUwmo82YMSO+YMGCnZqmMXPmzAlTpkxJvv322+Grr766cfHixbHa2tr4a6+9VtDW1qb/+Mc/rps3b17csixuu+22kcuWLYtks1lxyy23HLznnnsOL1q0KHLfffdVRKNRu11Y9GQ+Tz/9dPTee+8dGQwGnQsuuCC+c+dO39KlS7feeeedFdu3b/ft2rXLN2LEiMxjjz22++abb67es2ePF+Dhhx/e9cEPfjDR2tqqfe5zn6vauHFjwLIs8bWvfW3vDTfc0ByPx8X8+fNHrV+/PjBmzJh0Op0WAI888kjxmjVrgj/72c92Azz00EMl69evD/z0pz/t8vf1oQ99KL5p0ybv8X5vf/rTn2LXX399g6ZpfOADH0i0trYaO3fu9FRXV5s9/d0rN59CoVAohixHC6kTtZ8KbW1t2quvvlowbdq01Jw5c5KbN28OpNNpsWzZsvDFF18cHzNmTHrVqlX+pUuXhmtraxPdjbNv3z7jO9/5Tvmrr766ef369RvOP//85De/+c3hAPfcc8/BdevWbdiyZct7qVRKW7hwYbT9vGw2K9atW7fhG9/4xgEAy7LE2rVrN/zHf/zH7gceeKAC4JFHHimJRqP2unXrNqxevXrDk08+Wbpx40YvwPr164P/8z//s+toIdXdfJLJpPjSl75UvXjx4i3vvffehoaGhk4Gmi1btvhfffXVTc8999yOL3zhC5V33nnngXXr1m34wx/+sO2f//mfawC++tWvls+dO7d17dq1G/7+979v+rd/+7eRra2t2oMPPjgsEAg427dvf+9b3/rW3vXr14cAbr755qa//e1v0UwmIwCeeuqpki984QuHT+X3tm/fPk9NTU22fb+8vDy7c+fOXpnSzgrLlEKhUCiGJieyIM389pKpB9syx1gmhkV82T99cc6mvpjD7t27fRMnTpwshOBDH/pQ8zXXXNMKMG7cuPSyZcuCy5cvD91///37t27d6nvllVfCq1atCs6ePTve3Xgvv/xyaNu2bf6ZM2dOBDBNU9TW1sYBFi9eHHn44YfL0um01tzcbEyePDkFtABce+21ndyWn/zkJ5sAZs+enbjnnnu8AEuWLCnYuHFj8Nlnny0EaGtr09evX+/3er1y2rRpiYkTJ2Y5iu7m8+677/orKysz7efMnz+/8Yknnuiw9s2bN685HA5LgGXLlhVs2bKlw6UZj8f1lpYW7eWXXy544YUXYj/84Q/LADKZjNi6dav3tddeC99+++0HAWbNmpUaP358EiAajToXX3xx29NPPx2dOnVq2jRNMXPmzFSvfmH9gBJTCoVCoRiy3P6BcXvyY6YAfIbm3P6BcXv66hrtMVNHt8+cOTO+dOnScCKR0EtLS+05c+YkfvCDHwxbt25d8Itf/OKh7saTUjJnzpzW5557bkd+ezKZFHfddVf1W2+9tX7s2LHmnXfeWZFOpzvuKxKJOPn9/X6/BDAMA9u2RW5s8dBDD+26+uqrW/P7Llq0KBIMBjudf6L5vP7668eN9wqFQh3jSSlZuXLlhmAw2CmlhZSSZ555Zuv06dMzxxsrn1tvvfXwt7/97bLx48enb7jhhlOySgGUl5ebdXV1HYJ737593t64+EC5+RQKhUIxhLnhwurGf79y8s5hEV9W4Fqk/v3KyTv7Kvj8eFx88cXxJ598snTy5MlJgFmzZiVXrlwZ2rdvn3fGjBndWlMuvfTSxPLly8Pr1q3zAbS2tmpr1qzxJZNJDaCsrMxqaWnRnnvuucLezunyyy9vefTRR0vb3WRr1qzxtba2HlcLdDefadOmpXfv3u1rj0l6+umnu10lOWfOnNbvfve7w9r324XY3LlzWx966KHhjuPqrmXLlgVy/eMLFiwoAnjnnXf8mzdv7oiLu+yyyxL79u3z/uEPfyj+3Oc+d8q/x4985CPNCxYsKHYchxdffDEUiUTs3oopZZlSKBQKxZDmhgurG0+HeDqayy67LF5fX++78MIL94MboF5cXGyVl5dndV3v6PfGG28UDB8+fFr7/oIFC7Y99thjdfPnzx+dzWYFwH333bdn2rRpLddff/2hSZMmnVNaWmpNnz6927ir7rjjjjsO19XV+aZOnTpJSimKiorM559/ftvxzqmoqLC6mU/m4Ycf3jlv3rxxwWDQOd58fvKTn+z+/Oc/XzV+/PjJtm2LWbNmtc2ePXvX9773vb233npr1cSJEyc7jiMqKyszS5cu3Xr33XcfnD9//qjRo0efM3bs2PTkyZM7jX3VVVc1rVmzJlhaWmofb+4f/vCHR7355puRpqYmY/jw4dPuvffevXfcccfh73//+6UAX/nKVw5dc801LX/+85+j1dXVUwKBgPPEE0/U9fgHmkNIOfSTyM6YMUOq1XwKheJswXEkDYksWcvGa+gUh7xoWu/jrYUQK6SUM/phiqfE6tWr66ZPn37K7h3FqdPS0qJFo1HHcRxuuummqnHjxqXvu+++LosB9yVz584d++Uvf/nARz/60bb+vlY7q1evLpk+fXpNV8eUm0+hUCiGEI4j2XSgjY/9zzIu/o+lfOx/lrHpQBuOM/S/OCtOP4888kjJxIkTJ48bN+6c1tZW/c477+xXkXv48GG9pqZmit/vd06nkDoRyjKlUCgU/URfWIhM2yGRsWhLW8QzuVfaojVl0pY2ac3tx3N9PnVBJXf/djX1TUdCckYWBvjDv15MacTXq2sry5RiMLB//3790ksvnXB0+8svv7yprKzsuG7A3nA8y5SKmVIoFIp+wHEkG/e3ceuvllPflGJkYYAfXXc++1tT7GxIdhJA8YxFIpO3zdokMxbJrE3G6nKB1TH4PRp+j851s6o6CSmA+qYUWavPnikKxYCirKzM7mo15emkX8WUEGIe8ANAB56QUn7vqOP/BczN7QaBYVLKWO6YDazNHdslpfxIrn0UsBAoBlYAN0opj8mLoVAoFP2F40gOxzPsaU6xryXNvuY0+1tT7G9Jc6A1zaF4hq/94yTuf259h7Cpb0px269X8u9XTuY7z7uVKnQh8HtdEeQ39A5BVBYx8BcFCXh1Ah6dgFcn6NUJeA2CXp2gRyfsN4j4PUR8BmG/gc+j4dXd80cWBo6xTHkNvct7USgUp06/iSkhhA78CLgcqAfeEUI8K6XsUI9Syjvy+v8f4Ly8IVJSynO7GPo/gP+SUi4UQvwY+BzwaD/cgkKhOAtpS5nsaUmxtznF/uY0+1rTnUTS4bYsjcks9lExSAIoCHiIBT3EAh5KIv4uLUSjSkL8cP65hH0eQl4Nj0fHo2t4NIHHEHg0Da+hoWsauibQhUDTwNA0NM0VYLomEKJrd6HjSB6/aQa3/PKIRezxm2ZQHDpuRQ2FQnEK9KdlaiawVUq5HUAIsRD4KNCdKe5a4L7jDSjcT4/LgOtyTU8C96PElEKhOA5SStKmw8G2dM6SlLMotaQ40JrhYFuGhniGhkSWZPZYd5jf0CgMeYkFPIwbHqYw6CUW9FAU9BANeikMeogGPYS8Rs6aZBDydW0higU9fHh6Rbdi6FTRNMGE4RH+8K8Xn/JqPoVC0TP6U0yNAPLT/NcDs7rqKISoBkYBL+U1+4UQywEL+J6U8o+4rr1mKaWVN+aIPp63QqEYJNiOxHIcWpIm+5rT7G1Jsa8lxd7mNAfa0hxqy3A4nqExkaU5aXL0gjYhoDDgpTDkYXiBn4nlBcRy1qXCoIdY0EtR0Ivfq+MzNAJe1x0X9Or4vTpeXcPQNTy6a1HKFyzdWYhKQr5+E1LtaJrodbC5oncEg8Hzksnkqk2bNnmnT58+paamJm2appg1a1bbr371q13z5s0bc9NNNzXceOONzQA1NTVTrrnmmobvf//7+wCuuOKKMdddd11DcXGx/dBDDw1funTp1jN6Qyeg/X6Pbv/hD39Y/JGPfKS1pqamV0kuhxoDJQB9PvCMlDL/K2G1lHKPEGI08JIQYi25+kM9QQhxK3ArQFVVVZ9OVqFQ9C+W7WA5klTW4mBrhr05gbQ3Z0nKF0lNySxp89gg7aBXpzDopTjkZcSIoGs9CngpCBgUBT3EQl5ifg9CE/gMN9Yo4DkilDyahsfoWij1BGUhGkBsWhzhha9W8unnNrN/baDjfXSkdeKTT0x7ORnTNLnooosmPPXUU7GLLroovmzZsvCNN97YvH//fj0YDNpvv/12qP2cVatWhR5//PGda9asOW5JlpPBNE08nl7V6T3p85966qmSc889N6XEVP+xB6jM2x+Za+uK+cBt+Q1Syj257XYhxMu48VS/A2JCCCNnnep2TCnlT4CfgJsa4eRvQ6FQHI+eLv+XUmLariUpazk0J032taTY05Rib3tMUk4kNSWzNCVMWtImR2dv0YWgMOShOOSjpjjEuZUxCoNeCgIeogGDoqCXaNBDwKMDbhyS3+MGbQe9Ov72GKVTEEo9RVmIBgCbFkf47afHYluC33x6NAfWhrAtwYsPVPDxn+zqy0t5PB5mzpwZ37Jli++SSy6J33vvvSMBXnrppfAVV1zRsmTJkqjjOGzevNnr8/mcqqoqa82aNV2O9fvf/77ggQceqMhms6K6ujqzcOHCumg06tx9993lf/nLX2KZTEabMWNGfMGCBTs1TWPmzJkTpkyZknz77bfDV199dePixYtjtbW18ddee62gra1N//GPf1w3b968uGVZ3HbbbSOXLVsWyWaz4pZbbjl4zz33HF60aFHkvvvuq4hGo/b27dv9dXV1646e0+c+97nKV155paC0tNT83e9+t/2FF16IrFu3LnjTTTeN9vv9zvLlyzd85StfqXjhhRdiuq7LSy+9tPUnP/lJfV/+jAcq/Smm3gHG5Vbf7cEVTNcd3UkIMREoBN7IaysEklLKjBCiBLgY+L6UUgohlgKfwF3R92ngT/14DwqF4ji0J4jMd2U9dkMtQoOtB+Lsa3GDtw/F3ZikpqRJU9J1uXW15D/sMygOeSkOexldEs4Fc7viqMBvUBjyEvEb6EIAAkMX7kq33Iq3QJ5QMjSBV+8/oaQYIPzxtkoOrg92e/zg+iBWxk1QvWdFBHLqfO0zJRze0rVVaNjkJFf9aHeXx45DW1ub9uqrrxZ8/etf3zNnzpzk5s2bA+l0Wixbtiw8d+7cth07dvhWrVrlf/vtt4O1tbXdll7Zt2+f8Z3vfKf81Vdf3VxQUOB87WtfK/vmN785/MEHH9x3zz33HHzwwQf3AVx11VWjFi5cGL3uuutaALLZrFi3bt0GgMWLF8csyxJr167d8PTTT0cfeOCBinnz5m1+5JFHSqLRqL1u3boNqVRKXHDBBRM//OEPtwKsX78+uGrVqvcmTpx4zAr5VCqlzZgxI/HTn/509913311+7733Vvzyl7/c9eijjw578MEHd7///e9P7t+/X3/++ecLt2/fvk7TNA4fPnzWLCHtNzElpbSEEF8EXsBNjfAzKeV7QogHgOVSymdzXecDC2Xn7KGTgMeEEA5ulvbv5a0C/P+AhUKIbwGrgJ/21z0oFIpjaQ/mTmbdHEntQgrc1WpfeGoF/37lZG5f+G7HOYYmKAp5KQ77GDcsQlHIDeCO+j1EAx4KAgaxoBevoSFwH3ceXcsJJI2Ax00J4NE1DF3g0TUllBQ9o3hsiqY6P9mE3iGkEBCryvTVJXbv3u2bOHHiZCEEH/rQh5qvueaaVoBx48ally1bFly+fHno/vvv379161bfK6+8El61alVw9uzZ8e7Ge/nll0Pbtm3zz5w5cyKAaZqitrY2DrB48eLIww8/XJZOp7Xm5mZj8uTJKXIhMNdee22n+oOf/OQnmwBmz56duOeee7wAS5YsKdi4cWPw2WefLQRoa2vT169f7/d6vXLatGmJroQUgKZpfP7zn28E+OxnP9vw8Y9/fOzRfYqLi22fz+d86lOfqrnyyiubP/WpT/U4NGew068xU1LK54Hnj2r7+lH793dx3uvA1G7G3I67UlChUJwGTNshmbVJpC0OJzKs2tXEql0trNnTzHc/NrXL5f+VhQH+vysmdLjeQj4DIQQCgUR2CCW/RyOYE0odgdxKKCl6w4ksSO1uPvK+r2uGpPKCNj7+eJ+4+dpjpo5unzlzZnzp0qXhRCKhl5aW2nPmzEn84Ac/GLZu3brgF7/4xUPdjSelZM6cOa3PPffcjvz2ZDIp7rrrruq33npr/dixY80777yzIp1Od5SFi0Qincy9fr9fAhiGgW3bIje2eOihh3ZdffXVrfl9Fy1aFAkGgz3LEAtdLqLweDy8++67G5599tmCZ555pvDRRx8d9uabb27u6ZiDmYESgK5QKAYAjiNJmTbJrE1zMktTIsvBeIb39rSwpr6FtXtaaE1bCGD88AiGLrpc/h/wGlwysbRLoeTR3fxJCsVp4YWvVmJb7h+c7nOQjsAxBZv/Wgj0aczU0Vx88cXxr371qyMvuuiiNoBZs2YlV65cGWpoaPDMmDEj1d15l156aeKuu+6qWrdunW/KlCmZ1tZWra6uzlNRUWEBlJWVWS0tLdpzzz1X+OEPf7ipN3O6/PLLWx599NHSK6+8ss3n88k1a9b4ehI87jgOP//5zwtvvfXWpl/84hfFM2fObAMIh8N2S0uLDm7R43g8rn3qU59q+Yd/+If4mDFjujSKDEWUmFIozmLSpk0qa9OWNmlMZmlNWdiOw86GJO/tbWXNnha2HGjDkRDxG5xfVciM6kKmjIhiaALpwKPXn8+/LFjZafl/dVFQWZYUA4NPP7eZFx+oYPMLhVzx7V3seCXC5r8W8rEfb+/vS1922WXx+vp634UXXrgfXMtNcXGxVV5entX1I+FEb7zxRsHw4cOnte8vWLBg22OPPVY3f/780dlsVgDcd999e6ZNm9Zy/fXXH5o0adI5paWl1vTp07uNu+qOO+6443BdXZ1v6tSpk6SUoqioyHz++ee3nei8QCDgvP3226H//M//rCguLjZ///vfbwe46aabDv+f//N/qu+55x7nhRde2HLllVeOzWQyAuCb3/xmr+POBiuq0LFCcZZg2Q5J06351phbLWfZrlU/lbXZfCDOu/XNrNzVRHPS/aI6dliY2mpXQI0uCZMybSzHwWdoVEQDlER8BDz6KRfzVQxMVKFjheIIqtCxQnGWIWVnd11z0iSecVPqCMCraxxsdeOfVuxqYsO+VhzprqY7ryrGjOpCzqsqJBrwkMhYZGyHlGlRFvVTGvFT4Dc6xUyo5f8KheJsRokphWIIkLHa3XUWjYksrSkT25FI6Ch+6zd03t3dzIpdTazY2URjwl20M7o0xCdqK6mtLmTC8AiagJRpkzJtmlNZhkX8lBX4KQh4VKyTQqFQdIESUwrFIMN2JMmsRTJj0ZwyaUqYpEwbIUBD4PNoFAQ8CGBXY5JXdrriaf2+VmxHEvLqnFsZY0Z1EedXF1KUK4CbzoknCRSHvIwZFiYa8ODRtePOR6FQKM52lJhSKAYwUkoylpuaoDVl0pDIEk9byNwyb5+u4/NohHzuv3Iqa7O6vpnlOQF1OO6m0qkpDvKxc0dQW13IxLIIRk4gZS2HxkQGKSES8DCpLEIs5MVnnDW59hQKheKUUWJKoRhA5Od0akq6dedsByQSQ9PwGRqFQU9HvJKUkvqmFMt3NrJiZxPv7W3FciQBj2t9mn+B674rCR+JabJsh+ZUFjvXb8ywMMUhHwGvElAKhUJxMigxpVCcIbrK6ZQ0bQRuQjyfoRH2HRunlDZt1uRZnw62udanqqIgH5leQW11IZPKCzq552xHEs9YWI6DR9eoLAxSEvER8updJt9TKBQKRc9RYkqhOE10ldNJys5B4sXeY/8lpZTsbU53WJ/W7mnBciR+j8b0kTE+UTuS2upChkX8nc5zpCSZsUlbNh5dMLzAz7CIn4jfUKkLFAqFog9RYkqh6Ae6yulk5nI66ULg9+hEAx60bqxCadNm3Z4WVuxsYvnOJva3pgE3u/iV08qprS7inIqCY4LD21MipEwbgGERPxOiEaJqJZ5C0acEg8Hzksnkqk2bNnmnT58+paamJm2appg1a1bbr371q13z5s0bc9NNNzXceOONzQA1NTVTrrnmmobvf//7+wCuuOKKMdddd11DcXGx/dBDDw1funTp1jN6QydgxIgRU5cvX76hvLzcOu+88yauWrVq4+mew6JFiyI+n8+5/PLLe52stL9RYkqhOEXyczq1JE2aktmOnE4APkMn6NEx/J7jjrO3OdUhntbtaSFrO3gNjekjo1x1nhs8Xlbg7/LctGmTzFo4EopCHkaVhCgMedVKPIUCmLNwzvSWTEvH8y7qi1qvzX9tdV+N316bzzRNLrrooglPPfVU7KKLLoovW7YsfOONNzbv379fDwaD9ttvvx1qP2fVqlWhxx9/fOeaNWsCfTWPdkzTxOM5/ufNqZzf30Kqu+u/9NJLkXA4bCsxpVAMAbKWQzJr0ZYLEm9Jmdi2667z6Bp+j0ZR0HvCWKSs5bjWp11NLK9rZG+La32qiPqZN6WM2upCplRE8RpdCyLTdohnLBwpCfsMxg+PUBjy4veoQHLF2cO/L/v3yq1NW4PH65MvpNr3r1107YTu+o8tHJv85sW9L4Xi8XiYOXNmfMuWLb5LLrkkfu+9944EeOmll8JXXHFFy5IlS6KO47B582avz+dzqqqqrDVr1nQ51u9///uCBx54oCKbzYrq6urMwoUL66LRqHP33XeX/+Uvf4llMhltxowZ8QULFuzUNI2ZM2dOmDJlSvLtt98OX3311Y2LFy+O1dbWxl977bWCtrY2/cc//nHdvHnz4pZlcdttt41ctmxZJJvNiltuueXgPffcc3jRokWR++67ryIajdrbt2/319XVrevuPtutcosWLYo88MADFUVFReamTZsCU6dOTf7xj3/coWkaf//734N33nlnZTKZ1AoLC60FCxbUVVdXmw899FDJz3/+81LTNEVNTU3mmWee2RGJRJyrr766xufzOevWrQvOnDkz/sQTT9TnX3PTpk3eX/7yl6Wapsnf/OY3xY888siuvXv3er773e9WaJomI5GIvXz58k29/Z31FUpMKRTHwW4PEs/ldGqMZ0lbuSDx9pxO/u7ddUezvzXtWp/qGlmzp4Ws5eDVNaaOjHLlNDd4vCLW/RdVKyegbEfi9+iMKglRHPYS7CLWSqFQnF7a2tq0V199teDrX//6njlz5iQ3b94cSKfTYtmyZeG5c+e27dixw7dq1Sr/22+/Haytre3WurJv3z7jO9/5Tvmrr766uaCgwPna175W9s1vfnP4gw8+uO+ee+45+OCDD+4DuOqqq0YtXLgwet1117UAZLNZsW7dug0AixcvjlmWJdauXbvh6aefjj7wwAMV8+bN2/zII4+URKNRe926dRtSqZS44IILJn74wx9uBVi/fn1w1apV702cODHb03vesGFD4N13391eU1Nj1tbWTvzb3/4WvvTSSxO333571Z///OetFRUV1uOPP1549913j/jtb39b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E+n160PYtujIgSYEGyZOqkXXpX/y5C7LsfjGjUtWfOfbu7s6djw8Hg8zZ86Mb9myxXfJJZfE77333pEAL730UviKK65oWbJkSdRxHDZv3uz1+XxOVVWVtWbNmi7H+v3vf1/wwAMPVGSzWVFdXZ1ZuHBhXTQade6+++7yv/zlL7FMJqPNmDEjvmDBgp2apjFz5swJU6ZMSb799tvhq6++unHx4sWx2tra+GuvvVbQ1tam//jHP66bN29e3LIsbrvttpHLli2LZLNZccsttxy85557Di9atChy3333VUSjUXv79u3+urq6dT2Zz9NPPx299957RwaDQeeCCy6I79y507d06dKtd955Z8X27dt9u3bt8o0YMSLz2GOP7b755pur9+zZ4wV4+OGHd33wgx9MtLa2ap/73OeqNm7cGLAsS3zta1/be8MNNzTH43Exf/78UevXrw+MGTMmnU6nBcAjjzxSvGbNmuDPfvaz3QAPPfRQyfr16wM//elPj/l9vfzyy6Hq6urM5MmTswAf//jHG5955plYbW1tJ+vUhAkTsgDaKaywHfxPCsWAIpm12Hk4wRvbDrOmvoV01qY45KUw6D2pFAHxjMUvXq9j+6E4Iws7f4EbWRjA0E/+23rWcmhMZGiIZxAaTCqLcOHoYqaNjFES9g16IeWkUmTr60m+/TapNWuwmlvQojH0wiLlPhoECCHQIxGM4mKkhPSGDSTeeovszp04qTNWgmzwYdtHssHmb9vb+5C2tjbt1VdfLZg2bVpqzpw5yc2bNwfS6bRYtmxZ+OKLL46PGTMmvWrVKv/SpUvDtbW13dbV27dvn/Gd73yn/NVXX928fv36Deeff37ym9/85nCAe+655+C6des2bNmy5b1UKqUtXLgw2n5eNpsV69at2/CNb3zjAIBlWWLt2rUb/uM//mP3Aw88UAHwyCOPlESjUXvdunUbVq9eveHJJ58s3bhxoxdg/fr1wf/5n//ZdbSQ6m4+yWRSfOlLX6pevHjxlvfee29DQ0NDJ6W/ZcsW/6uvvrrpueee2/GFL3yh8s477zywbt26DX/4wx+2/fM//3MNwFe/+tXyuXPntq5du3bD3//+903/9m//NrK1tVV78MEHhwUCAWf79u3vfetb39q7fv36EMDNN9/c9Le//S2ayWQEwFNPPVXyhS98ocvSQrt37/aOGDEi274/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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_average_reward_per_n_rounds(eval_rewards)\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/examples/quickstart/online-bandit-with-delay-simulation.ipynb b/examples/quickstart/online-bandit-with-delay-simulation.ipynb new file mode 100644 index 00000000..6b068438 --- /dev/null +++ b/examples/quickstart/online-bandit-with-delay-simulation.ipynb @@ -0,0 +1,6463 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Delayed rewards for bandit algorithms\n", + "Literature on bandit algorithms frequently does not take into account that rewards are not observed instantly. In this notebook, we demonstrate the impact of this delayed feedback on known bandit algorithms using a simulation.\n", + "\n", + "The simulation works by sampling delay from an exponential distribution as described by *Ktena, Sofia Ira, et al.*[1]. In future experiments it would also be interesting to prior the distribution with the values in context $c$.\n", + "This delay is expressed in $d_i$ representing the amount of rounds the algorithm has to wait before being allowed to observe the reward.\n", + "\n", + "Key assumptions\n", + "- Delay is independent of the context, action and reward. In real-world applications there might be a connection between these.\n", + "- Feedback is never received in the same round as the prediction that is being made. In high volume traffic, it's highly unlikely that a user is able to respond to an action before the next user requests a prediction.\n", + "\n", + "Open questions:\n", + "- Should the model be aware of the delay it took for getting the reward?\n", + "- What is the default behaviour when actions are taken but rewards are not available yet?\n", + "\n", + "[1] [Ktena, Sofia Ira, et al. \"Addressing delayed feedback for continuous training with neural networks in CTR prediction.\" Proceedings of the 13th ACM conference on recommender systems. 2019.](https://arxiv.org/pdf/1907.06558.pdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import copy\n", + "from functools import partial\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "from obp.simulator.coefficient_drifter import CoefficientDrifter\n", + "from obp.simulator.delay_sampler import ExponentialDelaySampler\n", + "from obp.simulator.simulator import BanditEnvironmentSimulator, BanditPolicySimulator\n", + "\n", + "from obp.policy.offline import IPWLearner\n", + "from obp.dataset import logistic_sparse_reward_function\n", + "from obp.policy import Random, EpsilonGreedy\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "experiment_round_size = np.arange(start=1000, stop=20001, step=100).tolist()\n", + "\n", + "n_runs_per_round_size = 1000\n", + "max_scale = 1000.0\n", + "min_scale = 900.0\n", + "n_actions = 4\n", + "dim_context = 5\n", + "reward_func = partial(logistic_sparse_reward_function, z_score=False)\n", + "\n", + "bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in bandit_policies]\n", + "train_rewards = [{policy.policy_name + f\" {type} delay\": [] for policy in dummy_policies} for type in [\"no\", \"RI\", \"RD\"]]\n", + "train_rewards = {k: v for d in train_rewards for k, v in d.items()}\n", + "eval_rewards = {**copy.deepcopy(train_rewards), **{IPWLearner.__name__: []}}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get reward dependent delays & no delay data" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 20000/20000 [00:01<00:00, 10255.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11102.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41759.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46715.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40944.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45048.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10756.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39720.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46712.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41276.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46433.35it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9853.56it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11059.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39005.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45334.32it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9905.12it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11052.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41823.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47370.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40905.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 44591.20it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9880.29it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41775.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46271.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10097.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11056.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40905.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46770.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41529.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46369.62it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9984.23it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10911.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 38156.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46143.96it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9747.65it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11110.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40539.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 44960.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11035.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40585.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46184.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11054.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41253.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46410.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10151.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11091.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39983.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47002.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41570.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47001.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10053.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41705.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46948.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10281.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11001.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41733.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46947.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10128.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41750.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46943.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41759.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46355.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10813.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41378.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46194.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10177.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41753.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47045.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10210.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41456.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45958.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10040.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40364.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47302.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10244.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41081.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 44736.31it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9998.35it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41883.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46021.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10002.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41553.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46842.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10437.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11181.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41722.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46946.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10030.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41496.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47004.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41601.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46815.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10303.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41572.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46846.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10267.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41671.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47028.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41432.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47080.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10241.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41193.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46930.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41698.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46429.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10207.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41782.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46972.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41647.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46936.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10209.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41655.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46876.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10369.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41519.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46848.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41712.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47003.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10141.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41546.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47232.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41594.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46102.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10010.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41737.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46868.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10174.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10804.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41083.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46318.29it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9730.24it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41745.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46796.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10377.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11117.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41353.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46561.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11050.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41658.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46745.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10144.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11159.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39233.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46882.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10482.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41404.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46653.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10382.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41920.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46762.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41609.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46912.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10235.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41326.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46059.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41774.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47064.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41538.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46983.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10280.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41702.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47030.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41886.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46693.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41647.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46717.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41880.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47074.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41477.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47086.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41551.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46953.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41634.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46327.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41927.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47003.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10337.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41511.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45884.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10222.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11181.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41842.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47130.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10206.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41525.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46793.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10341.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41778.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47126.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10262.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41817.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 43986.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10448.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41580.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46938.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10308.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41485.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46871.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41169.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47019.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10560.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41611.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46772.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10416.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41907.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47024.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41608.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46871.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10489.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41711.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46874.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41682.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46988.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46819.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40511.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45886.85it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9872.81it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11120.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41476.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46914.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10198.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41526.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46746.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10132.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41325.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46719.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41458.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46461.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10896.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41380.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46664.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41584.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46773.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10274.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11169.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41464.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46718.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41587.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46965.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46812.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10063.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41171.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46794.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11181.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41382.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46883.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10273.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41272.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46865.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10351.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41282.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47003.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10215.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11164.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41068.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46716.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10101.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41736.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46944.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10274.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41634.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46936.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10205.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11030.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41487.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46815.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11163.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41542.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46925.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10481.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41482.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47068.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10189.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41672.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46917.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41193.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46700.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10442.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41522.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46742.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10355.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41637.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46790.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10351.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10924.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41699.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46867.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41659.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47117.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41675.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46880.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41454.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47026.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10238.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41206.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46818.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41729.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46850.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10247.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41554.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47157.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10469.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41799.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46781.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10281.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41667.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46765.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10140.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10991.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41726.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46904.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41455.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46685.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10168.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11152.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41218.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46847.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10211.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41597.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46354.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11166.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41449.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46912.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10200.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41882.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46966.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10188.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41514.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46771.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41742.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46791.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10492.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41482.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46980.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41606.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47085.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10118.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41490.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46586.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10291.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41614.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46859.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10167.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41531.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46690.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41323.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46710.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10274.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41480.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46981.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10219.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41394.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47145.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10402.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41418.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46720.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41752.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46280.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10190.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10919.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41628.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45174.68it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9970.79it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41250.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46785.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41496.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46687.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41633.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46840.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10177.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41442.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47138.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41564.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47107.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41178.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46609.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10217.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41833.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46826.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10194.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11164.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41578.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47010.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11001.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41477.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47010.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10223.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41681.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46829.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10424.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41726.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46645.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11120.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41186.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46937.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41156.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46880.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10314.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11169.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41387.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46773.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10088.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41412.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46816.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10543.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41634.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46598.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41591.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46836.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41347.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10291.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41630.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46648.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11177.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41075.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46947.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10339.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41482.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46450.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10026.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41681.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46683.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41591.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46726.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10254.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41460.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46910.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10335.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41448.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46872.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10113.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41474.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46998.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41277.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46724.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11163.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41407.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46964.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41533.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46935.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41560.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46915.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41509.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46605.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41547.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46783.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10254.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41487.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10239.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11006.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41088.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46779.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41456.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46777.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41529.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46765.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10252.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41469.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46694.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10192.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41669.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46582.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10046.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41601.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47008.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10343.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11152.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41880.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46836.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41266.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46779.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10177.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41647.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46275.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41597.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47117.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10376.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41499.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46703.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10267.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11169.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41611.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46755.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10342.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41823.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46864.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41624.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46996.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11163.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41559.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47024.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41665.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46231.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10227.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11002.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41440.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46784.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41456.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46702.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10246.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41604.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47048.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41439.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46999.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10168.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41416.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46879.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10193.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41563.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46957.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10212.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41562.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46182.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10246.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41431.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10131.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41632.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46920.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41473.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46744.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41628.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46966.66it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9954.27it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41391.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46669.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41513.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46835.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41485.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46469.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41619.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46768.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11150.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41500.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46588.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10142.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41468.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46882.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41431.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46358.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10339.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11024.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41550.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46485.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10507.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11105.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41476.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46697.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10199.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11105.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41646.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46475.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10263.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41463.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46856.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11164.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41921.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46638.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10070.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41553.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46547.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10205.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41488.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46778.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10244.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41761.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10263.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41577.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46941.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10229.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11163.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41071.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46737.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41465.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45927.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10958.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41547.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10124.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41811.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47156.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10448.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41668.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46823.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41408.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46988.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41504.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46952.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41123.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47094.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10453.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41587.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46464.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10289.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46620.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10482.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41292.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46963.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10288.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10210.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41634.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47006.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10222.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10949.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41615.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46722.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41693.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46844.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41708.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46980.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10427.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41816.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47146.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10279.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41583.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46770.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10522.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41267.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46722.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10473.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41593.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47005.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41655.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46763.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41558.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46423.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41763.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46869.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10349.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10990.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41472.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46884.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41376.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47051.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11192.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41555.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46776.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41443.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46742.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11219.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41796.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46742.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10304.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41375.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46881.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41449.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46851.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11219.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41428.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46950.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10330.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41656.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46958.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10315.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41546.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46632.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11033.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41644.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47027.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10304.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41732.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47086.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41581.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46866.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10348.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41350.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46751.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10499.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46753.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10494.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41744.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47114.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10428.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47032.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41502.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46922.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10474.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41578.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46956.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10373.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41537.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46348.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11224.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41669.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46946.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10384.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11229.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41632.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46768.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10215.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41462.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46898.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41553.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46947.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10299.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41715.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47109.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10369.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41746.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46935.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11234.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41667.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46984.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10430.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41442.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46881.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41516.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46959.49it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9898.51it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41692.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46648.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10473.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41584.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46952.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10410.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41699.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47015.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41751.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46812.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10416.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41579.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47004.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10348.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41617.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46847.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10320.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41723.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46765.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11232.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41778.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47058.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41537.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46925.76it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9958.34it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41421.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47142.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10456.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41587.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46876.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10317.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41549.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47054.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41672.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47109.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11120.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41407.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46944.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41386.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46924.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10389.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41452.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10287.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46754.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41628.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47144.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41690.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46902.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10460.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41683.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47187.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41542.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47104.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10503.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41421.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46967.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41519.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46711.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41675.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46962.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11223.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41716.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46891.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10266.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41687.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46821.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11016.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41497.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46968.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10408.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41679.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47009.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10313.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41524.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47121.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41784.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46982.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10405.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41474.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47126.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10503.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41650.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47016.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10318.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41692.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46939.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10337.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11192.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41558.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46878.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10340.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11224.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41516.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 43704.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10218.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41575.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46969.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41634.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46915.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10429.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41630.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46873.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41650.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47030.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41725.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46748.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10335.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11227.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41556.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47172.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41554.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47073.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10221.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11031.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41512.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46880.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10537.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41759.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46954.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41644.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46977.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41580.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47051.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10475.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41739.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47075.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41623.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46900.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10201.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41569.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46835.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10415.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40402.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46978.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41649.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47032.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10441.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41698.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46809.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10315.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41680.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46844.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10423.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41544.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47017.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10217.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41555.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46983.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41714.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46765.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10472.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41723.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 43785.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41577.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46920.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10446.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41664.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47086.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10320.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41575.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47055.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10257.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41706.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46980.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41619.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47096.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10342.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41744.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46803.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10308.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41541.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46789.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10453.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41643.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46840.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41751.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46907.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10267.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41643.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46948.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10380.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41661.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46845.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41631.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46767.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10272.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41471.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46869.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41627.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47153.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41583.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46834.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10414.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41638.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46981.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41485.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46951.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41633.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46964.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41683.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46814.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10168.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41713.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47104.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10293.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40573.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 44737.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41905.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46727.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10402.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41487.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47087.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41693.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46826.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10460.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41914.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47061.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10478.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41700.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46826.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41660.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46962.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11019.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41747.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47001.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10347.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41749.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47113.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41757.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47157.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10332.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41450.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46953.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10362.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41802.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46984.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41579.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46862.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41631.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46892.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10238.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41834.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47380.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41681.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46870.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10439.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11226.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41508.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46724.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41714.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47075.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11219.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41659.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47163.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11219.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41704.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46958.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39582.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46970.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10316.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41903.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47143.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10382.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41802.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46928.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41625.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46687.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10479.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41755.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47015.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10349.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41511.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46937.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41425.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46671.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10173.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41573.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46970.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10308.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47118.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10241.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41775.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47046.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10330.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41626.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46794.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10240.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41694.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46868.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10389.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41784.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47037.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39647.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47096.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41660.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46943.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10319.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41498.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46919.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41746.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46918.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10311.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11221.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41463.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47037.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10283.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41616.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46929.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10444.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41667.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46946.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10096.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41832.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47105.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10464.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41633.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46838.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41775.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47055.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41371.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47023.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10347.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41588.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46906.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41425.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46748.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10389.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11097.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41714.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47154.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10212.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41643.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47019.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10403.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41625.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46946.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10422.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41602.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47111.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10441.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41562.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47016.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11090.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41610.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46781.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10584.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11023.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41812.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46955.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41626.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46937.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10244.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41576.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46827.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10293.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41770.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46972.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41777.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47057.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41745.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46897.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39529.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46954.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10410.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41592.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47100.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41603.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46974.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41536.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46692.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10293.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41693.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46725.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41574.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46879.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10439.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41736.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47078.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10105.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41479.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46936.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10554.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41570.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46799.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10479.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41572.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46800.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41608.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46805.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10395.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41790.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47090.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10428.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41717.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47072.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41477.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46835.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41527.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46817.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41730.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46772.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41632.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46998.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10287.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41584.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46886.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41481.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46820.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10152.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41484.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46930.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10273.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41456.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46732.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10405.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41509.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46908.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41401.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46878.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10405.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41592.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46908.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41521.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46883.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10139.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41792.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10338.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41702.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46950.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10344.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41618.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46939.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10351.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41708.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46985.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10288.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41494.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46943.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41501.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46873.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10051.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11192.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41597.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47016.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10380.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41562.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46893.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41707.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46703.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10192.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41694.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46905.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10218.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41575.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46964.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10283.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41483.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46968.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41739.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46906.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41650.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47037.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10341.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41687.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47052.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11230.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41701.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46987.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10426.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11219.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41668.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46837.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41323.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 44359.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10451.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41623.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47012.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10227.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41745.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47024.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41662.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47150.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41844.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47147.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10385.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41471.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10227.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11033.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41679.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47050.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10427.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41464.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47104.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41784.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46971.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46962.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10190.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41427.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46942.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10351.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11046.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41626.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46636.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10453.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41592.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46834.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41702.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46904.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47163.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10482.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41536.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46874.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11208.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41498.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47224.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10320.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41819.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46917.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10477.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41715.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47061.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10389.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41853.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47049.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41619.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46907.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41677.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46876.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10073.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41640.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10247.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41443.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46961.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10362.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41605.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47102.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41565.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46910.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10287.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41492.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46968.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10051.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11202.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41434.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46734.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10479.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41794.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46908.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41591.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46711.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10363.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41828.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46870.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41754.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 43770.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41862.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46847.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10273.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41719.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46960.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41644.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46942.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41686.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46832.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10331.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39742.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47205.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41432.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46689.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41677.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46960.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41671.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46980.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41506.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46989.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11013.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41563.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46929.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41806.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46898.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41677.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46535.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10266.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41662.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47183.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10303.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41355.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46752.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11050.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41816.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46971.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10324.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41855.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46785.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41674.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47156.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41680.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46913.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41674.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46978.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10103.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41656.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47071.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10459.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47051.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41714.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46973.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10438.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41967.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47185.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41538.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47044.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10095.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41507.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47022.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41500.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46891.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41703.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47085.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10418.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46944.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11048.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41602.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46941.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41702.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46997.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10455.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41736.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46625.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41758.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46841.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41655.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47037.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11053.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41632.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46895.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41665.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46973.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10222.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41780.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46938.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41653.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47038.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11192.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41655.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46979.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41535.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46940.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41553.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10208.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41473.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46927.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10317.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41773.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47034.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41704.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46840.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10272.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41652.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46826.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41600.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46928.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41423.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46789.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41497.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46811.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10308.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46722.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41551.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46758.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46924.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10199.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41512.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46974.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41633.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46831.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41568.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46977.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10185.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41451.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46985.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10520.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41552.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46917.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10373.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41731.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47034.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41539.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47120.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41545.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46894.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10249.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41701.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46939.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41521.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46703.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10229.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41475.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46958.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10332.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41672.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46836.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10408.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41490.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47138.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41571.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46984.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41585.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46678.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41627.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46611.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10347.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11076.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39803.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46994.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10476.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41614.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46897.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41611.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47008.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41608.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10358.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41608.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46868.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10319.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41523.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46741.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41655.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47173.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10494.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41587.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46895.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41765.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46863.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41433.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46996.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10394.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41612.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46831.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41590.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46702.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41565.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46772.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41508.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46991.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41562.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46854.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10197.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41380.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46764.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41544.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46976.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41446.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46711.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10572.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41554.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46972.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41492.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46999.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41561.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46961.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10213.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41586.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46906.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41540.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46923.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41361.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46902.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10253.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11199.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41475.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46922.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41609.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46960.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10304.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41622.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47020.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41616.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46806.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41527.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47090.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41473.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46956.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41486.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46878.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10280.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41438.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46975.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10217.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41396.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46937.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41713.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46662.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10453.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41705.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46767.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41488.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46643.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10438.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11203.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41623.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46854.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10377.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41401.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47082.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41411.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47026.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41677.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10420.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11193.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41673.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46911.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10455.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41517.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46803.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41547.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47064.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41660.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46887.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41787.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46775.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10410.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41602.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46843.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10276.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41683.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46720.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10208.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41522.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46875.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10316.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41401.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46816.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10340.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41644.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46801.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41651.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46841.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41613.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47004.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41841.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46943.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41485.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10562.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11206.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41624.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46864.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41527.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46948.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11198.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41598.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46924.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41698.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46955.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41368.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46970.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10186.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41581.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46856.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10491.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41377.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41556.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10322.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41684.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46887.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11164.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41503.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46848.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10182.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11177.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41559.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46715.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41392.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46849.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10380.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41542.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46739.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10281.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11190.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41651.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46758.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41594.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46650.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41876.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46813.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41514.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46923.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10178.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11169.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41614.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46896.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41803.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46973.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41597.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46817.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10349.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11191.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41480.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47103.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10363.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41789.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46908.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41538.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46707.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11161.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41747.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46727.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41604.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46939.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11166.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41551.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46628.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10254.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41701.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46827.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10401.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41596.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46849.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41294.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46594.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41331.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46415.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41605.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46846.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10377.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41664.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46690.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10254.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41735.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46708.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10458.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41590.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46640.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10332.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41548.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46766.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41665.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46800.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10133.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41635.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46833.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41626.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46877.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11195.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41637.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46933.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10235.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41460.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46891.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10373.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41753.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46643.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41469.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46640.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10423.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41490.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46946.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11182.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41586.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47013.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10355.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41563.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46928.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10242.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41362.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46895.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41518.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46905.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10764.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 39828.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45414.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10076.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10961.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41744.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46541.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41558.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46777.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10304.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41571.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46755.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10319.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41640.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46830.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41378.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46837.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41639.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46867.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10026.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11179.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41735.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47086.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41566.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46658.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10324.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40403.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47092.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41720.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46811.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10364.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41560.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46931.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10343.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41559.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46839.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41759.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46931.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10405.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41612.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46712.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10218.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41671.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46971.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41588.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46809.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41325.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46760.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41497.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46542.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41653.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47017.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41601.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46828.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10207.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11196.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41731.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46794.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10340.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41380.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46938.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41670.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46922.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41577.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46856.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10160.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11176.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41511.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46732.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11177.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41683.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46700.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41557.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46846.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10170.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41328.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46877.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10344.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41660.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46959.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10194.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10923.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41350.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46863.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41440.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46639.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10393.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41391.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46684.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10553.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41604.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46697.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41146.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46856.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41484.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46550.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10245.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41409.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46702.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10194.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11159.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41351.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46560.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10319.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11173.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41537.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46837.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41516.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46786.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10263.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41554.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46903.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41594.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46920.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10200.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41625.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46788.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41557.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46953.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10211.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41636.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46699.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10245.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41557.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46503.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41570.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46618.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10176.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41608.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46433.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41497.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46660.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41717.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46847.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10329.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41479.75it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46985.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10266.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41311.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46616.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11159.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41394.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46723.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10329.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41239.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46562.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41412.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46463.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11169.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41587.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46740.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10225.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41474.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46851.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10321.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41247.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46753.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10094.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41731.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46736.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41443.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46682.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41275.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46388.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10288.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41558.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46656.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41494.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46773.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41543.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46714.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41408.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46531.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41327.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46293.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10318.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11150.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41387.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46952.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41448.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46612.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41267.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46763.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41442.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46414.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10311.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41372.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46705.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10343.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11161.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41597.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 47074.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10222.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11174.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41451.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46454.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10347.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41225.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46585.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11165.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41501.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46256.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10330.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41243.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46486.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41361.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46736.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10466.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41378.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46779.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10210.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11158.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46947.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10398.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11152.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41357.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46494.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41408.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46648.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41532.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46662.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11006.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41228.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46691.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10225.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41198.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46678.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11123.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41129.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46808.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41354.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46602.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10225.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41449.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46849.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10169.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11124.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41389.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46489.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11032.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41404.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46769.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41400.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46746.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10252.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41032.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46490.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10314.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11157.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41558.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46636.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41286.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46838.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11152.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41446.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46514.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10240.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41505.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46690.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11150.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41238.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46726.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10243.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11159.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41314.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46767.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11162.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41568.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46741.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41408.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46679.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10258.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41449.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46709.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41191.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46796.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41350.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46627.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10335.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11131.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41303.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46699.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41522.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46703.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10265.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11159.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41375.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46753.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10196.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41338.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46828.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41437.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46477.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41488.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46705.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10281.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41373.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46479.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41540.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46286.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41324.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46923.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41512.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46539.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10243.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41257.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46796.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10319.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41538.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46496.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41288.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46752.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10204.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41359.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46515.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41475.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46680.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10327.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41458.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46444.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11118.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41614.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46629.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41604.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46720.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41411.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46758.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10247.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41424.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46613.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41251.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46801.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41334.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46580.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41298.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46434.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41350.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46549.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10141.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41472.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46647.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10376.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41220.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46706.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41367.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46289.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10186.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41443.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46614.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41238.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46623.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41564.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46502.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41540.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46766.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41361.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46663.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41240.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46807.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41136.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46549.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41397.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46756.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10297.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41314.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46694.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11148.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41621.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46854.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10224.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41338.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46703.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41462.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46759.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41383.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46700.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10530.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41342.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46612.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10245.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41331.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46620.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10238.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41254.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46851.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10447.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11155.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41532.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46492.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10228.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41573.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46458.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41274.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46600.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10299.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41571.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46830.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10376.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41714.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46791.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10415.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41447.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46725.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41511.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46977.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10339.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41605.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46688.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10273.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41523.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46662.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41444.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46787.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41323.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46491.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10091.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41651.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46921.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10083.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11147.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41395.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46680.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41589.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46818.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41451.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46776.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41351.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46753.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10416.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11124.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41563.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46778.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10356.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41506.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46853.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46891.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10308.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41525.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46744.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10174.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41359.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46663.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10382.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11081.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40917.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46797.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41495.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46840.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11156.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41454.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46321.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10241.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41499.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46770.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11099.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41330.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46841.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10276.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41484.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46922.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41603.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46655.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41422.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46693.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10423.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41534.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46668.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41637.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46758.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41541.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46810.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10356.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11152.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41409.32it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46905.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41459.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46936.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10479.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41523.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46731.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10091.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41371.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46775.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10193.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41644.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46368.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10465.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41491.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46509.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10262.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41343.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46803.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10189.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.05it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41097.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46463.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10221.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11111.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41190.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46765.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10064.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41321.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46714.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41387.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46740.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10084.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41539.28it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46706.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10197.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41081.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46592.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10135.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41530.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46665.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10206.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41588.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46786.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10183.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41454.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46537.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41385.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46581.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10356.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41481.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46717.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.08it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41535.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46883.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41434.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46415.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10365.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41623.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46647.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10153.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41576.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46747.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41439.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46746.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41318.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46417.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10317.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41527.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46390.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10254.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41452.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46493.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10211.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41483.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46877.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10131.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41475.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46665.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10262.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11154.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41600.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46825.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41353.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46544.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41350.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46586.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11127.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41536.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46624.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10297.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41523.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46873.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.77it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41514.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46800.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41444.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46817.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10241.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41577.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46744.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10184.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41485.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46711.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41527.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46413.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11131.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41469.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46639.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41423.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46902.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41314.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46760.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10291.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11143.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41320.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46593.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10170.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41306.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46621.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11131.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41371.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46694.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41476.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46770.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10400.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41422.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46651.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10201.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11141.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41545.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46972.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.10it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41454.56it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46617.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10265.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41394.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46533.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10166.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11142.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41550.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46631.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41475.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46545.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10194.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11151.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41161.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46716.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11127.73it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41442.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46655.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10401.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11117.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41355.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46771.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10340.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41667.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46592.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10313.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41453.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46775.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41374.88it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46874.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41374.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46770.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41378.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46884.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10358.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41383.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46760.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10285.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41384.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46304.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11140.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41294.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46363.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10304.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41402.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46568.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11110.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41455.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46887.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41633.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46809.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41540.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46771.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10177.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41263.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46811.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10210.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11145.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41327.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46490.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10237.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41548.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46699.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10274.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11123.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41466.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46633.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11131.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41454.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46638.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10251.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41377.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46445.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10302.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.44it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41445.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46679.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10440.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11113.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41510.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46576.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10208.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41408.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46463.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10251.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41509.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46466.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41375.41it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46636.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41312.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46748.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41254.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46748.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.01it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41606.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46578.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10209.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11123.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41582.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46560.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10303.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11135.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41509.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46784.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41535.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46527.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41724.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46445.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10228.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41419.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46485.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10325.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41437.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46697.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11103.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41323.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46495.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10178.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11109.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41494.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46755.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10364.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.92it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41600.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46662.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10181.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41382.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46603.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41269.79it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46319.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.55it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41434.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46543.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10134.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.60it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41327.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46496.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41518.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46515.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10201.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11095.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41273.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46420.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41373.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46834.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11105.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41101.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46606.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41489.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46482.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11118.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41554.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46444.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10430.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11134.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41419.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46576.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41536.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46921.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10253.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41140.86it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46513.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10385.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41317.27it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46432.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40516.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 43863.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10180.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11124.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41534.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46688.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41541.87it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46487.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11144.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41298.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46766.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10184.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41467.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46875.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11126.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41401.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46840.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10162.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.98it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41529.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46483.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10145.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11117.13it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41388.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46509.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10246.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11128.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41383.62it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46631.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10108.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11112.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41196.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46592.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10297.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11108.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41252.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46406.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41562.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46774.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10201.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11117.07it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41278.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46772.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10289.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11123.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40844.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46440.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10257.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11137.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41434.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46524.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41566.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46650.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10299.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.06it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41338.63it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46387.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41298.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46353.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41569.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46347.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10400.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41495.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46240.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10212.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11123.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41447.58it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46701.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11131.67it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41266.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46522.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11120.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41409.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46617.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10253.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11124.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41577.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46854.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10288.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41239.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46569.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10109.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11130.74it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41539.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46640.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10377.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41448.82it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46730.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10337.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11104.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41385.49it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46482.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10279.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41191.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46390.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10422.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41476.47it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46291.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11118.31it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41362.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46618.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10316.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.48it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41207.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46672.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10110.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11104.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41442.52it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46722.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10101.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11101.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41330.34it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46369.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41168.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46611.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10166.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11118.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41381.84it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46689.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41469.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46704.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10217.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41508.26it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46599.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11129.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41463.66it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46354.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10122.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11113.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41345.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46412.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10111.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41425.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46405.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10209.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.30it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41279.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46544.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10097.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11105.65it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41343.93it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46215.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10310.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11125.45it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41360.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46476.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.91it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41514.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46545.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10024.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.12it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41291.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46680.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41443.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46417.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11112.70it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41290.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46451.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10313.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.51it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41326.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46654.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11098.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41447.76it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46381.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10257.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11110.39it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41115.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46723.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10321.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.78it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41195.83it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46508.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10425.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11108.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41307.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46631.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10070.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11111.29it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41474.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46276.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11119.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41380.37it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46540.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11096.09it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41426.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46705.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11112.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41578.38it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46699.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10050.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11114.33it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41361.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46768.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10361.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11105.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41229.20it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 45310.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10343.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11097.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41466.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46323.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10090.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11116.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41305.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46394.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10188.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11108.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41201.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46303.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10258.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11098.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41298.68it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46214.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10204.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11099.14it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41290.40it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46388.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10203.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11077.24it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41255.15it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46550.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10272.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11085.99it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41468.50it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46447.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10266.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11090.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41345.54it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46577.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10092.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11094.21it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41155.89it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46489.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10238.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11088.18it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41367.11it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46241.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10123.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11092.80it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 40912.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46571.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10217.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11095.42it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41236.94it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46598.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10242.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11093.22it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41261.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46640.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11089.95it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41252.25it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46779.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10115.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11096.19it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41264.16it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46370.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10186.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11087.59it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41429.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46600.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10142.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11087.04it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41425.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46307.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10246.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11101.03it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41178.46it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46646.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11096.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41120.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46642.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10210.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11099.17it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41045.36it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46583.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10178.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11090.72it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41383.53it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46623.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10318.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11091.57it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41478.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46307.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10240.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11085.02it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41398.61it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46444.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11081.85it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41372.23it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46567.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11080.00it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41262.90it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46353.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11095.64it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41130.35it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46458.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10162.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11093.96it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41522.71it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46591.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10181.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11090.81it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41276.43it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46299.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10227.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11100.69it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 41269.97it/s]\n", + "100%|██████████| 20000/20000 [00:00<00:00, 46417.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1h 27min 19s, sys: 21min 27s, total: 1h 48min 46s\n", + "Wall time: 1h 18min 41s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "delay_function = ExponentialDelaySampler(min_scale=min_scale, max_scale=max_scale, random_state=12345).exponential_delay_function_expected_reward_weighted\n", + "\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\", # \"binary\" or \"continuous\"\n", + " reward_function=reward_func,\n", + " delay_function=delay_function,\n", + " random_state=12345 + experiment,\n", + " )\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=sample_n_rounds)\n", + "\n", + " # print((np.arange(0, len(training_bandit_dataset[\"round_delays\"])) + training_bandit_dataset[\"round_delays\"] < sample_n_rounds).sum())\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " # Take into account all the delays during training\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" RD delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " # Ignore delays during training\n", + " training_bandit_batch.round_delays = None\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" no delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[\"n_rounds\"].append(n_rounds)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 20000/20000 [00:01<00:00, 10288.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11187.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10224.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11194.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10374.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10234.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11168.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10362.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11236.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10382.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10295.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11230.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11251.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11232.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10403.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11244.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11200.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10305.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11223.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10469.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11237.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11261.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10394.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11222.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10406.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10338.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10306.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10258.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11238.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10303.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11115.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10330.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11222.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11222.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10393.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11237.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11221.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10485.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11245.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10214.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11238.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10276.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10462.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10287.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11228.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10330.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10394.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10291.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11223.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11229.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10356.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11237.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11226.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11235.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10334.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11227.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10414.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11222.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11234.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10198.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11228.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10343.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10218.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10231.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10429.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10406.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10450.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11229.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10448.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11237.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10395.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10294.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11238.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10358.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11227.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11226.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10365.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10318.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10408.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10270.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10463.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11229.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10478.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11224.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10349.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11232.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10439.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11226.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11244.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11225.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10435.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10482.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11221.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10817.80it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9748.86it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10845.50it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9888.67it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10862.42it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9933.58it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10975.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10098.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11066.96it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9872.53it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11021.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10221.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11136.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10220.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11043.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11003.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10062.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10767.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10019.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.64it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9945.75it/s] \n", + "100%|██████████| 20000/20000 [00:02<00:00, 8345.12it/s] \n", + "100%|██████████| 20000/20000 [00:02<00:00, 9769.87it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10996.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10172.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10937.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10100.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11040.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10059.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10532.42it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9556.63it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10815.00it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9675.22it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10521.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10044.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.26it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9854.40it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10242.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10046.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10983.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10017.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10758.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10134.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10027.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11121.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10117.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.76it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9988.30it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10628.27it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9690.27it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10526.51it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9745.27it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10897.20it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9925.58it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10051.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11017.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10197.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10992.86it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9989.21it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10034.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10999.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10087.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10085.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10002.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10250.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11002.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10178.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10054.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10996.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10060.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10999.83it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9783.15it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10995.08it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9977.29it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10215.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10995.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10040.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11003.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10052.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10135.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11006.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11008.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10094.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.90it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9945.49it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11006.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10081.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11005.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10094.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11007.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10138.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10147.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10996.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10069.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10108.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10055.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10056.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11016.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10096.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10229.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10000.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11004.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10121.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11028.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10137.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10104.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11013.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10154.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11002.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10176.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10056.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10946.13it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 8955.24it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10705.93it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9472.47it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10653.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10006.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10640.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10011.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10944.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10134.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11062.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10075.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10942.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10139.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10676.75it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9967.78it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.16it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9860.48it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11044.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10096.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11034.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10165.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11058.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10020.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11063.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10167.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11032.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10153.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11045.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10087.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11052.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11021.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10101.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11070.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10074.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11061.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11059.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11025.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10104.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11053.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10132.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11026.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11030.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11089.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11025.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10103.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11031.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10105.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11063.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10190.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11067.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10077.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11050.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10200.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11032.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10092.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11056.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10000.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10886.57it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9978.75it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10956.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10060.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10194.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11010.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10158.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10931.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10002.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10143.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10017.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10022.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10983.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10059.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11000.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10107.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10051.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10176.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10164.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11000.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10040.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.61it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9992.42it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11000.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10168.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10126.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10975.07it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9990.02it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11004.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10109.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10179.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10181.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10999.26it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9995.22it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10151.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11002.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10986.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10066.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11001.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10170.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10118.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10139.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10994.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10112.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11004.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10124.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10983.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10177.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10994.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10044.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11010.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10100.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10204.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10997.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11007.22it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9987.89it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10008.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10990.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10098.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11003.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10005.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10214.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11001.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10244.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10200.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10990.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10143.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10993.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10152.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10128.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10036.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10994.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10029.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11001.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10173.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.43it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9985.83it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10226.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11007.66it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9940.30it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10997.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10060.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10007.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10991.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10068.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10991.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10127.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10064.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10140.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10997.69it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9890.53it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10013.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10127.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10986.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10152.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10990.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10088.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10104.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10940.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10010.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10193.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10936.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10003.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10089.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.52it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9950.09it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10058.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10027.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10153.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10079.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10949.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10036.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10008.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.04it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9999.18it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11016.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10054.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10064.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10162.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.50it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9994.32it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.80it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9976.05it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10083.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10056.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10023.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10086.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10166.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10280.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10256.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10329.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10018.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10036.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10150.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10099.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11010.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10150.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10045.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11005.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10107.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10942.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10116.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10141.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10059.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10946.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10105.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10992.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10019.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10033.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10131.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10931.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10075.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10003.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10173.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10085.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10993.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10138.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10141.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10943.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10071.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10992.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10140.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10029.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.80it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9963.31it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10252.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.22it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9873.79it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10871.95it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9996.10it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10838.61it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9891.54it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10659.90it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9935.75it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10582.67it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9924.57it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10159.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10944.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10002.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10101.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.98it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9990.65it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10910.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10054.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.66it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9902.32it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10181.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10950.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10187.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10066.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10116.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10146.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10944.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10121.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10095.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10997.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10109.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10983.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10114.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10045.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.31it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9943.34it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10008.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10054.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10070.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10937.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10030.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10009.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10198.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11032.86it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9944.36it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11005.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10002.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10143.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10055.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10043.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10094.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10850.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10087.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10975.15it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9937.85it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10990.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10105.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10946.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10075.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10928.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10034.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10061.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10943.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10090.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10035.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10160.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10065.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10066.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10089.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10101.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10967.25it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9950.60it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10085.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10940.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10085.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.38it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9986.63it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10049.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10039.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10198.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10110.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10005.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10704.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10073.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10078.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10067.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10013.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10983.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10106.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10028.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10014.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10074.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10127.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10951.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10130.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10037.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10978.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10189.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10931.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10063.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10953.27it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9989.26it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10033.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10046.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10957.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10093.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10125.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.67it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9999.11it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10048.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.07it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9977.21it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10936.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10130.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10855.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10045.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10975.99it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9929.80it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10030.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10005.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10090.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10986.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10094.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10093.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10147.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10984.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10147.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10362.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10932.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10130.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10034.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10095.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10121.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10985.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10036.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10161.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10785.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10018.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10184.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.91it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9987.39it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10995.09it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9974.19it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10917.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10178.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10060.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10072.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10950.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10068.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10987.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10149.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10223.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10958.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10093.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10958.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10009.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10026.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.74it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9853.45it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10982.04it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9939.44it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10086.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10317.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10020.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.60it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9940.64it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10146.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10949.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10066.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10148.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10967.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10104.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10026.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10957.10it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9953.44it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10965.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10074.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10143.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10143.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.82it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9981.15it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10967.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10017.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10945.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10019.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10045.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10958.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10031.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10139.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10025.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10063.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10062.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10940.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10075.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10950.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10100.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10105.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10947.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10098.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10046.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10970.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10082.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10056.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10949.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10016.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10972.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10035.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10961.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10097.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10919.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10040.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.23it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9914.98it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10942.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10010.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10945.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10138.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10189.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10961.55it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9979.35it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10086.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10006.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10953.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10059.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10207.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10909.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10037.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10957.40it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9932.38it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10806.69it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9903.43it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10845.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10089.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10047.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10138.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10949.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10028.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10240.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10945.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10007.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10111.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10089.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.19it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9930.97it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10986.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10097.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.22it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9874.66it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10100.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10979.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10056.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10100.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10831.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10021.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10099.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11005.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10038.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10947.66it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9939.67it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10057.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10039.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10923.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10076.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10971.89it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9991.75it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10977.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10035.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10853.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10029.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10587.73it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9578.32it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10854.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10080.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10954.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10007.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10947.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10006.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10989.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10014.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10895.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10202.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10914.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10049.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10091.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10945.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10199.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10958.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10195.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.65it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9941.09it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10096.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10936.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10133.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10963.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10099.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10942.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10073.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.38it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9945.08it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10020.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10072.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10940.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10082.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10966.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10033.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10072.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10928.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10135.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10976.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10026.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10953.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10013.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10948.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10060.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10070.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10981.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10116.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10973.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10090.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10946.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10021.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10960.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10075.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10974.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10072.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10809.03it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9969.42it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10969.56it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9993.10it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10959.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10059.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10968.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10119.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10953.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10048.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10424.52it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9647.89it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10872.40it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9703.34it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10512.64it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9838.38it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11070.32it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9977.74it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10814.77it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9672.66it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10874.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10230.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11146.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10185.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10761.55it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9603.90it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10591.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10268.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11188.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10223.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11181.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10238.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11060.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10167.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11098.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11122.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10282.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11034.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10155.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11201.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11099.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10165.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11080.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10034.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10288.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11260.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10364.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10262.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11246.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10244.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11207.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10364.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10384.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11212.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10299.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11252.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10427.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10490.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11226.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10290.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11228.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11228.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11192.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11240.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10348.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11244.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11214.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10277.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11228.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10307.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11223.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11240.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10292.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11242.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10132.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11111.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10247.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11053.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11180.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10065.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11104.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11215.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10421.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11184.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10169.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11052.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10085.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11078.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11186.54it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9864.74it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11170.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10260.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11089.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10042.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11233.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10274.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10353.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10081.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10087.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11217.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10188.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11138.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10191.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11177.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10312.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11235.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11197.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10286.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11183.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10438.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10318.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11333.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10314.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11361.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10252.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11092.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10328.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11364.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11378.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10338.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11334.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10462.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11364.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10415.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11381.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10483.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11286.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11385.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11360.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10363.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11333.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11323.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10196.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11357.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10428.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11310.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10219.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11299.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10463.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11360.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10412.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10317.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11286.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10333.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11341.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10447.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11357.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10321.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10264.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10980.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10171.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11011.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10557.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10412.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11355.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10337.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11378.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10248.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11306.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10394.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10403.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11277.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10300.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11368.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10338.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11354.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10278.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10347.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10441.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11366.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10512.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11353.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10279.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11332.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11405.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11383.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10436.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10421.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10376.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11354.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10395.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11368.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10437.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10267.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11362.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10169.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10942.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10276.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11171.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10296.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11092.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10284.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10943.31it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9774.72it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10992.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10020.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11175.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10292.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11216.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10266.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11237.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11167.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10344.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11120.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10271.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11178.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10227.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11139.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11220.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10255.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11254.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11246.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10261.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10709.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10135.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11231.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10127.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11133.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10342.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11189.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10130.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11209.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10190.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11363.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11359.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10356.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11334.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10420.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10331.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11377.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10443.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11357.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10314.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11271.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10258.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11322.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10249.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11348.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10479.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11334.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10320.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11363.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10359.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11406.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10298.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11288.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10161.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11255.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11383.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10242.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11374.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10326.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11351.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10366.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11341.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10340.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11379.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10269.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11294.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10363.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10349.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11304.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10568.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11218.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10243.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11291.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10281.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11372.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10263.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11363.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11312.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10167.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11077.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10224.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11369.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10157.26it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9968.90it/s] \n", + "100%|██████████| 20000/20000 [00:02<00:00, 9837.16it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10496.81it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9948.00it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11111.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10170.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11250.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10176.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11211.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10233.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11070.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10140.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10920.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10267.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10930.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10128.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10843.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10137.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11205.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10301.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11239.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10066.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11093.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10279.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11017.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10163.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11132.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10169.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11204.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10024.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11058.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10071.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11013.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10273.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11210.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10190.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10791.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10082.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10645.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10212.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11091.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10275.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11185.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11160.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10331.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10323.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11153.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10151.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11172.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10163.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11149.91it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9938.63it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 11213.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10209.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11036.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10144.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10880.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10061.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10414.51it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9594.77it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10717.59it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9799.47it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10712.16it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9820.67it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10628.53it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9755.77it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10863.81it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 8699.47it/s] \n", + "100%|██████████| 20000/20000 [00:02<00:00, 8980.45it/s] \n", + "100%|██████████| 20000/20000 [00:02<00:00, 9973.46it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10354.76it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9840.75it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10618.93it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9757.19it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10913.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10029.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10904.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10102.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10924.23it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9964.53it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10928.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10069.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10909.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10138.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10889.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10175.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10941.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10159.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10925.59it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9996.05it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10919.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10253.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10928.31it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9906.64it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10967.95it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9930.96it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10928.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10103.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10886.07it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9964.11it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10926.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10051.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10967.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10021.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10896.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10017.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10931.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10120.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10943.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10111.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10914.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10081.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10844.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10027.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10939.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10168.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10955.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10044.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10934.36it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9925.69it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10964.39it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9879.94it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10947.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10080.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10904.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10069.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10943.45it/s]\n", + "100%|██████████| 20000/20000 [00:02<00:00, 9938.06it/s] \n", + "100%|██████████| 20000/20000 [00:01<00:00, 10962.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10064.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10952.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10183.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10807.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10136.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10934.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10015.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10988.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10208.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11026.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10135.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11037.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10236.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11047.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10240.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11002.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10047.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10998.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10093.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11249.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10395.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11409.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11417.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10454.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11269.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10418.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10495.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10437.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10424.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10457.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10344.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11383.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10464.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10497.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10364.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10422.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10436.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10374.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10471.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11384.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10461.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11378.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10361.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10367.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11377.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10446.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11253.62it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11379.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10314.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11374.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10372.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10384.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10430.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11376.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10459.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10436.01it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10431.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11379.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10427.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11404.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10443.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10429.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10424.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10472.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11379.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10457.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11118.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11385.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10443.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10405.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10416.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10452.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10386.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10402.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10422.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11405.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11411.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10469.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11408.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10459.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11385.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10488.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10398.87it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10329.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10408.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11375.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10487.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10428.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11412.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10342.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10420.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10399.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10379.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.08it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10402.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10396.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10420.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10439.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11384.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10436.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10416.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.54it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10360.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11410.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10447.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11377.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10490.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.61it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.55it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11412.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10426.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.17it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10461.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10370.35it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11404.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10362.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.37it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10472.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11412.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10410.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11375.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10407.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10465.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11411.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10422.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10426.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.71it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10510.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11376.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11376.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10365.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.47it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10490.50it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10410.51it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11372.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10443.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.89it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10390.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11377.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10456.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.40it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10504.57it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10331.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10401.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10361.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11356.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10433.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11375.14it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11346.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10419.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10346.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10430.06it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11380.20it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10524.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10418.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.24it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10454.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10468.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.22it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10438.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10371.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10365.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10452.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10352.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11381.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10421.66it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10424.90it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10421.79it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10467.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11381.21it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.59it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10467.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11383.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10440.05it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10309.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11390.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10432.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.16it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10259.82it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10397.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11414.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10420.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10447.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10435.00it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10408.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.65it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.33it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10387.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.83it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10436.73it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11389.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10375.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10380.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10428.19it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11404.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10403.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.68it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10426.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11397.23it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10484.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11395.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10425.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10381.96it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11405.42it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10545.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10435.56it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10434.29it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.13it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11399.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10341.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11376.64it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10447.72it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10363.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10471.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11411.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10452.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11371.48it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10394.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10456.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.81it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10357.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10425.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.27it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.36it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11388.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10458.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11404.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10365.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.93it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10385.75it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10368.45it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11238.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10492.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11404.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10411.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11382.38it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10400.15it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11393.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.52it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.67it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10391.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.04it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11408.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10474.09it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.60it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10400.31it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11396.80it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10293.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11381.02it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10441.12it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.99it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10345.58it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.91it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10388.70it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11375.49it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10392.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10398.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11383.95it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10350.30it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.11it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10477.44it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11403.88it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10378.78it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10404.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11391.77it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10460.69it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10440.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11402.18it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10548.92it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11407.46it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10413.53it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11387.28it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10415.98it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11392.86it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10417.07it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.97it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10498.03it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.32it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10431.74it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11401.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10395.76it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11400.43it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10383.39it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11412.26it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10409.41it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11394.85it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10336.10it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11398.84it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10446.25it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11405.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10431.94it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11386.34it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 10415.63it/s]\n", + "100%|██████████| 20000/20000 [00:01<00:00, 11405.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1h 12min 4s, sys: 22min 2s, total: 1h 34min 6s\n", + "Wall time: 1h 3min 41s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " delay_function = ExponentialDelaySampler(max_scale=max_scale, random_state=12345).exponential_delay_function\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\", # \"binary\" or \"continuous\"\n", + " reward_function=reward_func,\n", + " delay_function=delay_function,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=sample_n_rounds)\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " # Take into account all the delays during training\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" RI delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def plot_average_reward_per_n_rounds(rewards):\n", + " rewards_pd = pd.DataFrame(rewards)\n", + " rewards_pd = pd.melt(rewards_pd, ['n_rounds'])\n", + " rewards_pd[\"average reward\"] = rewards_pd[\"value\"] / rewards_pd[\"n_rounds\"]\n", + "\n", + " plot = sns.lineplot(data=rewards_pd, x=\"n_rounds\", y=\"average reward\", style=\"variable\", hue=\"variable\", markers=True, dashes=False)\n", + " plot.legend(bbox_to_anchor=(1.1, 1.05))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "del train_rewards[\"egreedy_1.0 RD delay\"]\n", + "del train_rewards[\"egreedy_1.0 RI delay\"]\n", + "\n", + "plot_average_reward_per_n_rounds(train_rewards)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Delay under constant drift" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "experiment_round_size = np.arange(start=1000, stop=20001, step=100).tolist()\n", + "\n", + "n_runs_per_round_size = 10000\n", + "max_scale = 5000.0\n", + "n_actions = 4\n", + "dim_context = 5\n", + "reward_func = partial(logistic_sparse_reward_function, z_score=False)\n", + "\n", + "bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in bandit_policies]\n", + "train_rewards = [{policy.policy_name + f\" {type} delay\": [] for policy in dummy_policies} for type in [\"drift + no\", \"drift +\", \"no drift +\"]]\n", + "train_rewards = {k: v for d in train_rewards for k, v in d.items()}\n", + "eval_rewards = {**copy.deepcopy(train_rewards), **{IPWLearner.__name__: []}}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []\n" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 7h 49min 13s, sys: 7h 53min 49s, total: 15h 43min 2s\n", + "Wall time: 5h 54min 35s\n" + ] + } + ], + "source": [ + "%%time\n", + "%%capture\n", + "\n", + "delay_function = ExponentialDelaySampler(min_scale=min_scale, max_scale=max_scale, random_state=12345).exponential_delay_function\n", + "\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " drifter = CoefficientDrifter(\n", + " drift_interval=5000,\n", + " transition_period=100,\n", + " transition_type=\"weighted_sampled\", # linear or weighted_sampled\n", + " seasonal=True,\n", + " base_coefficient_weight=.3,\n", + " random_state=1234 + experiment,\n", + " )\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " coef_function=drifter.get_coefficients,\n", + " reward_function=reward_func,\n", + " delay_function=delay_function,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=sample_n_rounds)\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " # Take into account all the delays during training\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" drift + delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + " # Train the bandit algorithms and get the rewards for the training and evaluation period\n", + " # Ignore delays during training\n", + " training_bandit_batch.round_delays = None\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" drift + no delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_function=reward_func,\n", + " delay_function=delay_function,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=sample_n_rounds)\n", + "\n", + " for policy_class, args in bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" no drift + delay\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[\"n_rounds\"].append(n_rounds)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "image/png": "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0+I0bdq0mu3bt0fF2BVXXFGjKArq6uqk7777zn3llVcOMPvC4TADgNWrV8ft2LHDYbb7fD65rq5O+uabbzyLFi3aCQAzZsyou/3223UAGDRoUDg+Pl5bvXq1o6yszJKfn+/v1atXM1djV7By5UrPVVddVa0oCrKzs9Vx48Y1xPbfeOONHRJW3377rePGG2/sBwCVlZUWi8VivPjii2kAsGLFim2tneO1115bAwBjxozxf/jhhwmR/Xjee++9nQAwderUhttuu02prq6WEhMTo1atL7/80n333XeXA8DYsWMDubm5/shxXLt27bKPGTNmMACoqsoKCgp8LY/72muvJc6bNy9Z0zRWUVFh2bBhg33s2LGBq666quqVV15J/MUvflG1fv1696JFi/YcyzUgIUYQBEGc9Nw9aWBpbIwYANgUybh70sDS490n55xdeeWVVS+88EKzfbz++uvxR9rO7XYbgLBceTwebevWrUWt7Bvr16/f4nQ6252eY+bMmZVz5sxJLi8vt8ycObPNOKrMzEx15cqVHvN9aWmp9dxzz21oa/2O4PF4jKOv1TZjxowJmNenvTFidrudA4CiKFzTtOO2eJpwzjFhwoT6JUuWtCmgtm7dan3++efT1q1btyUlJUWfPn16djAYlADgzjvvrLrkkkty7HY7v/TSS2uONS6QXJMEQRDESc/1Z/atnjUlb1+qxxZmEJawWVPy9nUkUP+iiy6qX7p0aUJpaakCiCD47du3WydMmNC4Zs0aT0VFhayqKj744IOE1rZPTEw0srKywnPnzk0ARLzV119/7QCACRMm1P/lL39JNdf96quvHABw5plnNsybNy8JAN5+++24+vp62VznhhtuqP3888+9GzZscE2fPr3NwPfLL7+8buXKlXEVFRVyRUWFvHLlyrjLL7/8uGYsnnvuuQ3vvvtuoqZp2Ldvn+Wbb77xHH2r5sTFxek+n69L9cbYsWMbXn311SQAWLp0qSchIUGLtYYBwIQJE3xvvPFGIgCsXbvWvn37dicAnHfeeY2FhYXuTZs22QCgvr5e2rhxoy1225qaGtnhcBiJiYl6SUmJsmLFCq/Zl52draalpalPPfVU+m233XZMbkmAhBhBEARxinD9mX2rv/3tBT/sefySdd/+9oIfOjpbsqCgIPi73/2udNKkSbm5ubl5559/fm5JSYmlX79+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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "del train_rewards[\"egreedy_1.0 drift + delay\"]\n", + "train_rewards[\"random drift\"] = train_rewards.pop(\"egreedy_1.0 drift + no delay\")\n", + "train_rewards[\"random no drift\"] = train_rewards.pop(\"egreedy_1.0 no drift + delay\")\n", + "\n", + "plot_average_reward_per_n_rounds(train_rewards)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.9" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/examples/quickstart/online-bandit-with-drift-simulation.ipynb b/examples/quickstart/online-bandit-with-drift-simulation.ipynb new file mode 100644 index 00000000..6a8b074f --- /dev/null +++ b/examples/quickstart/online-bandit-with-drift-simulation.ipynb @@ -0,0 +1,2507 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### The effect of concept drift on bandit algorithms\n", + "Bandit algorithms commonly assume a stationary environment. However, concept drift can affect the environment when these algorithms are put into practise.\n", + "\n", + "In this notebook we show how various types of concept drift can be simulated using OBP.\n", + "\n", + "The OBP Drift implementation works by changing the coefficients that define $f(r|x)$. The coefficients and therefor drift can be controlled by the following parameters:\n", + "* Seasonality - When true, the drift will happen between two distinct sets of coefficients. When false, each instances of drift will generate a new set of coefficients\n", + "* Base coefficient - Which defines the contribution of a base coefficient to the drifting environment. Eg. setting the base coefficient to .3 will combine the coefficients by add 30% of a static coefficient set and 70% of the combination of drifting coefficients. This allows the model to have some base coefficients to learn.\n", + "* Transition period - The time in rounds it takes to transition between two sets of coefficients.\n", + "* Transition type - The type of transition being either linear or weighted_sampled. These correspond to the linear and gradual drifts as described by *Cavenaghi, Emanuele, et al.*[1] respectively..\n", + "\n", + "\n", + "The parameters in OBP can be used to simulate any combination of methods described by *Cavenaghi, Emanuele, et al.*[1] and more. It is also possible to combine drift with reward delay in order to create even more realistic environments. However, in this notebook we restrict ourselves to one example of seasonal and one example of non-seasonal drift both without any reward delay.\n", + "\n", + "\n", + "[1] [Cavenaghi, Emanuele, et al. \"Non stationary multi-armed bandit: Empirical evaluation of a new concept drift-aware algorithm.\" Entropy 23.3 (2021): 380.](https://pdfs.semanticscholar.org/dc0d/c6b836205f6d9ecfcb479e17036efe666ea9.pdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "outputs": [], + "source": [ + "import copy\n", + "from functools import partial\n", + "\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "\n", + "from obp.policy.offline import IPWLearner\n", + "from obp.dataset import logistic_sparse_reward_function\n", + "from obp.policy import Random, EpsilonGreedy, BernoulliTS, LinTS, LinUCB\n", + "from obp.simulator.coefficient_drifter import CoefficientDrifter\n", + "from obp.simulator.simulator import BanditEnvironmentSimulator, BanditPolicySimulator" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "#### Seasonal concept drift with small linear transition period.\n", + "In this section we demonstrate a seasonal drift with a short linear transition period." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [], + "source": [ + "experiment_round_size = np.arange(start=1000, stop=50001, step=1000).tolist()\n", + "drift_interval = 5000\n", + "transition_period = 500\n", + "seasonal = True\n", + "n_runs_per_round_size = 1000\n", + "max_scale = 1000.0\n", + "min_scale = 900.0\n", + "n_actions = 3\n", + "dim_context = 5\n", + "reward_func = partial(logistic_sparse_reward_function, z_score=False)\n", + "\n", + "drift_bandit_policies = [\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinTS, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinUCB, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + "]\n", + "\n", + "no_drift_bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in drift_bandit_policies]\n", + "train_rewards = {policy.policy_name + f\" drift\": [] for policy in dummy_policies}\n", + "dummy_policies = [policy_class(**args) for policy_class, args in no_drift_bandit_policies]\n", + "train_rewards.update({policy.policy_name + f\" no drift\": [] for policy in dummy_policies})\n", + "eval_rewards = {**copy.deepcopy(train_rewards), **{IPWLearner.__name__: []}}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 50000/50000 [00:00<00:00, 114733.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 65387.88it/s]\n", + "100%|██████████| 50000/50000 [00:06<00:00, 8028.09it/s]\n", + "100%|██████████| 50000/50000 [00:01<00:00, 26503.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9.69 s, sys: 683 ms, total: 10.4 s\n", + "Wall time: 9.88 s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " drifter = CoefficientDrifter(\n", + " drift_interval=drift_interval,\n", + " transition_period=transition_period,\n", + " transition_type=\"linear\", # linear or weighted_sampled\n", + " seasonal=seasonal,\n", + " base_coefficient_weight=.3,\n", + " random_state=1234\n", + " )\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\",\n", + " reward_function=reward_func,\n", + " delay_function=None,\n", + " coef_function=drifter.get_coefficients,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.next_bandit_round_batch(n_rounds=sample_n_rounds)\n", + "\n", + " for policy_class, args in drift_bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" drift\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[\"n_rounds\"].append(n_rounds)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 74, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 50000/50000 [00:00<00:00, 87391.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77545.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81932.96it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80099.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88405.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79228.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78772.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80822.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90136.51it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80917.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92868.10it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80113.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81893.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79598.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86573.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79512.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89746.95it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80342.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84038.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80514.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87793.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80417.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82189.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81069.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85585.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80544.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90768.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81459.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80415.04it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78719.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89470.70it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80061.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89688.53it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80944.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84249.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81400.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86825.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80897.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86501.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80824.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85698.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79895.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92490.02it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79450.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80177.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80834.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89762.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80745.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79143.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79574.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91489.64it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80436.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86022.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80713.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86644.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79871.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86551.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80535.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88222.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81129.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83415.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80399.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91311.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80617.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85931.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80887.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87680.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80168.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81074.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80649.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89436.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81476.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86324.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81096.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88121.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80392.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83405.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80792.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88719.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79831.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88033.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80727.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82980.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 75450.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89397.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80876.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84139.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81044.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81452.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80757.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87019.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80397.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90835.43it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 76414.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84749.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80337.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86931.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80513.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85604.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80141.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90469.39it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79937.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90501.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79835.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83954.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80936.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86556.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80324.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83464.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76657.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82377.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80439.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89655.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80689.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87044.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79592.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82511.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80137.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88774.28it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 71597.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 100008.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 74652.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87235.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79188.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83937.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78622.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88734.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80353.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93366.10it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79811.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85526.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78561.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91293.53it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 70455.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86856.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78114.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80125.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77541.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 64817.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 62670.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95247.33it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 72539.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85201.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81095.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89458.90it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79309.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91109.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78895.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79777.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77881.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85299.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80270.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89391.98it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 73390.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83531.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76905.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90055.18it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 66420.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86360.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78245.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84768.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77825.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88379.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79832.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85730.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79714.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88401.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80121.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90912.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78201.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80597.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80410.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84128.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80830.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83967.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80689.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87964.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80845.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88415.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80158.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83812.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79631.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80130.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78297.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80626.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79197.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89831.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78184.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89908.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77998.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87416.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79868.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92248.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79952.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86421.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80076.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85609.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79949.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80203.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79520.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84558.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78244.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83393.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78403.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87209.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79639.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89510.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81466.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85814.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80758.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90520.67it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80039.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82358.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80028.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88953.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79952.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90906.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80360.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87045.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80592.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90621.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80701.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92045.91it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80589.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87367.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79593.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89999.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80940.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87145.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79165.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80096.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79726.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83929.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79366.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85347.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79129.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87074.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79587.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83599.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79233.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83929.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79867.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85194.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77637.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85134.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79778.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84121.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79733.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84390.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78559.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83277.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79771.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83187.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79232.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88951.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79230.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85293.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79310.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90052.63it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79990.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81868.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79272.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84427.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78986.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82501.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79658.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82832.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79601.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80869.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78489.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77365.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79700.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89536.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77639.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88537.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79001.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93708.95it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79375.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88812.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78935.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86209.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78800.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87171.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78750.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85858.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78855.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87092.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80051.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83207.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78928.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88389.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77725.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90479.23it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 70252.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84828.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78352.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85144.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79447.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80047.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77724.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80388.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78949.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80468.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79251.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84913.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76440.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92402.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80113.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83004.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76120.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84229.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79477.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85936.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80005.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84734.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80702.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85893.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79643.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87778.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79759.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86233.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 72263.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85600.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79422.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88514.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80589.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86864.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81193.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81524.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79790.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83868.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80013.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91211.93it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78833.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82895.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80308.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91664.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79267.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87491.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79008.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88611.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79274.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88025.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79846.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87554.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79413.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86048.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80602.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89728.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79997.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87517.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80143.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91387.41it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78812.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81099.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80926.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93992.36it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78554.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87020.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80239.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82090.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80721.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85965.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81150.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89451.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78007.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81650.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80269.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83614.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79552.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87897.25it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80547.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94465.97it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78923.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86767.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80580.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90331.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78218.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82341.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80674.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80084.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80469.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80899.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80799.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83940.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80381.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83653.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80584.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82838.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80521.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89245.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80951.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81795.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80240.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90519.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79384.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88215.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79558.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89021.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80241.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93254.67it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80813.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81620.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80173.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87107.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80902.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89743.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80068.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83215.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80782.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87335.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79782.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91605.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80381.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88586.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80036.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78825.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80916.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80637.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80815.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92725.33it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78688.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87174.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80079.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89636.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79464.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 100568.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79340.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86996.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80371.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93035.69it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79923.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79816.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79488.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93126.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78587.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86073.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77707.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85152.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80500.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88420.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80625.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93378.70it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 81206.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88028.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79750.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92972.09it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80344.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79250.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79906.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89644.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81149.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88329.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81663.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84633.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81086.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88503.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79891.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82881.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81130.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93115.09it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80643.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80556.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80503.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81942.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79938.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87164.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 75252.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80091.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80854.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88503.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81085.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78944.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 72016.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92885.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80362.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89991.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79448.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89680.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80512.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89320.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79782.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86445.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80644.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87662.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80955.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86958.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80228.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91734.16it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79901.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89200.81it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80166.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85444.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79571.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88632.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76393.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89225.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79950.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82760.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80546.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90674.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80682.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86810.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79445.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86261.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78809.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91762.33it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80267.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88420.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80137.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88715.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80224.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86257.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80098.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89987.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79899.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85179.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79926.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85404.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79848.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81712.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80967.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91629.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77961.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86249.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79267.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91154.56it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79887.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88795.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78020.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88663.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79624.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84782.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77907.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76793.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77065.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84497.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79263.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87666.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79506.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88129.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79374.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89605.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80150.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84757.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79146.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79283.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78414.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80352.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79479.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80064.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78843.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85840.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78647.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87954.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79135.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83077.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78971.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80235.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78889.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86954.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79256.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82152.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79234.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80704.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78252.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93022.53it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78989.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85741.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77004.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89887.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79436.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83148.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78796.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90925.77it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79060.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83549.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78907.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82110.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79270.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81380.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77894.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89571.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77119.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82780.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79588.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91361.58it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78768.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88808.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78940.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89586.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79552.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85261.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78244.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88418.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77738.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90806.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80183.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88767.66it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79536.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91996.61it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78934.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83571.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73166.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85185.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 69767.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90351.53it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78598.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91048.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79921.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83086.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78646.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89330.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78833.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90830.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79028.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92572.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78603.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85692.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78203.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79701.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78645.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89121.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78677.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87780.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79144.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89348.41it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78904.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85114.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78795.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84955.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79147.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90708.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78833.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85781.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79444.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88355.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77692.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86784.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 71324.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87755.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79324.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89481.62it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79161.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91465.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78882.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82589.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79346.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80940.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78798.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88441.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78714.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84868.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78531.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90169.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79344.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85852.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78692.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90913.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81004.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91640.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77759.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85184.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79025.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87363.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80483.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81271.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79607.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85931.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80306.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93089.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79486.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88402.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80526.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87111.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80794.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85999.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79704.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91042.18it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78345.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83982.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79798.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87550.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80030.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86157.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79397.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87630.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79642.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85289.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80143.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90650.02it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80226.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88041.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79426.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80492.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80068.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90596.29it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79842.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86945.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78214.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89302.30it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78808.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90220.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81205.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86898.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79839.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87107.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79456.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93979.52it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79530.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84307.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79450.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83771.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80061.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82606.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79868.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86279.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73787.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88605.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79102.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89560.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80121.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88930.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79780.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83806.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77702.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86066.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77830.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83064.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79649.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 74472.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80152.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86020.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78046.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79575.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 70480.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87473.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81040.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93635.40it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80207.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87661.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78390.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84383.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80383.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88327.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79693.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89416.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79403.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87969.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80967.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94727.15it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80227.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90185.81it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 70436.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87289.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80747.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88232.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80237.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82261.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80264.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92280.51it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 81012.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91213.40it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80924.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90792.40it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 76152.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83876.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80730.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78713.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79941.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78682.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 75384.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91417.69it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80720.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89133.70it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80212.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86879.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77692.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91394.66it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80426.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91096.28it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 72099.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87004.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79763.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92492.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79450.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81172.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77829.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88211.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79580.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85687.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76256.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85536.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78022.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87472.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78842.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85027.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78401.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91494.95it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78049.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90064.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78185.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87620.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73634.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89067.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78470.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86025.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80419.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77858.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78968.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84013.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79082.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84043.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78320.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87914.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79271.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89352.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79154.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84832.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80017.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87040.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78443.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84781.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77988.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87882.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80174.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83661.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79496.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84635.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79361.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93315.46it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79053.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81520.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79120.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89022.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77823.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87369.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78499.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 75803.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78592.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85129.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73136.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89894.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77035.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87034.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 67151.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87331.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79795.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87020.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79415.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89904.16it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79449.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79193.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79981.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83893.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76910.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80615.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 74141.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85007.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 74386.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88716.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80673.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89002.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79747.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88081.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80292.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89241.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80492.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86702.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78942.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88554.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78975.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82073.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78143.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81508.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 74849.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87430.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79465.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83455.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78612.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82841.51it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79461.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85531.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78580.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80207.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78329.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87062.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78914.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86832.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79573.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77922.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79420.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85923.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79265.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84260.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79371.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78576.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81397.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88252.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80501.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86768.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80713.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90376.17it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80133.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85390.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 76184.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78145.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79852.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80124.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80161.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86888.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80042.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88489.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78621.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81443.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80428.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84599.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73311.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88279.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79361.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93507.60it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79359.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95037.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78452.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85214.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79189.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85492.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79672.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87501.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80295.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81292.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79988.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86913.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79193.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83562.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80590.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86986.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78847.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84942.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79787.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85723.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79498.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90574.11it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80539.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93155.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78166.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80666.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80178.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87064.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79953.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93164.69it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78914.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87595.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80869.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89540.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80003.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91516.95it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79727.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82990.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79812.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87321.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78703.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90019.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79621.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86507.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80336.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90884.95it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79342.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89218.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80655.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84690.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79598.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89029.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79653.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88833.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79835.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87760.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79673.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95170.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79858.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81080.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78897.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90968.13it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80244.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88246.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80689.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84816.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80166.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86917.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80197.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87761.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80255.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85989.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79907.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92037.51it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80077.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83986.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79377.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86398.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80630.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82844.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80126.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81176.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79944.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82477.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79889.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84920.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79382.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95554.47it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78546.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79395.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80153.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86593.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80291.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95444.09it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78791.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89691.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79834.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92859.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79555.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89836.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80698.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86239.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80304.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79551.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80450.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92932.67it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79792.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91106.37it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79573.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86162.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79865.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91068.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80297.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92327.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80180.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87833.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79362.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85416.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79445.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85815.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80307.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89041.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80449.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82256.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79060.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86624.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80008.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87902.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79948.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95059.36it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79478.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85391.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81426.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87241.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80399.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90704.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79754.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83567.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79770.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85112.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80329.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87058.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80832.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91178.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79339.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94844.79it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79242.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86691.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80197.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88058.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80754.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83482.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80284.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87854.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80395.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81725.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80078.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86179.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79247.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86502.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80160.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95187.33it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80787.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93814.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79942.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90698.52it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79751.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93389.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79476.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86257.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79327.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89861.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79443.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89574.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78634.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94414.80it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80306.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 98011.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80262.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92394.63it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80211.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89495.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80211.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90788.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79674.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87955.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79394.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89905.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80252.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81532.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80892.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94992.01it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79742.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84879.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79802.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85755.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80257.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79239.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80655.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86741.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79578.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87105.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79326.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87536.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79978.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90578.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80074.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88366.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78856.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85747.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79691.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85436.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79435.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88440.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79879.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90129.26it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80179.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83051.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80051.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89724.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78842.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85188.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79551.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89819.68it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79815.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92679.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80728.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82818.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80309.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89164.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78722.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94016.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79343.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87184.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80225.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95065.17it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79209.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94710.93it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79968.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93744.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79961.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92620.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79218.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89260.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80088.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89620.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79175.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87218.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80031.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86025.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80011.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89788.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79879.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86796.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79848.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86094.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79319.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84375.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80381.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87058.56it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80670.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84555.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78906.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89675.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80016.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90896.84it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80585.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93212.85it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80216.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84344.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79847.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 96239.14it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79186.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89258.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81018.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92414.82it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80326.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86476.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79309.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88674.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79920.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88376.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80498.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91172.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79547.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91800.17it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79967.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88226.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79311.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91104.03it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79455.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85441.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79076.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88685.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79622.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92724.67it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80275.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88793.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79043.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90833.30it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80163.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80591.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79765.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90782.03it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 81016.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88159.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80072.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82076.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79340.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85391.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80094.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93968.15it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79510.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90173.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79919.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92268.28it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79788.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 97254.71it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79857.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92291.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79656.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86923.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79498.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87749.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80374.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79512.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79749.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82106.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79126.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94285.21it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79940.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87916.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80418.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90867.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80514.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89702.19it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 81036.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83332.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80203.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90601.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80378.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90009.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80885.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89860.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78760.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89061.02it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80982.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86776.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79468.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87690.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79685.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84975.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79291.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81989.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79097.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88343.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79674.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85564.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79962.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89669.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78743.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86585.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79087.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86055.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79803.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85203.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80281.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90639.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79957.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79958.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79579.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92060.70it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79525.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89905.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80278.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83001.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80668.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87090.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79253.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90435.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79363.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93019.11it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78950.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85730.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80559.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87205.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80424.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86826.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80056.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89771.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80172.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82769.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81138.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90837.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79696.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91964.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80121.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89054.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80130.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95333.97it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79179.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91171.01it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79692.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88090.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79431.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84347.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79995.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87218.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79791.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82436.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80025.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90713.62it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80081.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86533.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81073.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93043.87it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79868.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84008.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80255.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87246.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80110.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80919.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80149.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87208.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80017.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91292.34it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80087.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91192.26it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80325.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90806.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80504.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81519.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78767.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87233.44it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80665.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90737.53it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79291.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91803.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79677.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89844.50it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80291.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87595.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80386.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88730.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79950.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 102947.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80301.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88143.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78604.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86722.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79897.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91502.21it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80807.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87054.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80296.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84650.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78959.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90673.66it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79271.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85553.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80538.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87968.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80862.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94080.62it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80627.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85950.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79610.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92611.82it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80192.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90488.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80212.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86249.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77794.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85867.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80352.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89996.21it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80343.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87282.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79903.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87707.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80067.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86113.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80055.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89964.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77092.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92983.80it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79596.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86961.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79919.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86461.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80052.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87448.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80182.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88568.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79157.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90417.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78632.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87887.34it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79957.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87351.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80072.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88820.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79990.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89987.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79679.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79498.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79077.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89441.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80678.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91483.97it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78981.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89678.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79597.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86348.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78670.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91380.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79927.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87577.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80028.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93140.19it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80071.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81257.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79469.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90931.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80481.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86292.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80630.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90357.41it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79743.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86580.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78622.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89233.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79361.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87643.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80091.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88554.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79868.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85608.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79404.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87127.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79319.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90312.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79890.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88231.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79653.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92070.32it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79951.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89668.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79916.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93656.43it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79923.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87789.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80529.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89403.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78896.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88375.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80048.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90037.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80189.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84509.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79681.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91195.11it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79809.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88487.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78898.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87770.63it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78615.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90817.45it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80248.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85754.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79836.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86344.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80600.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85804.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79708.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82446.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80331.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86798.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79694.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92892.08it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79323.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89138.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79819.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90736.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80671.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 97325.30it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80009.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88262.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79720.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93751.64it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79683.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84373.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80453.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91149.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80919.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91977.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80296.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89611.66it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80249.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87423.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81067.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84234.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80589.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89415.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79110.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85227.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80105.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80644.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79694.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90265.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80373.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80999.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79232.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91136.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80371.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87013.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79640.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88444.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80441.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 97799.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80068.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85703.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79829.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89933.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80836.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86416.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80612.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90453.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80600.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84887.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80183.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93980.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80494.18it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87493.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80001.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89027.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80285.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87701.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79920.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90365.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79726.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90591.87it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80088.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88901.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80029.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83101.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80427.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88086.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79466.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87823.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80027.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88119.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81020.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87923.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80669.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89332.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80051.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91392.15it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79933.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87247.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79935.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88305.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80754.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90469.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80411.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85399.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80212.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89836.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79102.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89641.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78863.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84883.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80007.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88172.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79853.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86330.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80625.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86828.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79708.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87395.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80359.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88061.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80073.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89361.40it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79715.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87139.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80574.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87831.29it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78861.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90975.43it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80673.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95093.71it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80543.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93841.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80799.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84007.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80139.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92602.21it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79784.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86029.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79293.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92588.63it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80299.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87273.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79772.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85996.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79455.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90155.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78758.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84051.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79435.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90700.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80332.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84435.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80630.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85287.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79639.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86687.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79786.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93929.22it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80020.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89167.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80347.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84633.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80898.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85864.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79476.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86876.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79625.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95572.84it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78672.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88047.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80005.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84893.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78300.70it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90489.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80494.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89443.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79884.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90318.06it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80364.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91344.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79792.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85941.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79852.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85314.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79382.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91626.46it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80085.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83995.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80624.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93306.57it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79087.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83319.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80276.40it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89633.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80233.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83732.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80041.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93155.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80398.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86600.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81008.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89333.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79963.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86432.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80227.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92332.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80913.89it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82974.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77950.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79369.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80120.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80003.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78955.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85482.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79342.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80165.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80618.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81374.76it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80220.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84295.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78009.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91805.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80373.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84650.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79221.61it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81372.01it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79780.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86859.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79830.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 96214.73it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79576.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93125.84it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79895.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87125.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80114.88it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92019.50it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79924.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84081.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80901.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85765.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80360.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87538.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79571.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83142.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80032.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86448.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80577.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89181.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80280.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88408.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79678.09it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85446.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79075.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90780.50it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80377.84it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79363.65it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80516.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85628.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79924.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93769.92it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79389.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82481.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80153.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85483.39it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79720.92it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90036.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80392.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83611.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80122.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89621.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79928.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91765.67it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80275.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83813.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80462.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88520.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80004.33it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81624.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79706.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85815.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79187.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87302.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79669.58it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85073.78it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80602.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93404.90it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 74778.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88266.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79561.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87572.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80021.64it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88578.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79818.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88145.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80793.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81420.63it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80545.53it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85606.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80406.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 99339.82it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79757.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 77879.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79589.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87515.23it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78600.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88050.04it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80136.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 73007.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79434.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86119.15it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79782.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85980.95it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79286.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88659.55it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80171.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87490.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80249.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91613.70it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79801.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88233.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80279.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82136.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78429.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89110.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80632.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84402.45it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79407.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89450.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79149.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82444.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79434.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93784.72it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78408.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93809.85it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80398.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89717.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80515.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88749.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79439.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93673.12it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78967.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88518.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79567.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91548.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79271.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91977.33it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 77973.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95861.30it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80049.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86509.36it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79337.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92029.84it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79955.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90279.10it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80462.68it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86994.35it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80000.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93029.87it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79671.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86894.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79568.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91716.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80457.90it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89044.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80501.66it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87859.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78647.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86232.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78836.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90830.82it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79342.79it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88771.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80323.51it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91369.62it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80049.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89816.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79376.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79897.99it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79273.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91576.45it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79793.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83166.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80370.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86746.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79706.31it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91441.81it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80427.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80524.50it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79182.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91327.76it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78974.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92989.82it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79672.00it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92230.83it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80725.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88813.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79746.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87966.24it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79728.55it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91259.16it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80267.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94621.71it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80476.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83734.02it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79124.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90041.26it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80041.37it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88805.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79667.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92032.91it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80474.20it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87919.07it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79542.73it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86069.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79684.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87522.57it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79453.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89063.56it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79791.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91757.60it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80703.21it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85841.30it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80217.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95077.97it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79933.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 94614.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79540.83it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91393.47it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78980.71it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 96637.38it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80255.91it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89881.96it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78892.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88326.28it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79216.34it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91565.18it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79345.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83431.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80598.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90352.85it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80266.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87149.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80610.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 95483.25it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79158.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85035.32it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79741.26it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90910.75it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79086.12it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87443.93it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80266.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92216.23it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79271.08it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92785.39it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 73534.17it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86731.93it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 71634.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87773.06it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79895.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88353.59it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80654.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88987.14it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79736.80it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92345.32it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 78626.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88525.97it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79130.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89752.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78926.47it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 93828.36it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 76609.22it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83509.52it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 75378.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86117.81it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79055.74it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 83912.29it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78755.77it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81329.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79574.75it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 81118.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79549.82it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87756.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80388.69it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88470.03it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79495.54it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 82197.38it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78521.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 89604.11it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79382.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90223.87it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80244.43it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92067.86it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79191.48it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85886.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79348.46it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90313.86it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79475.72it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 86711.49it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79864.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 85064.25it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80092.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 92195.19it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 80241.60it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87213.16it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79015.41it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88583.67it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79787.19it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 91141.93it/s] \n", + "100%|██████████| 50000/50000 [00:00<00:00, 79935.42it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 87488.94it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79716.98it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 84625.85it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 80175.13it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 88043.05it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 79657.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 90847.27it/s]\n", + "100%|██████████| 50000/50000 [00:00<00:00, 78263.68it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 32min 11s, sys: 21min 41s, total: 53min 52s\n", + "Wall time: 24min 31s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " drifter = CoefficientDrifter(\n", + " drift_interval=drift_interval,\n", + " transition_period=transition_period,\n", + " transition_type=\"linear\", # linear or weighted_sampled\n", + " seasonal=seasonal,\n", + " base_coefficient_weight=1.0,\n", + " random_state=1234\n", + " )\n", + "\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\",\n", + " reward_function=reward_func,\n", + " delay_function=None,\n", + " coef_function=drifter.get_coefficients,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.obtain_batch_bandit_feedback(n_rounds=sample_n_rounds)\n", + "\n", + " for policy_class, args in drift_bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" no drift\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 75, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "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4iYdPuo5dASF/QYQLippFw4qJNbUuNsQDhzkMIqDg4PDIciqVav8r7766qbVq1ev/Mc//pG3YcMGV0VFhfbrX/+657vvvrtu1apVqw8//PDonXfeWQLwox/9aFdpaenq9evXr4zFYspzzz0XTteVTCZFaWnp6vbiBuD//u//mk866aT6X/7yl9vXrFmzavTo0Yn777+/R2lp6ap169ateuKJJzrMj3LPPfcU+3w+a9OmTSt/+ctf7li1alUm1BSLxZQjjzyyee3atatOOeWUSKvvVIwZMyY6d+7cTW+++eamSy65pOrqq6+uXLNmzaovqrjZE85q4q0xkujbl1JTH8Mb6PAi0CmqJ0Be734YDTupjwUIhntQ+vKjbN5lMurE0/F5XLx6ZyoP5q7bmf6TW/EEgkhpccHsu9uM9EnEYpm8ltYembR3pK2QafG6pMVKrKmx4wGmBUhXyx0cHBy+YOzJ0wIw9smxE9uXPXv6s2sPxPFMmTKlsaCgwAQYMmRIfOPGjZ7a2lp148aN3smTJ48A0HVdTJw4MQLw5ptvhu69994e8Xhcqa+v10aNGhUDGgAuuOCC2u60PXz48Nj06dMHTps2rX7mzJn17be///77we9973u7AI488sjYsGHDMsZCVVUuu+yyvQp1fdlwPDitkNXrqa2sQmie1MyiHcnmqQn17EfTzi1UxXy8fNftNDVGieaNpqkhwqYP3oZkhPNv/7XtebnjLsJeEyUZQVU1PIH9lFTreFEcHBy+4oQ9YWN3n/cnbrc787BVVVXqui6klEyZMqVxzZo1q9asWbNq48aNK1944YUt0WhU/PCHP+z/yiuvbFy3bt2qiy66qDoej2fsbygUsrK3kp0FCxas/+53v1u1ZMkS/4QJE0bqut6d47Za590cynw1etkVIlVEy9fRnIBATvbQVBtPTTxIUa/BlL35CK7h/4fwhHn17tmZsNKMn97OhOOn0LxtNcgm3Go+Z/30djyKTnLnZvCGwZvTqeelU4+M43VxcHBwyMq+JhTvKyeccELzD3/4w36lpaWeMWPGJBobG5WysjJXr169DIAePXoYDQ0Nyuuvv553xhlndNmLEgwGzcbGRgXANE02btzoPuOMM5pOPvnkSN++ffMbGhrUwsJCM73/lClTIk8//XT+tGnTmj799FPvunXrur52R4pQKGQ2NjZ+zrPS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au+4447K9m3PmDFjwOmnn95w+eWX14HtGYlGo0sBfv7zn/d48cUX84UQnHjiiQ0PPvhgOcBf//rXgquuumqAaZri0Ucf3fz1r3892r5egNdeey135syZNYqicOKJJzY3NjZqW7ZscfXv3z8jMLZs2eKKRCLKiSee2Awwc+bMmldffTWvvcBZs2aN+/zzzx8UjUaVqVOn1qfL582bF7rtttt6hcNhMy2m0n34xje+MSQajapjxowZ9cMf/rCitLTUf8kllwzyer3WokWLVgeDwb1ebsGxpCli9dV8tryCniGLwPiTO90vm5ABsHqP4+JnV7C9LkafPB8PnjcWV2IRzbVVSGFPoCqButxxyC0K+fG1uCecgObS7FSc5mpQLXDEjYODg0P3MU3bxZ1efij9b7p8P7Nq1Sr/smXLVvl8PmvIkCFjbrrppspAICB//etf93z33XfX5eTkWD//+c973HnnnSX33HNPxY9+9KNd99xzTwXAmWeeOfC5554LX3jhhQ0AyWRSlJaWru7uMbzwwgs5//znP3MXL168JhQKWZWVlZkchFgspqxZs2bVm2++GbzqqqsGrl+/fmW2OioqKlwDBgzIjKDp2bNnMpvA6dmzZ+Zz//79kxUVFR1cTddee22/K664ouq6666rueuuu4ran6+lS5euHDFiRJvROu+8884Gv98/Yc2aNasAHnvsseJ77rln23HHHZdVkHUHx5oCLrcL36BJSNcnHDvru1TW1tvDoNvhD+d3FDLnj8OrWHz7GbsMYHtdjGufL+VvF01ALVuWmsVWQdE0FFUlsn0M3vL/4XJ9t2XGWpcXajZC705Dlg4ODg5fWfbkaVl31NHjzfp6DZdLousi/a+am2sMfPGFfUugzMKUKVMaCwoKTIAhQ4bEN27c6KmtrVU3btzonTx58ggAXdfFxIkTIwBvvvlm6N577+0Rj8eV+vp6bdSoUTGgAeCCCy7o6O7vAm+//XbORRddVB0KhSyAkpKSzDouF154YS3AqaeeGolEIkp1dbXaflHO/c2SJUuCb7755kaAWbNm1dx555190tvGjRvX3F7cHGgcgdNQTu3G1eDL49Rrrqe3sRbZ6zAqt3f8W/L3GZERN5ASMs+t4InLj8iUpdleFyMm3SheP8FgCBHugyU0FGmQGHgioUV/wKzZjFqYylnzhOw5cWJ14Ms74N12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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def plot_average_reward_per_n_rounds(rewards):\n", + " rewards_pd = pd.DataFrame(rewards)\n", + " rewards_pd = pd.melt(rewards_pd, ['n_rounds'])\n", + " rewards_pd[\"value\"] = rewards_pd[\"value\"] / rewards_pd[\"n_rounds\"]\n", + "\n", + " plot = sns.lineplot(data=rewards_pd, x=\"n_rounds\", y=\"value\", style=\"variable\", hue=\"variable\", markers=True, dashes=False)\n", + " plot.legend(bbox_to_anchor=(1.1, 1.05))\n", + "\n", + "# 1000 runs, only with drift, all models.\n", + "# 25,000 interval, 50,000 steps. transition period of 5000. Non-seasonal.\n", + "# base-coef is 0.3\n", + "plot_average_reward_per_n_rounds(train_rewards)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "#### One-time drift with short linear transition period.\n", + "In this section we demonstrate a drift period with a short linear transition period half-way through its horizon." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "experiment_round_size = np.arange(start=1000, stop=50001, step=1000).tolist()\n", + "drift_interval = 25000\n", + "transition_period = 5000\n", + "seasonal = True\n", + "n_runs_per_round_size = 1000\n", + "max_scale = 1000.0\n", + "min_scale = 900.0\n", + "n_actions = 3\n", + "dim_context = 5\n", + "reward_func = partial(logistic_sparse_reward_function, z_score=False)\n", + "\n", + "drift_bandit_policies = [\n", + " (EpsilonGreedy, {\"n_actions\": n_actions, \"epsilon\": 0.1, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinTS, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + " (LinUCB, {\"dim\": dim_context, \"n_actions\": n_actions, \"random_state\": 12345}),\n", + "]\n", + "\n", + "no_drift_bandit_policies = [\n", + " (Random, {\"n_actions\": n_actions, \"epsilon\": 1.0, \"random_state\": 12345}),\n", + " (BernoulliTS, {\"n_actions\": n_actions, \"random_state\": 12345}),\n", + "]\n", + "\n", + "dummy_policies = [policy_class(**args) for policy_class, args in drift_bandit_policies]\n", + "train_rewards = {policy.policy_name + f\" drift\": [] for policy in dummy_policies}\n", + "dummy_policies = [policy_class(**args) for policy_class, args in no_drift_bandit_policies]\n", + "train_rewards.update({policy.policy_name + f\" no drift\": [] for policy in dummy_policies})\n", + "eval_rewards = {**copy.deepcopy(train_rewards), **{IPWLearner.__name__: []}}\n", + "train_rewards[\"n_rounds\"] = []\n", + "eval_rewards[\"n_rounds\"] = []" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "%%time\n", + "\n", + "for experiment in range(n_runs_per_round_size):\n", + " drifter = CoefficientDrifter(\n", + " drift_interval=drift_interval,\n", + " transition_period=transition_period,\n", + " transition_type=\"linear\",\n", + " seasonal=seasonal,\n", + " base_coefficient_weight=.3,\n", + " random_state=1234\n", + " )\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\",\n", + " reward_function=reward_func,\n", + " delay_function=None,\n", + " coef_function=drifter.get_coefficients,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.obtain_batch_bandit_feedback(n_rounds=sample_n_rounds)\n", + "\n", + " for policy_class, args in drift_bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" drift\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[\"n_rounds\"].append(n_rounds)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "%%time\n", + "for experiment in range(n_runs_per_round_size):\n", + " drifter = CoefficientDrifter(\n", + " drift_interval=drift_interval,\n", + " transition_period=transition_period,\n", + " transition_type=\"linear\",\n", + " seasonal=seasonal,\n", + " base_coefficient_weight=.3,\n", + " random_state=1234\n", + " )\n", + "\n", + " env = BanditEnvironmentSimulator(\n", + " n_actions=n_actions,\n", + " dim_context=dim_context,\n", + " reward_type=\"binary\",\n", + " reward_function=reward_func,\n", + " delay_function=None,\n", + " coef_function=drifter.get_coefficients,\n", + " random_state=12345 + experiment,\n", + " )\n", + "\n", + " sample_n_rounds = max(experiment_round_size)\n", + " training_bandit_batch = env.obtain_batch_bandit_feedback(n_rounds=sample_n_rounds)\n", + "\n", + " for policy_class, args in drift_bandit_policies:\n", + " policy = policy_class(**args)\n", + " training_simulator = BanditPolicySimulator(policy=policy)\n", + " training_simulator.steps(batch_bandit_rounds=training_bandit_batch)\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[policy.policy_name + \" drift\"].append(np.sum(training_simulator.obtained_rewards[:n_rounds]))\n", + "\n", + "\n", + " for n_rounds in experiment_round_size:\n", + " train_rewards[\"n_rounds\"].append(n_rounds)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 71, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAENCAYAAAACKh91AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAC2UUlEQVR4nOydd5wcZf3H38/MbN+9vV7SCUlID5AYBCJF/EEQCIRIDSVRuqCCKCBSDCqi/PgJSkealECoEpooGBAUSCHJpbdLuVxve3fbpjy/P2b36l5yl0YC8+Z17N4zfW6zz2e+VUgpcXBwcHBwcHD4KqF82Sfg4ODg4ODg4LCncQSOg4ODg4ODw1cOR+A4ODg4ODg4fOVwBI6Dg4ODg4PDVw5H4Dg4ODg4ODh85XAEjoODg4ODg8NXDu3LPgEHBwcHB4dMLFq0qFDTtMeAsTgP5A6dsYBSwzAumThxYnWmFRyB4+Dg4OCwX6Jp2mPFxcWjCgoKGhRFcYq2ObRhWZaoqakZXVlZ+RgwLdM6jiJ2cHBwcNhfGVtQUBBxxI1DVxRFkQUFBU3Y1r3M6+zD83FwcHBwcOgLiiNuHHoi9dnoUcc4AsfBwcHBwcHhK8dXJgYnPz9fDhky5Ms+DQcHB4cDikWLFtVKKQu+7PPYEzzz38259/1zXf+a5oS7IORJ/uiE4eUXfHNw/Zd9XrtD//79xy1cuHBVSUmJ0Zft/vSnP+XdfffdJQDXX399xTXXXFPXdZ3HH38857e//W2/jRs3ev/1r3+tOuaYY6I72++MGTOGnHrqqU2zZ89u6LrsJz/5Sb/jjjuu+Ywzzmh+5513gldfffVgTdPkn//85811dXXaOeec09SXa9hdvjICZ8iQISxcuPDLPg0HBweHAwohxOYv+xz2BM/8d3PuHfNXDk4YlgJQ3Zxw3zF/5WCAL0vk6LqOy+Xa58etqqpS77rrrn6LFi1aqSgKhx122Ohzzz23saCgwOy43qGHHhp7+eWX11966aVDdveYhmHwxz/+cXv696effjr3uuuuq7jqqqvq77vvvryFCxcGHIHj4ODg4ODQhZ+9tHTg2spmf0/LV1ZEAropRcexhGEpv3pjxZB5C7dmtFCNKA5F//C9CVt3dNwHHngg98EHHyzSdV0cfvjhrU8//fRmTdP4v//7v/x77723OBQKmWPGjIm63W759NNPb5kxY8YQj8djlZaW+idPntxy7bXX1lxxxRWD6uvrNa/Xaz322GObDzvssPj27du12bNnDy4vL3cD3HPPPVtOPPHE1srKSnXGjBlDq6qq3BMnTmyR0g5B+slPftIvNzfXuPXWW6sBrrnmmv6FhYX6Lbfc0i1F+rXXXgsfc8wxkaKiIhPgmGOOibzyyivhyy+/vJPQO/zww+M7unYAy7KYNWvWoA8//DCrX79+SZfLZaWX9e/ff9y0adPqFyxYkPWTn/yk8t133w2feuqpTQ0NDeqbb76Zu2DBgvDbb78dXrhwYTAejysjR44M/vSnP6249NJLu1l/9gZODI6Dg4ODwwFPV3Gzs/HesHjxYu9LL72Uu3DhwtWrV69eqSiKfOihh/LKyspcd999d8mnn366auHChavXrVvn7bhdRUWFe/Hixasfe+yxbZdccsngBx54YMuKFStW/eEPf9h25ZVXDgK4/PLLB1533XVVpaWlq1599dUNV1xxxRCAG2+8sd+RRx7Zsn79+hXTp09vrKiocANceeWVtXPnzs0DME2T1157LefSSy/t5nYCKC8vdw0YMCCZ/r1///7J8vLyXTIl/fWvf81ev369Z/369aXPPffcpsWLFwc7Ls/LyzNWrly56rLLLmsTLdddd13td77zncZf//rX2954441NN9100/bTTjutYfXq1Sv3lbgBx4Lj4ODg4HAAsDNLy+Tf/GNcdXPC3XW8MORJvn71lDW7csx33nknVFpa6p8wYcIogHg8rhQWFhofffRR4IgjjmhOW0imT5/esHbt2jaRc+aZZzZomkZTU5OyZMmS4FlnnXVwelkymRQAH3/8cda6det86fGWlha1qalJ+e9//xt65ZVX1gOce+65TZdffrkJcMghhySzs7ONjz/+2FdRUeEaM2ZMtLi4uJPLaW+wYMGC0Nlnn12vaRpDhgzRjzzyyOaOyy+66KJ9Jlj6iiNwHBwcHBwOeH50wvDyjjE4AB5NsX50wvDyXd2nlFKcddZZdffff3+nffz1r3/N3tF2wWDQAtvSEgqFjNWrV6/MsG8WL168yu/39zoNfvbs2bWPPfZYfnV1tWv27NkZrTcA/fv31xcsWBBK/15eXu4+9thjm3taf3cIhULWztf6cnBcVA4ODg4OBzwXfHNw/S2njt5cGPIkBbbl5pZTR2/enQDjqVOnRubP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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def plot_average_reward_per_n_rounds(rewards):\n", + " rewards_pd = pd.DataFrame(rewards)\n", + " rewards_pd = pd.melt(rewards_pd, ['n_rounds'])\n", + " rewards_pd[\"value\"] = rewards_pd[\"value\"] / rewards_pd[\"n_rounds\"]\n", + "\n", + " plot = sns.lineplot(data=rewards_pd, x=\"n_rounds\", y=\"value\", style=\"variable\", hue=\"variable\", markers=True, dashes=False)\n", + " plot.legend(bbox_to_anchor=(1.1, 1.05))\n", + "\n", + "# 1000 runs, all models with drift, bts and random without drift.\n", + "# 25,000 interval, 50,000 steps. transition period of 5000. Non-seasonal.\n", + "# base-coef is 0.3\n", + "# All models are heavily hit by the drift event and do not recover within the same time period as the model was able to learn before.\n", + "# However, all models still perform signicantly better than random due to the base coef being the same.\n", + "plot_average_reward_per_n_rounds(train_rewards)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/examples/quickstart/online.ipynb b/examples/quickstart/replay.ipynb similarity index 99% rename from examples/quickstart/online.ipynb rename to examples/quickstart/replay.ipynb index 057bdf53..0a600832 100644 --- a/examples/quickstart/online.ipynb +++ b/examples/quickstart/replay.ipynb @@ -49,7 +49,6 @@ ")\n", "from obp.simulator import (\n", " calc_ground_truth_policy_value,\n", - " run_bandit_simulation\n", ")" ] }, @@ -253,7 +252,7 @@ " epsilon=0.1,\n", " random_state=12345\n", ")\n", - "action_dist_epsilon_greedy = run_bandit_simulation(\n", + "action_dist_epsilon_greedy = run_bandit_replay(\n", " bandit_feedback=bandit_feedback,\n", " policy=epsilon_greedy\n", ")\n", @@ -263,7 +262,7 @@ " n_actions=dataset.n_actions,\n", " random_state=12345\n", ")\n", - "action_dist_lin_ts = run_bandit_simulation(\n", + "action_dist_lin_ts = run_bandit_replay(\n", " bandit_feedback=bandit_feedback,\n", " policy=lin_ts\n", ")\n", @@ -273,7 +272,7 @@ " n_actions=dataset.n_actions,\n", " random_state=12345\n", ")\n", - "action_dist_lin_ucb = run_bandit_simulation(\n", + "action_dist_lin_ucb = run_bandit_replay(\n", " bandit_feedback=bandit_feedback,\n", " policy=lin_ucb\n", ")" @@ -741,4 +740,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/online/README.md b/examples/replay/README.md similarity index 98% rename from examples/online/README.md rename to examples/replay/README.md index 2fab3a71..fe249013 100644 --- a/examples/online/README.md +++ b/examples/replay/README.md @@ -1,4 +1,4 @@ -# Example with Online Bandit Algorithms +# Replay Example with Online Bandit Algorithms ## Description diff --git a/examples/online/evaluate_off_policy_estimators.py b/examples/replay/evaluate_off_policy_estimators.py similarity index 97% rename from examples/online/evaluate_off_policy_estimators.py rename to examples/replay/evaluate_off_policy_estimators.py index 80c72005..540824a9 100644 --- a/examples/online/evaluate_off_policy_estimators.py +++ b/examples/replay/evaluate_off_policy_estimators.py @@ -19,14 +19,13 @@ from obp.policy import LogisticTS from obp.policy import LogisticUCB from obp.simulator import calc_ground_truth_policy_value -from obp.simulator import run_bandit_simulation - +from obp.utils import run_bandit_replay ope_estimators = [ReplayMethod()] if __name__ == "__main__": parser = argparse.ArgumentParser( - description="evaluate off-policy estimators with online bandit algorithms and synthetic bandit data." + description="evaluate off-policy estimators with replay bandit algorithms and synthetic bandit data." ) parser.add_argument( "--n_runs", type=int, default=1, help="number of simulations in the experiment." @@ -127,7 +126,7 @@ def process(i: int): # sample new data of synthetic logged bandit feedback bandit_feedback = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds) # simulate the evaluation policy - action_dist = run_bandit_simulation( + action_dist = run_bandit_replay( bandit_feedback=bandit_feedback, policy=evaluation_policy ) # estimate the ground-truth policy values of the evaluation policy diff --git a/obp/dataset/synthetic.py b/obp/dataset/synthetic.py index 939eebbe..f1f02327 100644 --- a/obp/dataset/synthetic.py +++ b/obp/dataset/synthetic.py @@ -3,7 +3,7 @@ """Class for Generating Synthetic Logged Bandit Data.""" from dataclasses import dataclass -from typing import Callable +from typing import Callable, Tuple from typing import Optional import numpy as np @@ -20,6 +20,25 @@ from .base import BaseBanditDataset from .reward_type import RewardType +coef_func_signature = Callable[ + [np.ndarray, np.ndarray, np.random.RandomState], + Tuple[np.ndarray, np.ndarray, np.ndarray], +] + + +def sample_random_uniform_coefficients( + effective_dim_action_context: int, + effective_dim_context: int, + random_: np.random.RandomState, + **kwargs, +) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + context_coef_ = random_.uniform(-1, 1, size=effective_dim_context) + action_coef_ = random_.uniform(-1, 1, size=effective_dim_action_context) + context_action_coef_ = random_.uniform( + -1, 1, size=(effective_dim_context, effective_dim_action_context) + ) + return context_coef_, action_coef_, context_action_coef_ + @dataclass class SyntheticBanditDataset(BaseBanditDataset): @@ -398,6 +417,8 @@ def calc_ground_truth_policy_value( def logistic_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Logistic mean reward function for binary rewards. @@ -410,6 +431,13 @@ def logistic_reward_function( action_context: array-like, shape (n_actions, dim_action_context) Vector representation of actions. + z_score: boolean, default=True + Controls whether a z-score will be calculated over the computed logits. + + coef_function: Callable, default=sample_random_uniform_coefficients + Function for generating the coefficients used for the context, action and context/action interactions. + By default, the coefficients are randomly uniformly drawn. + random_state: int, default=None Controls the random seed in sampling dataset. @@ -425,6 +453,8 @@ def logistic_reward_function( action_context=action_context, degree=1, random_state=random_state, + z_score=z_score, + coef_function=coef_function, ) return sigmoid(logits) @@ -433,6 +463,8 @@ def logistic_reward_function( def logistic_polynomial_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Logistic mean reward function for binary rewards with polynomial feature transformations. @@ -450,6 +482,9 @@ def logistic_polynomial_reward_function( action_context: array-like, shape (n_actions, dim_action_context) Vector representation of actions. + z_score: boolean, default=True + Controls whether a z-score will be calculated over the computed logits. + random_state: int, default=None Controls the random seed in sampling dataset. @@ -464,6 +499,8 @@ def logistic_polynomial_reward_function( context=context, action_context=action_context, degree=3, + coef_function=coef_function, + z_score=z_score, random_state=random_state, ) @@ -473,6 +510,8 @@ def logistic_polynomial_reward_function( def logistic_sparse_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Logistic mean reward function for binary rewards with small effective feature dimension. @@ -491,6 +530,9 @@ def logistic_sparse_reward_function( action_context: array-like, shape (n_actions, dim_action_context) Vector representation of actions. + z_score: boolean, default=True + Controls whether a z-score will be calculated over the computed logits. + random_state: int, default=None Controls the random seed in sampling dataset. @@ -506,6 +548,8 @@ def logistic_sparse_reward_function( action_context=action_context, degree=4, effective_dim_ratio=0.3, + coef_function=coef_function, + z_score=z_score, random_state=random_state, ) @@ -515,6 +559,8 @@ def logistic_sparse_reward_function( def linear_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Linear mean reward function for continuous rewards. @@ -527,6 +573,9 @@ def linear_reward_function( action_context: array-like, shape (n_actions, dim_action_context) Vector representation of actions. + z_score: boolean, default=True + Controls whether a z-score will be calculated over the computed logits. + random_state: int, default=None Controls the random seed in sampling dataset. @@ -541,6 +590,8 @@ def linear_reward_function( context=context, action_context=action_context, degree=1, + coef_function=coef_function, + z_score=z_score, random_state=random_state, ) @@ -548,6 +599,8 @@ def linear_reward_function( def polynomial_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Polynomial mean reward function for continuous rewards. @@ -579,6 +632,8 @@ def polynomial_reward_function( context=context, action_context=action_context, degree=3, + coef_function=coef_function, + z_score=z_score, random_state=random_state, ) @@ -586,6 +641,8 @@ def polynomial_reward_function( def sparse_reward_function( context: np.ndarray, action_context: np.ndarray, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Sparse mean reward function for continuous rewards. @@ -619,6 +676,8 @@ def sparse_reward_function( action_context=action_context, degree=4, effective_dim_ratio=0.3, + coef_function=coef_function, + z_score=z_score, random_state=random_state, ) @@ -628,6 +687,8 @@ def _base_reward_function( action_context: np.ndarray, degree: int = 3, effective_dim_ratio: float = 1.0, + coef_function: coef_func_signature = sample_random_uniform_coefficients, + z_score: bool = True, random_state: Optional[int] = None, ) -> np.ndarray: """Base function to define mean reward functions. @@ -678,6 +739,10 @@ def _base_reward_function( only `dim_context * effective_dim_ratio` fraction of randomly selected dimensions will be used as relevant dimensions to generate expected rewards. + z_score: boolean, default=True + Boolean to enable/disable the calculation of a z-score over the resulting rewards. In case the environment + is stationary, this can be turned on. But when the + random_state: int, default=None Controls the random seed in sampling dataset. @@ -724,21 +789,45 @@ def _base_reward_function( effective_context_ = context_ effective_action_context_ = action_context_ - context_coef_ = random_.uniform(-1, 1, size=effective_dim_context) - action_coef_ = random_.uniform(-1, 1, size=effective_dim_action_context) - context_action_coef_ = random_.uniform( - -1, 1, size=(effective_dim_context, effective_dim_action_context) + context_coef_, action_coef_, context_action_coef_ = coef_function( + n_rounds=datasize, + effective_dim_action_context=effective_dim_action_context, + effective_dim_context=effective_dim_context, + random_=random_, ) - context_values = np.tile(effective_context_ @ context_coef_, (n_actions, 1)).T - action_values = np.tile(action_coef_ @ effective_action_context_.T, (datasize, 1)) - context_action_values = ( - effective_context_ @ context_action_coef_ @ effective_action_context_.T - ) + if context_coef_.shape[0] != datasize: + context_values = np.tile(effective_context_ @ context_coef_, (n_actions, 1)).T + else: + context_values = np.tile( + np.sum(effective_context_ * context_coef_, axis=1), (n_actions, 1) + ).T + + action_values = action_coef_ @ effective_action_context_.T + if action_coef_.shape[0] != datasize: + action_values = np.tile(action_values, (datasize, 1)) + + if action_coef_.shape[0] != datasize: + context_action_values = ( + effective_context_ @ context_action_coef_ @ effective_action_context_.T + ) + else: + effective_context_ = np.expand_dims(effective_context_, axis=1) + context_action_coef_interactions = np.squeeze( + np.matmul(effective_context_, context_action_coef_), axis=1 + ) + + context_action_values = ( + context_action_coef_interactions @ effective_action_context_.T + ) + expected_rewards = context_values + action_values + context_action_values - expected_rewards = ( - degree * (expected_rewards - expected_rewards.mean()) / expected_rewards.std() - ) + if z_score: + expected_rewards = ( + expected_rewards - expected_rewards.mean() / expected_rewards.std() + ) + + expected_rewards = degree * expected_rewards return expected_rewards diff --git a/obp/policy/offline.py b/obp/policy/offline.py index 21d56ccc..21041acf 100644 --- a/obp/policy/offline.py +++ b/obp/policy/offline.py @@ -72,6 +72,7 @@ def __post_init__(self) -> None: self.base_classifier_list = [ clone(self.base_classifier) for _ in np.arange(self.len_list) ] + self.policy_name = "IPWLearner" @staticmethod def _create_train_data_for_opl( diff --git a/obp/simulator/__init__.py b/obp/simulator/__init__.py index 362971fb..447ff5f6 100644 --- a/obp/simulator/__init__.py +++ b/obp/simulator/__init__.py @@ -1,8 +1,6 @@ from obp.simulator.simulator import calc_ground_truth_policy_value -from obp.simulator.simulator import run_bandit_simulation __all__ = [ - "run_bandit_simulation", "calc_ground_truth_policy_value", ] diff --git a/obp/simulator/coefficient_drifter.py b/obp/simulator/coefficient_drifter.py new file mode 100644 index 00000000..75cba871 --- /dev/null +++ b/obp/simulator/coefficient_drifter.py @@ -0,0 +1,240 @@ +from collections import deque +from dataclasses import dataclass +from typing import Optional, Tuple, List + +import numpy as np +from sklearn.utils import check_random_state + +from obp.dataset.synthetic import sample_random_uniform_coefficients + + +@dataclass +class CoefficientDrifter: + """Class for synthesizing bandit data. + + Note + ----- + By calling the `obtain_batch_bandit_feedback` method several times, + we can resample logged bandit data from the same data generating distribution. + This can be used to estimate confidence intervals of the performances of OPE estimators. + + If None is given as `behavior_policy_function`, the behavior policy will be generated from the true expected reward function. See the description of the `beta` argument, which controls the behavior policy. + + Parameters + ----------- + drift_interval: int + Controls interval of steps at which the coefficients are updated. + + transition_period: int, default=0 + Controls the period in which the coefficients are transitioning between new and old. The transition period + always happened before the drift interval. Meaning, that if the drift interval is 5000 and the transition period + 500, the transition will be between step 4500 and step 5000. + + transition_type: str, default="linear" + The type of transition (linear or weighted_sampled) to be applied while transitioning between two sets of + coefficients. + + seasonal: bool, default=False + When True, the coefficients will shift between two sets of coefficients representing a seasonal shift. + + base_coefficient_weight: float, default=0.0 + A floating point between 0.0 and 1.0 that represents a base coefficient weight that is consistent regardless of + any drift. This can be used to ensure the severity of the drift over time. + + effective_dim_action_context: (optional) int, default=None + Specifies the dimensions of the action context coefficients. + + effective_dim_context: (optional) int, default=None + Specifies the dimensions of the context coefficients. + + random_state: int, default=12345 + Controls the random seed + + References + ------------ + Emanuele Cavenaghi, Gabriele Sottocornola, Fabio Stella, and Markus Zanker. + "Non stationary multi-armed bandit: Empirical evaluation of a new concept drift-aware algorithm.", 2021. + + """ + + drift_interval: int + transition_period: int = 0 + transition_type: str = "linear" # linear or weighted_sampled + seasonal: bool = False + base_coefficient_weight: float = 0.0 + effective_dim_action_context: Optional[int] = None + effective_dim_context: Optional[int] = None + random_state: int = 12345 + + played_rounds: int = 0 + context_coefs: Optional[deque] = None + action_coefs: Optional[deque] = None + context_action_coefs: Optional[deque] = None + base_context_coef: Optional[np.ndarray] = None + base_action_coef: Optional[np.ndarray] = None + base_context_action_coef: Optional[np.ndarray] = None + + def __post_init__(self) -> None: + if self.random_state is None: + raise ValueError("`random_state` must be given") + self.random_ = check_random_state(self.random_state) + self.available_rounds = self.drift_interval + self.context_coefs = deque(maxlen=2) + self.action_coefs = deque(maxlen=2) + self.context_action_coefs = deque(maxlen=2) + if self.effective_dim_action_context and self.effective_dim_context: + self.update_coef() + + def update_coef(self) -> None: + if self.base_context_coef is None: + ( + self.base_context_coef, + self.base_action_coef, + self.base_context_action_coef, + ) = sample_random_uniform_coefficients( + self.effective_dim_action_context, + self.effective_dim_context, + self.random_, + ) + + if len(self.context_coefs) == 0: + self.context_coefs.append(self.base_context_coef) + self.action_coefs.append(self.base_action_coef) + self.context_action_coefs.append(self.base_context_action_coef) + + if self.seasonal and len(self.context_coefs) == 2: + self.context_coefs.rotate() + self.action_coefs.rotate() + self.context_action_coefs.rotate() + else: + ( + tmp_context_coef, + tmp_action_coef, + tmp_action_context_coef, + ) = sample_random_uniform_coefficients( + self.effective_dim_action_context, + self.effective_dim_context, + self.random_, + ) + self.context_coefs.append(tmp_context_coef) + self.action_coefs.append(tmp_action_coef) + self.context_action_coefs.append(tmp_action_context_coef) + + def get_coefficients( + self, + n_rounds: int, + effective_dim_context: int = None, + effective_dim_action_context: int = None, + **kwargs, + ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]: + if effective_dim_action_context and effective_dim_context: + eff_dim_not_set = ( + not self.effective_dim_action_context and not self.effective_dim_context + ) + eff_dim_equal = ( + self.effective_dim_action_context == effective_dim_action_context + and self.effective_dim_context == effective_dim_context + ) + if eff_dim_not_set or eff_dim_equal: + self.effective_dim_action_context = effective_dim_action_context + self.effective_dim_context = effective_dim_context + else: + raise RuntimeError("Trying to change the effective dimensions") + + if len(self.context_coefs) == 0: + self.update_coef() + + required_rounds = n_rounds + context_coefs = [] + action_coefs = [] + context_action_coefs = [] + + while required_rounds > 0: + if required_rounds >= self.available_rounds: + self.append_current_coefs( + context_coefs, + action_coefs, + context_action_coefs, + rounds=self.available_rounds, + ) + required_rounds -= self.available_rounds + self.update_coef() + self.available_rounds = self.drift_interval + else: + self.append_current_coefs( + context_coefs, + action_coefs, + context_action_coefs, + rounds=required_rounds, + ) + self.available_rounds -= required_rounds + required_rounds = 0 + + return ( + np.vstack(context_coefs), + np.vstack(action_coefs), + np.vstack(context_action_coefs), + ) + + def append_current_coefs( + self, + context_coefs: List[np.ndarray], + action_coefs: List[np.ndarray], + context_action_coefs: List[np.ndarray], + rounds: int, + ) -> None: + shift_start = self.available_rounds - self.transition_period + + transition_steps = np.arange(start=1, stop=self.transition_period + 1) + if shift_start >= 0: + transition_steps = np.pad(transition_steps, pad_width=[(shift_start, 0)]) + if shift_start < 0: + transition_steps = transition_steps[-shift_start:] + + shift_remainder = self.available_rounds - rounds + if shift_remainder > 0: + transition_steps = transition_steps[shift_remainder:] + + weights = transition_steps / (self.transition_period + 1) + + if self.transition_type == "weighted_sampled": + weights = self.random_.binomial(n=1, p=weights) + + context_coefs.append( + self.compute_weighted_coefs( + self.context_coefs, self.base_context_coef, rounds, weights + ) + ) + action_coefs.append( + self.compute_weighted_coefs( + self.action_coefs, self.base_action_coef, rounds, weights + ) + ) + context_action_coefs.append( + self.compute_weighted_coefs( + self.context_action_coefs, + self.base_context_action_coef, + rounds, + weights, + ) + ) + + def compute_weighted_coefs(self, coefs, base_coef, rounds, weights): + base_coef = self.base_coefficient_weight * base_coef + + A = np.tile(coefs[0], [rounds] + [1 for _ in coefs[0].shape]) + B = np.tile(coefs[1], [rounds] + [1 for _ in coefs[1].shape]) + coefs = ( + base_coef + + A + * np.expand_dims( + (1 - self.base_coefficient_weight) * (1 - weights), + list(range(1, len(A.shape))), + ) + + B + * np.expand_dims( + (1 - self.base_coefficient_weight) * weights, + list(range(1, len(B.shape))), + ) + ) + return coefs diff --git a/obp/simulator/delay_sampler.py b/obp/simulator/delay_sampler.py new file mode 100644 index 00000000..49ebc3d7 --- /dev/null +++ b/obp/simulator/delay_sampler.py @@ -0,0 +1,96 @@ +from dataclasses import dataclass + +import numpy as np +from sklearn.utils import check_random_state + + +@dataclass +class ExponentialDelaySampler: + """Class for sampling delays from different exponential functions. + + Parameters + ----------- + max_scale: float, default=100.0 + The maximum scale parameter for the exponential delay distribution. When there is no weighted exponential + function the max_scale becomes the default scale. + + min_scale: float, default=10.0 + The minimum scale parameter for the exponential delay distribution. Only used when sampling from a weighted + exponential function. + + random_state: int, default=12345 + Controls the random seed in sampling synthetic bandit data. + """ + + max_scale: float = 100.0 + min_scale: float = 10.0 + random_state: int = None + + def __post_init__(self) -> None: + if self.random_state is None: + raise ValueError("`random_state` must be given") + self.random_ = check_random_state(self.random_state) + + def exponential_delay_function( + self, n_rounds: int, n_actions: int, **kwargs + ) -> np.ndarray: + """Exponential delay function used for sampling a number of delay rounds before rewards can be observed. + + Note + ------ + This implementation of the exponential delay function assumes that there is no causal relationship between the + context, action or reward and observed delay. Exponential delay function have been observed by Ktena, S.I. et al. + + Parameters + ----------- + n_rounds: int + Number of rounds to sample delays for. + + n_actions: int + Number of actions to sample delays for. If the exponential function is not parameterised the delays are + repeated for each actions. + + Returns + --------- + delay_rounds: array-like, shape (n_rounds, ) + Rounded up round delays representing the amount of rounds before the policy can observe the rewards. + + References + ------------ + Ktena, S.I., Tejani, A., Theis, L., Myana, P.K., Dilipkumar, D., Huszár, F., Yoo, S. and Shi, W. + "Addressing delayed feedback for continuous training with neural networks in CTR prediction." 2019. + + """ + delays_per_round = np.ceil( + self.random_.exponential(scale=self.max_scale, size=n_rounds) + ) + + return np.tile(delays_per_round, (n_actions, 1)).T + + def exponential_delay_function_expected_reward_weighted( + self, expected_rewards: np.ndarray, **kwargs + ) -> np.ndarray: + """Exponential delay function used for sampling a number of delay rounds before rewards can be observed. + Each delay is conditioned on the expected reward by multiplying (1 - expected_reward) * scale. This creates + the assumption that the more likely a reward is going be observed, the more likely it will be that the reward + comes sooner. Eg. recommending an attractive item will likely result in a faster purchase. + + Parameters + ----------- + expected_rewards : array-like, shape (n_rounds, n_actions) + The expected reward between 0 and 1 for each arm for each round. This used to weight the scale of the + exponential function. + + Returns + --------- + delay_rounds: array-like, shape (n_rounds, ) + Rounded up round delays representing the amount of rounds before the policy can observe the rewards. + """ + scale = self.min_scale + ( + (1 - expected_rewards) * (self.max_scale - self.min_scale) + ) + delays_per_round = np.ceil( + self.random_.exponential(scale=scale, size=expected_rewards.shape) + ) + + return delays_per_round diff --git a/obp/simulator/replay.py b/obp/simulator/replay.py new file mode 100644 index 00000000..dd8fc53f --- /dev/null +++ b/obp/simulator/replay.py @@ -0,0 +1,82 @@ +import numpy as np +import tqdm as tqdm + +from obp.policy.policy_type import PolicyType +from obp.simulator.simulator import BanditPolicy +from obp.types import BanditFeedback +from obp.utils import check_bandit_feedback_inputs, convert_to_action_dist + + +def run_bandit_replay( + bandit_feedback: BanditFeedback, policy: BanditPolicy +) -> np.ndarray: + """Run an online bandit algorithm on given logged bandit feedback data using the replay method. + + Parameters + ---------- + bandit_feedback: BanditFeedback + Logged bandit data used in offline bandit simulation. + policy: BanditPolicy + Online bandit policy to be evaluated in offline bandit simulation (i.e., evaluation policy). + Returns + -------- + action_dist: array-like, shape (n_rounds, n_actions, len_list) + Action choice probabilities (can be deterministic). + + References + ------------ + Lihong Li, Wei Chu, John Langford, and Xuanhui Wang. + "Unbiased Offline Evaluation of Contextual-bandit-based News Article Recommendation Algorithms.", 2011. + """ + for key_ in ["action", "position", "reward", "pscore", "context"]: + if key_ not in bandit_feedback: + raise RuntimeError(f"Missing key of {key_} in 'bandit_feedback'.") + check_bandit_feedback_inputs( + context=bandit_feedback["context"], + action=bandit_feedback["action"], + reward=bandit_feedback["reward"], + position=bandit_feedback["position"], + pscore=bandit_feedback["pscore"], + ) + + policy_ = policy + selected_actions_list = list() + dim_context = bandit_feedback["context"].shape[1] + if bandit_feedback["position"] is None: + bandit_feedback["position"] = np.zeros_like( + bandit_feedback["action"], dtype=int + ) + for action_, reward_, position_, context_ in tqdm( + zip( + bandit_feedback["action"], + bandit_feedback["reward"], + bandit_feedback["position"], + bandit_feedback["context"], + ), + total=bandit_feedback["n_rounds"], + ): + + # select a list of actions + if policy_.policy_type == PolicyType.CONTEXT_FREE: + selected_actions = policy_.select_action() + elif policy_.policy_type == PolicyType.CONTEXTUAL: + selected_actions = policy_.select_action(context_.reshape(1, dim_context)) + action_match_ = action_ == selected_actions[position_] + # update parameters of a bandit policy + # only when selected actions&positions are equal to logged actions&positions + if action_match_: + if policy_.policy_type == PolicyType.CONTEXT_FREE: + policy_.update_params(action=action_, reward=reward_) + elif policy_.policy_type == PolicyType.CONTEXTUAL: + policy_.update_params( + action=action_, + reward=reward_, + context=context_.reshape(1, dim_context), + ) + selected_actions_list.append(selected_actions) + + action_dist = convert_to_action_dist( + n_actions=bandit_feedback["action"].max() + 1, + selected_actions=np.array(selected_actions_list), + ) + return action_dist diff --git a/obp/simulator/simulator.py b/obp/simulator/simulator.py index 2b2709fe..6f27b4dc 100755 --- a/obp/simulator/simulator.py +++ b/obp/simulator/simulator.py @@ -2,96 +2,432 @@ # Licensed under the Apache 2.0 License. """Bandit Simulator.""" +from collections import defaultdict from copy import deepcopy -from typing import Callable +from dataclasses import dataclass +from typing import Callable, Tuple, Optional, List, Any from typing import Union import numpy as np +from sklearn.utils import check_random_state, check_scalar from tqdm import tqdm +from ..dataset.reward_type import RewardType +from ..dataset.synthetic import sample_random_uniform_coefficients from ..policy import BaseContextFreePolicy from ..policy import BaseContextualPolicy from ..policy.policy_type import PolicyType from ..types import BanditFeedback -from ..utils import check_bandit_feedback_inputs -from ..utils import convert_to_action_dist +from ..utils import check_bandit_feedback_inputs, check_array # bandit policy type BanditPolicy = Union[BaseContextFreePolicy, BaseContextualPolicy] +coef_func_signature = Callable[ + [np.ndarray, np.ndarray, np.random.RandomState], + Tuple[np.ndarray, np.ndarray, np.ndarray], +] -def run_bandit_simulation( - bandit_feedback: BanditFeedback, policy: BanditPolicy -) -> np.ndarray: - """Run an online bandit algorithm on the given logged bandit feedback data. +@dataclass +class BanditRound: + n_actions: int + context: np.ndarray + action_context: np.ndarray + rewards: np.ndarray + expected_rewards: np.ndarray + round_delays: np.ndarray + + +@dataclass +class BanditRounds: + n_rounds: int + n_actions: int + context: np.ndarray + action_context: np.ndarray + rewards: np.ndarray + expected_rewards: np.ndarray + round_delays: np.ndarray + + def _get_bandit_round(self) -> BanditRound: + if self.round_delays is not None: + round_delays = self.round_delays[self.idx] + else: + round_delays = None + + return BanditRound( + n_actions=self.n_actions, + context=self.context[self.idx], + action_context=self.action_context, + rewards=self.rewards[self.idx], + expected_rewards=self.expected_rewards[self.idx], + round_delays=round_delays, + ) + + def __iter__(self) -> "BanditRounds": + self.idx = 0 + return self + + def __next__(self) -> BanditRound: + if self.idx < len(self): + result = self._get_bandit_round() + self.idx += 1 + return result + else: + raise StopIteration + + def __len__(self) -> int: + return self.n_rounds + + +@dataclass +class BanditEnvironmentSimulator: + """Class for simulating an environment that can be used with bandit algorithms. + + Note + ----- + By calling the `obtain_batch_bandit_feedback` method several times, + we can resample logged bandit data from the same data generating distribution. + This can be used to estimate confidence intervals of the performances of OPE estimators. + Parameters - ---------- - bandit_feedback: BanditFeedback - Logged bandit data used in offline bandit simulation. + ----------- + n_actions: int + Number of actions. - policy: BanditPolicy - Online bandit policy to be evaluated in offline bandit simulation (i.e., evaluation policy). + dim_context: int, default=1 + Number of dimensions of context vectors. - Returns - -------- - action_dist: array-like, shape (n_rounds, n_actions, len_list) - Action choice probabilities (can be deterministic). + reward_type: str, default='binary' + Type of reward variable, which must be either 'binary' or 'continuous'. + When 'binary', rewards are sampled from the Bernoulli distribution. + When 'continuous', rewards are sampled from the truncated Normal distribution with `scale=1`. + The mean parameter of the reward distribution is determined by the `reward_function` specified by the next argument. + + reward_function: Callable[[np.ndarray, np.ndarray], np.ndarray]], default=None + Function defining the expected reward for each given action-context pair, + i.e., :math:`q: \\mathcal{X} \\times \\mathcal{A} \\rightarrow \\mathbb{R}`. + If None, context **independent** expected rewards will be + sampled from the uniform distribution automatically. + + delay_function: Callable[[np.ndarray, np.ndarray], np.ndarray]], default=None + Function defining the delay rounds for each given action-context pair, + If None, the `delay_rounds` key will be omitted from the dataset samples. + coef_function: Callable[[np.ndarray, np.ndarray], np.ndarray]], default=sample_random_uniform_coefficients + Function responsible for providing coefficients to the reward function. By default coefficients are sampled + as random uniform. + + reward_std: float, default=1.0 + Standard deviation of the reward distribution. + A larger value leads to a noisier reward distribution. + This argument is valid only when `reward_type="continuous"`. + + action_context: np.ndarray, default=None + Vector representation of (discrete) actions. + If None, one-hot representation will be used. + + random_state: int, default=12345 + Controls the random seed in sampling synthetic bandit data. """ - for key_ in ["action", "position", "reward", "pscore", "context"]: - if key_ not in bandit_feedback: - raise RuntimeError(f"Missing key of {key_} in 'bandit_feedback'.") - check_bandit_feedback_inputs( - context=bandit_feedback["context"], - action=bandit_feedback["action"], - reward=bandit_feedback["reward"], - position=bandit_feedback["position"], - pscore=bandit_feedback["pscore"], - ) - policy_ = policy - selected_actions_list = list() - dim_context = bandit_feedback["context"].shape[1] - if bandit_feedback["position"] is None: - bandit_feedback["position"] = np.zeros_like( - bandit_feedback["action"], dtype=int - ) - for action_, reward_, position_, context_ in tqdm( - zip( - bandit_feedback["action"], - bandit_feedback["reward"], - bandit_feedback["position"], - bandit_feedback["context"], - ), - total=bandit_feedback["n_rounds"], - ): - - # select a list of actions - if policy_.policy_type == PolicyType.CONTEXT_FREE: - selected_actions = policy_.select_action() - elif policy_.policy_type == PolicyType.CONTEXTUAL: - selected_actions = policy_.select_action(context_.reshape(1, dim_context)) - action_match_ = action_ == selected_actions[position_] - # update parameters of a bandit policy - # only when selected actions&positions are equal to logged actions&positions - if action_match_: - if policy_.policy_type == PolicyType.CONTEXT_FREE: - policy_.update_params(action=action_, reward=reward_) - elif policy_.policy_type == PolicyType.CONTEXTUAL: - policy_.update_params( - action=action_, - reward=reward_, - context=context_.reshape(1, dim_context), + n_actions: int + dim_context: int = 1 + reward_type: str = RewardType.BINARY.value + reward_function: Optional[Callable[[np.ndarray, np.ndarray], np.ndarray]] = None + delay_function: Optional[Callable[[int, float], np.ndarray]] = None + coef_function: Optional[ + Callable[[int, float], np.ndarray] + ] = sample_random_uniform_coefficients + reward_std: float = 1.0 + action_context: Optional[np.ndarray] = None + random_state: int = 12345 + + def __post_init__(self) -> None: + """Initialize Class.""" + check_scalar(self.n_actions, "n_actions", int, min_val=2) + check_scalar(self.dim_context, "dim_context", int, min_val=1) + + if self.random_state is None: + raise ValueError("`random_state` must be given") + self.random_ = check_random_state(self.random_state) + + if self.reward_function is None: + self.expected_reward = self.sample_contextfree_expected_reward() + + # one-hot encoding characterizing actions. + if self.action_context is None: + self.action_context = np.eye(self.n_actions, dtype=int) + else: + check_array( + array=self.action_context, name="action_context", expected_dim=2 + ) + if self.action_context.shape[0] != self.n_actions: + raise ValueError( + "Expected `action_context.shape[0] == n_actions`, but found it False." ) - selected_actions_list.append(selected_actions) - action_dist = convert_to_action_dist( - n_actions=bandit_feedback["action"].max() + 1, - selected_actions=np.array(selected_actions_list), - ) - return action_dist + def sample_contextfree_expected_reward(self) -> np.ndarray: + """Sample expected reward for each action from the uniform distribution.""" + return self.random_.uniform(size=self.n_actions) + + def calc_expected_reward(self, context: np.ndarray) -> np.ndarray: + """Sample expected rewards given contexts""" + # sample reward for each round based on the reward function + if self.reward_function is None: + expected_reward_ = np.tile(self.expected_reward, (context.shape[0], 1)) + else: + expected_reward_ = self.reward_function( + context=context, + action_context=self.action_context, + random_state=self.random_state, + coef_function=self.coef_function, + ) + + return expected_reward_ + + def sample_reward_given_expected_reward( + self, expected_reward: np.ndarray + ) -> np.ndarray: + return self.random_.binomial(n=1, p=expected_reward) + + def sample_reward(self, context: np.ndarray) -> np.ndarray: + """Sample rewards given contexts and actions, i.e., :math:`r \\sim p(r | x, a)`. + + Parameters + ----------- + context: array-like, shape (n_rounds, dim_context) + Context vectors characterizing each data (such as user information). + + action: array-like, shape (n_rounds,) + Actions chosen by the behavior policy for each context. + + Returns + --------- + reward: array-like, shape (n_rounds,) + Sampled rewards given contexts and actions. + + """ + check_array(array=context, name="context", expected_dim=2) + expected_reward_ = self.calc_expected_reward(context) + return self.sample_reward_given_expected_reward(expected_reward_) + + def _sample_context(self, size: tuple) -> np.ndarray: + context = self.random_.normal(size=size) + return context + + def next_context(self) -> np.ndarray: + return self._sample_context(size=(1, self.dim_context)) + + def next_context_batch(self, n_rounds: int) -> np.ndarray: + return self._sample_context(size=(n_rounds, self.dim_context)) + + def next_bandit_round(self) -> BanditRound: + context = self.next_context() + expected_reward_ = self.calc_expected_reward(context) + rewards = self.sample_reward_given_expected_reward(expected_reward_) + + round_delays = None + if self.delay_function: + round_delays = self.delay_function( + n_rounds=1, + n_actions=self.n_actions, + expected_rewards=expected_reward_, + )[0] + + return BanditRound( + n_actions=self.n_actions, + context=context, + action_context=self.action_context[0], + rewards=rewards[0], + expected_rewards=expected_reward_[0], + round_delays=round_delays, + ) + + def next_bandit_round_batch(self, n_rounds: int) -> BanditRounds: + """Obtain a batch of full-information bandit data. Contains rewards for all arms, + + Parameters + ---------- + n_rounds: int + Data size of the synthetic logged bandit data. + + Returns + --------- + bandit_feedback: BanditRounds + A batch of bandit rounds that can be used to simulate an online bandit model + + """ + check_scalar(n_rounds, "n_rounds", int, min_val=1) + + contexts = self.next_context_batch(n_rounds=n_rounds) + expected_reward_ = self.calc_expected_reward(contexts) + rewards = self.sample_reward_given_expected_reward(expected_reward_) + + round_delays = None + if self.delay_function: + round_delays = self.delay_function( + n_rounds=contexts.shape[0], + n_actions=self.n_actions, + expected_rewards=expected_reward_, + ) + + return BanditRounds( + n_rounds=n_rounds, + n_actions=self.n_actions, + context=contexts, + action_context=self.action_context, + rewards=rewards, + expected_rewards=expected_reward_, + round_delays=round_delays, + ) + + +@dataclass +class BanditPolicySimulator: + policy: Any + environment: BanditEnvironmentSimulator = None + + # Internals + reward_round_lookup: defaultdict = None + + # To keep track of for after + _selected_actions: List[int] = None + _obtained_rewards: List[int] = None + _ground_truth_rewards: List[np.ndarray] = None + _contexts: List[np.ndarray] = None + total_reward: int = 0 + rounds_played: int = 0 + current_round: BanditRound = None + + @property + def selected_actions(self) -> np.ndarray: + return np.asarray(self._selected_actions) + + @property + def obtained_rewards(self) -> np.ndarray: + return np.asarray(self._obtained_rewards) + + @property + def ground_truth_rewards(self) -> np.ndarray: + return np.vstack(self._ground_truth_rewards) + + @property + def contexts(self) -> np.ndarray: + return np.vstack(self._contexts) + + def __post_init__(self): + self._selected_actions = [] + self._obtained_rewards = [] + self._ground_truth_rewards = [] + self._contexts = [] + self.reward_round_lookup = defaultdict(list) + + def start_next_bandit_round(self, bandit_round: BanditRound = None) -> None: + if not bandit_round: + self.current_round = self.environment.next_bandit_round() + else: + self.current_round = bandit_round + + self.append_contexts(self.current_round.context) + self.append_ground_truth_rewards(self.current_round.rewards) + + def append_ground_truth_rewards(self, ground_truth_rewards): + self._ground_truth_rewards.append(ground_truth_rewards) + + def append_contexts(self, context): + self._contexts.append(context) + + def step(self, bandit_round: BanditRound = None): + self.start_next_bandit_round(bandit_round) + self._step() + + def _step(self): + selected_action = self.select_action() + self._selected_actions.append(selected_action) + + reward_ = self.current_round.rewards[selected_action] + self._obtained_rewards.append(reward_) + self.total_reward += reward_ + + delays = self.current_round.round_delays + if delays is None: + self.update_policy(self.current_round.context, selected_action, reward_) + else: + # Add the current round to the lookup + round_delay = delays[selected_action] + self.reward_round_lookup[round_delay + self.rounds_played].append( + self.rounds_played + ) + + # Update policy with all available rounds + available_rounds = self.reward_round_lookup.get(self.rounds_played, []) + self.delayed_update_policy(available_rounds, self.rounds_played) + + self.rounds_played += 1 + + def select_action(self): + if self.policy.policy_type == PolicyType.CONTEXT_FREE: + selected_action = self.policy.select_action()[0] + elif self.policy.policy_type == PolicyType.CONTEXTUAL: + selected_action = self.policy.select_action( + np.expand_dims(self.current_round.context, axis=0) + )[0] + else: + raise RuntimeError( + f"Policy type {self.policy.policy_type} of policy {self.policy.policy_name} is unsupported" + ) + return selected_action + + def steps( + self, n_rounds: int = None, batch_bandit_rounds: BanditRounds = None + ) -> None: + if n_rounds: + for _ in tqdm(range(n_rounds)): + self.step() + if batch_bandit_rounds: + for bandit_round in tqdm(batch_bandit_rounds): + self.step(bandit_round) + + def delayed_update_policy( + self, available_rounds: List[int], current_round: int + ) -> None: + for available_round_idx in available_rounds: + available_action = self._selected_actions[available_round_idx] + available_context = self._contexts[available_round_idx] + available_rewards = self._obtained_rewards[available_round_idx] + + self.update_policy(available_context, available_action, available_rewards) + + self.reward_round_lookup.pop(current_round, None) + + def clear_delayed_queue(self): + for round_idx, available_rounds in self.reward_round_lookup.copy().items(): + self.delayed_update_policy(available_rounds, current_round=round_idx) + + def update_policy(self, context: np.ndarray, action: int, reward: int) -> None: + """Run an online bandit algorithm on the given logged bandit feedback data. + + Parameters + ---------- + context: np.ndarray + Context in which the policy observed the reward + + action: int + Action taken by the policy as defined by the `policy` argument + + reward: int + Reward observed by the policy as defined by the `policy` argument + """ + if self.policy.policy_type == PolicyType.CONTEXT_FREE: + self.policy.update_params(action=action, reward=reward) + elif self.policy.policy_type == PolicyType.CONTEXTUAL: + self.policy.update_params( + action=action, + reward=reward, + context=np.expand_dims(context, axis=0), + ) def calc_ground_truth_policy_value( diff --git a/obp/utils.py b/obp/utils.py index a217d3bd..d3e97807 100755 --- a/obp/utils.py +++ b/obp/utils.py @@ -118,7 +118,7 @@ def convert_to_action_dist( n_actions: int, selected_actions: np.ndarray, ) -> np.ndarray: - """Convert selected actions (output of `run_bandit_simulation`) to distribution over actions. + """Convert selected actions (output of `run_bandit_replay`) to distribution over actions. Parameters ---------- diff --git a/tests/dataset/test_synthetic.py b/tests/dataset/test_synthetic.py index beea3a6a..8313676c 100644 --- a/tests/dataset/test_synthetic.py +++ b/tests/dataset/test_synthetic.py @@ -2,7 +2,10 @@ import pytest from obp.dataset import SyntheticBanditDataset -from obp.dataset.synthetic import linear_behavior_policy +from obp.dataset.synthetic import ( + linear_behavior_policy, + _base_reward_function, +) from obp.dataset.synthetic import linear_reward_function from obp.dataset.synthetic import logistic_polynomial_reward_function from obp.dataset.synthetic import logistic_reward_function @@ -557,3 +560,26 @@ def test_synthetic_behavior_policy_function(): ) assert action_prob.shape[0] == n_rounds and action_prob.shape[1] == n_actions assert np.all(0 <= action_prob) and np.all(action_prob <= 1) + + +def test_base_reward_create_a_matrix_with_expected_rewards_with_identical_expectation_for_identical_rounds_(): + context = np.asarray( + [ + [1, 2], + [3, 2], + [3, 2], + ] + ) + action_context = np.asarray( + [ + [1, 0, 0], + [0, 0, 1], + [0, 1, 0], + ] + ) + actual_expected_rewards = _base_reward_function( + context, action_context, degree=5, effective_dim_ratio=1.0, random_state=12345 + ) + + assert np.allclose(actual_expected_rewards[1], actual_expected_rewards[2]) + assert not np.allclose(actual_expected_rewards[0], actual_expected_rewards[1]) diff --git a/tests/ope/conftest.py b/tests/ope/conftest.py index 939105eb..8ad6e1c7 100644 --- a/tests/ope/conftest.py +++ b/tests/ope/conftest.py @@ -158,25 +158,6 @@ def feedback_key_set() -> Set[str]: } -# bandit_feedback["expected_reward"][0] -@pytest.fixture(scope="session") -def expected_reward_0() -> np.ndarray: - return np.array( - [ - 0.816124, - 0.625855, - 0.386785, - 0.301848, - 0.726634, - 0.218076, - 0.482361, - 0.625271, - 0.586353, - 0.386384, - ] - ) - - # random evaluation policy @pytest.fixture(scope="session") def random_action_dist(synthetic_bandit_feedback) -> np.ndarray: diff --git a/tests/ope/test_all_estimators.py b/tests/ope/test_all_estimators.py index c9b99cf3..a3e5b94c 100644 --- a/tests/ope/test_all_estimators.py +++ b/tests/ope/test_all_estimators.py @@ -1,5 +1,3 @@ -from typing import Set - from conftest import generate_action_dist import numpy as np import pytest @@ -528,23 +526,6 @@ def test_estimate_intervals_of_all_estimators_using_valid_input_data( ) -def test_fixture( - synthetic_bandit_feedback: BanditFeedback, - expected_reward_0: np.ndarray, - feedback_key_set: Set[str], - random_action_dist: np.ndarray, -) -> None: - """ - Check the validity of the fixture data generated by conftest.py - """ - np.testing.assert_array_almost_equal( - expected_reward_0, synthetic_bandit_feedback["expected_reward"][0] - ) - assert feedback_key_set == set( - synthetic_bandit_feedback.keys() - ), f"Key set of bandit feedback should be {feedback_key_set}, but {synthetic_bandit_feedback.keys()}" - - def test_performance_of_ope_estimators_using_random_evaluation_policy( synthetic_bandit_feedback: BanditFeedback, random_action_dist: np.ndarray ) -> None: diff --git a/tests/ope/test_offline_estimation_performance.py b/tests/ope/test_offline_estimation_performance.py index a9e76cf6..2079bfdf 100644 --- a/tests/ope/test_offline_estimation_performance.py +++ b/tests/ope/test_offline_estimation_performance.py @@ -345,7 +345,7 @@ def process(i: int): return relative_ee_i - n_runs = 10 + n_runs = 20 processed = Parallel( n_jobs=-1, verbose=0, diff --git a/tests/simulator/test_coefficient_drifter.py b/tests/simulator/test_coefficient_drifter.py new file mode 100644 index 00000000..73bfa2f5 --- /dev/null +++ b/tests/simulator/test_coefficient_drifter.py @@ -0,0 +1,424 @@ +from unittest import mock + +import numpy as np +import pytest + +from obp.dataset.synthetic import logistic_sparse_reward_function, _base_reward_function +from obp.simulator.coefficient_drifter import CoefficientDrifter +from obp.simulator.simulator import BanditEnvironmentSimulator + + +def test_coefficient_tracker_can_shift_expected_rewards_with_syntethic_dataset_generator(): + drifter = CoefficientDrifter(drift_interval=3) + + dataset = BanditEnvironmentSimulator( + n_actions=3, + dim_context=4, + reward_type="binary", # "binary" or "continuous" + reward_function=logistic_sparse_reward_function, + coef_function=drifter.get_coefficients, + random_state=12345, + ) + + _ = dataset.next_bandit_round_batch(n_rounds=4) + + +class MockCoefSample: + n_samples = 0 + + def fake_sample( + self, effective_dim_action_context, effective_dim_context, random_, **kwargs + ): + self.n_samples += 1 + context_coef_ = self.n_samples * np.ones(effective_dim_context) + action_coef_ = self.n_samples * np.ones(effective_dim_action_context) + context_action_coef_ = self.n_samples * np.ones( + (effective_dim_context, effective_dim_action_context) + ) + + return context_coef_, action_coef_, context_action_coef_ + + +def test_coefficient_tracker_can_shift_expected_rewards_instantly_based_on_configured_intervals(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter(drift_interval=3) + + context = np.asarray( + [ + [1, 2], + [3, 2], + [3, 2], + [3, 2], + ] + ) + action_context = np.asarray( + [ + [1, 0, 0], + [0, 0, 1], + [0, 1, 0], + ] + ) + actual_expected_rewards = _base_reward_function( + context, + action_context, + degree=5, + effective_dim_ratio=1.0, + coef_function=drifter.get_coefficients, + random_state=12345, + ) + + # This round has a different context and should have diff E[r] + assert not np.allclose(actual_expected_rewards[0], actual_expected_rewards[1]) + # The next two rounds have the same context and should have identical + assert np.allclose(actual_expected_rewards[1], actual_expected_rewards[2]) + # This round has the same context but has experienced drift. + assert not np.allclose(actual_expected_rewards[2], actual_expected_rewards[3]) + + +def test_coefficient_tracker_can_shift_coefficient_instantly_based_on_configured_interval(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + effective_dim_context = 4 + effective_dim_action_context = 3 + drifter = CoefficientDrifter( + drift_interval=3, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=4) + + expected_context_coef = np.asarray( + [ + [1, 1, 1, 1], + [1, 1, 1, 1], + [1, 1, 1, 1], # AFTER THIS ROUND, THE COEFS CHANGE ABRUPTLY + [2, 2, 2, 2], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_can_shift_linearly_instantly_based_on_configured_transition_period(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=4, + transition_period=2, + effective_dim_context=2, + effective_dim_action_context=2, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=8) + + expected_context_coef = np.asarray( + [ + [1.0, 1.0], + [1.0, 1.0], # First two rounds are the same + [1.33333333, 1.33333333], # Next two rounds slowly transition + [1.66666667, 1.66666667], + [2.0, 2.0], # Now we start in the new coef again + [2.0, 2.0], + [2.33333333, 2.33333333], # Now we start transitioning again. + [2.66666667, 2.66666667], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_can_shift_weighted_sampled_based_on_configured_transition_period(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=4, + transition_period=2, + transition_type="weighted_sampled", + effective_dim_context=2, + effective_dim_action_context=2, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=8) + + expected_context_coef = np.asarray( + [ + [1.0, 1.0], + [1.0, 1.0], # First two rounds are the same + [1.0, 1.0], # Next two rounds are weighted sampled + [2.0, 2.0], + [2.0, 2.0], # Now we start in the new coef again + [2.0, 2.0], + [3.0, 3.0], # Next two rounds are weighted sampled again + [3.0, 3.0], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_can_shift_instantly_back_and_forth_between_seasons_using_seasonality_flag(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + transition_period=0, + seasonal=True, + effective_dim_context=2, + effective_dim_action_context=2, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=8) + + expected_context_coef = np.asarray( + [ + [1.0, 1.0], + [1.0, 1.0], + [2.0, 2.0], + [2.0, 2.0], + [1.0, 1.0], + [1.0, 1.0], + [2.0, 2.0], + [2.0, 2.0], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_can_shift_instantly_under_base_coeficient(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + transition_period=0, + seasonal=True, + base_coefficient_weight=0.8, + effective_dim_context=2, + effective_dim_action_context=2, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=8) + + expected_context_coef = np.asarray( + [ + [1, 1], + [1, 1], + [1.2, 1.2], + [1.2, 1.2], + [1, 1], + [1, 1], + [1.2, 1.2], + [1.2, 1.2], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_update_coef_makes_next_coef_current_coef_and_samples_new_next_coef(): + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=4, effective_dim_context=1, effective_dim_action_context=1 + ) + + drifter.context_coefs[0] = [1] + drifter.context_coefs[1] = [2] + + drifter.update_coef() + + assert drifter.context_coefs[0] == [2] + assert np.allclose(drifter.context_coefs[1], [3.0]) + + +def test_coefficient_tracker_update_coef_samples_both_new_curr_and_next_on_first_pull(): + drifter = CoefficientDrifter( + drift_interval=4, + ) + + assert len(drifter.context_coefs) == 0 + + drifter.effective_dim_context = 1 + drifter.effective_dim_action_context = 1 + + drifter.update_coef() + + assert drifter.context_coefs[0] is not None + assert drifter.context_coefs[1] is not None + assert not np.allclose(drifter.context_coefs[0], drifter.context_coefs[1]) + + +def test_coefficient_tracker_can_set_effective_dim_context_on_first_sample(): + effective_dim_context = 4 + effective_dim_action_context = 3 + drifter = CoefficientDrifter(drift_interval=3) + + assert drifter.effective_dim_context is None + assert drifter.effective_dim_action_context is None + + actual_context_coef, _, _ = drifter.get_coefficients( + n_rounds=4, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + assert drifter.effective_dim_context == 4 + assert drifter.effective_dim_action_context == 3 + + +def test_coefficient_tracker_raises_when_effective_dimensions_are_being_changed(): + effective_dim_context = 4 + effective_dim_action_context = 3 + drifter = CoefficientDrifter( + drift_interval=3, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + assert drifter.effective_dim_context == 4 + assert drifter.effective_dim_action_context == 3 + + with pytest.raises( + RuntimeError, match=r"Trying to change the effective dimensions" + ): + actual_context_coef, _, _ = drifter.get_coefficients( + n_rounds=4, effective_dim_context=5, effective_dim_action_context=6 + ) + + +def test_coefficient_tracker_can_shift_coefficient_multiple_times_instantly_based_on_configured_interval(): + effective_dim_context = 4 + effective_dim_action_context = 3 + + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=5) + + expected_context_coef = np.asarray( + [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], # AFTER THIS ROUND, THE COEFS SHOULD CHANGE + [2.0, 2.0, 2.0, 2.0], + [2.0, 2.0, 2.0, 2.0], # AFTER THIS ROUND, THE COEFS SHOULD CHANGE AGAIN + [3.0, 3.0, 3.0, 3.0], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + +def test_coefficient_tracker_keeps_track_of_shifted_coefficient_based_on_configured_interval_between_batches(): + effective_dim_context = 4 + effective_dim_action_context = 3 + + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=3) + + expected_context_coef = np.asarray( + [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], # AFTER THIS ROUND, THE COEFS SHOULD CHANGE + [2.0, 2.0, 2.0, 2.0], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef) + + actual_context_coef, _, _ = drifter.get_coefficients(n_rounds=3) + + expected_context_coef_2 = np.asarray( + [ + [2.0, 2.0, 2.0, 2.0], # THIS ROUND SHOULD BE THE SAME AS THE LAST ONE + [3.0, 3.0, 3.0, 3.0], # HERE THE COEF SHOULD CHANGE AGAIN + [3.0, 3.0, 3.0, 3.0], + ] + ) + + assert np.allclose(actual_context_coef, expected_context_coef_2) + + +def test_coefficients_can_drift_for_the_action_coefs(): + effective_dim_context = 4 + effective_dim_action_context = 3 + + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + _, actual_action_coef, _ = drifter.get_coefficients(n_rounds=3) + + expected_action_coef = np.asarray( + [ + [1.0, 1.0, 1.0], + [1.0, 1.0, 1.0], # AFTER THIS ROUND, THE COEFS SHOULD CHANGE + [2.0, 2.0, 2.0], + ] + ) + + assert np.allclose(actual_action_coef, expected_action_coef) + + +def test_coefficients_can_drift_for_the_action_context_coefs(): + effective_dim_context = 4 + effective_dim_action_context = 3 + + with mock.patch( + "obp.simulator.coefficient_drifter.sample_random_uniform_coefficients", + MockCoefSample().fake_sample, + ): + drifter = CoefficientDrifter( + drift_interval=2, + effective_dim_context=effective_dim_context, + effective_dim_action_context=effective_dim_action_context, + ) + + _, _, actual_context_action_coef = drifter.get_coefficients(n_rounds=3) + + expected_context_action_coef = np.asarray( + [ + [[1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0]], + [[1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0]], + [[2.0, 2.0, 2.0], [2.0, 2.0, 2.0], [2.0, 2.0, 2.0], [2.0, 2.0, 2.0]], + ] + ) + + assert np.allclose(actual_context_action_coef, expected_context_action_coef) diff --git a/tests/simulator/test_delay_sampler.py b/tests/simulator/test_delay_sampler.py new file mode 100644 index 00000000..744a8cea --- /dev/null +++ b/tests/simulator/test_delay_sampler.py @@ -0,0 +1,193 @@ +import numpy as np +import pytest +from obp.dataset.synthetic import logistic_sparse_reward_function + +from obp.simulator.delay_sampler import ExponentialDelaySampler +from obp.simulator.simulator import BanditEnvironmentSimulator + + +def test_synthetic_sample_results_in_sampled_delay_when_delay_function_is_given(): + n_actions = 3 + delay_function = ExponentialDelaySampler( + max_scale=100.0, random_state=12345 + ).exponential_delay_function + + dataset = BanditEnvironmentSimulator( + n_actions=n_actions, + reward_function=logistic_sparse_reward_function, + delay_function=delay_function, + random_state=12345, + ) + + actual_bandits_dataset = dataset.next_bandit_round_batch(n_rounds=5) + + expected_round_delays = np.tile([266.0, 39.0, 21.0, 23.0, 84.0], (n_actions, 1)).T + assert (actual_bandits_dataset.round_delays == expected_round_delays).all() + + +def test_synthetic_sample_results_in_sampled_delay_with_weighted_delays_per_arm(): + n_actions = 3 + delay_function = ExponentialDelaySampler( + max_scale=100.0, min_scale=10.0, random_state=12345 + ).exponential_delay_function_expected_reward_weighted + + dataset = BanditEnvironmentSimulator( + n_actions=n_actions, + reward_function=logistic_sparse_reward_function, + delay_function=delay_function, + random_state=12345, + ) + + actual_bandits_dataset = dataset.next_bandit_round_batch(n_rounds=1000) + + ordered_rewards = actual_bandits_dataset.expected_rewards[0].argsort() + mean_delays = actual_bandits_dataset.round_delays.sum(axis=0) + assert ( + mean_delays[ordered_rewards[2]] + < mean_delays[ordered_rewards[1]] + > mean_delays[ordered_rewards[2]] + ) + + +def test_synthetic_sample_results_with_exponential_delay_function_has_different_delays_each_batch(): + n_actions = 3 + + delay_function = ExponentialDelaySampler( + max_scale=1000.0, random_state=12345 + ).exponential_delay_function + + dataset = BanditEnvironmentSimulator( + n_actions=n_actions, + reward_function=logistic_sparse_reward_function, + delay_function=delay_function, + random_state=12345, + ) + + actual_delays_1 = dataset.next_bandit_round_batch(n_rounds=5).round_delays + actual_delays_2 = dataset.next_bandit_round_batch(n_rounds=5).round_delays + + expected_round_delays_1 = np.tile( + [2654.0, 381.0, 204.0, 229.0, 839.0], (n_actions, 1) + ).T + expected_round_delays_2 = np.tile( + [906.0, 3339.0, 1059.0, 1382.0, 1061.0], (n_actions, 1) + ).T + + assert (actual_delays_1 == expected_round_delays_1).all() + assert (actual_delays_2 == expected_round_delays_2).all() + + +def test_synthetic_sample_results_with_exponential_delay_function_has_same_delays_each_dataset(): + n_actions = 3 + + delay_function = ExponentialDelaySampler( + max_scale=1000.0, random_state=12345 + ).exponential_delay_function + + dataset = BanditEnvironmentSimulator( + n_actions=n_actions, + reward_function=logistic_sparse_reward_function, + delay_function=delay_function, + random_state=12345, + ) + + actual_delays_1 = dataset.next_bandit_round_batch(n_rounds=5).round_delays + + delay_function = ExponentialDelaySampler( + max_scale=1000.0, random_state=12345 + ).exponential_delay_function + + dataset = BanditEnvironmentSimulator( + n_actions=n_actions, + reward_function=logistic_sparse_reward_function, + delay_function=delay_function, + random_state=12345, + ) + actual_delays_2 = dataset.next_bandit_round_batch(n_rounds=5).round_delays + + expected_round_delays_1 = np.tile( + [2654.0, 381.0, 204.0, 229.0, 839.0], (n_actions, 1) + ).T + expected_round_delays_2 = np.tile( + [2654.0, 381.0, 204.0, 229.0, 839.0], (n_actions, 1) + ).T + + assert (actual_delays_1 == expected_round_delays_1).all() + assert (actual_delays_2 == expected_round_delays_2).all() + + +def test_synthetic_sample_results_do_not_contain_reward_delay_when_delay_function_is_none(): + dataset = BanditEnvironmentSimulator( + n_actions=3, + reward_function=logistic_sparse_reward_function, + random_state=12345, + ) + + actual_bandits_dataset = dataset.next_bandit_round_batch(n_rounds=5) + + assert actual_bandits_dataset.round_delays is None + + +def test_synthetic_sample_results_reward_delay_is_configurable_through_delay_function(): + def trivial_delay_func(*args, **kwargs): + return np.asarray([1, 2, 3, 4, 5]) + + dataset = BanditEnvironmentSimulator( + n_actions=3, + reward_function=logistic_sparse_reward_function, + delay_function=trivial_delay_func, + random_state=12345, + ) + + actual_bandits_dataset = dataset.next_bandit_round_batch(n_rounds=5) + + assert (actual_bandits_dataset.round_delays == [1, 2, 3, 4, 5]).all() + + +@pytest.mark.parametrize( + "size, actions, random_state, expected_delays", + [ + (5, 3, 12345, np.tile([266.0, 39.0, 21.0, 23.0, 84.0], (3, 1)).T), + (3, 3, 12345, np.tile([266.0, 39.0, 21.0], (3, 1)).T), + (5, 3, 54321, np.tile([243.0, 98.0, 157.0, 57.0, 79.0], (3, 1)).T), + ], +) +def test_exponential_delay_function_results_in_expected_seeded_discrete_delays( + size, actions, random_state, expected_delays +): + delay_function = ExponentialDelaySampler( + max_scale=100.0, random_state=random_state + ).exponential_delay_function + + actual_delays = delay_function(size, n_actions=actions) + assert (actual_delays == expected_delays).all() + + +@pytest.mark.parametrize( + "size, actions, expected_reward, random_state, expected_delays", + [ + ( + 2, + 2, + np.asarray([[1, 0.01], [0.5, 0.5]]), + 12344, + np.asarray([[2.0, 55.0], [3.0, 27.0]]), + ), + ( + 2, + 2, + np.asarray([[0.1, 0.2], [0.3, 0.4]]), + 12345, + np.asarray([[242.0, 32.0], [15.0, 15.0]]), + ), + ], +) +def test_exponential_delay_function_conditioned_on_expected_reward_results_in_expected_seeded_discrete_delays( + size, actions, expected_reward, random_state, expected_delays +): + delay_function = ExponentialDelaySampler( + max_scale=100.0, min_scale=10.0, random_state=random_state + ).exponential_delay_function_expected_reward_weighted + + actual_delays = delay_function(expected_rewards=expected_reward) + assert (actual_delays == expected_delays).all() diff --git a/tests/simulator/test_simulator.py b/tests/simulator/test_simulator.py new file mode 100644 index 00000000..813a2f22 --- /dev/null +++ b/tests/simulator/test_simulator.py @@ -0,0 +1,576 @@ +import re + +import numpy as np +import pytest +from sklearn.linear_model import LogisticRegression + +from obp.policy import BaseContextFreePolicy, IPWLearner +from obp.policy.linear import LinTS, LinUCB + +from obp.policy.contextfree import EpsilonGreedy, Random, BernoulliTS +from obp.dataset.synthetic import ( + logistic_reward_function, + logistic_sparse_reward_function, +) +from obp.policy.policy_type import PolicyType +from obp.simulator.coefficient_drifter import CoefficientDrifter +from obp.simulator.delay_sampler import ExponentialDelaySampler +from obp.simulator.simulator import BanditEnvironmentSimulator, BanditPolicySimulator + + +def test_bandit_policy_simulator_updates_at_each_taken_action(): + n_rounds = 100 + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=5, + reward_function=logistic_reward_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + + epsilon_greedy = EpsilonGreedy(n_actions=3) + + simulator = BanditPolicySimulator( + policy=epsilon_greedy, + environment=env, + ) + + simulator.steps(batch_bandit_rounds=bandit_rounds) + + assert epsilon_greedy.n_trial == n_rounds + + +def test_bandit_policy_simulator_handles_context_in_simulations(): + n_rounds = 100 + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=5, + reward_function=logistic_reward_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + + lin_ts = LinTS(dim=env.dim_context, n_actions=env.n_actions, random_state=12345) + simulator = BanditPolicySimulator( + policy=lin_ts, + environment=env, + ) + + simulator.steps(batch_bandit_rounds=bandit_rounds) + + assert lin_ts.n_trial == n_rounds + + +def test_bandit_policy_simulator_raises_on_unknown_policy(): + n_rounds = 1 + + env = BanditEnvironmentSimulator( + n_actions=3, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + + class OfflineEpsilon(EpsilonGreedy): + @property + def policy_type(self) -> PolicyType: + return PolicyType.OFFLINE + + epsilon_greedy = OfflineEpsilon(n_actions=3) + simulator = BanditPolicySimulator( + policy=epsilon_greedy, + environment=env, + ) + + with pytest.raises( + RuntimeError, + match=re.escape( + r"Policy type PolicyType.OFFLINE of policy egreedy_1.0 is " r"unsupported" + ), + ): + simulator.steps(batch_bandit_rounds=bandit_rounds) + + +class BanditUpdateTracker(BaseContextFreePolicy): + """ + This class can be used to keep track on updates being sent to the policy. + The policy itself always provides a random choice and should not be used for any analytical purposes. + """ + + n_rounds = 0 + + def __post_init__(self) -> None: + self.parameter_updates = [] + super().__post_init__() + + def select_action(self) -> np.ndarray: + self.n_rounds += 1 + return self.random_.choice(self.n_actions, size=self.len_list, replace=False) + + def update_params(self, action: int, reward: float) -> None: + self.parameter_updates.append( + {"round": self.n_rounds, "action": action, "reward": reward} + ) + + +def test_bandit_policy_simulator_works_end_to_end_with_synthetic_bandit_dataset(): + delay_function = ExponentialDelaySampler( + max_scale=1.0, random_state=12345 + ).exponential_delay_function + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + delay_function=delay_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=5) + + policy = EpsilonGreedy(n_actions=3, epsilon=0.1, random_state=12345) + + simulator = BanditPolicySimulator( + policy=policy, + environment=env, + ) + + simulator.steps(batch_bandit_rounds=bandit_rounds) + + +def test_bandit_policy_simulator_applies_policy_in_delay_specified_order(): + n_rounds = 5 + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + bandit_rounds.round_delays = np.tile([2, 1, 2, 1, 0], (3, 1)).T + + tracker = BanditUpdateTracker(n_actions=3, random_state=12345) + + simulator = BanditPolicySimulator( + policy=tracker, + environment=env, + ) + + simulator.steps(batch_bandit_rounds=bandit_rounds) + + expected_updates = [ + {"round": 3, "action": 0, "reward": 1}, + {"round": 3, "action": 0, "reward": 1}, + {"round": 5, "action": 2, "reward": 1}, + {"round": 5, "action": 1, "reward": 0}, + {"round": 5, "action": 2, "reward": 0}, + ] + + assert tracker.parameter_updates == expected_updates + + +@pytest.mark.parametrize( + "policy", + [ + Random(n_actions=3, epsilon=1.0, random_state=12345), + EpsilonGreedy(n_actions=3, epsilon=0.1, random_state=12345), + BernoulliTS(n_actions=3, random_state=12345), + LinTS(dim=4, n_actions=3, random_state=12345), + LinUCB(dim=4, n_actions=3, random_state=12345), + ], +) +def test_bandit_policy_simulator_does_not_crash_with_various_bandit_algorithms(policy): + n_rounds = 5 + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=4, + reward_function=logistic_reward_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + bandit_rounds.round_delays = np.tile([2, 1, 2, 2, 2], (3, 1)).T + + simulator = BanditPolicySimulator( + policy=policy, + environment=env, + ) + + simulator.steps(batch_bandit_rounds=bandit_rounds) + + +def test_bandit_policy_simulator_applies_policy_directly_when_no_delay(): + n_rounds = 5 + + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + random_state=12345, + ) + bandit_rounds = env.next_bandit_round_batch(n_rounds=n_rounds) + bandit_rounds.round_delays = None + + tracker = BanditUpdateTracker(n_actions=3, random_state=12345) + + simulator = BanditPolicySimulator( + policy=tracker, + environment=env, + ) + simulator.steps(batch_bandit_rounds=bandit_rounds) + + expected_updates = [ + {"action": 0, "reward": 1, "round": 1}, + {"action": 0, "reward": 1, "round": 2}, + {"action": 2, "reward": 1, "round": 3}, + {"action": 1, "reward": 0, "round": 4}, + {"action": 2, "reward": 0, "round": 5}, + ] + + assert tracker.parameter_updates == expected_updates + + +def test_simulator_can_create_identical_simulations_using_seeds(): + sample_n_rounds = 40 + drift_interval = 20 + transition_period = 0 + n_actions = 3 + dim_context = 5 + + drifter = CoefficientDrifter( + drift_interval=drift_interval, + transition_period=transition_period, + transition_type="linear", # linear or weighted_sampled + seasonal=False, + base_coefficient_weight=0.3, + random_state=1234, + ) + + env_1 = BanditEnvironmentSimulator( + n_actions=n_actions, + dim_context=dim_context, + reward_function=logistic_sparse_reward_function, + delay_function=None, + coef_function=drifter.get_coefficients, + random_state=12345, + ) + + policy = EpsilonGreedy(n_actions=n_actions, epsilon=0.1, random_state=12345) + simulator_1 = BanditPolicySimulator( + policy=policy, + environment=env_1, + ) + simulator_1.steps(n_rounds=sample_n_rounds) + + drifter = CoefficientDrifter( + drift_interval=drift_interval, + transition_period=transition_period, + transition_type="linear", # linear or weighted_sampled + seasonal=False, + base_coefficient_weight=0.3, + random_state=1234, + ) + + env_2 = BanditEnvironmentSimulator( + n_actions=n_actions, + dim_context=dim_context, + reward_function=logistic_sparse_reward_function, + delay_function=None, + coef_function=drifter.get_coefficients, + random_state=12345, + ) + + policy = EpsilonGreedy(n_actions=n_actions, epsilon=0.1, random_state=12345) + simulator_2 = BanditPolicySimulator( + policy=policy, + environment=env_2, + ) + simulator_2.steps(n_rounds=sample_n_rounds) + + assert simulator_1.total_reward == simulator_2.total_reward + + +def test_bandit_environment_simulator_fetches_new_context_every_pull(): + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=6, + reward_function=logistic_sparse_reward_function, + delay_function=None, + random_state=12345, + ) + + contexts = [env.next_context() for _ in range(5)] + assert len(np.hstack(contexts)[0]) == len(np.unique(contexts)) + + +def test_bandit_environment_simulator_can_fetch_a_batch_of_contexts(): + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=6, + reward_function=logistic_sparse_reward_function, + delay_function=None, + random_state=12345, + ) + + contexts = env.next_context_batch(n_rounds=5) + assert contexts.shape == (5, 6) + + +def test_bandit_environment_simulator_can_a_single_step(): + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=6, + reward_function=logistic_sparse_reward_function, + delay_function=None, + random_state=12345, + ) + + _ = env.next_bandit_round() + + +def test_bandit_policy_simulator_can_a_single_steps_and_keep_track(): + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=6, + reward_function=logistic_sparse_reward_function, + delay_function=None, + random_state=12345, + ) + + simulator = BanditPolicySimulator( + policy=EpsilonGreedy(epsilon=0.1, random_state=12345, n_actions=10), + environment=env, + ) + + for i in range(100): + assert simulator.rounds_played == i + assert len(simulator.selected_actions) == i + simulator.step() + + assert simulator.total_reward > 1 + + +def test_bandit_policy_simulator_can_do_multiple_steps_in_call_and_keep_track_of_actions_and_performance(): + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=6, + reward_function=logistic_sparse_reward_function, + delay_function=None, + random_state=12345, + ) + + simulator = BanditPolicySimulator( + policy=EpsilonGreedy(epsilon=0.1, random_state=12345, n_actions=10), + environment=env, + ) + + simulator.steps(n_rounds=100) + + assert simulator.total_reward > 1 + assert simulator.rounds_played == 100 + assert len(simulator.selected_actions) == 100 + assert len(simulator.obtained_rewards) == 100 + + +def test_bandit_policy_simulator_can_update_policy_with_delays_if_delay_rounds_are_available(): + class MockBanditEnvironmentSimulator(BanditEnvironmentSimulator): + round_delays = np.tile([1, 1, 2, 1, 0], (5, 1)).T + + def next_bandit_round(self): + bandit_round = super().next_bandit_round() + bandit_round.round_delays, self.round_delays = ( + self.round_delays[-1], + self.round_delays[:-1], + ) + return bandit_round + + env = MockBanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + random_state=12345, + ) + + tracker = BanditUpdateTracker(n_actions=3, random_state=12345) + + simulator = BanditPolicySimulator( + policy=tracker, + environment=env, + ) + + simulator.steps(n_rounds=5) + + expected_updates = [1, 3, 5, 5] + + assert [update["round"] for update in tracker.parameter_updates] == expected_updates + + +def test_bandit_policy_simulator_clears_delay_queue_when_called_into_last_available_round(): + class MockBanditEnvironmentSimulator(BanditEnvironmentSimulator): + round_delays = np.tile([1, 1, 4, 3, 2], (5, 1)).T + + def next_bandit_round(self): + bandit_round = super().next_bandit_round() + bandit_round.round_delays, self.round_delays = ( + self.round_delays[-1], + self.round_delays[:-1], + ) + return bandit_round + + env = MockBanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + random_state=12345, + ) + + tracker = BanditUpdateTracker(n_actions=3, random_state=12345) + + simulator = BanditPolicySimulator( + policy=tracker, + environment=env, + ) + + simulator.steps(n_rounds=5) + + expected_updates_before_queue_cleared = [3, 5, 5] + assert [ + update["round"] for update in tracker.parameter_updates + ] == expected_updates_before_queue_cleared + + simulator.clear_delayed_queue() + + expected_updates_before_queue_cleared = [3, 5, 5, 5, 5] + + assert len(simulator.reward_round_lookup.values()) == 0 + assert [ + update["round"] for update in tracker.parameter_updates + ] == expected_updates_before_queue_cleared + + +def test_bandit_policy_simulator_do_simulation_over_batch_data(): + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=1, + reward_function=logistic_reward_function, + random_state=12345, + ) + + simulator = BanditPolicySimulator( + policy=EpsilonGreedy(n_actions=3, epsilon=0.1, random_state=12345), + environment=env, + ) + + simulator.steps(batch_bandit_rounds=env.next_bandit_round_batch(5)) + + assert simulator.rounds_played == 5 + + +def test_bandit_policy_simulator_cleans_up_when_simulation_is_interupted(): + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=4, + reward_function=logistic_reward_function, + random_state=12345, + ) + + class CrashingBanditPolicySimulator(BanditPolicySimulator): + def _step(self): + super()._step() + if self.rounds_played == 50: + raise RuntimeError + + simulator = CrashingBanditPolicySimulator( + policy=EpsilonGreedy(n_actions=3, epsilon=0.1, random_state=12345), + environment=env, + ) + + with pytest.raises(RuntimeError): + simulator.steps(batch_bandit_rounds=env.next_bandit_round_batch(100)) + + assert simulator.rounds_played == 50 + assert simulator.contexts.shape == (50, 4) + assert simulator.ground_truth_rewards.shape == (50, 3) + + +def test_bandit_policy_simulator_cleans_up_keeping_previous_rounds_when_simulation_is_interupted(): + env = BanditEnvironmentSimulator( + n_actions=3, + dim_context=4, + reward_function=logistic_reward_function, + random_state=12345, + ) + + class CrashingBanditPolicySimulator(BanditPolicySimulator): + def _step(self): + super()._step() + if self.rounds_played == 5: + raise RuntimeError + + simulator = CrashingBanditPolicySimulator( + policy=EpsilonGreedy(n_actions=3, epsilon=0.1, random_state=12345), + environment=env, + ) + + batch_1 = env.next_bandit_round_batch(2) + simulator.steps(batch_bandit_rounds=batch_1) + + batch_2 = env.next_bandit_round_batch(6) + with pytest.raises(RuntimeError): + simulator.steps(batch_bandit_rounds=batch_2) + + assert simulator.rounds_played == 5 + assert np.allclose( + simulator.contexts, + np.vstack((batch_1.context, batch_2.context))[ + :5, + ], + ) + assert np.allclose( + simulator.ground_truth_rewards, + np.vstack((batch_1.rewards, batch_2.rewards))[ + :5, + ], + ) + + +def test_ipw_can_be_learned_from_logged_data_generated_by_simulation(): + from sklearn.ensemble import RandomForestClassifier as RandomForest + + env = BanditEnvironmentSimulator( + n_actions=10, + dim_context=5, + reward_function=logistic_reward_function, + random_state=12345, + ) + + simulator = BanditPolicySimulator( + policy=EpsilonGreedy(n_actions=10, epsilon=0.1, random_state=12345), + environment=env, + ) + + simulator.steps(batch_bandit_rounds=env.next_bandit_round_batch(100)) + + propensity_model = LogisticRegression(random_state=12345) + propensity_model.fit(simulator.contexts, simulator.selected_actions) + pscores = propensity_model.predict_proba(simulator.contexts) + + ipw_learner = IPWLearner( + n_actions=env.n_actions, + base_classifier=RandomForest( + n_estimators=30, min_samples_leaf=10, random_state=12345 + ), + ) + + ipw_learner.fit( + context=simulator.contexts, + action=simulator.selected_actions, + reward=simulator.obtained_rewards, + pscore=np.choose(simulator.selected_actions, pscores.T), + ) + eval_action_dists = ipw_learner.predict(context=simulator.contexts) + + rewards = np.sum( + simulator.ground_truth_rewards * np.squeeze(eval_action_dists, axis=-1) + ) + assert rewards > simulator.total_reward