diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2e8040d3bc308c2e1a0b18998f0e57c8c918c3b4..960d2424e49dc59f43932a39fa30361c4e8fd68b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -5,18 +5,18 @@ repos:
   - id: nbdev_clean
 - repo: https://github.com/charliermarsh/ruff-pre-commit
   # Ruff version.
-  rev: 'v0.6.9'
+  rev: 'v0.11.2'
   hooks:
     - id: ruff
       exclude: ^(notebooks/analyse/|notebooks/code_CASD/|notebooks/analyses/)
 -   repo: https://github.com/psf/black
-    rev: 24.10.0
+    rev: 25.1.0
     hooks:
     - id: black
       args: [--safe]
 # Check notebook formating
 - repo: https://github.com/nbQA-dev/nbQA
-  rev: 1.8.7
+  rev: 1.9.1
   hooks:
     - id: nbqa-black
     - id: nbqa-pyupgrade
diff --git a/notebooks/analyse/test_cas_types_cotisations.ipynb b/notebooks/analyse/test_cas_types_cotisations.ipynb
index 3a55caeaf561a2cbaf858059e8bc4cbdac6b93ca..210360eb6670fb32c57d5200eba15354330260b9 100644
--- a/notebooks/analyse/test_cas_types_cotisations.ipynb
+++ b/notebooks/analyse/test_cas_types_cotisations.ipynb
@@ -550,10 +550,10 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# cotisations non nulles\n",
-    "selection = copy.deepcopy(donnees_01)\n",
-    "donnees_check = selection.loc[:, selection.any()]\n",
-    "donnees_check.columns"
+    "# # cotisations non nulles\n",
+    "# selection = copy.deepcopy(donnees_01)\n",
+    "# donnees_check = selection.loc[:, selection.any()]\n",
+    "# donnees_check.columns"
    ]
   },
   {
@@ -562,7 +562,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "dessiner_graphique(donnees=donnees_07, revenu=\"salaire_de_base\", affichage_en_taux=True)"
+    "# dessiner_graphique(donnees=donnees_07, revenu=\"salaire_de_base\", affichage_en_taux=True)"
    ]
   },
   {
@@ -571,12 +571,12 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "comparer_donnees(\n",
-    "    donnees_A=donnees_01,\n",
-    "    donnees_B=donnees_02,\n",
-    "    revenu=\"salaire_de_base\",\n",
-    "    affichage_en_taux=False,\n",
-    ")"
+    "# comparer_donnees(\n",
+    "#     donnees_A=donnees_01,\n",
+    "#     donnees_B=donnees_02,\n",
+    "#     revenu=\"salaire_de_base\",\n",
+    "#     affichage_en_taux=False,\n",
+    "# )"
    ]
   },
   {
@@ -592,7 +592,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "exporter(donnees_C)"
+    "# exporter(donnees_C)"
    ]
   },
   {
diff --git a/notebooks/analyse/test_cas_types_cotisations_boucle.ipynb b/notebooks/analyse/test_cas_types_cotisations_boucle.ipynb
index 19a45d19c2d0bdbee25a6b2b95d61738213e749c..41939e53bc397558de1dd137f6937c5d5293a182 100644
--- a/notebooks/analyse/test_cas_types_cotisations_boucle.ipynb
+++ b/notebooks/analyse/test_cas_types_cotisations_boucle.ipynb
@@ -14,7 +14,6 @@
     "import copy\n",
     "import plotly.graph_objects as go\n",
     "from datetime import datetime\n",
-    "import copy\n",
     "\n",
     "from openfisca_core.simulation_builder import SimulationBuilder\n",
     "from leximpact_survey_scenario.leximpact_tax_and_benefit_system import leximpact_tbs"
@@ -555,9 +554,9 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "dessiner_graphique(\n",
-    "    donnees=donnees_03, revenu=\"traitement_indiciaire_brut\", affichage_en_taux=True\n",
-    ")"
+    "# dessiner_graphique(\n",
+    "#     donnees=donnees_03, revenu=\"traitement_indiciaire_brut\", affichage_en_taux=True\n",
+    "# )"
    ]
   },
   {
@@ -2000,12 +1999,12 @@
     }
    ],
    "source": [
-    "comparer_donnees(\n",
-    "    donnees_A=donnees_03,\n",
-    "    donnees_B=donnees_05,\n",
-    "    revenu=\"traitement_indiciaire_brut\",\n",
-    "    affichage_en_taux=True,\n",
-    ")"
+    "# comparer_donnees(\n",
+    "#     donnees_A=donnees_03,\n",
+    "#     donnees_B=donnees_05,\n",
+    "#     revenu=\"traitement_indiciaire_brut\",\n",
+    "#     affichage_en_taux=True,\n",
+    "# )"
    ]
   },
   {
@@ -2021,7 +2020,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "exporter(donnees_C)"
+    "# exporter(donnees_C)"
    ]
   },
   {
diff --git a/notebooks/analyses/graphiques_cas_type/cas_type_prestations_familiales.ipynb b/notebooks/analyses/graphiques_cas_type/cas_type_prestations_familiales.ipynb
index 36302a72cad48f3b976d327bee3f333dd33f0a5c..4242fd32ef2df3ca3ece5a6674467644067f2e3c 100644
--- a/notebooks/analyses/graphiques_cas_type/cas_type_prestations_familiales.ipynb
+++ b/notebooks/analyses/graphiques_cas_type/cas_type_prestations_familiales.ipynb
@@ -9,26 +9,27 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
+      "revenus_capital has been updated in leximpact-survey-scenario\n",
       "iaidrdi has been updated in leximpact-survey-scenario\n",
-      "plus_values_prelevement_forfaitaire_unique_ir has been updated in leximpact-survey-scenario\n",
       "rfr_plus_values_hors_rni has been updated in leximpact-survey-scenario\n",
+      "assiette_csg_plus_values has been updated in leximpact-survey-scenario\n",
       "rpns_imposables has been updated in leximpact-survey-scenario\n",
       "rpns_autres_revenus has been updated in leximpact-survey-scenario\n",
-      "prelevement_forfaitaire_non_liberatoire has been updated in leximpact-survey-scenario\n",
-      "paje_naissance has been updated in leximpact-survey-scenario\n"
+      "paje_naissance has been updated in leximpact-survey-scenario\n",
+      "allegement_general_mode_recouvrement has been updated in leximpact-survey-scenario\n"
      ]
     },
     {
      "ename": "ImportError",
-     "evalue": "cannot import name 'smic_annuel_brut_by_year' from 'openfisca_france_data.erfs_fpr.input_data_builder.step_03_variables_individuelles' (/home/cgl/leximpact/leximpact-survey-scenario/.venv/lib/python3.10/site-packages/openfisca_france_data/erfs_fpr/input_data_builder/step_03_variables_individuelles.py)",
+     "evalue": "cannot import name 'smic_annuel_brut_by_year' from 'openfisca_france_data.erfs_fpr.input_data_builder.step_03_variables_individuelles' (/home/cgl/leximpact/simulateur_socio_fiscal/budget/leximpact-prepare-data/.venv/lib/python3.11/site-packages/openfisca_france_data/erfs_fpr/input_data_builder/step_03_variables_individuelles.py)",
      "output_type": "error",
      "traceback": [
-      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
-      "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mleximpact_survey_scenario\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgraphiques_cas_type\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdecomposition\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (decomposition_data, decompo_prestations_familiales)\n\u001b[1;32m      4\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mplotly\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgraph_objects\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mgo\u001b[39;00m\n",
-      "File \u001b[0;32m~/leximpact/leximpact-survey-scenario/leximpact_survey_scenario/graphiques_cas_type/decomposition.py:3\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mleximpact_survey_scenario\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mleximpact_tax_and_benefit_system\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m leximpact_tbs\n\u001b[0;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mleximpact_survey_scenario\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgraphiques_cas_type\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcas_type_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m      4\u001b[0m     calculate,\n\u001b[1;32m      5\u001b[0m     create_scenario_inferieur_smic,\n\u001b[1;32m      6\u001b[0m     create_scenario_superieur_smic,\n\u001b[1;32m      7\u001b[0m     \u001b[38;5;66;03m#    smic_annuel_brut_by_year,\u001b[39;00m\n\u001b[1;32m      8\u001b[0m )\n\u001b[1;32m     10\u001b[0m decompo_revenu_disponible \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m     11\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrevenu_disponible\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m     12\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprestations_sociales\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     19\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcotisations_salariales\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m     20\u001b[0m ]\n\u001b[1;32m     22\u001b[0m decompo_ir \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m     23\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mirpp\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m     24\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcontribution_exceptionnelle_hauts_revenus\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     30\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrni\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m     31\u001b[0m ]\n",
-      "File \u001b[0;32m~/leximpact/leximpact-survey-scenario/leximpact_survey_scenario/graphiques_cas_type/cas_type_utils.py:12\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenfisca_core\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m periods\n\u001b[1;32m     11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenfisca_core\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrates\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m marginal_rate, average_rate\n\u001b[0;32m---> 12\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenfisca_france_data\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01merfs_fpr\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01minput_data_builder\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mstep_03_variables_individuelles\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m     13\u001b[0m     smic_annuel_net_by_year,\n\u001b[1;32m     14\u001b[0m     smic_annuel_brut_by_year,\n\u001b[1;32m     15\u001b[0m )\n\u001b[1;32m     16\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtaxipp\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgeneral_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m to_percent_round_formatter\n\u001b[1;32m     17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtaxipp\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtest_case\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m base\n",
-      "\u001b[0;31mImportError\u001b[0m: cannot import name 'smic_annuel_brut_by_year' from 'openfisca_france_data.erfs_fpr.input_data_builder.step_03_variables_individuelles' (/home/cgl/leximpact/leximpact-survey-scenario/.venv/lib/python3.10/site-packages/openfisca_france_data/erfs_fpr/input_data_builder/step_03_variables_individuelles.py)"
+      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
+      "\u001b[31mImportError\u001b[39m                               Traceback (most recent call last)",
+      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mleximpact_survey_scenario\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mgraphiques_cas_type\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdecomposition\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[32m      2\u001b[39m     decomposition_data,\n\u001b[32m      3\u001b[39m     decompo_prestations_familiales,\n\u001b[32m      4\u001b[39m )\n\u001b[32m      7\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mplotly\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mgraph_objects\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mgo\u001b[39;00m\n",
+      "\u001b[36mFile \u001b[39m\u001b[32m~/leximpact/simulateur_socio_fiscal/budget/leximpact-prepare-data/.venv/lib/python3.11/site-packages/leximpact_survey_scenario/graphiques_cas_type/decomposition.py:3\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mleximpact_survey_scenario\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mleximpact_survey_scenario\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m leximpact_tbs\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mleximpact_survey_scenario\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mgraphiques_cas_type\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mcas_type_utils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[32m      4\u001b[39m     calculate,\n\u001b[32m      5\u001b[39m     create_scenario_inferieur_smic,\n\u001b[32m      6\u001b[39m     create_scenario_superieur_smic,\n\u001b[32m      7\u001b[39m     \u001b[38;5;66;03m#    smic_annuel_brut_by_year,\u001b[39;00m\n\u001b[32m      8\u001b[39m )\n\u001b[32m     10\u001b[39m decompo_revenu_disponible = [\n\u001b[32m     11\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mrevenu_disponible\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m     12\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mprestations_sociales\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m   (...)\u001b[39m\u001b[32m     19\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mcotisations_salariales\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m     20\u001b[39m ]\n\u001b[32m     22\u001b[39m decompo_ir = [\n\u001b[32m     23\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mirpp\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m     24\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mcontribution_exceptionnelle_hauts_revenus\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m   (...)\u001b[39m\u001b[32m     30\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mrni\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m     31\u001b[39m ]\n",
+      "\u001b[36mFile \u001b[39m\u001b[32m~/leximpact/simulateur_socio_fiscal/budget/leximpact-prepare-data/.venv/lib/python3.11/site-packages/leximpact_survey_scenario/graphiques_cas_type/cas_type_utils.py:12\u001b[39m\n\u001b[32m     10\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mopenfisca_core\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m periods\n\u001b[32m     11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mopenfisca_core\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mrates\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m marginal_rate, average_rate\n\u001b[32m---> \u001b[39m\u001b[32m12\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mopenfisca_france_data\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01merfs_fpr\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01minput_data_builder\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mstep_03_variables_individuelles\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[32m     13\u001b[39m     smic_annuel_net_by_year,\n\u001b[32m     14\u001b[39m     smic_annuel_brut_by_year,\n\u001b[32m     15\u001b[39m )\n\u001b[32m     16\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtaxipp\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mgeneral_utils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m to_percent_round_formatter\n\u001b[32m     17\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtaxipp\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mtest_case\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m base\n",
+      "\u001b[31mImportError\u001b[39m: cannot import name 'smic_annuel_brut_by_year' from 'openfisca_france_data.erfs_fpr.input_data_builder.step_03_variables_individuelles' (/home/cgl/leximpact/simulateur_socio_fiscal/budget/leximpact-prepare-data/.venv/lib/python3.11/site-packages/openfisca_france_data/erfs_fpr/input_data_builder/step_03_variables_individuelles.py)"
      ]
     }
    ],
@@ -49,12 +50,13 @@
    "outputs": [],
    "source": [
     "year = 2023\n",
-    "smic = (\n",
-    "    tax_and_benefit_system.parameters(\n",
-    "        year\n",
-    "    ).marche_travail.salaire_minimum.smic.smic_b_mensuel\n",
-    "    * 12\n",
-    ")"
+    "smic = 12\n",
+    "# smic = (\n",
+    "#     tax_and_benefit_system.parameters(\n",
+    "#         year\n",
+    "#     ).marche_travail.salaire_minimum.smic.smic_b_mensuel\n",
+    "#     * 12\n",
+    "# )"
    ]
   },
   {
@@ -96818,7 +96820,7 @@
     "\n",
     "# fig_paje.show()\n",
     "# fig_ars.show()\n",
-    "fig_af.show()\n",
+    "# fig_af.show()\n",
     "# fig_cf.show()"
    ]
   },
@@ -118951,9 +118953,9 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "leximpact-survey-scenario-kernel",
+   "display_name": "python3",
    "language": "python",
-   "name": "leximpact-survey-scenario-kernel"
+   "name": "python3"
   }
  },
  "nbformat": 4,
diff --git a/notebooks/code_CASD/extractions_base_des_impots/00_generate_fake_data.ipynb b/notebooks/code_CASD/extractions_base_des_impots/00_generate_fake_data.ipynb
deleted file mode 100644
index ca58c33ae2fe25b31078942a72ba12cd425a2398..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/00_generate_fake_data.ipynb
+++ /dev/null
@@ -1,968 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "western-orientation",
-   "metadata": {},
-   "source": [
-    "# Generate a fake POTE input file\n",
-    "\n",
-    "The goal is to be able to test CASD script locally.\n",
-    "\n",
-    "Objectif : nous voulons des revenus entre 0 et 300 millions avec beaucoup de personnes vers 0 et un petit peut vers le million.\n",
-    "\n",
-    "La distribution de Pareto peut nous donner cela.\n",
-    "\n",
-    "TODO:\n",
-    "- Actuellement tous les revenus sont indépendants, il faudrait plutôt tout calculer à partir du RFR (avec un random)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "downtown-player",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from leximpact_common_python_libraries.config import Configuration"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "72ee9624",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "config = Configuration(project_folder=\"leximpact-prepare-data\")\n",
-    "OUT_PATH = config.get(\"FAKE_DATA\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "mental-composition",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Activate multi-output in notebook\n",
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "enhanced-shopping",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# import numpy\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np\n",
-    "import pandas as pd\n",
-    "import vaex\n",
-    "import seaborn as sns"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "hungarian-freeze",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Python 3.10.12\n"
-     ]
-    }
-   ],
-   "source": [
-    "!python --version"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "inside-complex",
-   "metadata": {},
-   "source": [
-    "## Utilisation de Pareto généralisé\n",
-    "Voir la doc de scipy : https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.genpareto.html"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "unlike-harmony",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "mean=array(1.11111111) var=array(1.54320988) skew=array(2.81105689) kurt=array(14.82857143)\n",
-      "x.shape=(100,)\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAydUlEQVR4nO3de3hU5bn+8XtymIQAGQ6BHCAQUASRQ2gwMVKr3USDtbRWuzdFd0GKWBWLmHqiSqJIjVpBPFBTUVD7E6F2V+suFmujYFWUAtKNiigIBoGcQJIQYJLMrN8fKSMJM5MMmVlrkvl+rmsuyXrXmnkyJszN875rLZthGIYAAAAsEmV1AQAAILIRRgAAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAloqxuoD2cLvd2r9/v3r27CmbzWZ1OQAAoB0Mw1BdXZ3S0tIUFeW7/9Epwsj+/fuVnp5udRkAAOA07N27VwMHDvQ53inCSM+ePSU1fzOJiYkWVwMAANqjtrZW6enpns9xXzpFGDkxNZOYmEgYAQCgk2lriQULWAEAgKUIIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALBVwGHn77bc1efJkpaWlyWaz6ZVXXmnzmHXr1ulb3/qW4uLidOaZZ+rZZ589jVIBAEBXFHAYqa+v19ixY7V06dJ27b97925ddtll+u53v6utW7dq7ty5uvbaa/X6668HXCwAAOh6Ar7o2aWXXqpLL7203fuXlJRoyJAhWrRokSTp7LPP1jvvvKNHHnlE+fn5gb48AADoYkK+ZmTDhg3Ky8trsS0/P18bNmzweYzT6VRtbW2LBwAACK2MjAwtWbLE83V5ebkuvvhide/eXb169QrZ64Y8jJSXlys5ObnFtuTkZNXW1urYsWNejykuLpbD4fA8gnqTPMOQjh+XDh+WKiqkL7+UduyQ/vUvafv24L0OAAAB2LNnj2w2m7Zu3Wp1KR6PPPKIDhw4oK1bt+qzzz4L2euE5b1p5s2bp4KCAs/XJ260ExTl5dI993gfGzxYOvvs4LwOAAD/1tjYqNjYWKvLCNiuXbuUlZWlYcOGhfR1Qh5GUlJSVFFR0WJbRUWFEhMT1a1bN6/HxMXFKS4uLjQFxcf7Hjt+PDSvCQDhas4cyeWytoboaOmxx/zuUldXp+uvv16vvPKKEhMTdfvtt+vPf/6zMjMzPdMKTqdTd911l1588UUdPnxYo0aN0oMPPqiLLrpIkvTss89q7ty5Wr16tebOnau9e/fq29/+tlasWKHU1FRJ0jXXXKPDhw9r3LhxeuKJJ+R0OnXVVVfpsccek91ulyStXbtWCxcu1EcffaTo6Gjl5ubq0Ucf1RlnnCGpucMxZMgQrVq1Sr/97W/1wQcfqKSkRNdcc42efvppLVq0SLt371ZGRobmzJmjG2+8UZI0ZMgQSdK4ceMkSRdeeKHWrVsnt9uthQsX6qmnnlJVVZXOPvtsPfDAA5o0aZLP9+uiiy7SqFGjJEm///3vFRsbqxtuuEELFizw3LSusrJSM2fO1N///nelpKRo4cKFLZ4jIyNDX375pSTp+eef1/Tp00N2NmzIw0hubq5ee+21FtveeOMN5ebmhvqlvfMXcpxO8+oAgHDgcklNTVZX0aaCggK9++67evXVV5WcnKzCwkJt2bJFmZmZnn1uuukmffLJJ1q1apXS0tL08ssva9KkSdq2bZvnX/ZHjx7Vww8/rN///veKiorSf//3f+vWW2/VCy+84Hme0tJSxcfHa926ddqzZ49mzJihvn376te//rWk5rNKCwoKNGbMGB05ckSFhYX60Y9+pK1btyoq6pvVD3feeacWLVqkcePGKT4+Xi+88IIKCwv1xBNPaNy4cfrwww81a9Ysde/eXdOnT9fGjRuVnZ2tv//97zrnnHM84efRRx/VokWL9Lvf/U7jxo3T8uXL9YMf/EAff/yx347Fc889p5kzZ2rjxo3atGmTrrvuOg0aNEizZs2S1By89u/fr7feekuxsbGaM2eOKisrPcf/85//1LRp05SYmKhHH33UZwMhGAIOI0eOHNHOnTs9X+/evVtbt25Vnz59NGjQIM2bN0/79u3T888/L0m6/vrr9cQTT+j222/Xz372M7355pv6wx/+oDVr1gTvuwgEnREA6FTq6ur03HPPaeXKlZo4caIkacWKFUpLS/PsU1ZWphUrVqisrMyz/dZbb9XatWu1YsUK3X///ZKap0tKSko8XYybbrpJCxYsaPF6drtdy5cvV0JCgs455xwtWLBAt912m+677z5FRUXpyiuvbLH/8uXL1a9fP33yySeeboQkzZ07V1dccYXn66KiIi1atMizbciQIfrkk0/0u9/9TtOnT1e/fv0kSX379lVKSornuIcfflh33HGHfvKTn0iSHnzwQb311ltasmSJ38tspKen65FHHpHNZtPw4cO1bds2PfLII5o1a5Y+++wz/fWvf9XGjRt17rnnSpKeeeYZnX3SUoV+/fopLi5O3bp1a1FPKAS8gHXTpk0aN26cp41UUFCgcePGqbCwUJJ04MABlZWVefYfMmSI1qxZozfeeENjx47VokWL9PTTT1t3Wm9UlORr3s7pbF7gCgAIG1988YUaGxuVnZ3t2eZwODR8+HDP19u2bZPL5dJZZ52lHj16eB7r16/Xrl27PPslJCR4gogkpaamtugGSNLYsWOVkJDg+To3N1dHjhzR3r17JUmff/65pk6dqqFDhyoxMVEZGRmS1OKzT5LGjx/v+XN9fb127dqlmTNntqhv4cKFLeprrba2Vvv379eECRNabJ8wYYK2t3HSxXnnneeZkjnxfXz++edyuVzavn27YmJilJWV5RkfMWJESM+Y8SfgzshFF10kw88Htrf5pIsuukgffvhhoC8VOvHxUmPjqdsNQ2po8D+VAwAIO0eOHFF0dLQ2b96s6OjoFmM9evTw/Ln1IlKbzeb3M82byZMna/DgwVq2bJnS0tLkdrs1atQoNTQ0tNive/fuLeqTpGXLliknJ6fFfq3rjUSReW8apmoAoNMYOnSoYmNj9c9//tOzraampsWppuPGjZPL5VJlZaXOPPPMFo9Apxj+9a9/tbj0xPvvv68ePXooPT1dBw8e1I4dO3T33Xdr4sSJOvvss/X111+3+ZzJyclKS0vTF198cUp9Jxaunlgj4jppQXFiYqLS0tL07rvvtni+d999VyNHjvT7mh988EGLr99//30NGzZM0dHRGjFihJqamrR582bP+I4dO3T48OE2v5dQCMtTe0OurTDicJhXCwBYKRz+Vd5GDT179tT06dN12223qU+fPurfv7+KiooUFRXlmYY466yzdPXVV2vatGmeRaNVVVUqLS3VmDFjdNlll7W7nIaGBs2cOVN333239uzZo6KiIt10002KiopS79691bdvXz311FNKTU1VWVmZ7rzzznY977333qs5c+bI4XBo0qRJcjqd2rRpk77++msVFBSof//+6tatm9auXauBAwcqPj5eDodDt912m4qKinTGGWcoMzNTK1as0NatW1ssuvWmrKxMBQUF+vnPf64tW7bo8ccf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fKkaBg+RbGFwMd+ePa2uAABwGgL+BFm9erUKCgpUVFSkLVu2aOzYscrPz1dlZaXX/d977z1NnTpVM2fO1IcffqjLL79cl19+uT766KMOFw8L2WxqTBuouon5qr7hZh0oul+Hpl+rIxd8V40DB1kTTggjANApBXw2TU5Ojs4991w98cQTkiS326309HT94he/0J133nnK/lOmTFF9fb3+8pe/eLadd955yszMVElJSbtek7NpOh9bQ4Ni9+1V7Fd7Zf+qTLH79irmYHXI7gZs2O06sOChoD8v10cBgNMXkrNpGhoatHnzZs2bN8+zLSoqSnl5edqwYYPXYzZs2KCCgoIW2/Lz8/XKK6/4fB2n0ymn0+n5uqamOTDU1tYGUm67HKkL/nPi35L6NT8yvyVJsjU0KqaqXDGVFYqpqlRMVZViqysV/fXXktwdeilX9x4h+X9ZW9vxOxYDQKQ68bndVt8joDBSXV0tl8ul5OTkFtuTk5P16aefej2mvLzc6/7l5eU+X6e4uFj33nvvKdvT09MDKReR5qknrK4AAOBFXV2dHA7fneawPJtm3rx5Lbopbrdbhw4dUt++fWXzce+T01FbW6v09HTt3bs36NM/8I/33jq899bi/bcO7735DMNQXV2d0tLS/O4XUBhJSkpSdHS0KioqWmyvqKhQSor328qnpKQEtL8kxcXFKS4ursW2Xr16BVJqQBITE/nBtAjvvXV4763F+28d3ntz+euInBDQKQ92u11ZWVkqLS31bHO73SotLVVubq7XY3Jzc1vsL0lvvPGGz/0BAEBkCXiapqCgQNOnT9f48eOVnZ2tJUuWqL6+XjNmzJAkTZs2TQMGDFBxcbEk6eabb9aFF16oRYsW6bLLLtOqVau0adMmPfXUU8H9TgAAQKcUcBiZMmWKqqqqVFhYqPLycmVmZmrt2rWeRaplZWWKivqm4XL++edr5cqVuvvuu/WrX/1Kw4YN0yuvvKJRo0YF77s4TXFxcSoqKjplSgihx3tvHd57a/H+W4f3Pnx1irv2AgCArisMruENAAAiGWEEAABYijACAAAsRRgBAACWiugwsnTpUmVkZCg+Pl45OTnauHGj1SV1effcc49sNluLx4gRI6wuq0t6++23NXnyZKWlpclms51yPyjDMFRYWKjU1FR169ZNeXl5+vzzz60ptotp672/5pprTvk9mDRpkjXFdjHFxcU699xz1bNnT/Xv31+XX365duzY0WKf48ePa/bs2erbt6969OihK6+88pSLc8JcERtGVq9erYKCAhUVFWnLli0aO3as8vPzVVlZaXVpXd4555yjAwcOeB7vvPOO1SV1SfX19Ro7dqyWLl3qdfyhhx7SY489ppKSEn3wwQfq3r278vPzdfz4cZMr7Xraeu8ladKkSS1+D1588UUTK+y61q9fr9mzZ+v999/XG2+8ocbGRl1yySWqr6/37HPLLbfof//3f/XSSy9p/fr12r9/v6644goLq4aMCJWdnW3Mnj3b87XL5TLS0tKM4uJiC6vq+oqKioyxY8daXUbEkWS8/PLLnq/dbreRkpJi/OY3v/FsO3z4sBEXF2e8+OKLFlTYdbV+7w3DMKZPn2788Ic/tKSeSFNZWWlIMtavX28YRvPPeWxsrPHSSy959tm+fbshydiwYYNVZUa8iOyMNDQ0aPPmzcrLy/Nsi4qKUl5enjZs2GBhZZHh888/V1pamoYOHaqrr75aZWVlVpcUcXbv3q3y8vIWvwMOh0M5OTn8Dphk3bp16t+/v4YPH64bbrhBBw8etLqkLqmmpkaS1KdPH0nS5s2b1djY2OJnf8SIERo0aBA/+xaKyDBSXV0tl8vluWrsCcnJySovL7eoqsiQk5OjZ599VmvXrtWTTz6p3bt364ILLlBdXZ3VpUWUEz/n/A5YY9KkSXr++edVWlqqBx98UOvXr9ell14ql8tldWlditvt1ty5czVhwgTPVb/Ly8tlt9tPufkqP/vWCvhy8EBHXHrppZ4/jxkzRjk5ORo8eLD+8Ic/aObMmRZWBpjnJz/5iefPo0eP1pgxY3TGGWdo3bp1mjhxooWVdS2zZ8/WRx99xLq0TiAiOyNJSUmKjo4+ZfV0RUWFUlJSLKoqMvXq1UtnnXWWdu7caXUpEeXEzzm/A+Fh6NChSkpK4vcgiG666Sb95S9/0VtvvaWBAwd6tqekpKihoUGHDx9usT8/+9aKyDBit9uVlZWl0tJSzza3263S0lLl5uZaWFnkOXLkiHbt2qXU1FSrS4koQ4YMUUpKSovfgdraWn3wwQf8Dljgq6++0sGDB/k9CALDMHTTTTfp5Zdf1ptvvqkhQ4a0GM/KylJsbGyLn/0dO3aorKyMn30LRew0TUFBgaZPn67x48crOztbS5YsUX19vWbMmGF1aV3arbfeqsmTJ2vw4MHav3+/ioqKFB0dralTp1pdWpdz5MiRFv/S3r17t7Zu3ao+ffpo0KBBmjt3rhYuXKhhw4ZpyJAhmj9/vtLS0nT55ZdbV3QX4e+979Onj+69915deeWVSklJ0a5du3T77bfrzDPPVH5+voVVdw2zZ8/WypUr9ec//1k9e/b0rANxOBzq1q2bHA6HZs6cqYKCAvXp00eJiYn6xS9+odzcXJ133nkWVx/BrD6dx0qPP/64MWjQIMNutxvZ2dnG+++/b3VJXd6UKVOM1NRUw263GwMGDDCmTJli7Ny50+qyuqS33nrLkHTKY/r06YZhNJ/eO3/+fCM5OdmIi4szJk6caOzYscPaorsIf+/90aNHjUsuucTo16+fERsbawwePNiYNWuWUV5ebnXZXYK3912SsWLFCs8+x44dM2688Uajd+/eRkJCgvGjH/3IOHDggHVFw7AZhmGYH4EAAACaReSaEQAAED4IIwAAwFKEEQAAYCnCCAAAsBRhBAAAWIowAgAALEUYAQAAliKMAAAASxFGAACApQgjAADAUoQRAABgKcIIAACw1P8HYuI0ZOCNBakAAAAASUVORK5CYII=",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from scipy.stats import genpareto\n",
-    "\n",
-    "c = 0.1\n",
-    "\n",
-    "mean, var, skew, kurt = genpareto.stats(c, moments=\"mvsk\")\n",
-    "\n",
-    "print(f\"{mean=} {var=} {skew=} {kurt=}\")\n",
-    "\n",
-    "x = np.linspace(genpareto.ppf(0.01, c), genpareto.ppf(0.99, c), 100)\n",
-    "print(f\"{x.shape=}\")\n",
-    "\n",
-    "fig, ax = plt.subplots(1, 1)\n",
-    "_ = ax.plot(x, genpareto.pdf(x, c), \"r-\", lw=5, alpha=0.6, label=\"genpareto pdf\")\n",
-    "\n",
-    "r = genpareto.rvs(c, size=100_000)\n",
-    "_ = ax.hist(r, density=True, histtype=\"stepfilled\", alpha=0.2)\n",
-    "_ = ax.legend(loc=\"best\", frameon=False)\n",
-    "plt.show()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "incomplete-olympus",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[1092.9815492159842]"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "sorted(r * 10e6)[10:2:-10]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "legal-powell",
-   "metadata": {},
-   "source": [
-    "## Exemple de distribution"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "wireless-function",
-   "metadata": {},
-   "source": [
-    "Par exemple, ici on demande :\n",
-    "- Un coefficient c (de Pareto ?) de 0.5, plus il se rapproche de 1, plus la \"cassure\" entre haut et bas revenus est forte\n",
-    "- size=100 personnes\n",
-    "- scale=100 l'amplitude de revenu : le revenu maximum dépendra de ce paramètre et du coéfficient c. Avec c=0.5 et scale=1 000, le revenu maximum est de 17 000.\n",
-    "- loc=0 le revenu minimum."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "incorrect-valuation",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "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euml2rlzp2JjY3Xy5EkVFhb6jfn5f/u6uAZ79+7Ve++9p7/97W/nHBcI54P009zP9T0gNjZWhw4d8tt/6tQpHT58uErOldr0vaYsWPbu3auVK1f6XWWpSHJysk6dOqU9e/ZIqjvrcLbWrVurefPmfv8eAuWckKQPPvhAeXl5v/p9Q6rZc6LOR0tISIi6d++u7Oxs37bS0lJlZ2crJSWlBmd2YcxMo0aN0pIlS7Rq1apyl+YqsmXLFklSXFycJCklJUWff/653z/Msm9il19+uW/Mz9eubExtXbujR49q165diouLU/fu3dWgQQO/+efl5Wnfvn2++dfFNZg/f75iYmLUr1+/c44LhPNBkpKSkhQbG+s3b6/Xqw0bNvidB4WFhcrNzfWNWbVqlUpLS31xl5KSovfff18lJSW+MStXrlS7du3UtGlT35javD5lwbJjxw699957io6O/tX7bNmyRcHBwb6nSurCOlTkf//7n77//nu/fw+BcE6UmTt3rrp3764uXbr86tgaPScq9bJdRy1atMhCQ0NtwYIFtm3bNhs5cqRFRUX5vUvCNffee69FRkbamjVr/N6Gdvz4cTMz27lzpz322GO2adMm2717t7355pvWunVru+6663zHKHuL60033WRbtmyxFStW2EUXXVThW1zHjh1r27dvt1mzZtWKt7iWefjhh23NmjW2e/du++ijjyw1NdWaN29uhw4dMrMzb3lOTEy0VatW2aZNmywlJcVSUlJ8968La/Bzp0+ftsTERBs3bpzf9rp+Phw5csQ2b95smzdvNkk2bdo027x5s+9dMVlZWRYVFWVvvvmmffbZZ9a/f/8K3/LctWtX27Bhg3344YfWtm1bv7e3FhYWmsfjsb/+9a+2detWW7RokTVs2LDc2zrr169vTz/9tG3fvt0mTZr0u7699VzrcPLkSbvlllusRYsWtmXLFr/vG2Xv+li3bp1Nnz7dtmzZYrt27bKXXnrJLrroIrvjjjucWodfW4sjR47Y3//+d8vJybHdu3fbe++9Z926dbO2bdvaiRMnfMeo6+dEmaKiImvYsKHNnj273P1r2zkRENFiZjZz5kxLTEy0kJAQ69mzp61fv76mp3RBJFV4mz9/vpmZ7du3z6677jpr1qyZhYaG2iWXXGJjx471+70cZmZ79uyxvn37Wnh4uDVv3twefvhhKykp8RuzevVqu+KKKywkJMRat27t+xq1weDBgy0uLs5CQkLs4osvtsGDB9vOnTt9+3/88Ue77777rGnTptawYUP74x//aAcPHvQ7hutr8HPvvvuuSbK8vDy/7XX9fFi9enWF/x6GDh1qZmfe9jxhwgTzeDwWGhpqvXv3LrdG33//vd1+++3WuHFji4iIsGHDhtmRI0f8xnz66ad2zTXXWGhoqF188cWWlZVVbi6vv/66XXrppRYSEmIdOnSwZcuWVdvjPtu51mH37t2/+H2j7Hf55ObmWnJyskVGRlpYWJhddtll9uSTT/r9IDer/etgdu61OH78uN1000120UUXWYMGDaxly5Y2YsSIcv8jW9fPiTLPPfechYeHW2FhYbn717ZzIsjMrHLXZgAAAH5/df41LQAAoG4gWgAAgBOIFgAA4ASiBQAAOIFoAQAATiBaAACAE4gWAADgBKIFAAA4gWgBAABOIFoAAIATiBYAAOAEogUAADjh/wFCfCao5yKmiwAAAABJRU5ErkJggg==",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "c = 0.5\n",
-    "r = genpareto.rvs(c, size=100, loc=0, scale=1_000, random_state=1)\n",
-    "count, bins, ax = plt.hist(r, 4, density=False)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "increased-joseph",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "r.shape=(100,)  r.min()=0.11438462947924068 r.mean()=1657.342156816486 r.max()=16949.974367913703\n",
-      "Frontière de l'histogramme :[1.14384629e-01 4.23757938e+03 8.47504438e+03 1.27125094e+04\n",
-      " 1.69499744e+04]\n",
-      "Nombre de personnes dans chaque bars :[90.  7.  2.  1.]\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(f\"{r.shape=}  {r.min()=} {r.mean()=} {r.max()=}\")\n",
-    "print(f\"Frontière de l'histogramme :{bins}\")\n",
-    "print(f\"Nombre de personnes dans chaque bars :{count}\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "exterior-knitting",
-   "metadata": {},
-   "source": [
-    "On voit sur l'histogramme qu'on a 90% des personnes qui gagnent moins de 4 237 €\n",
-    "\n",
-    "Et seulement 1% qui gagnent plus de 12 700 €, avec un maximum de 16 949 €"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "standing-dispatch",
-   "metadata": {},
-   "source": [
-    "## Génération d'un grand nombre de données"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "excess-candy",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def get_random_data(nb_zeros: int, nb_above_zero: int, c=0.9, scale=80_000):\n",
-    "    \"\"\"\n",
-    "    ::nb_zeros:: Nombre d'individus à 0\n",
-    "    ::nb_above_zero:: Nombre d'individus pour lesquels générer une valeur\n",
-    "    \"\"\"\n",
-    "    zeros = np.zeros((nb_zeros,))\n",
-    "    # Using numpy.random.pareto() method\n",
-    "    pareto = genpareto.rvs(c, size=nb_above_zero, loc=0, scale=scale, random_state=1)\n",
-    "    return np.concatenate((zeros, pareto), axis=0)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "variable-hunter",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "r.shape=(38000000,)  r.min()=0.0 r.mean()=15795.173430857798 r.max()=375678496.8283032\n"
-     ]
-    }
-   ],
-   "source": [
-    "c = 0.6\n",
-    "r = get_random_data(\n",
-    "    nb_zeros=2_000_000, nb_above_zero=36_000_000, c=c, scale=4000 * (1 / c)\n",
-    ")\n",
-    "print(f\"{r.shape=}  {r.min()=} {r.mean()=} {r.max()=}\")\n",
-    "df = pd.DataFrame({\"revkire\": r})"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "imposed-scene",
-   "metadata": {},
-   "source": [
-    "### Calcul des centiles"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "terminal-minority",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0.5"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "nb_quantiles = 100\n",
-    "centile = [(1 / nb_quantiles) * (i + 1) for i in range(nb_quantiles)]\n",
-    "centile[49]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "sized-benefit",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "quantiles = df.quantile(centile)\n",
-    "df_quantiles = pd.DataFrame(quantiles)\n",
-    "df_quantiles[\"quantiles\"] = df_quantiles.index * 100\n",
-    "df_quantiles[\"quantiles\"] = df_quantiles[\"quantiles\"].astype(int)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "eleven-excerpt",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAABmIAAALoCAYAAABrpOraAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACo5ElEQVR4nOzdeZzVdb0/8NecQRKQGSANb4oLmpjXNRdSUpNIwyUSNyoVTY2MLC1NunlN018qLWrSzXJJxVy7pNmCSyZetUy7pllmBomAiQswM2wic+b3B3cmhgGZ7TBz4Pl8PHhc53s+n+/3fT5ztOt5+f58KhoaGhoCAAAAAABApyt0dQEAAAAAAADrK0EMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAACUwIQJEzJ8+PBm14YMGZKrrrqqiyr6l8cffzxDhgzJ448/3tWldIkN/f0DAADrVo+uLgAAADrqpZdeyrXXXptHH300r776ajbaaKPssMMOGTlyZI477rhsvPHGJXnu3Llzc8cdd2TEiBF573vfW5JnlIPZs2fnQx/6UNPPFRUVqaqqyq677prx48dnjz32aDb+qquuyqRJk1Z7rwsuuCAf//jHk6wIrlbWp0+f7LTTTjn11FPzwQ9+sHPfRDey6vtutOmmm+bRRx9t+rm2tjbDhg3LsmXL8stf/jLbbbddizkTJkzIvffem6eeeqrZ9b/+9a8ZO3Zs+vTpk5tuuilbbrllTjjhhPz+979f7bO33XbbTJ06dY01r/oZKBQKGThwYP793/89n/vc51r8/bF48eL86Ec/ytSpU/PSSy+lR48eGTJkSI499tiMGjUqFRUVTfX/9Kc/XeNzGx155JG59NJLO/Qe/vnPf+a///u/89BDD2XmzJkpFArZYYcdcvrpp2e//fZrMb62tjbf/OY3c//992fp0qXZZZddMmHChPz7v/97s3G//OUv8+CDD+aZZ57JzJkzs88++2Ty5MmrreHZZ5/N5ZdfnqeeeioNDQ3ZY489cs4552zQ/3wBAFgfCGIAAChrDz30UL7whS+kZ8+eGTVqVHbYYYe89dZb+cMf/pBvfvOb+fvf/56LLrqoJM9+9dVXM2nSpGyxxRYtvii96KKL0tDQUJLndleHH354DjjggBSLxbz44ou55ZZbcuKJJ+YnP/nJasOFCy64IL179252bbfddmv287BhwzJq1Kg0NDTk5Zdfzq233prPfOYzueaaa7L//vuX9P10pcb3vbJVA8WpU6emoqIim222WX72s5/lrLPOatW9//a3v+Wkk05K7969c+ONN2bLLbdsem3zzTfPF7/4xRZz+vbt26p7r/wZmD59em699dY8/PDDueOOO5r+Hnn99ddz0kknZfr06Tn00ENz/PHH580338x9992Xc889N9OmTcu3vvWtVFZW5rjjjsu+++7bdP/Zs2fnu9/9bo477rjsueeeTde32mqrDr+HX//617nmmmsyYsSIHHnkkVm+fHnuvvvunHzyyfnGN76Ro446qmlssVjMpz/96Tz//PM55ZRT0r9//9xyyy054YQTMmXKlGyzzTZNY2+99dY8++yz2WWXXbJgwYI1Pv/Pf/5zPvGJT+Tf/u3f8rnPfS7FYjG33HJLjj/++Nx5550ZPHjw29YPAED3JYgBAKBszZo1K2eddVbe/e5358Ybb8y73vWuptc++clPZubMmXnooYe6pLaNNtqoS57blXbaaadm4cGee+6Z0047LbfeemsuuOCCFuMPOeSQDBgw4G3vuc022zS75yGHHJJDDz00N91003odxKz6vlfnZz/7WQ488MC8+93vzs9//vNWBTEvvPBCxo4dm4033jg33XRTBg0a1Oz1vn37rvW5b2fVz8D73ve+nH766bn11lvz9a9/PUly7rnnZvr06Zk0aVKzLpoTTzwxl112Wa6//vq8973vzac//enssccezTqq/vSnP+W73/1udt999zXW2d73MHTo0PzmN79p9pn8+Mc/nlGjRuW73/1usyBm6tSpeeqpp3LllVfmIx/5SJJk5MiROeSQQ3LVVVfl29/+dtPYiRMnZuDAgSkUCjn88MPX+Pwrr7wyG2+8cW677bb0798/SfLRj340hxxySC6//PJusa0hAADt44wYAADK1rXXXpvFixfn//2//9cshGm09dZbZ+zYsc2u3X333Rk9enR23XXX7LPPPjnrrLPyz3/+s9mYE044IYcffnj+/ve/54QTTshuu+2W/fffP9dcc03TmMcffzxHH310kuQrX/lKhgwZkiFDhmTKlClJVn9GzOrMnTs3X/nKV7Lffvtl5513zmGHHZaf/OQnLcZNnjw5hx12WHbbbbfsvffeGT16dO6555613v+VV17JZz/72ey+++7Zd999841vfCPLli1b7dinn346p5xySvbcc8/stttuOf744/OHP/xhrc9Yk7322ivJisCss2y33Xbp379/XnrppVaNb+37f/LJJ/P5z38+H/zgB7PzzjvnwAMPzDe+8Y0sXbq02bgJEyZkjz32yNy5c/PZz342e+yxR97//vfnsssuS319fbOxv/jFLzJ69Ojsscceed/73pcjjjgiN954Y/vf/EpefvnlPPnkkzn00ENz2GGHZfbs2fnf//3ft50zffr0nHTSSenZs+dqQ5hSeP/7359kRSdLkvzxj3/MI488kiOPPLJZCNPoS1/6UrbZZptce+21Lda+1N7znve0CAZ79uyZAw88MK+88koWLlzYdP3ee+/NpptumoMPPrjp2oABAzJy5Mj8+te/bvYZ+7d/+7cUCmv/V+8nn3wy++67b1MIkyTvete7ss8+++Q3v/lNFi1a1JG3BwBAF9IRAwBA2frNb36TQYMG5X3ve1+rxn//+9/PlVdemZEjR+boo4/OvHnzcvPNN+eTn/xk7rrrrlRVVTWNrampyamnnpoPf/jDGTlyZO69995861vfyg477JADDzww2223XT7/+c+32CaptbUkK7ZoOvbYY1NRUZFPfvKTGTBgQB5++OF89atfzcKFC3PSSSclSe64445cfPHFOeSQQ3LiiSfmzTffzPPPP5+nn346RxxxxBrvv3Tp0owdOzb//Oc/c8IJJ+Rd73pX7r777vzud79rMfa3v/1tTjvttOy888753Oc+l4qKikyZMiVjx47NLbfckl133bXV76vRnDlzkqTZuq6spqam2c+VlZWprq5+23vW1dWltra22VZUa9KW9z916tQsXbo0H//4x9OvX78888wzufnmm/PKK6/ku9/9brOx9fX1OeWUU7Lrrrvmy1/+cn7729/m+uuvz6BBg/KJT3wiSfLoo4/mi1/8Yvbdd9+cffbZSZIZM2bkf//3f1uEg6vz5ptvZt68ec2ubbLJJunZs2eS5Oc//3l69eqVgw46KBtvvHG22mqr3HPPPWv8/M2YMSNjx45NZWVlbrrppjWuX319fYvnJiu2RVt1G7nWaAzM+vXrl2TF37NJ8rGPfWy143v06JHDDz88kyZNyv/+7/+u9myWtens9/Daa6+lV69e6dWrV9O15557LjvttFOLgGWXXXbJ7bffnn/84x9rPOtnTZYtW7ba86w23njjvPXWW3nhhRey++67t7l+AAC6niAGAICytHDhwsydO3e1/1X96syZMydXXXVVzjzzzHzmM59pun7wwQfnyCOPzC233NLs+quvvprLLrus6Qvjo48+OsOHD89///d/58ADD8ymm26aAw44YK3bJL2dyy+/PPX19bnnnnua/iv4j3/84/niF7+YSZMmZcyYMdl4443z0EMP5T3veU+LQGBtbr/99rz44ou54oorMnLkyCRpOgx9ZQ0NDbngggsydOjQXHvttU0HpY8ZMyaHHXZYrrjiilx//fVrfd6SJUsyb968pjNiLr300iQrthNbncYtnRptscUWefDBB5tdWzmQePnll3PFFVekvr5+jfdsz/tPkrPPPrvZl+DHHXdctt5663znO9/Jyy+/nHe/+93Naho5cmTGjx+fZMXv7Mgjj8xPfvKTpiDmoYceyiabbJLrrrsulZWVa611VT/5yU9adEZdcsklGT16dJLknnvuyYc+9KGmmg899NDcfvvt+epXv5oePZr/a95bb72VE088MRUVFbnpppuy9dZbr/G5M2bMaHYmy8rr0bi12NtZ+TMwY8aMXHLJJUn+9bv++9//niTZcccd13iPxtemT5/eriCmo+9hZTNnzsz999+fj3zkI81+j6+99lpTx9fKGjvzXn311TYHMdtuu23++Mc/pr6+vulZy5YtyzPPPJNkRfccAADlSRADAEBZatwmqE+fPq0af//996dYLGbkyJHN/mv5TTfdNFtvvXUef/zxZkFM7969m31h37Nnz+yyyy6dts1WQ0ND7rvvvowcOTINDQ3NavrABz6QX/ziF/nzn/+cPffcM1VVVXnllVfyzDPPtKkz5eGHH85mm23WLPDo1atXjj322Hzzm99suvbcc8/lxRdfzOmnn5758+c3u8e+++6bu+++O8Vica3bK1111VXNzrHo3bt3JkyY0CJwWXn8Jpts0vTzO97xjhZjVg0kNtpoo5x66qk5+eST37aWpPXvP0mzEGbx4sVZunRp9thjjzQ0NOQvf/lLsyAmWRG+rGzPPffMz372s6afq6qqsmTJkjz66KM54IAD1lrrqj70oQ/l+OOPb3Zt++23T5L89a9/zd/+9rd86UtfanrtsMMOy9VXX51HHnkkH/zgB5vNq6+vz4IFC7Lttts22/ZqdbbYYotcfPHFLa4PHDiwVXWv+hnYZJNNcvbZZzdt4dW4vdbb/X3b+NrKW4G1RUffQ6MlS5bkC1/4QjbeeONma52s6LZq7E5aWeO1N998s03PSpJPfOITueCCC/LVr341p556aorFYr7//e/ntddea3omAADlSRADAEBZavwCv7XnJrz44otpaGhodqbDylbtIth8882bOkMaVVdX5/nnn29HtS3NmzcvtbW1uf3223P77bevcUySnHbaaXnsscdyzDHHZOutt86wYcNy+OGHN22HtiZz5szJ1ltv3eJ9bLvtts1+fvHFF5OsOER9Terq6ta6bdhxxx2Xj3zkI3nzzTfzu9/9LpMnT25xbsrK9tprrxZncqyqMZB466238qc//SlXX311li5d2qozN1r7/pMV3Tbf/e538+CDD7bYMm3VQOAd73hHi7qrq6ubzfvEJz6RX/3qVznttNMycODADBs2LCNHjmx1KLP55puvsRvkZz/7WXr37p1BgwZl5syZTTVtscUWueeee1oEMRtvvHEuvvjinH322Rk3blyuv/76NW7R1bt373Z1oTRq/AxUVFSkqqoq73nPe5oFFo0hy6JFi9a4ZV1rwpq309H3kKwIr84666z8/e9/zzXXXNMixNl4441Xe9ZQ47XVhYpr8/GPfzyvvPJKrrvuuvz0pz9Nkuy888455ZRTcvXVV7d7PQAA6HqCGAAAytImm2ySd73rXXnhhRdaNb5YLKaioiLXXHPNareKWvWL6fZsJ9UWxWIxSfLRj340Rx555GrHNG5ttN1222Xq1Kl56KGH8j//8z+57777csstt2T8+PH5/Oc/3+FaGhoakiRf/vKX8973vne1Y1pztsbWW2/d9AX4QQcdlEKhkG9/+9sZOnRodtlll3bVtnIgceCBB6Z///75+te/nqFDh64xVGur+vr6nHzyyU3nAg0ePDi9e/fO3LlzM2HChKbfVaPWfDbe+c535q677sojjzyShx9+OA8//HCmTJmSj33sY7nsssvaXWtDQ0N+8YtfZPHixTn00ENbvD5v3rwsWrSoxZf2hx12WGpqanLhhRfmjDPOyPe///3VdnR01MqfgdXZbrvt8sADD+T555/P3nvvvdoxjWFnYwdQVzjvvPPy0EMP5Vvf+tZqtznbbLPNmjpVVvbqq68m+dcWZW111lln5VOf+lReeOGF9O3bN0OGDMl3vvOdJMk222zTrnsCAND1BDEAAJStgw46KLfffnueeuqp7LHHHm87dquttkpDQ0O23HLL1XZEtMeqnRZtMWDAgPTp0yfFYrFV//V+7969c+ihh+bQQw/NsmXLcsYZZ+Tqq6/OuHHj1vhf32+xxRb529/+loaGhma1/uMf/2g2btCgQUlWhFsd7SRY2emnn54777wzV1xxRa677rpOuedxxx2XG264IVdccUU+/OEPv+3voLXv/29/+1tefPHFZmcCJcmjjz7aoVp79uyZ4cOHZ/jw4SkWi7ngggty++2357Of/ezbntPydn7/+9/nlVdeyec///lst912zV6rra3Nf/7nf+aBBx5Y7Tk4n/jEJ1JTU5Mrrrgi55xzTi6//PJWdRZ1pg9+8IP5wQ9+kLvuumu1QUzjmUnV1dV53/vet05ra3TZZZdlypQp+Y//+I8cfvjhqx2z44475g9/+EOLLfueeeaZ9OrVq0P/jKmurm52/sxjjz2WzTffPIMHD273PQEA6Frr9v/rBgCATnTqqaemd+/eOe+88/L666+3eP2ll17KjTfemCQ5+OCDU1lZmUmTJjV1gDRqaGhocTZKa/Tq1SvJii/A26qysjKHHHJI7r333vztb39r8frKZ8asWlvPnj2z3XbbpaGhIW+99dYan3HAAQfk1VdfzdSpU5uuLVmyJHfccUezcTvvvHO22mqrXH/99avd6m3lWtqiqqoqxx13XB555JE899xz7brHqnr06JGTTz4506dPz69//eu3Hdva99/4RfrKn4uGhobcdNNN7a5z1d9ZoVBo6nBa3ZZWrdW4Ldmpp56aj3zkI83+HHvssdlmm21yzz33rHH+6aefnpNOOilTp07N+eef3+462ut973tf9ttvv0yZMiW/+c1vWrx++eWX58UXX8ypp57a7NyedeXaa6/N9ddfn8985jMZO3bsGsd95CMfyeuvv5777ruv6dq8efMyderUHHTQQZ3WbfTLX/4yf/rTnzJ27Nh1HpoBANB5dMQAAFC2ttpqq3zrW9/KWWedlUMPPTSjRo3KDjvskGXLluWpp57K1KlTM3r06KaxZ555Zr797W9nzpw5GTFiRPr06ZPZs2fngQceyLHHHptTTjmlzc+vqqrKbbfdlj59+qR3797ZddddmzpM1uZLX/pSHn/88Rx77LE55phjsv3226empiZ//vOf89vf/ja///3vkySnnHJKNt1007zvfe/LO9/5zsyYMSM333xzDjzwwGaH3a/q2GOPzY9//OOce+65+fOf/5zNNtssd999d4svuAuFQi6++OKcdtppOfzwwzN69OgMHDgwc+fOzeOPP55NNtkkV199dZvWptGJJ56YG2+8MT/84Q9z+eWXt+seqxo9enS++93v5pprrsmIESPWOK6173/w4MHZaqutctlll2Xu3LnZZJNNcu+997YrYGt03nnnpaamJu9///szcODAvPzyy7n55pvz3ve+t0UnS2stW7Ys9913X/bbb781dkENHz48N910U9544428853vXO2YCRMmpLa2NnfeeWeqq6tzzjnnNL1WV1eXu+++e7XzVtdl0x6XXXZZTjrppHz2s5/N4Ycfnr322qvpvf3+97/PoYce2ua/F1fW3vdw//3355vf/Ga22WabDB48uMU9hg0blk033TRJcsghh2T33XfPV77ylfz9739P//79c+utt6a+vj5nnHFGs3lPPPFEnnjiiSQrwprFixfnv/7rv5Ike++9d1Nn0BNPPJHvfe97GTZsWPr165enn346U6ZMyf77758TTzyxfYsBAEC3IIgBAKCsfehDH8rPfvazXHfddfn1r3+dW2+9NT179syQIUMyYcKEHHvssU1jP/3pT2ebbbbJDTfckO9973tJVpxBMmzYsAwfPrzNz95oo41y6aWX5jvf+U4uuOCCLF++PJdcckmrg5hNN900d955Z773ve/l/vvvz6233pp+/fpl++23z9lnn9007rjjjss999yTH/3oR1m8eHE233zznHDCCfnsZz/7tvfv1atXbrjhhlx00UW5+eabs/HGG+eII47IAQcckFNPPbXZ2KFDh+b222/Pf/3Xf+Xmm2/O4sWLs9lmm2XXXXfNcccd1+a1aTRw4MAcccQRufvuu/PSSy9lq622ave9Gm288cY5/vjjc9VVV+Xxxx/P0KFDVzuute9/o402ytVXX52LL744P/jBD/KOd7wjH/7wh/PJT36y3eHDRz/60dxxxx255ZZbUltbm8022ywjR47MGWec0e7Ohoceeii1tbU56KCD1jjmoIMOyvXXX59f/OIXa/zyvqKiIhdffHFqa2tz7bXXprq6Op/+9KeTJK+88kq+/OUvr3ZeZwUx73rXu3LnnXfmRz/6UaZOnZr77rsvlZWVGTJkSC699NJ87GMf69C2f+19D3/961+TJC+++OJq5990001NQUxlZWV++MMfZuLEiZk8eXLefPPN7LLLLrnkkktabCH2u9/9LpMmTWp27corr0ySfO5zn2sKYgYOHJjKyspcd911WbRoUbbccsuceeaZOemkk9Kjh391BwAoZxUNq+7LAAAAAAAAQKewySwAAAAAAECJCGIAAAAAAABKRBADAAAAAABQIoIYAAAAAACAEhHEAAAAAAAAlIggBgAAAAAAoEQEMQAAwBoNGTIkX//61zvtfrNnz86QIUMyZcqUpmtXXXVVhgwZ0mnPmDJlSoYMGZLZs2d32j1LYXVrsbax1113XcnrevzxxzNkyJA8/vjjJX8WAABsCHp0dQEAAEDnmTJlSr7yla+s8fXbb789u++++7oriDaZNm1annnmmZxxxhldXQoAANBJBDEAALAe+vznP58tt9yyxfWtttqqC6phdbbYYos888wz6dHjX/9aNm3atPz4xz/u0iBm7733zjPPPJONNtqoy2oAAID1iSAGAADWQwcccEB22WWXri6D1Vi+fHmKxWJ69uyZd7zjHV1dTguFQqFb1gUAAOXKGTEAALCBKhaLufHGG3PEEUdkl112yfvf//6ccsop+dOf/tRi7AMPPJDDDz88O++8cw477LA8/PDDLcbMnTs3X/nKV7Lffvs1jfvJT37S7vruvvvujB49Orvuumv22WefnHXWWfnnP//Z7vv9+Mc/zmGHHZadd945H/jAB3LhhRemtrZ2teM+9KEPZdddd83RRx+dJ598MieccEJOOOGEpjHLli3LlVdemdGjR2fPPffM7rvvnk984hP53e9+1+xeK5/tcsMNN2TEiBHZZZddMn369BZnxEyYMCE//vGPk6w4m6fxz6puv/32jBgxIjvvvHOOOuqoPPPMM81enzBhQvbYY4+8/PLLGTduXPbYY4/sv//+Tfd+/vnnc+KJJ2b33XfPQQcdlHvuuafZ/DWdEdP43LdblzWdz7Omez799NM55ZRTsueee2a33XbL8ccfnz/84Q8t3jMAAJQzHTEAALAeWrhwYebNm9fsWkVFRfr379/081e/+tVMmTIlBxxwQI4++ujU19fnySefzNNPP92sm+YPf/hD7rvvvnziE59Inz59Mnny5Hz+85/Pb37zm6b7vf766zn22GNTUVGRT37ykxkwYEAefvjhfPWrX83ChQtz0kkntan+73//+7nyyiszcuTIHH300Zk3b15uvvnmfPKTn8xdd92VqqqqNt3vqquuyqRJk7Lffvvl4x//eP7xj3/k1ltvzZ/+9KfceuutTdtw3XLLLfn617+evfbaKyeddFLmzJmT8ePHp6qqKptvvnmz9b3zzjtz+OGH55hjjsmiRYvyk5/8JKeeemruvPPOvPe97232/ClTpuTNN9/Msccem549e6a6ujrFYrHZmOOOOy6vvvpqHn300UycOHG17+PnP/95Fi1alOOOOy4VFRW59tprc8YZZ+SBBx5otpVYfX19TjvttOy11145++yzc8899+TrX/96evXqlcsvvzxHHHFEDj744Nx2220599xzs/vuu2fQoEFrXL8777wz559/fvbYY4+MHTs2s2bNyumnn57q6ur827/9W5t+F41++9vf5rTTTsvOO++cz33uc6moqMiUKVMyduzY3HLLLdl1113bdV8AAOhuBDEAALAeWl3w0bNnz6Zul9/97neZMmVKTjjhhJx33nlNYz71qU+loaGh2bzp06fnl7/8ZdP5MkOHDs2oUaPyi1/8Iscff3yS5PLLL099fX3uueeepnDm4x//eL74xS9m0qRJGTNmTDbeeONW1T5nzpxcddVVOfPMM/OZz3ym6frBBx+cI488Mrfcckuz62szb968/OAHP8gHPvCBXHPNNSkUVmwMMHjw4Hz961/Pz372sxx11FFNXS677LJLbrzxxqazW4YMGZIJEyY0C2Kqq6vz4IMPpmfPnk3Xjj322IwcOTKTJ0/ON77xjWY1vPLKK7n//vszYMCApmurdo3sscce2WabbfLoo49m1KhRq30vL7/8cu67775UV1cnSbbddtt89rOfzSOPPJKDDjqoadybb76Zj370oxk3blyS5Igjjsj++++f//iP/8h3vvOdHHrooUmS/fbbLyNHjsxdd921xnNp3nrrrVx++eV573vfm5tuuqnpPW+//fb5z//8z3YFMQ0NDbngggsydOjQXHvttamoqEiSjBkzJocddliuuOKKXH/99W2+LwAAdEe2JgMAgPXQ+eefnx/96EfN/lxzzTVNr993332pqKjI5z73uRZzG78Ub7Tffvs1hTBJsuOOO2aTTTbJrFmzkqz4Uv2+++7L8OHD09DQkHnz5jX9+cAHPpC6urr8+c9/bnXt999/f4rFYkaOHNnsXptuumm23nrrFttbrc1jjz2Wt956KyeeeGJTCJMkxxxzTDbZZJNMmzYtSfLss89mwYIFOfbYY5tCmGRFiNEYfDSqrKxsCiSKxWIWLFiQ5cuXZ+edd85f/vKXFjUcfPDBzUKY9jr00EOb1bLXXnslSdPvYmXHHHNM019XVVVl2223Ta9evTJy5Mim64MHD05VVdVq5zd69tln88Ybb2TMmDHNgqcjjzwyffv2bdf7eO655/Liiy/miCOOyPz585t+x4sXL86+++6bJ554okXHEAAAlCsdMQAAsB7addddm20vtqqXXnop73rXu9KvX7+13mt1HQ/V1dVN56vMmzcvtbW1uf3223P77bev9h6rbpP2dl588cU0NDTk4IMPXu3rK4ckrfHyyy8nWRE6rKxnz54ZNGhQ5syZ02zcyqFT4/O22GKLFvf96U9/muuvvz7/+Mc/8tZbbzVd33LLLVuMXd219lj1d9EYyqx61s073vGOFsFP3759s/nmm7cI2vr27bvas3IaNa7L1ltv3ez6Rhtt9Lbbmb2dF198MUly7rnnrnFMXV1diwAMAADKkSAGAAB4W5WVlau93riFWWPnwkc/+tEceeSRqx27ukPn16RYLKaioiLXXHPNap/du3fvVt+rVO6+++5MmDAhI0aMyCmnnJJ3vvOdqayszA9+8IPVdpe0dlu2tVnb72Jt41o7v71WDXkardrd0vi8L3/5yy3O02nUHX7PAADQGQQxAACwAdpqq63yyCOPZMGCBa3qink7AwYMSJ8+fVIsFrPffvt1Sm0NDQ3Zcssts+2223b4fu9+97uTJDNmzGjWwbFs2bLMnj27qebGcS+99FLe//73N41bvnx55syZ0yxMuvfeezNo0KBMmjSpWfjw3e9+t0O1rinI6EqN6zJz5szsu+++TdffeuutzJ49OzvuuGPTtaqqqiQrullW1th11Kjx97DJJpt0ymcGAAC6M2fEAADABujggw9OQ0NDJk2a1OK1tnZHVFZW5pBDDsm9996bv/3tby1eb8u2ZI21VVZWZtKkSS1qaWhoyPz589t0v/322y8bbbRRJk+e3Ox+P/nJT1JXV5cDDzwwSbLzzjunX79+ueOOO7J8+fKmcffcc09qamqa3bOxs2Tl+z399NP54x//2KbaVtWrV68kLbca60o777xzBgwYkNtuuy3Lli1ruv7Tn/60RZ2N27o98cQTTdfq6+tzxx13tLjnVlttleuvvz6LFi1q8cy2fmYAAKA70xEDAADroYcffjgzZsxocf1973tfBg0alPe///0ZNWpUJk+enJkzZ2b//fdPsVjMH/7whwwdOjTHH398m573pS99KY8//niOPfbYHHPMMdl+++1TU1OTP//5z/ntb3+b3//+962+11ZbbZUzzzwz3/72tzNnzpyMGDEiffr0yezZs/PAAw/k2GOPzSmnnNLq+w0YMCDjxo3LpEmTcuqpp2b48OH5xz/+kVtuuSW77LJLPvrRjyZZcWbMGWeckYsuuihjx47NyJEjM2fOnEyZMqXFuTEf/OAHc99992X8+PH54Ac/mNmzZ+e2227L9ttvn8WLF7e6tlX9+7//e5Lk4osvzgc+8IFUVlbmsMMOa/f9OsNGG22UM888M+eff37Gjh2bQw89NLNnz86UKVNanBHznve8J7vvvnu+853vpKamJtXV1fnlL3/ZLNhKkkKhkIsvvjinnXZaDj/88IwePToDBw7M3Llz8/jjj2eTTTbJ1VdfvS7fJgAAlIwgBgAA1kNr2iLrkksuafry/JJLLsmQIUPyk5/8JBMnTkzfvn2z8847Z4899mjz8zbddNPceeed+d73vpf7778/t956a/r165ftt98+Z599dpvv9+lPfzrbbLNNbrjhhnzve99Lkmy++eYZNmxYhg8f3ub7nXHGGRkwYEBuvvnmXHLJJamurs6xxx6bL37xi9loo42axh1//PFpaGjIj370o1x22WXZcccd8/3vfz8XX3xx3vGOdzSNGz16dF5//fXcfvvteeSRR7L99tvnm9/8ZqZOndqm0GlVBx98cE444YT84he/yM9+9rM0NDR0eRCTJMcdd1zq6+tz3XXXZeLEidlhhx3y/e9/P1deeWWLsd/61rdy/vnn54c//GGqqqpy9NFHZ+jQoTn55JObjRs6dGhuv/32/Nd//VduvvnmLF68OJtttll23XXXHHfccevqrQEAQMlVNHTWqYwAAADroWKxmH333Tcf/vCHc/HFF3d1Od3KCSeckCSZPHlyF1cCAADdlzNiAAAA/s+bb77Z4lyau+66KwsWLMg+++zTRVUBAADlzNZkAAAA/+ePf/xjLrnkknzkIx9Jv3798pe//CU/+clPssMOO+QjH/lIV5cHAACUIUEMAADA/9liiy2y+eabZ/LkyU2HzY8aNSpnn312evbs2dXlAQAAZcgZMQAAAAAAACXijBgAAAAAAIASEcQAAAAAAACUiDNiWqmhoSHFol3cAAAAAABgQ1coVKSioqJVYwUxrVQsNmTevEVdXQYAAAAAANDFBgzok8rK1gUxtiYDAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAokR5dXQAAAAAAAEBXKRQqUihUlOz+ghgAAAAAAGCDVChUZED/3qkotG0DsYaGhlaPFcQAAAAAAAAbpEKhIhWFQmru/13q59e2ak5l/6pUf/j9rX6GIAYAAAAAANig1c+vzfLXF5Tk3m3rtQEAAAAAAKDVBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCLrdRAzbdq0fOxjH8uoUaMyevToPPXUU11dEgAAAAAAsAHp0dUFlNJXv/rV3HDDDdl+++3zm9/8JhdffHH++7//u6vLAgAAAAAANhDdriNm5syZOf/88zNq1KjstNNOOfzww1c7bvr06Tn55JOz++67Z9iwYZk4cWKWLVvWbEyhUEhdXV2SpK6uLgMHDix5/QAAAAAAAI26XUfMCy+8kGnTpmW33XZLsVhMQ0NDizE1NTUZO3Zsttlmm1x11VWZO3duLr300ixdujTnn39+07hvfvObOf3007PxxhunoaEht95667p8KwAAAAAAwAau2wUxw4cPz4gRI5IkEyZMyLPPPttizG233ZZFixZl0qRJ6devX5Kkvr4+F154YcaNG5eBAwdm+fLl+eEPf5gbbrghO+64Y+64446cd955uf7669fl2wEAAAAAADZg3S6IKRTWvlvaww8/nH333bcphEmSkSNH5mtf+1oeffTRjB49Os8991xqamqy4447JkmOOOKI/L//9/86VFuPHt1uJzcAAAAAAKCdKitL/71/twtiWmPGjBk56qijml2rqqrKZpttlhkzZiRJNt9887z00kv55z//mX/7t3/L//zP/2T77bdv9zMLhYr079+nQ3UDAAAAAAAblrIMYmpra1NVVdXienV1dWpqapIkm222Wc4999yceuqpqaysTO/evTvUEVMsNqS2dnG75wMAAAAAAN1LZWUhVVW9SvqMsgxiWuuoo45q0TnTEcuXFzvtXgAAAAAAwPqvLA89qaqqSl1dXYvrNTU1qa6u7oKKAAAAAAAAWirLIGbw4MFNZ8E0qqury2uvvZbBgwd3UVUAAAAAAADNlWUQc8ABB+Sxxx5LbW1t07WpU6emUChk2LBhXVgZAAAAAADAv3S7M2KWLFmSadOmJUnmzJmThQsXZurUqUmSffbZJwMGDMiYMWMyefLkjB8/PuPGjcvcuXMzceLEjBkzJgMHDuzK8gEAAAAAAJpUNDQ0NHR1ESubPXt2PvShD632tZtuuilDhw5NkkyfPj0XXXRRnnrqqfTp0yejRo3KWWedlZ49e5akrvr6YubNW1SSewMAAAAAAOtejx6F9O/fJ/PuuC/LX1/Qujmb9suAYw9u9TO6XRDTXQliAAAAAABg/bIugpiyPCMGAAAAAACgHAhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIR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AAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJSIIAYAAAAAAKBEBDEAAAAAAAAlIogBAAAAAAAoEUEMAAAAAABAiQhiAAAAAAAASkQQAwAAAAAAUCKCGAAAAAAAgBIRxAAAAAAAAJRIj64uoJSWLl2aiy++OE888UR69OiRgw8+OF/4whe6uiwAAAAAAGADsV4HMZdddlk23XTT3HvvvUmS119/vYsrAgAAAAAANiTdLoiZOXNmrrvuujz99NN54YUXMnjw4Pz85z9vMW769Om5+OKL89RTT6VPnz4ZNWpUzjzzzPTs2TNJsmjRotx777156KGHmuZsuumm6+ptAAAAAAAAdL8g5oUXXsi0adOy2267pVgspqGhocWYmpqajB07Nttss02uuuqqzJ07N5deemmWLl2a888/P0kya9asvPOd78xll12Wp556Kv37988555yTHXfccV2/JQAAAAAAYANV6OoCVjV8+PBMmzYt3/3ud/Pv//7vqx1z2223ZdGiRZk0aVL233//HH300TnnnHNy2223Ze7cuUmS5cuX529/+1v23XffTJkyJSeffHLGjx+/Lt8KAAAAAACwget2QUyhsPaSHn744ey7777p169f07WRI0emWCzm0UcfTZK8+93vTq9evTJixIgkyQc+8IEsXrw48+bNK0ndAAAAAAAAq+p2W5O1xowZM3LUUUc1u1ZVVZXNNtssM2bMSJIMGDAgu+22W5588snstdde+dOf/pSePXumf//+7X5ujx7dLrcCAAAAAADaqbKy9N/7l2UQU1tbm6qqqhbXq6urU1NT0/TzhRdemP/4j/9IXV1devXqlSuvvDIVFRXtemahUJH+/fu0u2YAAAAAAGDDU5ZBTGtts802ueWWWzrlXsViQ2prF3fKvQAAAAAAgK5XWVlIVVWvkj6jLIOYqqqq1NXVtbheU1OT6urqkj13+fJiye4NAAAAAACsf8ry0JPBgwc3nQXTqK6uLq+99loGDx7cRVUBAAAAAAA0V5ZBzAEHHJDHHnsstbW1TdemTp2aQqGQYcOGdWFlAAAAAAAA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AACADVChI5P32Wef/Pd//3eOP/74fPCDH8xll12WZ555pkMFzZw5M+eff35GjRqVnXbaKYcffvhqx02fPj0nn3xydt999wwbNiwTJ07MsmXLOvRsAAAAAACAztShjpjvfOc7Wbp0aX7zm9/kV7/6VW699dbccMMN2WKLLXLooYdm5MiRee9739ume77wwguZNm1adttttxSLxTQ0NLQYU1NTk7Fjx2abbbbJVVddlblz5+bSSy/N0qVLc/755zcb+7nPfS7FYjEHHnhgPv/5zzdtUwYAAAAAAFBqHQpikmTjjTfOyJEjM3LkyCxevDgPPvhgfvnLX+aGG27INddck6233jpTp05t9f2GDx+eESNGJEkmTJiQZ599tsWY2267LYsWLcqkSZPSr1+/JEl9fX0uvPDCjBs3LgMHDkyS3HLLLdl8882zaNGifPnLX861116b008/vaNvGQAAAAAAoFU6HMSsrHfv3jn88MNz0EEH5ac//Wkuv/zyzJw5s033KBTWvlvaww8/nH333bcphEmSkSNH5mtf+1oeffTRjB49Okmy+eabJ0n69OmTo48+OrfffnuballVjx4d2skNAAAAAABYjYqKihQKFa0eXyw2pKGhIZWV7f/eviNz26LTgpglS5bkwQcfzK9+9av8z//8T5YtW5atttoqI0eO7KxHNJkxY0aOOuqoZteqqqqy2WabZcaMGUmSxYsXp1gsZpNNNsny5ctz3333ZciQIe1+ZqFQkf79+3SobgAAAAAAoKWGYkMq2hDEtHX86lRV9erQ/NbqUBDz5ptv5qGHHsovf/nLPPzww1myZEm22GKLnHDCCTn00EOz0047dVadzdTW1qaqqqrF9erq6tTU1CRJ3njjjabzYerr67PHHnvkM5/5TLufWSw2pLZ2cbvnAwAAAAAALVVWFlJV1Ss19/8h9fMWrn38gE1S/eE9U1u7JEn7A5WOzm+tDgUx73//+7N06dK8613vyrHHHptDDz00u+22W2fV1iGDBg3K3Xff3an3XL682Kn3AwAAAAAAVqiftzDLX69p/fj6jn1n39H5rdWhIGb06NEZOXJk9tprr86qp1WqqqpSV1fX4npNTU2qq6vXaS0AAAAAAABr0qEg5j//8z87q442GTx4cNNZMI3q6ury2muvZfDgwV1SEwAAAAAAwKoKHb3BwoUL88Mf/jCn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ImbWzzSXXCJNTUFNQgVR0czXJQXRzFfTLJMScEtFVAQtRURBlPX8/uCaE8M5AzPgOE7cn+vyKoZzz/PM8Mw53znPWYiIiPSEEzFERERERERERERERER6wokYIiIiIiIiIiIiIiIiPeFEDBERERERERERERERkZ5wIoaIiIiIiIiIiIiIiEhPOBFDRERERERERERERESkJ5yIISIiIiIiIiIiIiIi0hNOxBAREREREREREREREekJJ2KIiIiIiIiIiIiIiIj0hBMxREREREREREREREREesKJGCIiIiIiIiIiIiIiIj3hRAwREREREREREREREZGemBq6A1R9KJUKKJUKnTLFxQKKiwU99YiIiIiIiIiIiIiISL84EUPPhVKpQD0bcyiUup2EJRQXI/NBrp56RURERERERERERESkX5yIoedCqVRAoVQi68geFD7I0CpjatMAdb0H6nwWDRERERERERERERHRi4ITMfRcFT7IQGHGX4buBhERERERERERERHRc6HbdaKIiIiIiIiIiIiIiIhIa5yIISIiIiIiIiIiIiIi0hNOxBAREREREREREREREekJJ2KIiIiIiIiIiIiIiIj0hBMxREREREREREREREREesKJGCIiIiIiIiIiIiIiIj3hRAwREREREREREREREZGecCKGiIiIiIiIiIiIiIhITzgRQ0REREREREREREREpCeciCEiIiIiIiIiIiIiItITTsQQERERERERERERERHpCSdiiIiIiIiIiIiIiIiI9IQTMURERERERERERERERHrCiRgiIiIiIiIiIiIiIiI94UQMERERERERERERERGRnnAihoiIiIiIiIiIiIiISE84EUNERERERERERERERKQnnIghIiIiIiIiIiIiIiLSE07EEBERERERERERERER6QknYoiIiIiIiIiIiIiIiPSEEzFERERERERERERERER6wokYIiIiIiIiIiIiIiIiPeFEDBERERERERERERERkZ5wIoaIiIiIiIiIiIiIiEhPFIIgCIbuhDEQBAHFxXyrqsLERIminEcQiou0Wl6hNIGJhRWKiopL5R9CKCrULm9iChML6zL5LK3yJdm6YlaVL8y5D2jTvokpTC3qq7VdmHMfQlGBln03k+QLdMyblcnn52RAKNbyvVOaooZFg0rly2ZV+bzHGVq/9zXrqLed9zgDxVr+3ZUy+adatq1qv5ZMvljL915pYvbM808eZ6C4uOK8UmmG2nWk731l8yYmSuRqmVXlzZ9x/rGO+TqVzJfNls4XaZE3kWk7J1e3v7uFuTRfpGXeRCafnatd31X9t3zG+Uda5k2UZrAyl773D3XIW5dp+2FuBgq17LupTP7BE91eu01t9XzmE93ar1cmn/EkAwVarG/NlKZoUFv63mU8ydQhX69M21laZf/J1y2Tf6hj3lomr12dYKY0kck/0jFvVSafrVW+JGspyRZq2bapxnxxBUlVXimTz9GxfQuZvC7tl80/1qr9krbryIzbyuX/yerS9zL53Fzd3jtzcz3kK+6/qVKplq1qviT7RLf3zrz2C5W/n/sUBVrmzZRK1DevVal82ax6vuLviGZKhbTtJ3m69b12TZm8dt9PzZQK2XyhlnlT2Xy+VvmSbA3pe/ekQOtxW7+2WZm2C3Tse9l8oY550zJ1QiEKtfvTwVQJ2JTJP3xSpFP71rVN1GusJ0Uo0iJvolTAqlRWlc9+UqTVvg2lUgHLMm0/1rJtVft1ZPJaDnsolZDkc3XMm5fJP8nVLq9UArXNpe9dZfMmJko81TKryteSyQvabWqgMJHm83KLoOWmCkoToGbZ/OMiCFr2X6EEatZRz+c/1q7/ChOgRh3pe1/wWLv+K00AszJtF+QUQdBy3CqUCphZqOcLc4ogFGmZN1HAtGw+W7f2TS3V80XZ2rWvMFHAxFL63hVlF+qQNy3TtnZZzfkCHfNm0rwO7500n69jvoZMvuKBr1AqpdmcPN1eu0VNmbx2HzqFiVIm/xTQsn2YKGBiUUsmr+WH3kRZ+XyZ7D/5Jzrka5dpW8usxnyujnlz7ZYFJ2KIiIiIiIiIiIiIiIj0hpcmIyIiIiIiIiIiIiIi0hNOxBAREREREREREREREekJJ2KIiIiIiIiIiIiIiIj0hBMxREREREREREREREREesKJGCIiIiIiIiIiIiIiIj3hRAwREREREREREREREZGecCKGiIiIiIiIiIiIiIhITzgRQ0REREREREREREREpCeciCEiIiIiIiIiIiIiItITTsQQERERERERERERERHpCSdiiIiIiIiIiIiIiIiI9IQTMURERERERERERERERHrCiRgiIiIiIiIiIiIiIiI94UQMERERERERERERERGRnnAihoiIiIiIiIiI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/wuCgMTERMmXtytXrog3df835Y2574bODxw4EH/99RcmTZoEW1tbvPrqq7h79y58fX3Fo32zsrLg5uaGTz755Jllq3vemPv+LPIVqVmzJvr27Yu+ffvi0aNHzzVvyLare17fbU+cOBGBgYH47bffUKdOHSQnJ2PNmjX4+OOPkZaWBhcXF1y8eBFHjhzBggULnmnekG0be96Y+w4AgYGBmDJlCpKTk+Hu7g4zMzOcO3cOP/30E8aOHQsLCwsAwKVLl+Do6PhM84Zsu7rnDd13APD398e8efOQmpqK3r17o0WLFrCysgIAZGdnIyUlBXFxcThw4AAWLVok+xzlUQiaDv0homcmNTUVV69ehZeXV7nLPX36FPfv30eTJk1emLwx993QeUO2ffDgQWzevBnr16+XnP6rUlRUhAULFuDnn3/G0aNH1X7HfOXzxtx3ADh+/DgePnwIX19f2axKYGAg2rRpgwkTJrwweWPuu6Hzhu57eW7fvo20tDS0atVKLJ6fR5b5f/97L3cZs4YNG8Ld3V3tMT8/Pzg4OGD27Nn/mrwx9/1FyKukpKRg9+7dSExMREZGBoqLi2FtbQ1HR0d4eHjA29tb45lZVclW97wx970q+dGjR2PBggVwcHDQ+NzlqUrekG1X97yh+w6UHPkdGxuLwsJCDBw4EB06dMAff/yBJUuW4Nq1a3jllVcwfPhwjBkz5pnnDdm2seeNue8AkJCQgNDQUPz555/Iy8uDvb09Ro4ciUGDBonryKSkJNSoUQPOzs7PNG/Itqt73tB9B4CYmBiEhobixo0bku2xIAho1qwZAgMD0a9fP9l8eTgRQ0REREREREREREREBODWrVtISUkRzxa0srJCixYtYGdnV+nn5EQMERERERERERERERFRBR48eIDk5GR07NhRp5zmu6USERERERERERERERERAOC3337TeFm98nAihoiIiIiIiIiIiIiISE9MDd0BIiIiIiIiIiIiIiIiQ/Hx8dFqucePH1fq+TkRQ0RERERERERERERE1VZKSgocHR3RqlWrcpdLT0/HnTt3dH5+TsQQEREREREREREREVG11bJlS9jb2yM4OLjc5Q4dOoQzZ87o/Py8RwwREREREREREREREVVbbdq0QVJSklbLCoKg8/MrhMqkiIiIiIiIiIiIiIiI/gVSU1Nx9epVeHl5lbvc06dPcf/+fTRp0kSn5+dEDBERERERERERERERkZ7w0mRERERERERERERERER6wokYIiIiIiIiIiIiIiIiPeFEDBERERERERERERERkZ5wIoaIiIiIiIiIiIiIiEhPOBFDRERERESkJ6dPn4aTkxNOnz4tPjZr1ix4enoasFdERERERPQ8cSKGiIiIiIioirZt24bdu3cbuhtERERERPQCMjV0B4iIiIiIiIzd9u3bYWNjg0GDBqk93rFjRyQlJcHMzMxAPSMiIiIiIkPjRAwREREREZGeKJVK1KxZ09DdICIiIiIiA+KlyYiIiIiI6IUXHx+Pd999F61bt4a3tzd27NiB0NBQODk5AQDS0tLg5OQke3kwJycnhIaGij+np6djwYIF6NWrF9q0aYPOnTtj2rRpSEtLU8vt3r0bTk5O+P333xEcHIw33ngD7dq1w5QpU5CZmSku5+npiatXr+K3336Dk5MTnJycMHr0aADy94iRU1xcjMjISPTr1w+tW7dGly5dMG/ePDx8+FBtuXPnzsHPzw+dO3dGmzZt4OnpiU8++US3N5OIiIiIiJ4rnhFDREREREQvtMuXL8PPzw/16tVDYGAgCgsLERoaivr161fq+c6dO4ezZ8+iX79+eOmll5Ceno7t27djzJgxiImJQe3atdWWX7x4MaysrDB16lSkp6dj8+bNWLhwIVatWgUAmD17NhYtWgRzc3NMmjQJANCgQQOd+jRv3jzs2bMHgwYNwujRo5GWloZt27bh4sWL2L59O8zMzHD//n34+fnBxsYGAQEBsLKyQlpaGn744YdKvQ9ERERERPR8cCKGiIiIiIheaCEhIRAEAdu2bcMrr7wCAOjVqxd8fHwq9Xw9evRA79691R7z8PDAsGHDcOjQIbzzzjtqv6tbty42bdoEhUIBoOTslS1btiA7OxuWlpbw9vbGqlWrYGNjgwEDBujcn/j4eHz33XdYvny52mvq3Lkz/P39ERcXBx8fH5w9exYPHz7Exo0b0bp1a3G5Dz74QOc2iYiIiIjo+eGlyYiIiIiI6IVVVFSEkydPwtvbW5yEAQAHBwe4u7tX6jlr1aol/n9BQQEePHiApk2bwsrKChcvXpQsP3ToUHESBgA6dOiAoqIipKenV6r9suLi4mBpaYmuXbsiMzNT/Ofq6gpzc3PxsmaWlpYAgGPHjqGgoOCZtE1ERERERPrHM2KIiIiIiOiFlZmZiadPn8Le3l7yu+bNm+P48eM6P+fTp08RFhaG3bt34++//4YgCOLvsrOzJcuXngACACsrKwDAo0ePdG5bzs2bN5GdnY0333xT9vf3798HAHTq1Am9evXCmjVrEBkZiU6dOsHb2xs+Pj6oUaPGM+kLERERERE9e5yIISIiIiIio1f6jJXSioqKJI8tWrQIu3fvxtixY9GuXTtYWlpCoVDggw8+UJuUUVEq5S8kILdsZRQXF6N+/fpYvny57O/r1asHoOQ1hoSEICEhAf/73/9w4sQJzJ49GxEREfj2229Rp06dZ9IfIiIiIiJ6tjgRQ0REREREL6x69eqhVq1auHnzpuR3169fF//f2toagPQsldu3b0tyqvvAzJo1S3wsLy9P9mwYbWmaCNJG06ZN8csvv6B9+/Zql03TpF27dmjXrh0++OAD7N+/HzNnzkRsbCyGDBlS6T4QEREREZH+8B4xRERERET0wjIxMYG7uzuOHDmiNqly7do1nDx5UvzZwsICNjY2iI+PV8tHR0fLPmdZW7ZskT17Rlu1a9eu9KXK+vTpg6KiIqxbt07yu8LCQvF5Hz58KDkLx8XFBQCQn59fqbaJiIiIiEj/eEYMERERERG90AIDA3HixAmMGjUKI0aMQFFREbZu3QpHR0dcvnxZXG7IkCH45ptvMGfOHLi5uSE+Pl7trBmVHj16YN++fbCwsICjoyMSEhJw6tQp1K1bt9J9dHV1xfbt27Fu3TrY29ujXr16Gu/5UlanTp0wbNgwhIWF4dKlS+jatSvMzMxw48YNxMXFYc6cOejduzf27NmD7du3w9vbG02bNsXjx4+xc+dOWFhY4K233qp034mIiIiISL84EUNERERERC80Z2dnbNy4EcHBwQgJCcFLL72EwMBA3Lt3T20iZsqUKcjMzMShQ4dw8OBBvPXWW9iwYYNkQmTOnDlQKpXYv38/8vLy0L59e0RERMDf37/SfZwyZQpu376NDRs24PHjx+jUqZPWEzEAsHDhQri5uWHHjh346quvYGJigiZNmsDX1xft27cHUDJhc+7cOcTGxiIjIwOWlpZo06YNli9fDjs7u0r3nYiIiIiI9EshPKs7TBIRERERET1HoaGhWLNmjdpkDBERERER0YuG94ghIiIiIiIiIiIiIiLSE07EEBERERERERERERER6QknYoiIiIiIiIiIiIiIiPSE94ghIiIiIiIiIiIiIiLSE54RQ0REREREREREREREpCeciCEiIiIiIiIiIiIiItITTsQQERERERERERERERHpCSdiiIiIiIiIiIiIiIiI9IQTMURERERERERERERERHrCiRgiIiIiIiIiIiIiIiI94UQMERERERERERERERGRnnAihoiIiIiIiIiIiIiISE/+H0HkunkT54BwAAAAAElFTkSuQmCC",
-      "text/plain": [
-       "<Figure size 2000x800 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "sns.set(rc={\"figure.figsize\": (20, 8)})\n",
-    "ax = sns.barplot(data=df_quantiles, x=\"quantiles\", y=\"revkire\")\n",
-    "_ = ax.set_yscale(\"log\")\n",
-    "_ = ax.set_xticklabels(labels=ax.get_xticklabels(), rotation=90)\n",
-    "_ = ax.set_title(\"Centiles de RFR dans FAKE POTE 2019\\nEchelle logarithmique\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "canadian-flavor",
-   "metadata": {},
-   "source": [
-    "On est très proche de ce qu'on l'on a vu sur POTE. 👏 "
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "separate-sperm",
-   "metadata": {},
-   "source": [
-    "## On le fait pour plusieurs de colonnes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "revolutionary-companion",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "0.44367670147237526"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "from random import random\n",
-    "\n",
-    "random()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "nervous-bradley",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "sas_columns = [\n",
-    "    \"rnsgbd\",\n",
-    "    \"rnsgld\",\n",
-    "    \"revkire\",\n",
-    "    \"Z1aj\",\n",
-    "    \"Z1ap\",\n",
-    "    \"Z1as\",\n",
-    "    \"Z1bj\",\n",
-    "    \"Z1bp\",\n",
-    "    \"Z1bs\",\n",
-    "    \"Z1cj\",\n",
-    "    \"Z1cw\",\n",
-    "    \"Z1dw\",\n",
-    "    \"Z2ch\",\n",
-    "    \"Z2dc\",\n",
-    "    \"Z2dh\",\n",
-    "    \"Z2tr\",\n",
-    "    \"Z3ua\",\n",
-    "    \"Z3vg\",\n",
-    "    \"Z3vz\",\n",
-    "    \"Z4ba\",\n",
-    "    \"Z4bb\",\n",
-    "    \"Z4bc\",\n",
-    "    \"Z4bd\",\n",
-    "    \"Z4be\",\n",
-    "    \"Z6de\",\n",
-    "    \"Z8sc\",\n",
-    "    \"Z8sw\",\n",
-    "    \"Z8sx\",\n",
-    "    \"CICS\",\n",
-    "    \"MNIMQG\",\n",
-    "]\n",
-    "col_to_fake = []\n",
-    "for col in sas_columns:\n",
-    "    c = 0.6 + random() / 5\n",
-    "    col_dict = {\n",
-    "        \"name\": col,\n",
-    "        \"c\": c,\n",
-    "        \"nb_zeros\": int(2_000_000 * random()),\n",
-    "        \"scale\": 4000 * (1 / c),\n",
-    "    }\n",
-    "    col_to_fake.append(col_dict)\n",
-    "# col_to_fake"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "stretch-wells",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def gen_all_data(reduce_output_ratio=100, filepath=None):\n",
-    "    \"\"\"\n",
-    "    ::reduce_output_ratio::  1 for full data, 2 for alf.\n",
-    "    ::filepath:: Chemin et nom du fichier à sauver\n",
-    "    \"\"\"\n",
-    "    df_pote = None\n",
-    "    nb_ff = 39_000_000\n",
-    "    for col in col_to_fake:\n",
-    "        values = get_random_data(\n",
-    "            nb_zeros=col[\"nb_zeros\"] // reduce_output_ratio,\n",
-    "            nb_above_zero=(nb_ff - col[\"nb_zeros\"]) // reduce_output_ratio,\n",
-    "            c=col[\"c\"],\n",
-    "            scale=col[\"scale\"],\n",
-    "        )\n",
-    "        df_temp = vaex.from_dict({col[\"name\"]: values.astype(int)})\n",
-    "        if df_pote is not None:\n",
-    "            df_pote = df_pote.join(df_temp)\n",
-    "        else:\n",
-    "            df_pote = df_temp\n",
-    "    if filepath:\n",
-    "        df_pote.export_parquet(filepath)\n",
-    "    return df_pote"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "australian-holly",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df_pote = gen_all_data(reduce_output_ratio=10_000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "certified-legislation",
-   "metadata": {},
-   "source": [
-    "## On le sauve dans le même format que sur le CASD\n",
-    "\n",
-    "Parquet occupe moins d'espace que Arrow. Mais arrow ne nécessite quasiment pas de CPU car le fichier est chargé en mémoire tel quel.\n",
-    "\n",
-    "Test avec 39 millions de lignes et 29 colonnes int64 sur notre machine dans DC5:\n",
-    " - Parquet : 2.7G enregistrés en 22 secondes. (CPU Time = Wall time)\n",
-    " - Arrow : 4.9G enregistrés en moins de 4 secondes de temps CPU. (mais 44s de Wall time)\n",
-    " \n",
-    " => Arrow est donc plus consommateur en espace disque, beaucoup moins en CPU. Mais en temps d'attente perçu c'est équivalent."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "nutritional-minneapolis",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df_pote.export_parquet(f\"{OUT_PATH}fake_pote_light.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7a08c916-7857-4abb-88b9-6ef066bc14a1",
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "",
-     "evalue": "",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. View Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
-     ]
-    }
-   ],
-   "source": [
-    "df_pote_full = gen_all_data(reduce_output_ratio=1)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "13d1e9ad-dae8-413e-a76f-05998f8a16f7",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "29"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "len(df_pote_full.get_column_names())"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "sought-iraqi",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "39000000"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "len(df_pote_full)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "197cfe3f-d432-4cc7-a701-a3cd1414a1c7",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 22.2 s, sys: 667 ms, total: 22.9 s\n",
-      "Wall time: 22.9 s\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "df_pote_full.export_parquet(f\"{OUT_PATH}fake_pote_full.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "817bb0ba-0784-463d-bb47-1af1b4880ea6",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 482 ms, sys: 3.29 s, total: 3.77 s\n",
-      "Wall time: 44.3 s\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "df_pote_full.export(f\"{OUT_PATH}fake_pote_full.arrow\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "272b74e7-e19f-4a58-b944-26b6f47f16be",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "4.9G\t/mnt/data-out/leximpact/fake//fake_pote_full.arrow\n",
-      "2.7G\t/mnt/data-out/leximpact/fake//fake_pote_full.parquet\n",
-      "608K\t/mnt/data-out/leximpact/fake//fake_pote_light.parquet\n"
-     ]
-    }
-   ],
-   "source": [
-    "!du -h {OUT_PATH}/*"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "correct-revision",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<div>\n",
-       "<style scoped>\n",
-       "    .dataframe tbody tr th:only-of-type {\n",
-       "        vertical-align: middle;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe tbody tr th {\n",
-       "        vertical-align: top;\n",
-       "    }\n",
-       "\n",
-       "    .dataframe thead th {\n",
-       "        text-align: right;\n",
-       "    }\n",
-       "</style>\n",
-       "<table border=\"1\" class=\"dataframe\">\n",
-       "  <thead>\n",
-       "    <tr style=\"text-align: right;\">\n",
-       "      <th></th>\n",
-       "      <th>rnsgbd</th>\n",
-       "      <th>rnsgld</th>\n",
-       "      <th>revkireZ1aj</th>\n",
-       "      <th>Z1ap</th>\n",
-       "      <th>Z1as</th>\n",
-       "      <th>Z1bj</th>\n",
-       "      <th>Z1bp</th>\n",
-       "      <th>Z1bs</th>\n",
-       "      <th>Z1cj</th>\n",
-       "      <th>Z1cw</th>\n",
-       "      <th>...</th>\n",
-       "      <th>Z4bb</th>\n",
-       "      <th>Z4bc</th>\n",
-       "      <th>Z4bd</th>\n",
-       "      <th>Z4be</th>\n",
-       "      <th>Z6de</th>\n",
-       "      <th>Z8sc</th>\n",
-       "      <th>Z8sw</th>\n",
-       "      <th>Z8sx</th>\n",
-       "      <th>CICS</th>\n",
-       "      <th>MNIMQG</th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>data_type</th>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>...</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "      <td>int64</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>count</th>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>...</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "      <td>39000000</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>NA</th>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>mean</th>\n",
-       "      <td>23612.393908666665</td>\n",
-       "      <td>16686.731979897435</td>\n",
-       "      <td>17999.188046692307</td>\n",
-       "      <td>22921.20886292308</td>\n",
-       "      <td>17040.07205202564</td>\n",
-       "      <td>17793.07362046154</td>\n",
-       "      <td>17940.101138589744</td>\n",
-       "      <td>22387.16365876923</td>\n",
-       "      <td>21754.137213666665</td>\n",
-       "      <td>17330.203434615385</td>\n",
-       "      <td>...</td>\n",
-       "      <td>16978.268014820515</td>\n",
-       "      <td>16787.83353846154</td>\n",
-       "      <td>19892.917132</td>\n",
-       "      <td>18082.292583871797</td>\n",
-       "      <td>16897.733525717947</td>\n",
-       "      <td>20601.45104748718</td>\n",
-       "      <td>16426.29728551282</td>\n",
-       "      <td>16835.938336615385</td>\n",
-       "      <td>20841.969054974357</td>\n",
-       "      <td>20157.805337358976</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>std</th>\n",
-       "      <td>1985728.12425</td>\n",
-       "      <td>168367.593804</td>\n",
-       "      <td>468129.681965</td>\n",
-       "      <td>1757926.167845</td>\n",
-       "      <td>348813.11135</td>\n",
-       "      <td>407738.350287</td>\n",
-       "      <td>447581.264892</td>\n",
-       "      <td>1463643.637909</td>\n",
-       "      <td>1409093.278272</td>\n",
-       "      <td>341201.458036</td>\n",
-       "      <td>...</td>\n",
-       "      <td>257858.16848</td>\n",
-       "      <td>304306.782644</td>\n",
-       "      <td>792156.835406</td>\n",
-       "      <td>452162.364351</td>\n",
-       "      <td>206769.636616</td>\n",
-       "      <td>933589.30553</td>\n",
-       "      <td>174934.347089</td>\n",
-       "      <td>200883.42422</td>\n",
-       "      <td>1257896.347618</td>\n",
-       "      <td>1004222.29896</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>min</th>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>...</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "      <td>0</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>max</th>\n",
-       "      <td>6365242793</td>\n",
-       "      <td>391375749</td>\n",
-       "      <td>1309974940</td>\n",
-       "      <td>5585390554</td>\n",
-       "      <td>939653071</td>\n",
-       "      <td>1120062522</td>\n",
-       "      <td>1245031261</td>\n",
-       "      <td>4582824917</td>\n",
-       "      <td>4402079217</td>\n",
-       "      <td>913693388</td>\n",
-       "      <td>...</td>\n",
-       "      <td>658515059</td>\n",
-       "      <td>802706621</td>\n",
-       "      <td>2348740734</td>\n",
-       "      <td>1258784526</td>\n",
-       "      <td>504485451</td>\n",
-       "      <td>2811703378</td>\n",
-       "      <td>411754892</td>\n",
-       "      <td>487116689</td>\n",
-       "      <td>3897076655</td>\n",
-       "      <td>3048988994</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>7 rows × 29 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                       rnsgbd              rnsgld         revkireZ1aj  \\\n",
-       "data_type               int64               int64               int64   \n",
-       "count                39000000            39000000            39000000   \n",
-       "NA                          0                   0                   0   \n",
-       "mean       23612.393908666665  16686.731979897435  17999.188046692307   \n",
-       "std             1985728.12425       168367.593804       468129.681965   \n",
-       "min                         0                   0                   0   \n",
-       "max                6365242793           391375749          1309974940   \n",
-       "\n",
-       "                        Z1ap               Z1as               Z1bj  \\\n",
-       "data_type              int64              int64              int64   \n",
-       "count               39000000           39000000           39000000   \n",
-       "NA                         0                  0                  0   \n",
-       "mean       22921.20886292308  17040.07205202564  17793.07362046154   \n",
-       "std           1757926.167845       348813.11135      407738.350287   \n",
-       "min                        0                  0                  0   \n",
-       "max               5585390554          939653071         1120062522   \n",
-       "\n",
-       "                         Z1bp               Z1bs                Z1cj  \\\n",
-       "data_type               int64              int64               int64   \n",
-       "count                39000000           39000000            39000000   \n",
-       "NA                          0                  0                   0   \n",
-       "mean       17940.101138589744  22387.16365876923  21754.137213666665   \n",
-       "std             447581.264892     1463643.637909      1409093.278272   \n",
-       "min                         0                  0                   0   \n",
-       "max                1245031261         4582824917          4402079217   \n",
-       "\n",
-       "                         Z1cw  ...                Z4bb               Z4bc  \\\n",
-       "data_type               int64  ...               int64              int64   \n",
-       "count                39000000  ...            39000000           39000000   \n",
-       "NA                          0  ...                   0                  0   \n",
-       "mean       17330.203434615385  ...  16978.268014820515  16787.83353846154   \n",
-       "std             341201.458036  ...        257858.16848      304306.782644   \n",
-       "min                         0  ...                   0                  0   \n",
-       "max                 913693388  ...           658515059          802706621   \n",
-       "\n",
-       "                    Z4bd                Z4be                Z6de  \\\n",
-       "data_type          int64               int64               int64   \n",
-       "count           39000000            39000000            39000000   \n",
-       "NA                     0                   0                   0   \n",
-       "mean        19892.917132  18082.292583871797  16897.733525717947   \n",
-       "std        792156.835406       452162.364351       206769.636616   \n",
-       "min                    0                   0                   0   \n",
-       "max           2348740734          1258784526           504485451   \n",
-       "\n",
-       "                        Z8sc               Z8sw                Z8sx  \\\n",
-       "data_type              int64              int64               int64   \n",
-       "count               39000000           39000000            39000000   \n",
-       "NA                         0                  0                   0   \n",
-       "mean       20601.45104748718  16426.29728551282  16835.938336615385   \n",
-       "std             933589.30553      174934.347089        200883.42422   \n",
-       "min                        0                  0                   0   \n",
-       "max               2811703378          411754892           487116689   \n",
-       "\n",
-       "                         CICS              MNIMQG  \n",
-       "data_type               int64               int64  \n",
-       "count                39000000            39000000  \n",
-       "NA                          0                   0  \n",
-       "mean       20841.969054974357  20157.805337358976  \n",
-       "std            1257896.347618       1004222.29896  \n",
-       "min                         0                   0  \n",
-       "max                3897076655          3048988994  \n",
-       "\n",
-       "[7 rows x 29 columns]"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "df_pote_full.describe()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "banned-speech",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# df_pote_sample = df_pote_full.sample(n=300_000)\n",
-    "# df_pote_sample.export_parquet(f\"{OUT_PATH}/fake_pote_partial.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "hazardous-edition",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# df_pote_sample.describe()"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/00_tests_avant_casd.ipynb b/notebooks/code_CASD/extractions_base_des_impots/00_tests_avant_casd.ipynb
deleted file mode 100644
index 6db89bfb530f2a4e2a64e61c1ee2b1d7586b7d46..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/00_tests_avant_casd.ipynb
+++ /dev/null
@@ -1,234 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "cd323ce4-f97f-487f-98f5-a85a3f45a54c",
-   "metadata": {},
-   "source": [
-    "# Tests avant CASD"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5499d16b-b59f-4ee3-a11a-7598ccf06a1b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Activate multi-output in notebook\n",
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "195ded86-f330-44eb-b27c-61c5259d143a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import vaex\n",
-    "import pandas as pd\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import Quantile"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "4097cb49-754c-4bc2-a25f-301c4bba15d5",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# vdf = vaex.open(\"/mnt/data-out/leximpact/fake//fake_pote_full.parquet\")\n",
-    "vdf = vaex.open(\"/mnt/data-out/leximpact/fake//fake_pote_light.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5d82ea4e-5342-448a-884f-6488a2ef9b16",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# vdf.get_column_names()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "e8550ac7-4a55-44e2-996a-7b12f3a4be51",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 4.94 ms, sys: 798 µs, total: 5.74 ms\n",
-      "Wall time: 10.8 ms\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "data = vdf.Z1ap.tolist()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "84dbb029-51e7-40a5-b034-52f903ccc471",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 4.49 ms, sys: 422 µs, total: 4.91 ms\n",
-      "Wall time: 4.76 ms\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "q = Quantile(data)\n",
-    "decile = q.get_quantile(10)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "676d9ba6-763a-4b60-af22-1701b45a77b4",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[389, 779, 1169, 1559, 1949, 2339, 2729, 3119, 3509, 3899]"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "390"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "1109"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "q.borders\n",
-    "data[q.borders[0]]\n",
-    "data[q.borders[1]]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "faaa1158-1615-4f57-a880-e7faf1b3ff2a",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 39.2 ms, sys: 23.5 ms, total: 62.7 ms\n",
-      "Wall time: 48.1 ms\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "<Axes: xlabel='lower_bound'>"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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OXPmIDo6GoGBgVU9bCIiIqqFqvzU2IoVKzBr1ix8/PHHyMjIgIODAz766CMEBQVJfaZMmYLc3FyMHj0aWVlZ8Pb2RlhYGAwNDaU+GzduRGBgIHr27Am1Wo0BAwZg+fLlUru5uTn27duHgIAAuLm5wdraGkFBQTpzDXl5eWHTpk34/PPPMWPGDLRo0QLbtm1D69atq3rYREREVAtV+TxCdQnnESIiInoyziNEREREVAsxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiMQgRERGRYjEIERERkWIxCBEREZFiVUsQ+vvvv/Hee+/BysoKRkZGaNOmDaKjo6V2IQSCgoJgb28PIyMj+Pj44MKFCzrbuHXrFoYOHQozMzNYWFjA398fd+7c0elz+vRpdOnSBYaGhnB0dMTChQvL1bJlyxY4OTnB0NAQbdq0we7du6tjyERERFQLVXkQyszMROfOnVGvXj3s2bMH586dw5IlS9CgQQOpz8KFC7F8+XKsXr0aJ06cgImJCXx9fXHv3j2pz9ChQ5GQkID9+/dj586dOHz4MEaPHi215+TkoHfv3mjSpAliYmKwaNEizJkzB99//73U59ixYxg8eDD8/f1x6tQp+Pn5wc/PD2fPnq3qYRMREVEtpBJCiKrc4LRp03D06FH873//e2i7EAIODg6YOHEiJk2aBADIzs6Gra0t1q9fj0GDBiExMREuLi44efIk3N3dAQBhYWHo168frl27BgcHB6xatQozZ86EVquFRqOR9r1t2zYkJSUBAAYOHIjc3Fzs3LlT2n+nTp3g6uqK1atXP3EsOTk5MDc3R3Z2NszMzJ7p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",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "df = pd.DataFrame(decile[\"buckets\"])\n",
-    "df.plot.bar(x=\"lower_bound\", y=\"bucket_mean\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7b0effe9-03c1-4b5d-a5f4-b52f2fee8810",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 152 ms, sys: 115 ms, total: 268 ms\n",
-      "Wall time: 127 ms\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "<Axes: xlabel='lower_bound'>"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1wAAAKOCAYAAACyZBhUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADPDElEQVR4nOzdeXgV5f3+8fuc7AtZCISwJBBlCQjIDokCLmhAtKwqiIIrxYILWFkEQa0ialVQtrYqaBW3tiiCogiCVTZFQQRRFCggBkElkSAJIZ/fH/zOfHOSc7LhFLXv13WdS8kz88wzz5ntnpkz4zEzEwAAAADgZ+c91Q0AAAAAgN8qAhcAAAAAuITABQAAAAAuIXABAAAAgEsIXAAAAADgEgIXAAAAALiEwAUAAAAALgk91Q34JSsuLta+fftUo0YNeTyeU90cAAAAAKeImenHH39UvXr15PVW/roVgasc+/btU2pq6qluBgAAAIBfiD179qhBgwaVHp7AVY4aNWpIOtGpcXFxp7g1AAAAAE6VvLw8paamOhmhsghc5fDdRhgXF0fgAgAAAFDlnxrx0AwAAAAAcAmBCwAAAABcQuACAAAAAJfwGy4AAAD8Zh0/flzHjh071c3Ar0R4eHiVHvleGQQuAAAA/OaYmXJycnTo0KFT3RT8ini9XqWnpys8PPxnq5PABQAAgN8cX9hKTk5WdHR0lZ8sh/89xcXF2rdvn7755hulpaX9bMsMgQsAAAC/KcePH3fCVlJS0qluDn5FateurX379qmoqEhhYWE/S508NAMAAAC/Kb7fbEVHR5/iluDXxncr4fHjx3+2OglcAAAA+E3iNkJUlRvLDIELAAAAAFxC4AIAAAAAl/DQDAAAAPzPaDR+yX9tWrum9a7yOOecc47atGmj6dOn//wNknTXXXfplVde0caNG12pH2VxhQsAAABApcyfP18JCQmnuhm/KgQuAAAAAHAJgQsAAAD4BSkqKtKoUaMUHx+vWrVq6c4775SZSTrxFL1XXnnFb/iEhATNnz/f+ffevXs1ePBg1axZUzExMerQoYPWrVsXcFpfffWVTjvtNI0aNUpmpoKCAv3xj39U/fr1FRMTo86dO2vlypWSpJUrV+qaa65Rbm6uPB6PPB6P7rrrrgrnp1GjRrr33ns1dOhQxcbGqmHDhlq0aJEOHDigPn36KDY2Vq1bt9aHH37oN957772nrl27KioqSqmpqbr55puVn5/vlP/9739Xhw4dVKNGDaWkpOiKK67Qt99+65SvXLlSHo9Hy5cvV4cOHRQdHa2srCx9/vnnFbb550TgAgAAAH5Bnn76aYWGhmr9+vWaMWOGHnnkET3xxBOVGvfw4cPq3r27vv76ay1atEibNm3S2LFjVVxcXGbYTz75RGeffbauuOIKzZw5Ux6PR6NGjdKaNWv0wgsv6JNPPtGll16qnj17avv27crKytL06dMVFxenb775Rt98843++Mc/Vqpdjz76qM466yx9/PHH6t27t6666ioNHTpUV155pT766COdfvrpGjp0qBMsv/rqK/Xs2VMDBgzQJ598ohdffFHvvfeeRo0a5dR57Ngx/elPf9KmTZv0yiuvaNeuXbr66qvLTHvixIl6+OGH9eGHHyo0NFTXXnttpdr8c+GhGQAAAMAvSGpqqh599FF5PB41a9ZMmzdv1qOPPqobbrihwnEXLFigAwcO6IMPPlDNmjUlSY0bNy4z3OrVq3XxxRdr4sSJuu222yRJu3fv1rx587R7927Vq1dPkvTHP/5RS5cu1bx58zR16lTFx8fL4/EoJSWlSvN00UUX6fe//70kafLkyZozZ446duyoSy+9VJI0btw4ZWZmav/+/UpJSdH999+vIUOG6NZbb5UkNWnSRI899pi6d++uOXPmKDIy0i84nXbaaXrsscfUsWNHHT58WLGxsU7Zfffdp+7du0uSxo8fr969e+vo0aOKjIys0jxUF1e4AAAAgF+QLl26+L2ANzMzU9u3b9fx48crHHfjxo1q27atE7YC2b17ty644AJNnjzZCVuStHnzZh0/flxNmzZVbGys81m1apW++uqrk5qn1q1bO/9fp04dSVKrVq3K/M13S+CmTZs0f/58v3ZkZ2eruLhYO3fulCRt2LBBl1xyidLS0lSjRg0nVO3evTvotOvWres3nf+GKgeur7/+WldeeaWSkpIUFRWlVq1a+d1vaWaaPHmy6tatq6ioKPXo0UPbt2/3q+P777/XkCFDFBcXp4SEBF133XU6fPiw3zCffPKJunbtqsjISKWmpurBBx8s05aXX35ZGRkZioyMVKtWrfT666/7lVemLQAAAMCvhcfjcW678zl27Jjz/1FRURXWUbt2bXXq1EnPP/+88vLynL8fPnxYISEh2rBhgzZu3Oh8PvvsM82YMeOk2h0WFuY3D8H+5rv18fDhw/r973/v145NmzZp+/btOv3005Wfn6/s7GzFxcXpueee0wcffKCFCxdKkgoLCyucdqBbLN1SpcD1ww8/6KyzzlJYWJjeeOMNbd26VQ8//LASExOdYR588EE99thjmjt3rtatW6eYmBhlZ2fr6NGjzjBDhgzRli1btGzZMi1evFjvvvuuhg8f7pTn5eXpwgsvVMOGDbVhwwY99NBDuuuuu/TXv/7VGWb16tUaPHiwrrvuOn388cfq27ev+vbtq08//bRKbQEAAAB+SUo/4GLt2rVq0qSJQkJCVLt2bX3zzTdO2fbt23XkyBHn361bt9bGjRv1/fffB60/KipKixcvVmRkpLKzs/Xjjz9Kktq2bavjx4/r22+/VePGjf0+vlsIw8PDK3Wl7WS1a9dOW7duLdOOxo0bKzw8XNu2bdN3332nadOmqWvXrsrIyPivXrWqiioFrgceeECpqamaN2+eOnXqpPT0dF144YU6/fTTJZ24ojR9+nRNmjRJffr0UevWrfXMM89o3759ztNUPvvsMy1dulRPPPGEOnfurLPPPluPP/64XnjhBe3bt0+S9Nxzz6mwsFBPPfWUzjjjDA0aNEg333yzHnnkEactM2bMUM+ePXX77berefPm+tOf/qR27dpp5syZlW4LAAAA8Euze/dujRkzRp9//rmef/55Pf7447rlllskSeedd55mzpypjz/+WB9++KFGjBjhdwVn8ODBSklJUd++ffX+++9rx44d+uc//6k1a9b4TSMmJkZLlixRaGioevXqpcOHD6tp06YaMmSIhg4dqn/961/auXOn1q9fr/vvv19Llpx4YXSjRo10+PBhLV++XAcPHvQLez+ncePGafXq1Ro1apQ2btyo7du369VXX3UempGWlqbw8HA9/vjj2rFjhxYtWqQ//elPrrTlZFXpoRmLFi1Sdna2Lr30Uq1atUr169fXH/7wB+cHfDt37lROTo569OjhjBMfH6/OnTtrzZo1GjRokNasWaOEhAR16NDBGaZHjx7yer1at26d+vXrpzVr1qhbt24KDw93hsnOztYDDzygH374QYmJiVqzZo3GjBnj177s7GwnTFWmLaUVFBSooKDA+XfJS6wAAAD49ds1rfepbkKFhg4dqp9++kmdOnVSSEiIbrnlFudusIcffljXXHONunbtqnr16mnGjBnasGGDM254eLjeeust3XbbbbroootUVFSkFi1aaNasWWWmExsbqzfeeEPZ2dnq3bu3Xn/9dc2bN0/33nuvbrvtNn399deqVauWunTpoosvvliSlJWVpREjRujyyy/Xd999pylTplTq0fBV1bp1a61atUoTJ05U165dZWY6/fTTdfnll0s6cVvk/Pnzdccdd+ixxx5Tu3bt9Oc//1m/+93vfva2nKwqBa4dO3Zozpw5GjNmjO644w598MEHuvnmmxUeHq5hw4YpJydH0v/96M2nTp06TllOTo6Sk5P9GxEaqpo1a/oNk56eXqYOX1liYqJycnIqnE5FbSnt/vvv19133125zgAAAAB+Zr53XknSnDlzypTXq1dPb775pt/fDh065Pfvhg0b6h//+EfA+u+66y6/gBQbG6v333/fb5i777673GPiOXPmBGxbMLt27Srzt9K/Q2vUqFGZv3Xs2FFvvfVW0HoHDx6swYMHB633nHPOKVNnmzZtyvzNbVUKXMXFxerQoYOmTp0q6cR9np9++qnmzp2rYcOGudLA/6YJEyb4XTXLy8tTamrqKWwRAAAAgFOh0fglzv+fzJXRKv2Gq27dumrRooXf35o3b+48etH3Y7r9+/f7DeN7nr5vmNI/aCsqKtL333/vN0ygOkpOI9gwJcsraktpERERiouL8/sAAAAACOzf//6336PbS39QxcB11lln6fPPP/f72xdffKGGDRtKktLT05WSkqLly5c75Xl5eVq3bp0yMzMlnXiPwKFDh/zuNV2xYoWKi4vVuXNnZ5h3333X7xGXy5YtU7NmzZwnImZmZvpNxzeMbzqVaQsAAACA6uvQoYPfo9tLf1DFWwpHjx6trKwsTZ06VZdddpnWr1+vv/71r87j2j0ej2699Vbde++9atKkidLT03XnnXeqXr166tu3r6QTV8R69uypG264QXPnztWxY8c0atQoDRo0yHmj9RVXXKG7775b1113ncaNG6dPP/1UM2bM0KOPPuq05ZZbblH37t318MMPq3fv3nrhhRf04YcfVqktAAAAAKovKipKjRs3PtXN+EWrUuDq2LGjFi5cqAkTJuiee+5Renq6pk+friFDhjjDjB07Vvn5+Ro+fLgOHTqks88+W0uXLlVkZKQzzHPPPadRo0bp/PPPl9fr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Rbrllls0YsQIjR07Nmi7ysNTCoO45557dMUVV2jlypUBfzjn+/Hd7373uyqX+x5M0aFDBz322GNlxjUzHTt2zO/gvuQDHa6++mr94x//UJ8+fSSpTLhq0qSJPvroIz366KM6//zzA9YvKWD9jzzyiPbu3atFixYpMTHRORAoLCxUaGiomjdvrg0bNmjhwoU6//zzneCWl5fn1B0XF6f+/fvr2LFj2rlzp8444wxJJ3ZE27Ztk9frVYsWLcpsPE8//XTt2LFDH3/8sdq2betX9vHHHyssLEzHjx8POl8hISFKTk7Wxx9/HLB+6cTOouQO3tc2SZo6darMLGDZ8OHD9fe//z1on9evX1+FhYVBp13RvAU6+Cg5/R49euif//xnwH6XpBtuuEFdunTRpk2byhwcdO/eXW+88UbQaUdERMjMgpaHh4erqKgo4LTPPPNM3Xzzzc4BwM85X8uXL5ck52C2dNsk6ZprrlGTJk20b9++gAeyx44dC7gsSid+8O8La++//746duzolF166aVau3at6tatq1atWvkta5s3b1Z6eroOHTqklJQUdevWza985cqVOnLkiD7++GMlJSU5Pxz+9ttvdejQIUnSihUr1KZNG0kqM+2BAwdq48aNAet+9913FRoaqjPPPFPt27dXYmKiX/1mpl27djnL34oVK5SZmenXJ0ePHlXfvn0Dljdu3Fi7du3SwYMHVatWLb/xfOEiPz+/3HW0du3aKioqcnbMJY0fP16nnXaacnNzqxwGO3TooNWrVwdtW3mhae7cuTr//POVn5+vdu3alfk+JemTTz4J2C9z585VZmamDh8+HHDcpk2bqlmzZgG/j0OHDikqKko//PCDHn30UUVEROijjz5St27d/Npfq1atoPMtnTj4CBbQzznnHL3++utB1xFfAP/qq6+qvG0ICwtTaGhowLanpaXpueeeU3FxccD5Ovvss/X+++8H7ZeaNWsqJSUl6DYzLS1NBw4cKPf7bt26ddB++fLLL1VQUKD4+PgyZRdddJGef/75cvdjhw8fDrg8pKWlacGCBTKzas13t27dtH///qDbloyMDHXr1k2DBg1SUVFRmX2wdOLEaLD5bty4sbZv365gateurSNHjgRcRy+77DKNHDlS6enpysvLC9gv7du3D7qsVmZ5Km/7cO+996p58+b67rvvqrSc+/Y1rVq1qtb2o02bNho5cmSZ9VI6sU3y7ceCnXg4//zzVVxcrF27dunDDz/0a9/gwYN15513qnXr1gGPFXNzc+XxeAKW5+Tk6Msvv3SOqaqyLzh06JA6dOigLVu2BJ22JE2YMCFoKPJ4PM4JNq/X63cR4ZxzztHMmTMD7nd96+dPP/2kxMREmVmZfhk6dGjQ/e/HH3+s6OhoTZs2TU8++WSV9yXjxo3TkiVLgvaLdOI4OtA6NHLkSBUWFuqPf/yjBgwYoOPHj0s6cTKhffv2mj9/vi677LIy7akMAlcQl156qerXr6/HHntMDz/8cJmn9bz77rsys2qX33DDDVqxYkXAsuuuu06pqalOW0of3CclJal3796aMmVKwLavWbNGDzzwgB566CHddtttzhkl30ajR48eOvvsswPWHxERoaZNm2rAgAEaOXKkX9vat2+viIgI3XrrrUF3Bs2aNVOnTp0UEhKiPn36+K0IK1eu1NixY1W7dm0tXbq0TLvnz5+vMWPGBF1JsrOz1alTp6Dzdd9995V75qFTp07yer0Bd/DdunXTRx99pIiIiIA7/wYNGqhjx45B+3zPnj1Bp1uZeavo4KNFixZ67733Ava7mengwYN6/fXXJZU9iL7wwgv17rvvBp32eeed5+xIA5X36NFD9evXDzjtkJAQpaSk6KWXXtKyZct+1vkKDQ3VlVdeqb179wYNFz/88INCQ0MDHvh07NhRO3fuVHx8fJllcefOnZo6daq2bdumZ555psw6VqNGDc2dO1d16tTR2rVrnfWgU6dOmjp1qi688ELl5+fr2Wef1dq1a7Vjxw5JJ9aTqVOn6oorrtC+ffsCPumr9JXO0tOuW7euZs6cqeLi4jJ133vvvbriiisUFxenbdu2Baw/IyNDwSxatEhhYWHO2b3SRo8erXvuuSfowWBF4SIzM1NffvllwLBoZnr//fed9baqYfCSSy7RBx98ELRtUvDQlJqaqttvv13Tpk3TJZdcEvD7DHZlLzU1VbNnz9Ynn3yiY8eOBR23Ot+Hz44dO4LOt3TiqkSwgN6nTx+988471QrgFW0bsrOztWDBgoBn4Hft2qW1a9cqIiIiYNA799xz1bNnT0VFRVWrX5588kldf/315X7f69evD9ovV199tcws4AFdz5499cYbbwTd7tx4441OyAw034sXLw66HlVmvouLi/Xmm28G3bZ4vV7NmjVLGzZsKLMPTkhIUK9evZwTp6XnbcCAAbr33nuDHmR/9913ioqKCriOrlq1Smam7du3BzzhKknLly93DtarujxVtH146623nO1DVZZz30H02rVrq7X9+OSTT+TxeLR27dqAwSYkJMR50mDpfc0777yjf/zjH1qxYoVmz55d5o6k2NhYjRs3ztmel/w+e/XqpVdffVWSNGfOnDLl/fv315VXXql///vf1d4X7Nq1K2DdvXr10ubNm3XllVdKUsBQZGYqKChQzZo1dfjwYX3yySfOXSpz585Vt27dVFBQEPBE1GmnnaZp06Y531PJftm5c6eeeuopHTt2TL///e/L7AMLCws1YcIEzZo1q1r7ks8++0ytW7fWggULAvZLixYt1KdPn6DrUN26dZWRkaGNGzc6V3tr1ap10k9G5bHwv3E7d+70W9jS09N/lnrz8vIC7gx8Z8SCyc/PV0hIiPP45UAqc+Dixnzt2LFD4eHhzu2clS2riuoelPmmHxcXV+V+9x0cNGzYsNxpV9S28r5zt+erOvWXdzAoVW5Z/F8U6GDQ19+VCRc//vijE0RLl/sOEAIp7yDWVx4SEiJJ5bYtmIrq/6V66qmnFBoaqu7du0s6cQBX8p1/zzzzjKQTB+xVXUcqu204VcpbFps1a+b3fZfsl//85z/65z//KelEAAnWZ3379q3WfuxUKn3SKtC8HThwQN9++23AfhsxYoSSkpLKXUclVatfKrM8Bds+NG3aVH369HFel/FzLue+tpW3/cjMzNSCBQuqvN3y1VfevuaXatWqVX7/rlu3rnOLoXTiLpCioiJddNFFkk48ir5Lly5O+d13362NGzeqdevWVd4eV4Zb+5LKrEOS/B5N/3MgcP0GzZ49WwcPHtTkyZN/9ro//PBDHTlyJOCl919y3W7XX1Gfuz1v+PX45ptvdOzYsXLvrf8l14+qqej7+DV/X+W1/WTn+9e6zXT7+/619gv++37N2xY3nUy/nNTxdbUetQGbMGGCXXPNNa6UVzTurFmz7O677w5aft5555X7WNpXXnnFnn766WrVn5GRYV6vN+i4H3zwga1atapa066o7n379tl//vOfatVdmfrLa3tF81VRn5/svFU0/YrKy1PRtE+mbW7PV3n1n8zycv7555/U91ne+Ccz7sm2raJpV1RekYr6/JfqZPrlZPv0ZPu8IifznVQ07q+5X8pT0XbnVM73L7lfKuLm9uFUbnvKm/bQoUPt3HPPDTruyZSf7H6qomm76WTm62SdzDpU0bFeeQhc1XTVVVeVu6CeTHlF457MF25mzrs2qlP/119/bbt27Qo6bkULcnnTdrPuk63/ZHdyJztvv+QDwl/rtMtbXmbOnGl33XVX0HEXLlxo8+fPD1pe3vjr16+3lStXVmvcypSXV39F7a6o/GS/r5MJom6Wn0y/VDRuRd93ReUnG9DdXD/La/vJzvfJbjPL65eTPVAt7zs/2fmuaHmqqF8qmreKDrJP5Trq5nd2MuUnM+0JEybY1VdfHXTckyk/mX1BZaZd0bJS3sWBivr7ZObL7OSW04r6xa3Axy2F+Fnt27dPx44dK/eR99X1wQcf6MiRI85vGX5u5bXdzfmSKp63iqZfXvkrr7yi3NxcDRs2rFrTPpm2uTlfFdXv9vLyv+hkl6VZs2bp4MGDAR8+U1Hdbpf/UlXU7vL6VCr/OznZ7/NUOpl+qajP3N7eu6miebvjjjv0zTffaN68eVUev6J+cXP7cDLLeWXaVl75yU7716qiZWXYsGHas2ePVqxYUabM7e3tyexLTqbuk0HgKsfBgwf11FNPlfmBZlZWlq6++mp5PJ5ql19yySVatGhR0HFr165dbtsKCwv1yiuvBBy/T58+5b67qDLy8/O1YcMGffPNN/J6vTrttNPUrl27ct+h8Uuou7Rjx45p165dSk5OLve9aZWxadMmbdiwQeecc45OO+00bdmyRbNmzVJxcbH69esX8Aea11xzje677z7Vq1fvpKaNXwYzU3FxsfPj659DQUGBJJX7LrNgdu/e7bcelfzhLyo2f/589evXL+i2wfdErJSUlArrKioq0pYtW/y2xy1atDjpJ1v9Eu3fv18FBQUBfwNx7Nixas1zUVGR3nnnHe3evVsNGzbUueee+7OuZ9WVm5vr951Wdz8SqM/KqzsnJ0fr1q3zK+/cuXOllkX8tgV7rL4kbd++3VmHGjduHHCYnTt3KjU1NWgdbjpV065Mv/h89913+uSTT3TmmWeqZs2aOnjwoJ588kkVFBTo0ksvDfhetEr52a+Z/UasX7/eEhMTrX79+jZs2DAbO3asjR071oYNG2YNGjSwuLg4i4uLq1Z5cnKyeTweS05ODjhuYmKi31u5v/zyS7vjjjvsyiuvtIkTJ9qKFSvstNNOs8jISOvevbtddtlldtlll1n37t0tMjLSGjdubGvXrrXly5fboUOHzMwsJyfHHnjgAbv//vvtk08+sY0bN9qTTz5pX331lZmZffrpp3bjjTfa8OHDbeDAgRYdHW1er9e8Xq95PB7zeDzWsGFDW7RokZmZFRUV+fXX2rVrbdWqVVZYWGhmZl999ZU9/fTTNm3aNHvwwQftH//4h/3www92++23V1h3ab46fQLVnZubaw888IAdOXLEad9tt91m4eHh5vV6LTQ01K655poydZV07Ngxv/uwCwsL7YsvvrBDhw7ZP//5TwsJCbGkpCSLjY21ZcuWWUJCgvXo0cOys7PN6/Xa/fffb5s2bfL7hIWF2cKFC51/l6eoqMi++uorO378uJmZHT161F588UV7/vnn7c033yx3XJ9Dhw7Ztm3bbNu2bc53H8xdd91lBw4csAMHDlSq7sOHD9uqVavshRdesJdeesk+/PBDKy4udtpe0rp162zNmjV29OjRMvWU7Fefipan0nJycoLeM++br/K0bNnSJk2aZC+//HLA8mPHjtnEiROtW7duNnnyZDMze/DBBy06OtrCw8MtISHBpkyZYrt37y53OoFs3LjRPB6P9erVyxISEpx1ISEhwXr16mXLli2zjRs32p/+9CebNWtWmXnJzc21Ll26WFpamjNuyc/vfvc7e//99wNOOzY21q699tqg5dVVmT4vqSrLqRvj+4SFhdnWrVvtu+++swEDBlhqaqqNGDHCioqK7LrrrnO2T126dLF9+/aZmdlrr71m3bp1s3r16ln79u1t3rx5NnHiREtISHCG930SEhJs0qRJzjodyMaNGwPe/pKTk2PffPNNmb8fPXo04HplZvaf//zH1q5da+vXr7eDBw/6lVWlz3zrXV5eng0ZMsTS0tJs6NChVlBQYH/4wx+c+Tv77LMtNzfXzMwef/xxZ5lMSkoq93fGZmaDBg0yj8djZmZ79uyxjIwMCwkJsTp16lhISIi1atXK9u7dW24dP5djx47ZW2+9ZU888YQtW7bMioqK7G9/+5s1b968zPrVvHlzGzJkiJ1//vl26aWX2ttvv+1X186dOy0mJiZgn3m9XuvWrZs99thjQeueNWuWDRkyxEJCQiw0NNSSk5MtOTnZQkNDLSQkxK688krLz8//r/RLoH7ybXeLioosJyfHvv32W1emVd5yXpGqLOuB1rPKTtu3nmzZssVuvPFGa9OmjaWkpFhKSoq1adPGbrzxRuvevbs988wzzrFJIG+99ZZNnjzZli9fbmZmq1atsp49e1rr1q3tnnvuMTOz48eP2z333GP16tUzr9dr9evXt+zsbFu2bJmZmX3//fd2/vnnO+um1+u1nj172g8//FBmer7t3qngm3ZF+7jynmPgO+4IZurUqc56WZV+MTtx7BIfH28ej8cSExPtww8/tPT0dGvSpImdfvrpFhUVZRs2bKjaTP9/BK4gOnfubMOHDw/4xRYXFzsbweqUd+7c2TIyMqxz584Bx61bt641adLEzMzee+89i4iIsNatW9vll19ubdu2Na/Xa127dnV2dCXl5ubaWWedZSEhIebxeCwlJcU2btxoDRo0sCZNmlizZs0sNDTU2SmWDg/p6ekmyW677TZbtmyZdevWzR544AH77LPP7M4777Tw8HA744wzLCQkxLp162bff/+99e7d21mYGzdubBdffLHfwp2SkmIhISEWFhZmKSkp9tprrwWsOzQ01BYvXuzMS+kd+MSJE23gwIEB646NjTWPx2P79+83M7OHHnrIEhMT7amnnrItW7bYs88+a8nJyfbAAw8E/L4feOABW7t2rXm93oBhreQBxPPPP28JCQnOhtDMzOPxmKQyB1y+dvr+G8xLL71kkszr9VrLli1t9+7d1rJlS4uJibHY2FiTZA0aNLD77rvPvv766zLjl3dw8Pjjj1tubq7f59ChQxYWFmbr1q1zDgKee+65gDuZ48ePBw3K9evXt8aNG1tISIj17NnTcnNzrUePHk55zZo1naAZqF8vv/xyy8rKKnd56t+/f9ADvqysLNuzZ0/A+fL9LRDfwbAky87Otn/84x927Ngxp3zSpElWp04dGzNmjLVo0cJGjBhhqamp9uyzz9rTTz9tkiw6OtpCQkICjl+ee+65xyTZoEGDbN68efb666/b66+/bvPmzbPBgwc7B1pnnHGGpaWlWVJSkq1YscIZf/LkySbJHn/8ced7v+eee+yNN97wWwYzMjLsz3/+s98BkcfjsTPOOCNo+bp16/zCb+lwMXfu3HKXpdzcXHvsscds6NCh9tRTT5mZ2QsvvGAZGRmWnp5uF198cdDlNCIiosIwWN5y/sQTT9iSJUvsuuuus9tvv90+++wzZ7zExERLSEiw0NBQS0xMdD4ej8fi4+OdZfLxxx+37t27W58+fax169b23nvvmdfrtTZt2tjQoUNt0aJF5vV6bejQoTZr1iy7/vrrzePxWFxcnM2dO9d27txpR44csSNHjtjOnTvtL3/5iyUnJ9vYsWODztOqVatMUsCw5/V6LTMz055//vlyA/qsWbMCBvCzzjrLJk2aFLTPfv/731tBQYHTltLb3E6dOllGRoY99thjds4551ifPn2sZcuWTr80bdrU7rjjDnvqqacsMjLSJk+ebEuWLLF7773XYmJi7G9/+1vQ+U5KSjLfOd/LLrvMevTo4Rx4fffdd3bxxRfbwIEDg46/detWq1evXsCDtv379/sdtH388cc2dOhQy8rKsgEDBli/fv3stddeM7PAYS8lJcWioqJs/Pjx9s4779jWrVtt69at9s4771iPHj1MkmVlZdmVV15p4eHhNnXqVGfa1157rUkK2GerVq2y5ORkCwsLC1j3hAkTLDQ01GrVqmVLly71WxeLiorszTfftKZNm1q/fv0qfbD69ddf2+TJk+2KK66w2267zZo0aWL33HPPSZ0s6tq1q0VERDjLUnx8vF155ZUVPrTCN/5VV11l6enpFhkZadHR0c4JsIULF5a7nFem7mDL+vTp04OeVPENc9555wWc9qRJk4KuJzVq1LCQkBDr0qWLTZkyxWbPnm2zZ8+2KVOmWFZWlkmykJAQi4+PtxEjRtiHH37o1+6///3vFhoaau3atbPY2FibN2+eJSQk2PXXX2/x8fEWGhpqL7/8sk2dOtWSkpLskUcesTfeeMOmT59uXq/XbrrpJjMzu/76661t27b20Ucf2U8//WQbN260xMREa9iwofXr18/v4/V6rUePHtavXz87//zzg4bFLVu22NatW+2pp55ytqefffaZjRgxwkJDQ61nz55Bt9elp1ly2r7j2Bo1agTcx+Xk5JjH47HbbrvNunbtatOmTTMzsz/96U8WExNjMTExNnjw4KD795SUFKtXr17QfunSpYv17ds34HKYnp5uQ4cOtby8PHvooYesQYMGdv311zt1X3PNNda3b99yl8VgCFxBREZG+u2wS4uIiLDw8PBqlUdGRtqSJUssMjIyYHlsbKwzbvfu3W306NF+5aGhodamTZug027btq2FhITYjz/+aA899JDVr1/fRo4c6ZTXqVPH0tLSzKxseKhbt6794Q9/cOrfu3evxcbGOgfiZ555ptWoUcMWLVrkHCx37drV9u7da//5z3+sTp06VrduXdu8ebNt377dBg4caGPHjrX8/HyLj4+3iIgIe+655wLW7fF4rEOHDmZmAXfgoaGh1rhx44B1P/nkkybJZs+e7fTBX/7yF79+efbZZ+2MM84I2Gder9dWrFhhXq83YFjzeDw2btw4MzsRisPCwuyTTz5xxm/evLmFhITYZ599Zrt27bJdu3bZzp07LTQ01JYtW+b8LRjfhnnz5s12yy23WPPmze3SSy+1wsJCO3bsmEmy+vXrO2c6e/fubQsXLrSioiLnykuwHbjvILz0Tsj3N0kmycLDwy0xMdFGjRplH3/8sdO2cePGWfPmzQMG5YyMDPN4PHb33XfbZZddZmeddZadc845tnfvXtu3b59Jsl69eplZ4BAcGRnpXN0MtDzVrVvXEhMTgx7wBZq3yoRcj8djb731lnk8HrvkkkssNDTUateubbfddptt3brVTjvtNOeAbPv27eb1eu2FF17wG79Zs2a2cOHCMuP7dmTBPlFRUc6Z/UDS09MtMTHRWdYeeOABi42NtTfeeMPMzFJTU/3G//zzzy0pKcmOHTtmHo/Hrr/+euvSpYuNGjXKatasaeHh4da/f397/fXXnZMSGzduDFju9XqdkxaBwoXvpEBFy1L//v2tbt26du+991pSUpLde++9dsEFF5gk69mzZ9DltE6dOkHDYEXLue8AsHfv3nb22WdbZGSkPfvss2Z2YpvqOxEwf/58mz9/vs2bN89CQkLsvvvus4SEBJs4caKZ/d/O/q233nK+69dee83q169vZ599to0fP97v+4qNjbWMjIyg32dWVpZFREQEXR7q1q3rBOjSYW/16tWWnp5uHo8naED3er2WmJgYMIC3a9fOJNmwYcOC9vmUKVPMLPA213fQY3biwN3XF75+efbZZ61Zs2bWqVMne/DBB/3m+8wzz7T4+PhyD7x8y3GDBg1s3bp1fuNv3rzZatWqFbRfZ8+ebZICnpjwer22efNm83q99v7771tYWJh1797dbr/9dmc5nDdvnpkFDntRUVEBT4iambVo0cJGjRplqampZmb2/vvvW+3ate3OO+80M7P69es781W6z8zMateubXXr1g06XzExMZacnBy0/JFHHgk6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rujo6KDD5Ofna9u2bWrWrJliY2N19OhRPffcc/rpp58UHx+vwYMHB/1efvzxRz377LNau3at33tbMjMzdcUVVyguLs4ZtrCwUOPHj9c777yjf/3rX3r33Xc1aNCgct8DtWnTJr300ksqKChQdna2LrjgAqds165d2rBhg9q3b69GjRpp//79mjVrlo4cOaLevXvr3HPPDVpvRf26bNkyxcTEKCsrK2D5G2+8oaioKJ1zzjll5is9PT3odBHYf/7zH79/x8bG+m0rnnnmGUnS0KFDJZVdlvbt26eYmBi1adMmYP2PPPKI1q1bp8jIyDLL6e7duzVp0qRy15HylvO0tDRt2rRJEyZMCDjuO++8o2eeeSboSzxPpffff19r165VZmamsrKytHXrVk2bNk1HjhzRJZdcou7du2vOnDkB53vEiBH67LPP9Oyzzzrr5w033ODUvWvXLr388sv69NNPK9w2lLZ48WKFhYUFfMeg23JyclRQUBD0JbsLFy7Uu+++q0cffbRM2apVq/T2229r8eLFmj59uurWraumTZs65TNmzFBhYaFuuOEGLVu2zG8fe9ZZZ6lJkyauzdfJKm++JWnEiBFatWqVxo8fL0lq1qyZunTp4pS3a9dOWVlZmjlzZrWmP2fOHL9l7c4771RkZKQkacuWLSosLAy6PS8qKtLEiRP9xp8xY4Zq1aol6cQLa1966SV9/fXXZZbVa665RqmpqdXePlxxxRXavHlz0PWsS5cuOnDgQNB1rLxjr1O5nlTV4cOH9dVXX6l58+YKDw/X6tWr9dhjj5V5p6tvm9q9e3f17t27TD133323Dh8+rB9++EFPPPFElaadkZFRqfdOLliwQGvWrFFWVpYGDx6slStXavLkycrNzdV5552nhx9+WF6vt2odoIqXw/Xr1+vo0aPq1q2bM87P8f4wAtcv1Geffaa1a9cqKytLzZo107Zt2zRjxgwVFBToyiuv1NatW7V+/XpddNFFGjRokP7+97/r/vvvV3Fxsfr376977rmn2guGmWnXrl3OwlVYWKiFCxeqoKBAF110kbNQ/hx27typL7/8UnXr1lXLli1/tnqlE/OxcuVKp/7s7Oxqv4R07969ioyMdOb93//+t+bOneu8SG/kyJFq2rSpOy/Lw29KUVGR9u3bp3r16vm9KLdu3bpq3rx50GW0vBfKln7Bd0UvTT1+/LjfS2XXrVungoICZWZm/iZf1Ftd5b3g18f3ffqGOXTokF5++WVn23DppZcqPj7+V93nO3bs0Hvvvef3ku0LLrhAcXFx5ZaVFuhF9MXFxQEPmoqLi7V3795y+/6/LdCL7Et/3+Hh4Ro4cGC5waAyVqxYUaZff/e73/2iwyD+O0q/sD0/P18bNmzwW1batWsnj8dzilt6wvHjx3Xw4EF5vV7Vrl3b7+8lt4nr169XcXGx2rZtW6lAVpGfs1/Cw8O1adOmkzuOq9Z1MbjqjTfesPDw8ICP4jzvvPPM4/FYdHS0DRgwwFJSUmzatGnOo5enTp1qtWvXtj/+8Y+2YsUK5/cwBw4csGnTptndd99tW7dutddee83uvPNO58fjy5cvt169etnZZ59tSUlJ5vGceAfSjh07rH379hYTE+M8jaq8x75+//339qc//cmefPJJ55Ys30uVW7RoYQsXLjSzE0/iGzBggN8jpc8991z78ccfg74ktLi42P7zn//Y8uXL7e6777YRI0bYH/7wB/vzn/9sX3zxhfXq1ct5yeF3331nnTt3dp6S5/V6LSMjw/bv3287duxwLosXFBTYCy+8YE8//bQdOHAgaN2dOnVyno73yiuvOD9cHjdunPXr189CQkKcH2tX5WV5V199td97tdatW2fTp0+38ePH2/jx42369Om2fv16O3r0qN8tp6Vfhl3e7W8+pV8Y/c9//tO5dWT//v3lvii7pB9++MH++te/2qRJk+xvf/ubHTp0qMovLvb5/vvv7emnnw7a7+W1bciQIWWeLlZSRX129913B3156b59+yw+Pt5OP/1069ixY5l78H1PuQo2/oEDB4LeavHRRx85TzIsfRttQkKC9e/f33766Sdn+NLvRrrggguCvuA7JCTETjvttKAvTe3fv79lZmYGfe9Z06ZNnRf8mgV+IWxVlpWS/fWf//yn3Jd7+35b9s0339grr7xic+fOtblz59orr7zi92LS0i/g3rBhQ9AXYfpesn3gwAG7/fbbg36fX375pUkq92W1wW6z8m2TzU5s62rVqmW1a9e2zp07W506dax27drWrl27Sve5T0Uvk67sy6aPHTtWZvsQbP0svW5//fXXQd99GBMTY23btg1YFhsba3369Cn3RfRDhgyxAQMGWGRkpCUnJ9udd97ptx3JyckJ+BvLiua7vJei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ePjhh11GDdVVdK/8JECS1ALxTz/9FFarFTabjbu/p0+fjgYNGiArKwvp6ekYN26cqvpuaWkpnn/+efz4448AqvtF48ePx8MPP4zS0lK365aXlwciYoXW5L6SyWRCixYt8Omnn+ruF3dSdVmcLHP27Fns3LlTVXTlehAerv9BLly4QGaz2cVzcOnSJaqsrCRvb+8bvkwjqbLsNwgLC6OjR49So0aNuPM4e/YsbdmyhUwmE12+fJlat259Q51g3377LZWXl5O3t/d1zfvnn3+mOXPmuLhTevfuTYMHD1b5JoiIXnjhBVq3bh29+OKLFBUVRUREZ86cobKyMpU/KT09XeW00cqwJUmi3bt360oXjx49Su+//z55enoaCqPdibKvXbtGX331lWrZ6enphu1l+/bt5OnpaehYu3DhAm3evNnwmPLW7aeffqKePXuqvB561EUg/r/IL7/8Qh9//DH9+OOPXCGsXltJTk6moKAg8vPz48532bJldPz4cRowYICL3Ltz587MOciTcCYnJxsKuN1RV3n574U7gfeNFHzL52fDhg1rfW7/3mi329fXl0wmk25bU0rRtcii2k6dOv3pt5uHkWw+KiqKLl68qCsAX7FiBb377ru0aNEibnzhwoX073//m+Li4lzuFZcvX6Zr1665dYz98ssvXKG0h4eH6u+MxOq8du7u/K/L9cFIXvxXby96uBPdjxs3joiI7ROtQHz06NFUVlZGaWlptd7fdV23t99+m44ePUpms9mlnXXq1MnQteVOqs5D6z67HkTC9T/IoUOHaOLEifTGG29w43v37qWSkhKaPn26S8f80qVLNGvWLAoNDWWdIK2UOTw8nCtt3rRpEyUnJ7uILJ9//nkaOHAgO5lmzpxJRNXSuvfee4+Ji++66y7VCaeNp6SkUHx8POuALFiwQCUn9vLyoscee4zatWvnss3/93//R/379+fGZGbPnq0rm87MzKRly5ZRYmIiORwO2rp1KxUWFtKVK1do7dq1lJKSQmvWrPnLXphvVbZv387t3Ldq1cpwutOnT9OqVato4MCBXGnrtWvXaOvWrdS6desay8Nzc3Np/vz53JuAUhBev359MplMTJa7b98+euONN1g7z8rKooqKCsrJyaF69erRN998Qy+99BJVVVVRnz59KC8vT0hVNZw+fZpWrlxJ7du3r5HwvTbH4777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",
-      "text/plain": [
-       "<Figure size 1000x700 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "centile = q.get_quantile(100)\n",
-    "df = pd.DataFrame(centile[\"buckets\"])\n",
-    "df.plot.bar(x=\"lower_bound\", y=\"bucket_mean\", figsize=(10, 7))"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/20_Convert_SAS.ipynb b/notebooks/code_CASD/extractions_base_des_impots/20_Convert_SAS.ipynb
deleted file mode 100644
index 0f851b40154c49f1a4ebd8e5f68000997e9a8bc5..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/20_Convert_SAS.ipynb
+++ /dev/null
@@ -1,291 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# CASD : Conversion de l'extraction SAS en Apache Parquet + retraitement de certaines variables de POTE brut"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "year = \"2019\"\n",
-    "# year = \"2019\"\n",
-    "# year = \"2018\"\n",
-    "SAS_FILE = (\n",
-    "    r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\sas/agregats_pote_\"\n",
-    "    + year\n",
-    "    + \".sas7bdat\"\n",
-    ")\n",
-    "OUT_PATH = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\data/\"\n",
-    "OUT_PATH = OUT_PATH + \"assiettes_pote_brutes_\" + year + \"-chunk/\"\n",
-    "taille_chunk = 2 * 2**20  # 2**20 = 1_048_576\n",
-    "# taille_chunk = 5000\n",
-    "# taille_chunk = 600_000"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import shutil\n",
-    "from pathlib import Path\n",
-    "\n",
-    "import pandas as pd\n",
-    "import vaex\n",
-    "from tqdm import tqdm"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# sas_col = \"FIP18_c revkire rimp tsirna rbg srbg mnrvr3 mnrvi2 mnrvk mnrvni Z8uy nbpart zn nbefi nbfoy nbpldm mat agec aged clirpg frf Z1ak Z1bk txmoy impot impotnet j rnirp8 rnimeh tsirna mnipeg rnirai rnirdu rnirgi f g h i r p Z1az Z1bz stutile zf zp\".split(    \" \")\n",
-    "# sas_col = \"FIP18_c revkire rimp tsirna rbg srbg mnrvr3 mnrvi2 mnrvk mnrvni Z8uy nbpart zn nbefi nbfoy nbpldm mat agec aged clirpg frf Z1ak Z1bk txmoy impot impotnet j rnirp8 rnimeh tsirna mnipeg rnirai rnirdu rnirgi f g h i r p Z1az Z1bz stutile zf zp\".split(\n",
-    "#     \" \"\n",
-    "# )"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Traitement des données du fichier SAS"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# On somme les colonnes qui nous intéressent, pour l'instant n'est valable que pour 2019\n",
-    "def sum_columns(df):\n",
-    "    # Pour assiette de CSG\n",
-    "    df[\"revenus_capitaux_prelevement_bareme\"] = df.z2ch\n",
-    "    df[\"revenus_capitaux_prelevement_liberatoire\"] = df.z2dh + df.z2xx\n",
-    "    df[\"revenus_capitaux_prelevement_forfaitaire_unique_ir\"] = df.z2dc + df.z2tr + df.z2ts + df.z2ww + df.z2zz + df.z2fu + df.z2tt\n",
-    "    df[\"rente_viagere_titre_onereux_net\"] = df.z1cw + df.z1dw\n",
-    "    # Micro-foncier : on applique l'abattement de 30%\n",
-    "    df[\"revenu_categoriel_foncier\"] = (\n",
-    "        df.z4ba + (df.z4be * 0.7) - (df.z4bb + df.z4bc + df.z4bd)\n",
-    "    )\n",
-    "    # df['rev_categ_foncier4ba']=df.Z4ba\n",
-    "    df[\"assiette_csg_plus_values\"] = df.z3vg + df.z3ua - df.z3va\n",
-    "    df[\"assiette_csg_revenus_capital\"] = (\n",
-    "        df[\"revenus_capitaux_prelevement_bareme\"]\n",
-    "        + df[\"revenus_capitaux_prelevement_liberatoire\"]\n",
-    "        + df[\"revenus_capitaux_prelevement_forfaitaire_unique_ir\"]\n",
-    "        + df[\"rente_viagere_titre_onereux_net\"]\n",
-    "        + df[\"revenu_categoriel_foncier\"]\n",
-    "        + df[\"assiette_csg_plus_values\"]\n",
-    "    )\n",
-    "\n",
-    "    # Autres\n",
-    "    df[\"retraites\"] = df.z1as + df.z1bs  # + df.mnimqg\n",
-    "    #     df[\n",
-    "    #         \"pre_retraites_etranger\"\n",
-    "    #     ] = df.z8sc  # Attention, seulement de l'étranger, sinon c'est df.Z1ap + df.Z1bp\n",
-    "\n",
-    "    df[\"chomage_et_indemnites\"] = df.z1ap + df.z1bp\n",
-    "\n",
-    "    df[\"rev_salaire\"] = df.z1aj + df.z1bj + df.z1cj + df.z8tk + df.z1af + df.z1ag + df.z1aa + df.z1ba + df.z1gb + df.z1hb + df.z1gf + df.z1hf + df.z1gg + df.z1hg +\n",
-    "                        df.z1aq + df.z1bq + df.z1gh + df.z1hh \n",
-    "\n",
-    "    # Revenus des non salariés\n",
-    "    df['rag'] = df.z5hd + df.z5id + df.z5hb + df.z5ib + df.z5hh + df.z5ih + df.z5hc + df.z5ic + df.z5hi + df.z5ii + df.z5ak + df.z5bk + df.z5al + df.z5bl - df.z5hf -\n",
-    "                df.z5if - df.z5hl - df.z5il + df.z5hm + df.z5im + df.z5hz + df.z5iz + df.z5xa + df.z5ya + df.z5xb + df.z5yb + df.z5xt + df.z5xu + df.z5xv + df.z5xw\n",
-    "    \n",
-    "    df['ric'] = df.z5ta + df.z5ua + df.z5tb + df.z5ub + df.z5kn + df.z5ln + df.z5ko + df.z5lo + df.z5kp + df.z5lp + df.z5kb + df.z5lb + df.z5kh + df.z5lh + df.z5kc +\n",
-    "                df.z5lc + df.z5ki + df.z5li + df.z5df + df.z5ef + df.z5dg + df.z5eg - df.z5kf - df.z5lf - df.z5kl - df.z5ll\n",
-    "\n",
-    "    df['rnc'] = df.z5te + df.z5ue + df.z5hp + df.z5ip + df.z5hq + df.z5iq + df.z5qb + df.z5rb + df.z5qh + df.z5rh + df.z5qc + df.z5rc + df.z5qi + df.z5ri + df.z5xj +\n",
-    "                df.z5yj + df.z5xk + df.z5yk - df.z5qe - df.z5re - df.z5qk - df.z5rk + df.z5ql + df.z5rl + df.z5qm + df.z5rm\n",
-    "\n",
-    "    df[\"pension_invalidite\"] = df.z1az + df.z1bz\n",
-    "\n",
-    "    df[\"pension_alimentaire\"] = df.z1ao + df.z1bo\n",
-    "\n",
-    "    df[\"revenus_individuels\"] = df[\"rev_salaire\"] + df[\"retraites\"] + df[\"chomage_et_indemnites\"] + df[\"rag\"] + df[\"ric\"] + df[\"rnc\"] + df[\"pension_invalidite\"] + df.[\"pension_alimentaire\"]\n",
-    "\n",
-    "    df[\"revenus_individuels_par_part\"] = df.revenus_individuels / df.nbpart\n",
-    "    df[\"revkire_par_part\"] = df.revkire / df.nbpart\n",
-    "    \n",
-    "    df.drop(['z2ch', 'z2dh', 'z2xx', 'z2dc', 'z2tr', 'z2ts', 'z2ww', 'z2zz', 'z2fu', 'z2tt', 'z1cw', 'z1dw', 'z4ba', 'z4be', 'z4bb', 'z4bc', 'z4bd',\n",
-    "             'z3vg', 'z3ua', 'z3va', 'z1as', 'z1bs', 'z1ap', 'z1bp', 'z1aj', 'z1bj', 'z1cj', 'z8tk', 'z1af', 'z1ag', 'z1aa', 'z1ba', 'z1gb',\n",
-    "             'z1hb', 'z1gf', 'z1hf', 'z1gg', 'z1hg', 'z1aq', 'z1bq', 'z1gh', 'z1hh', 'z5hd', 'z5id', 'z5hb', 'z5ib', 'z5hh', 'z5ih', \n",
-    "             'z5hc', 'z5ic', 'z5hi', 'z5ii', 'z5ak', 'z5bk', 'z5al', 'z5bl', 'z5hf', 'z5if', 'z5hl', 'z5il', 'z5hm', 'z5im', 'z5hz',\n",
-    "             'z5iz', 'z5xa', 'z5ya', 'z5xb', 'z5yb', 'z5xt', 'z5xu', 'z5xv', 'z5xw', 'z5ta', 'z5ua', 'z5tb', 'z5ub', 'z5kn', 'z5ln', \n",
-    "             'z5ko', 'z5lo', 'z5kp', 'z5lp', 'z5kb', 'z5lb', 'z5kh', 'z5lh', 'z5kc', 'z5lc', 'z5ki', 'z5li', 'z5df', 'z5ef', 'z5dg',\n",
-    "             'z5eg', 'z5kf', 'z5lf', 'z5kl', 'z5ll', 'z5te', 'z5ue', 'z5hp', 'z5ip', 'z5hq', 'z5iq', 'z5qb', 'z5rb', 'z5qh', 'z5rh',\n",
-    "             'z5qc', 'z5rc', 'z5qi', 'z5ri', 'z5xj', 'z5yj', 'z5xk', 'z5yk', 'z5qe', 'z5re', 'z5qk', 'z5rk', 'z5ql', 'z5rl', 'z5qm', 'z5rm',\n",
-    "             'z1az', 'z1bz', 'z1ao', 'z1bo'])\n",
-    "    return df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def clean_chunk(chunk):\n",
-    "    chunk.columns = [c.lower() for c in chunk.columns.to_list()]\n",
-    "    chunk.fillna(0, inplace=True)\n",
-    "    chunk = chunk.astype({\"stutile\": \"str\"})\n",
-    "    chunk = chunk.astype({\"fip18_c\": \"str\"})\n",
-    "    chunk = chunk.replace({\"tsirna\": {\"+\": 1, \"-\": \"-1\"}, \"srbg\": {\"+\": 1, \"-\": \"-1\"}})\n",
-    "    chunk = chunk.astype({\"tsirna\": \"int32\", \"srbg\": \"int32\"})\n",
-    "    chunk[\"rnirp8\"] = chunk[\"rnirp8\"] * chunk[\"tsirna\"]\n",
-    "    chunk[\"rbg\"] = chunk[\"rbg\"] * chunk[\"srbg\"]\n",
-    "    chunk[\"f+h\"] = chunk[\"f\"] + chunk[\"h\"]\n",
-    "    # chunk[\"zp+zf\"] = chunk[\"zp\"] + chunk[\"zf\"] => Its a boolean !!!\n",
-    "    chunk.drop([\"tsirna\", \"srbg\"], axis=1, inplace=True)\n",
-    "    chunk = sum_columns(chunk)\n",
-    "\n",
-    "    return chunk"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Lecture du fichier SAS\n",
-    "\n",
-    "On va lire le fichier par morceau de 1 million de lignes, pour ne pas saturer la mémoire. Il y a 39 millions de lignes.\n",
-    "\n",
-    "On va les enregistrer au fur et à mesure en format Apache Arrow."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Nombre d'itérations : 19\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "19it [22:00, 69.48s/it]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 20min 54s\n",
-      "Wall time: 22min\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# Temps sur CASD : < 20 minutes.\n",
-    "\n",
-    "\n",
-    "# Efface le dossier de sortie\n",
-    "shutil.rmtree(OUT_PATH, ignore_errors=True)\n",
-    "Path(OUT_PATH).mkdir(parents=True, exist_ok=True)\n",
-    "\n",
-    "dfi = pd.read_sas(\n",
-    "    SAS_FILE, chunksize=taille_chunk, encoding=\"iso8859-15\", iterator=True\n",
-    ")\n",
-    "\n",
-    "dd_values = None\n",
-    "i = 0\n",
-    "print(f\"Nombre d'itérations : {39512402/taille_chunk:.0f}\")\n",
-    "for chunk in tqdm(dfi):\n",
-    "    chunk = clean_chunk(chunk)\n",
-    "    dd_values = vaex.from_pandas(chunk, copy_index=False)\n",
-    "    dd_values.export(f\"{OUT_PATH}pote_brutes_{year}_{i}.parquet\")\n",
-    "    del dd_values\n",
-    "    dd_values = None\n",
-    "    #### DEBUG\n",
-    "    i += 1\n",
-    "    #     if i>=2:\n",
-    "    #         break\n",
-    "    #### DEBUG"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Vérification"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "chunk"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from leximpact_prepare_data.calib_and_copules import tc\n",
-    "\n",
-    "dfv = vaex.open(f\"{OUT_PATH}pote_brutes_{year}_*.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "tc.assertEqual(len(dfv), 39_264_696)  # 39_512_402\n",
-    "tc.assertGreaterEqual(dfv[\"revkire\"].count(), 36644848)\n",
-    "tc.assertGreaterEqual(dfv[\"revkire\"].sum(), 1_084_000_000_000)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/30a_Agregats_POTE-Quantiles.ipynb b/notebooks/code_CASD/extractions_base_des_impots/30a_Agregats_POTE-Quantiles.ipynb
deleted file mode 100644
index 481d2672fe6377a70bf4f51cc3f2c0e2630496fe..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/30a_Agregats_POTE-Quantiles.ipynb
+++ /dev/null
@@ -1,381 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "284168c2-c515-442a-8943-638ab2487933",
-   "metadata": {},
-   "source": [
-    "# CASD : Extraction de quantiles de POTE"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3b1b7645-f0a7-4929-a667-3ffa31e1b4db",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "e888519d-ca9f-404a-b188-49de0bf72e31",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "year = \"2019\"\n",
-    "# year = \"2019\"\n",
-    "# year = \"2018\"\n",
-    "OUT_PATH = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\data/\"\n",
-    "ARROW_PATH = OUT_PATH + \"assiettes_pote_brutes_\" + year + r\"-chunk/\"\n",
-    "taille_chunk = 2 * 2**20  # 2**20 = 1_048_576\n",
-    "# taille_chunk = 5000"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5e63307c-d42d-43d6-9ce3-8ea904a338eb",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'0.0.17'"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import leximpact_prepare_data\n",
-    "\n",
-    "leximpact_prepare_data.__version__"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d5c9f1f6-e464-48d1-a933-421ad58a270a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import gc\n",
-    "import json\n",
-    "\n",
-    "import vaex\n",
-    "from tqdm import tqdm\n",
-    "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import *"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "805afac3-cab5-4795-8c93-84cd0e99d45f",
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "AssertionError",
-     "evalue": "39818227 != 39264696",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
-      "File \u001b[1;32m<timed exec>:5\u001b[0m, in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n",
-      "File \u001b[1;32mC:\\Users\\Public\\Documents\\Anaconda\\envs\\leximpa\\lib\\unittest\\case.py:837\u001b[0m, in \u001b[0;36mTestCase.assertEqual\u001b[1;34m(self, first, second, msg)\u001b[0m\n\u001b[0;32m    833\u001b[0m \u001b[38;5;124;03m\"\"\"Fail if the two objects are unequal as determined by the '=='\u001b[39;00m\n\u001b[0;32m    834\u001b[0m \u001b[38;5;124;03m   operator.\u001b[39;00m\n\u001b[0;32m    835\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m    836\u001b[0m assertion_func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getAssertEqualityFunc(first, second)\n\u001b[1;32m--> 837\u001b[0m \u001b[43massertion_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfirst\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msecond\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmsg\u001b[49m\u001b[43m)\u001b[49m\n",
-      "File \u001b[1;32mC:\\Users\\Public\\Documents\\Anaconda\\envs\\leximpa\\lib\\unittest\\case.py:830\u001b[0m, in \u001b[0;36mTestCase._baseAssertEqual\u001b[1;34m(self, first, second, msg)\u001b[0m\n\u001b[0;32m    828\u001b[0m standardMsg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m != \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m _common_shorten_repr(first, second)\n\u001b[0;32m    829\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_formatMessage(msg, standardMsg)\n\u001b[1;32m--> 830\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfailureException(msg)\n",
-      "\u001b[1;31mAssertionError\u001b[0m: 39818227 != 39264696"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# Temps de chargement 8 secondes pour 39,264,695 lignes, vive le lazy loading !\n",
-    "dfv = vaex.open(ARROW_PATH + \"*\")\n",
-    "# dfv = vaex.open(ARROW_PATH + \"pote_brutes_2019_5.arrow\")\n",
-    "# dfv\n",
-    "tc.assertEqual(len(dfv), 39264696)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f7042430-e355-4142-a733-a083b936d67d",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 0 ns\n",
-      "Wall time: 0 ns\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# Temps d'exécution : 2 secondes\n",
-    "# pyramide_des_ages = dfv.groupby(by=\"aged\", agg={\"age\": vaex.agg.count(\"aged\")})\n",
-    "# pyramide_des_ages"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2e8a14fa-6b7a-4a3a-95d2-c559dbd2b20e",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# dfv.info()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7d55425f-af65-4f69-9b84-270020a8122e",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['mat',\n",
-       " 'aged',\n",
-       " 'agec',\n",
-       " 'zf',\n",
-       " 'zp',\n",
-       " 'zn',\n",
-       " 'stutile',\n",
-       " 'f',\n",
-       " 'clirpg',\n",
-       " 'g',\n",
-       " 'r',\n",
-       " 'j',\n",
-       " 'h',\n",
-       " 'i',\n",
-       " 'p',\n",
-       " 'nbefi',\n",
-       " 'nbfoy',\n",
-       " 'nbpldm',\n",
-       " 'rimp',\n",
-       " 'rnirp8',\n",
-       " 'rbg',\n",
-       " 'mnrvr3',\n",
-       " 'txmoy',\n",
-       " 'revkire',\n",
-       " 'z1ak',\n",
-       " 'z1az',\n",
-       " 'z1bk',\n",
-       " 'z1bz',\n",
-       " 'z8uy',\n",
-       " 'mnipeg',\n",
-       " 'mnrvi2',\n",
-       " 'mnrvk',\n",
-       " 'mnrvni',\n",
-       " 'rnimeh',\n",
-       " 'rnirai',\n",
-       " 'rnirdu',\n",
-       " 'rnirgi',\n",
-       " 'frf',\n",
-       " 'impotnet',\n",
-       " 'impot',\n",
-       " 'nbpart',\n",
-       " 'fip18_c',\n",
-       " 'f+h']"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "dfv.get_column_names()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d9d20ef4-b120-4f52-8ba5-6f722d56037b",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['f', 'g', 'h', 'i', 'r', 'p']"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "\"f g h i r p\".split(\" \")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "0653c281-5687-4542-8ff1-bd70dace2410",
-   "metadata": {},
-   "source": [
-    "## Variables continues"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "48b77a1d-4e9e-496b-8131-be831cfbf5ab",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# \"Z1ak Z1bk txmoy impot impotnet rnirp8 rnimeh tsirna mnipeg rnirai rnirdu rnirgi Z1az Z1bz\".split(\" \")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7985d253-e7d1-49b1-8d96-372b2002cef0",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# continuous_variables = [\n",
-    "# \"mnipeg\", Toujours à 0\n",
-    "# \"rnirp8\",\n",
-    "# \"rnimeh\",\n",
-    "# \"rnirai\",\n",
-    "# \"rnirdu\",\n",
-    "# \"rnirgi\",\n",
-    "# \"Z1az\",\n",
-    "# \"Z1bz\",\n",
-    "# \"rimp\",\n",
-    "# \"rbg\",\n",
-    "# \"mnrvr3\",\n",
-    "# \"revkire\",\n",
-    "# \"Z1ak\",\n",
-    "# \"Z1bk\",\n",
-    "# \"Z8uy\",\n",
-    "# \"MNRVI2\",\n",
-    "# \"MNRVK\",\n",
-    "# \"MNRVNI\",\n",
-    "# \"FRF\",\n",
-    "# \"Z1ak\",\n",
-    "# \"Z1bk\",\n",
-    "# \"txmoy\",\n",
-    "# \"impot\",\n",
-    "# \"impotnet\",\n",
-    "# ]\n",
-    "# continuous_variables = [c.lower() for c in continuous_variables]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "7f1e01ef-7303-4bfd-9d60-a28f861c56bd",
-   "metadata": {},
-   "source": [
-    "### Calcul des quantiles"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "da0ed4e7-0836-43c1-a99e-c33a5236f7d9",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def compute_quantile(vdf, columns=None, quantiles=10):\n",
-    "    vdf.fillna(column_names=columns, value=0, inplace=True)\n",
-    "    # vdf.fillnan(column_names=columns, value=0, inplace=True)\n",
-    "    vdf.shape[0]\n",
-    "    columns = columns if columns else vdf.get_column_names()\n",
-    "    for col in tqdm(columns):\n",
-    "        try:\n",
-    "            # print(col)\n",
-    "            q = Quantile(vdf[col].tolist())\n",
-    "            for quantile in quantiles:\n",
-    "                q_dict = q.get_quantile(quantile)\n",
-    "                with open(\n",
-    "                    f\"{OUT_PATH}/quantile_POTE_{quantile}_{year}_{col}.json\", \"w\"\n",
-    "                ) as f:\n",
-    "                    f.write(json.dumps(q_dict))\n",
-    "            del q\n",
-    "            gc.collect()\n",
-    "        except Exception as e:\n",
-    "            print(f\"ERROR processing {col} {e.__class__.__name__} : {e}\")\n",
-    "            continue"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5960386d-494f-4305-ac33-d98381478b54",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "100%|███████████████████████████████████████| 23/23 [1:50:32<00:00, 288.38s/it]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 1h 49min 50s\n",
-      "Wall time: 1h 50min 32s\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# Temps sur CASD : 5 minutes par colonne\n",
-    "compute_quantile(dfv, quantiles=[10, 100])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d4dcc7d7-29f2-470e-8713-8858399c54f3",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "469"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "del dfv\n",
-    "gc.collect()"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/30b_Copules_POTE.ipynb b/notebooks/code_CASD/extractions_base_des_impots/30b_Copules_POTE.ipynb
deleted file mode 100644
index a930163a42aea70bb64742e0aa84d0cb3e061ce6..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/30b_Copules_POTE.ipynb
+++ /dev/null
@@ -1,714 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "284168c2-c515-442a-8943-638ab2487933",
-   "metadata": {},
-   "source": [
-    "# CASD : Extraction d'agrégats"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b54838d4-6300-4242-816a-2b9df2041868",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "#!conda list"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3b1b7645-f0a7-4929-a667-3ffa31e1b4db",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "e888519d-ca9f-404a-b188-49de0bf72e31",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "year = \"2019\"\n",
-    "# year = \"2019\"\n",
-    "# year = \"2018\"\n",
-    "OUT_PATH = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\data/\"\n",
-    "OUT_PATH = OUT_PATH + \"assiettes_pote_brutes_\" + year + \"-chunk/\"\n",
-    "taille_chunk = 2 * 2**20  # 2**20 = 1_048_576"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5e63307c-d42d-43d6-9ce3-8ea904a338eb",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'0.0.23'"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import leximpact_prepare_data\n",
-    "\n",
-    "leximpact_prepare_data.__version__"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d5c9f1f6-e464-48d1-a933-421ad58a270a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import gc\n",
-    "\n",
-    "import pandas as pd\n",
-    "import vaex\n",
-    "from tqdm import tqdm\n",
-    "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import *"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "805afac3-cab5-4795-8c93-84cd0e99d45f",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 375 ms\n",
-      "Wall time: 372 ms\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# Temps de chargement 8 secondes pour 39,264,695 lignes, vive la lazy loading !\n",
-    "dfv = vaex.open(OUT_PATH + \"*\")\n",
-    "# dfv = vaex.open(ARROW_PATH + \"pote_brutes_2019_5.arrow\")\n",
-    "# dfv"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f7042430-e355-4142-a733-a083b936d67d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%%time\n",
-    "# Temps d'exécution : 2 secondes\n",
-    "# pyramide_des_ages = dfv.groupby(by=\"aged\", agg={\"age\": vaex.agg.count(\"aged\")})\n",
-    "# pyramide_des_ages"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b5a6136d-ad4b-4ad0-b823-1fa476cc0100",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2e8a14fa-6b7a-4a3a-95d2-c559dbd2b20e",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# dfv.info()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "e08260b0-bf98-4160-8825-bcdaa20c9229",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# tc.assertEqual(dfv[\"revkire\"].count(), 39512402)  # 2019\n",
-    "tc.assertEqual(dfv[\"revkire\"].count(), 39818227)  # 2020"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7d55425f-af65-4f69-9b84-270020a8122e",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['rnsgbd',\n",
-       " 'rnsgld',\n",
-       " 'revkire',\n",
-       " 'z1aj',\n",
-       " 'z1ap',\n",
-       " 'z1as',\n",
-       " 'z1bj',\n",
-       " 'z1bp',\n",
-       " 'z1bs',\n",
-       " 'z1cj',\n",
-       " 'z1cw',\n",
-       " 'z1dw',\n",
-       " 'z2ch',\n",
-       " 'z2dc',\n",
-       " 'z2dh',\n",
-       " 'z2tr',\n",
-       " 'z3ua',\n",
-       " 'z3vg',\n",
-       " 'z3vz',\n",
-       " 'z4ba',\n",
-       " 'z4bb',\n",
-       " 'z4bc',\n",
-       " 'z4bd',\n",
-       " 'z4be',\n",
-       " 'z6de',\n",
-       " 'z8sc',\n",
-       " 'z8sw',\n",
-       " 'z8sx',\n",
-       " 'cics',\n",
-       " 'mnimqg',\n",
-       " 'fip18_c',\n",
-       " 'revenus_capitaux_prelevement_bareme',\n",
-       " 'revenus_capitaux_prelevement_liberatoire',\n",
-       " 'revenus_capitaux_prelevement_forfaitaire_unique_ir',\n",
-       " 'rente_viagere_titre_onereux_net',\n",
-       " 'revenu_categoriel_foncier',\n",
-       " 'assiette_csg_plus_values',\n",
-       " 'assiette_csg_revenus_capital',\n",
-       " 'retraites',\n",
-       " 'chomage_et_indemnites',\n",
-       " 'rev_salaire']"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "dfv.get_column_names()\n",
-    "# Remove id fip18_c\n",
-    "_ = dfv.drop(\"fip18_c\", inplace=True)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "0653c281-5687-4542-8ff1-bd70dace2410",
-   "metadata": {},
-   "source": [
-    "## Variables continues"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "48b77a1d-4e9e-496b-8131-be831cfbf5ab",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# \"Z1ak Z1bk txmoy impot impotnet rnirp8 rnimeh tsirna mnipeg rnirai rnirdu rnirgi Z1az Z1bz\".split(\" \")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7985d253-e7d1-49b1-8d96-372b2002cef0",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# continuous_variables = dfv.get_column_names()\n",
-    "# continuous_variables = [c.lower() for c in continuous_variables]\n",
-    "continuous_variables = [\n",
-    "    \"revkire\",\n",
-    "    \"revkire_par_part\",\n",
-    "    \"rbg\",\n",
-    "    \"rnirp8\",\n",
-    "    \"assiette_csg_revenus_capital\",\n",
-    "    \"revenus_capitaux_prelevement_bareme\",\n",
-    "    \"revenus_capitaux_prelevement_liberatoire\",\n",
-    "    \"revenus_capitaux_prelevement_forfaitaire_unique_ir\",\n",
-    "    \"rente_viagere_titre_onereux_net\",\n",
-    "    \"revenu_categoriel_foncier\",\n",
-    "    \"assiette_csg_plus_values\",\n",
-    "    \"revenus_individuels\",\n",
-    "    \"revenus_individuels_par_part\",\n",
-    "    \"rev_salaire\",\n",
-    "    \"retraites\",\n",
-    "    \"chomage_et_indemnites\",\n",
-    "    \"rag\",\n",
-    "    \"ric\",\n",
-    "    \"rnc\",\n",
-    "    \"pension_invalidite\",\n",
-    "    \"pension_alimentaire\",\n",
-    "]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "f9d8a9c4-f719-4af9-bb7d-ece0262bf405",
-   "metadata": {},
-   "source": [
-    "### Calcul d'agregats"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "418b50a2-0bc9-4f4b-a7db-1bb271ad1d32",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def compute_agg(vdf, columns):\n",
-    "    sub_total = []\n",
-    "    vdf.fillna(column_names=columns, value=0, inplace=True)\n",
-    "    # vdf.fillnan(column_names=columns, value=0, inplace=True)\n",
-    "    ldf = vdf.shape[0]\n",
-    "    columns = columns if columns else vdf.get_column_names()\n",
-    "    for col in tqdm(columns):\n",
-    "        # print(col)\n",
-    "        name = f\"{col}_non_zero\"\n",
-    "        vdf.select(f\"{col} != 0\", name=name)\n",
-    "        nb_no_zero = int(vdf.count(\"*\", selection=name))\n",
-    "        lenzero = ldf - nb_no_zero\n",
-    "        dict_col = {\n",
-    "            \"name\": col,\n",
-    "            \"nb_line\": ldf,\n",
-    "            \"lenzero\": lenzero,\n",
-    "            \"pct_zero\": lenzero / ldf * 100,\n",
-    "            \"sum\": int(vdf.sum(col)),\n",
-    "            \"mean\": float(vdf.mean(col, selection=name)) if nb_no_zero > 0 else 0.0,\n",
-    "            \"variance\": float(vdf.var(col, selection=name)) if nb_no_zero > 0 else 0.0,\n",
-    "            \"std_dev\": float(vdf.std(col, selection=name)) if nb_no_zero > 0 else 0.0,\n",
-    "        }\n",
-    "        sub_total.append(dict_col)\n",
-    "    return pd.DataFrame(sub_total)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "22b6014d-ae3c-4b70-82f8-c5f51d484bed",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%%time\n",
-    "# Temps sur CASD : 30s par colonne avant l'upgrade de machine, moins de 3 secondes après upgrade !\n",
-    "df_agg = compute_agg(dfv, continuous_variables)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a3f94b4e-3016-48be-bdcf-0f3e236c434a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# dfv.mnipeg.mean()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "57e615a2-d2d7-4422-bed0-4d8c27e0b06d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pd.set_option(\"display.float_format\", \"{:,}\".format)\n",
-    "# Export dans un fichier\n",
-    "df_agg.to_csv(OUT_PATH + \"/agregats_POTE_revenus_rici_\" + year + \".csv\", index=False)\n",
-    "df_agg"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5317aaf0-24cd-4af9-b757-a50818d74177",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "del df_agg\n",
-    "import gc\n",
-    "\n",
-    "gc.collect()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "785ec58a-da1b-4cd3-8851-169b60d4ef24",
-   "metadata": {},
-   "source": [
-    "## Extraction de fonctions de répartition (pour calibration)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3023e812-2306-4fc8-813e-83e8a9e6da19",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 23.4 s\n",
-      "Wall time: 23.2 s\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "dfv = dfv.fillna(0)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9ee6e983-0135-4db8-8d66-43fbbfc3b0f3",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 0 ns\n",
-      "Wall time: 0 ns\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "# calib = get_calib(dfv, \"rimp\", 10)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "aaf56d71-c77d-4e03-8ec8-7b7b337ac8f9",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Redéfinition à migrer !\n",
-    "from typing import Dict\n",
-    "\n",
-    "\n",
-    "def get_primary_buckets(\n",
-    "    vdx_sort: vaex.dataframe.DataFrameLocal,\n",
-    "    nb_bucket: int,\n",
-    "    variable_to_split_on: str = \"revkire\",\n",
-    "    minimal_bucket_size=12,\n",
-    "    debug=False,\n",
-    ") -> Dict:\n",
-    "    \"\"\"\n",
-    "    Objectif: Split the variable in buckets\n",
-    "    Dans chaque bucket on stocke toutes les valeurs non nulles de \"variable\"\n",
-    "    ::vdx_sort:: Le dataset, trié selon la variable à étudier\n",
-    "    ::nb_bucket:: Nombre de tranches souhaitées\n",
-    "    ::variable_to_split_on:: Variable on which to split buckets\n",
-    "    ::debug:: Pour activer un mode debug, qui affiche des traces\n",
-    "    \"\"\"\n",
-    "    dataset_size = vdx_sort.shape[0]  # Nb de lignes\n",
-    "    # Conversion en array\n",
-    "    variable_array = vdx_sort.to_arrays(\n",
-    "        column_names=[variable_to_split_on], selection=False, array_type=\"python\"\n",
-    "    )[0]\n",
-    "    # On vérifie que le dataset est bien trié\n",
-    "    previous = variable_array[-1]\n",
-    "    for i in range(1, 1000):\n",
-    "        idx = dataset_size // i\n",
-    "        idx = idx if idx != dataset_size else dataset_size - 1\n",
-    "        if previous < variable_array[idx]:\n",
-    "            raise DatasetNotSorted(\n",
-    "                f\"Your dataset is not sorted on {variable_to_split_on}!\"\n",
-    "            )\n",
-    "        previous = variable_array[idx]\n",
-    "\n",
-    "    # Découpage du RFR en buckets:\n",
-    "    borders = get_borders(\n",
-    "        dataset_size=dataset_size,\n",
-    "        nb_bucket=nb_bucket,\n",
-    "        minimal_bucket_size=minimal_bucket_size,\n",
-    "        debug=debug,\n",
-    "    )\n",
-    "\n",
-    "    # On retire la dernière frontière pour éviter des tests (index out of range), on la remetra après\n",
-    "    borders = borders[:-1]\n",
-    "    i = 0\n",
-    "    # On supprime les frontières qui n'auraient que du 0\n",
-    "    while i < len(borders):\n",
-    "        if variable_array[borders[i]] < 1:\n",
-    "            if debug:\n",
-    "                print(\n",
-    "                    f\"WARNING: On efface la frontière d'index {i} : {borders[i]} inutile car valeur de la borne haute est {variable_array[borders[i]]}\"\n",
-    "                )\n",
-    "            borders = borders[:i] + borders[i + 1 :]\n",
-    "        else:\n",
-    "            i += 1\n",
-    "    frontieres_valeurs = [0] + [variable_array[frontiere] for frontiere in borders]\n",
-    "    # On ajoute une valeur de fin trés haute (10^15€)\n",
-    "    frontieres_valeurs += [10**15]\n",
-    "    # On remet la dernière frontière\n",
-    "    borders += [dataset_size]\n",
-    "    dic = {\"borders_values\": frontieres_valeurs, \"borders\": borders}\n",
-    "    del variable_array\n",
-    "    gc.collect()\n",
-    "    return dic"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c45ddd1b-2477-4bd2-ad27-a4652fafe270",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# TODO : import from package\n",
-    "# def get_fake_upper_bound(val):\n",
-    "#     if val == 1e15:\n",
-    "#         return 1e15\n",
-    "#     else:\n",
-    "#         return 10 ** (len(str(int(val))))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "32fa27f6-6639-4fca-8eb0-16597361b652",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# get_fake_upper_bound(100.5)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "8317e05e-df85-4b16-bca8-80ca19e8223e",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# calib = get_copulas(dfv, \"revkire\", \"revkire\", 10, une_tranche_rfr)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "59ae4f6a-6fe5-4bbf-8aba-9fcb1c75734a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# calib[\"copules\"][\"buckets\"][-1]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "50bf217f-3a83-4884-87a7-98d3768878b4",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# calib = calib[\"copules\"][0][\"buckets\"]\n",
-    "# keep_upper_bound_secret(calib)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a974e412-cbfa-4a64-86e9-f6fe80394f41",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# calib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d2a34c2f-94de-44e4-a4ee-1ef029c8d5c6",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# calib[\"buckets\"][-1][\"seuil_var_supp\"] = \"secret\"\n",
-    "# calib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a122c283-4bef-4ffa-a76b-d846d36f50be",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# from IPython.display import JSON\n",
-    "\n",
-    "# JSON(calib)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "df0387a2-0574-4acc-a75e-f8c61fc09afc",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# %%time\n",
-    "# # Temps sur CASD : 138s par iteration\n",
-    "# nb_bucket_var = 100\n",
-    "\n",
-    "# for variable in tqdm(continuous_variables):\n",
-    "#     #calib = get_calib(dfv, variable, nb_bucket_var)\n",
-    "#     # print(variable)\n",
-    "#     calib = compute_copule_vaex(dfv, variable, nb_bucket_var, une_tranche_rfr)\n",
-    "#     calib[\"copules\"][0][\"buckets\"][-1][\"seuil_var_supp\"] = \"secret\"\n",
-    "#     with open(f\"{OUT_PATH}CalibPote-{nb_bucket_var}-{year}-{variable}.json\", \"w\") as f:\n",
-    "#         f.write(json.dumps(calib[\"copules\"][0][\"buckets\"]))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "026dcad9-2b94-4ba7-8117-8cc92efc8b8c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# %%time\n",
-    "# # Temps sur CASD : 538s par iteration !\n",
-    "# nb_bucket_var = 1000\n",
-    "\n",
-    "# for variable in tqdm(continuous_variables):\n",
-    "#     #calib = get_calib(dfv, variable, nb_bucket_var)\n",
-    "#     # print(variable)\n",
-    "#     calib = compute_copule_vaex(dfv, variable, nb_bucket_var, une_tranche_rfr)\n",
-    "#     calib[\"copules\"][0][\"buckets\"][-1][\"seuil_var_supp\"] = \"secret\"\n",
-    "#     with open(f\"{OUT_PATH}CalibPote-{nb_bucket_var}-{year}-{variable}.json\", \"w\") as f:\n",
-    "#         f.write(json.dumps(calib[\"copules\"][0][\"buckets\"]))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "d1c5f22c-5e27-4a8f-94a3-5bfe897f1d7f",
-   "metadata": {},
-   "source": [
-    "## Extraction de Copules"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c4e85dd4-2c66-4994-ad0d-5d327737aece",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "100%|███████████████████████████████████████████| 3/3 [07:55<00:00, 158.59s/it]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: total: 7min 54s\n",
-      "Wall time: 7min 55s\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "nb_bucket_var = 10\n",
-    "\n",
-    "# on fait des copules en fonction du rfr mais aussi en fonction des revenus individuels pour voir si ça permet d'améliorer l'imputation\n",
-    "# Les copules en fonction de assiette_csg_revenus_capital servent si on veut voir la distribution des différents revenus du capital dans la somme de revenus du capital\n",
-    "for copule_var in [\"revkire\", \"revkire_par_part\", \"revenus_individuels\", \"revenus_individuels_par_part\", \"assiette_csg_revenus_capital\"]\n",
-    "    centile = get_primary_buckets(\n",
-    "        dfv, nb_bucket_var, variable_to_split_on=copule_var, minimal_bucket_size=500\n",
-    "    )\n",
-    "\n",
-    "    for variable in tqdm(continuous_variables):  # continuous_variables\n",
-    "        try:\n",
-    "            copule = get_copulas(\n",
-    "                dfv,\n",
-    "                copule_var,\n",
-    "                variable,\n",
-    "                nb_bucket_var,\n",
-    "                centile_rfr,\n",
-    "                minimal_bucket_size=100,\n",
-    "            )\n",
-    "            # copule[\"copules\"][0][\"buckets\"][-1][\"upper_bound\"] = \"secret\"\n",
-    "            anonimyze_lower_and_upper_bound(copule[\"copules\"])\n",
-    "            with open(\n",
-    "                f\"{OUT_PATH}CopulePote-{nb_bucket_var}-{year}-{copule_var}-{variable}.json\", \"w\"\n",
-    "            ) as f:\n",
-    "                f.write(json.dumps(copule))\n",
-    "        except Exception as e:\n",
-    "            print(f\"ERROR processing {variable}\", e)\n",
-    "            # raise e"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "364dff4d-d746-441e-bde6-1db0594e80b5",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# dfv.column_names"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "53396d39-b2d7-459a-abde-83a77a897f50",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# copule = get_copulas(dfv, \"revkire\", variable, nb_bucket_var, centile_rfr)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a753f56c-48e3-4dcd-a388-c5249615759f",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/40_Verifications.ipynb b/notebooks/code_CASD/extractions_base_des_impots/40_Verifications.ipynb
deleted file mode 100644
index 6e5c592f84b7f05a3142d5ec9291b39ca65a2d48..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/40_Verifications.ipynb
+++ /dev/null
@@ -1,208 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "4bacd951",
-   "metadata": {},
-   "source": [
-    "# CASD : Vérification des extractions"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "455a8fc3",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# | hide\n",
-    "from IPython.core.interactiveshell import InteractiveShell\n",
-    "from matplotlib.ticker import PercentFormatter\n",
-    "\n",
-    "InteractiveShell.ast_node_interactivity = \"all\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "0c00e027",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "IN_PATH = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\csg\\data_out/\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3a42607a",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import json\n",
-    "\n",
-    "# import seaborn as sns\n",
-    "import pandas as pd"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2c6c90b0",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# file = \"CalibPote-2019-rev_salaire.json\"\n",
-    "file = \"CalibPote-2019-assiette_csg_revenus_capital.json\"\n",
-    "# file ='CalibPote-1000-2019-revkire.json'\n",
-    "with open(IN_PATH + file) as f:\n",
-    "    calib = json.load(f)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "40771600",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "calib[\"buckets\"][15]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "52935304",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pd.set_option(\"display.float_format\", \"{:,}\".format)\n",
-    "df = pd.DataFrame(calib[\"buckets\"])\n",
-    "df"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "7518c848",
-   "metadata": {},
-   "source": [
-    "60% des foyers n'ont pas de revenu du capital"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "4ef8124b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df.query(\"0.70 < ratio_nb_above_seuil < 0.9\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "8d81e5a3",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df.iloc[99]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "a7f2e110",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df[\"seuil_de_var_str\"] = df.seuil_var_supp.astype(str)\n",
-    "df[\"pareto\"] = (1 - df.ratio_nb_above_seuil) * 100"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "de033787",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "sns.set(rc={\"figure.figsize\": (20, 8)})\n",
-    "ax = sns.scatterplot(data=df, x=\"seuil_de_var_str\", y=\"seuil_var_supp\")\n",
-    "_ = ax.set_xticklabels(labels=ax.get_xticklabels(), rotation=90)\n",
-    "_ = ax.set_title(\"Pareto de la variable\")\n",
-    "ax2 = ax.twinx()\n",
-    "ax3 = sns.lineplot(data=df, x=\"seuil_de_rfr_str\", y=\"pareto\")\n",
-    "ax3.yaxis.set_major_formatter(PercentFormatter())\n",
-    "# _ = ax.set_yscale(\"log\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f1fcf1be",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "ax3 = sns.lineplot(data=df, x=\"seuil_var_supp\", y=\"pareto\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "2488ff98",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "sns.set(rc={\"figure.figsize\": (20, 8)})\n",
-    "ax = sns.scatterplot(data=df, x=\"seuil_var_supp\", y=\"nombre_ff_tranche\")\n",
-    "# _ = ax.set_yscale(\"log\")\n",
-    "_ = ax.set_xticklabels(labels=ax.get_xticklabels(), rotation=90)\n",
-    "_ = ax.set_title(\"Nombre de foyers par tranche de RFR\\nEchelle logarithmique\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3f8df2c3",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "sns.set(rc={\"figure.figsize\": (20, 8)})\n",
-    "ax = sns.scatterplot(data=df, x=\"seuil_var_supp\", y=\"mean_tranche_var\")\n",
-    "_ = ax.set_xticklabels(labels=ax.get_xticklabels(), rotation=90)\n",
-    "_ = ax.set_title(\"Nombre de foyers par tranche de RFR\\nEchelle logarithmique\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ece9f9c2",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "ax = sns.lineplot(data=df, x=\"seuil_var_supp\", y=\"sum_var_above_seuil\")\n",
-    "_ = ax.set_yscale(\"log\")\n",
-    "# _ = ax.set_xticklabels(labels=ax.get_xticklabels(), rotation=90)\n",
-    "_ = ax.set_title(\"Nombre de foyers par tranche de RFR\\nEchelle logarithmique\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9f98dc9b",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "python3",
-   "language": "python",
-   "name": "python3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/Colonnes_POTE_2019.xlsx b/notebooks/code_CASD/extractions_base_des_impots/Colonnes_POTE_2019.xlsx
deleted file mode 100644
index d44a25648b404a56e46dcf638228cdd19c223e2d..0000000000000000000000000000000000000000
Binary files a/notebooks/code_CASD/extractions_base_des_impots/Colonnes_POTE_2019.xlsx and /dev/null differ
diff --git a/notebooks/code_CASD/extractions_base_des_impots/_test_install.ipynb b/notebooks/code_CASD/extractions_base_des_impots/_test_install.ipynb
deleted file mode 100644
index fc0722e8d362a9fa30f35c4b56562b3f6e1a5a58..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/_test_install.ipynb
+++ /dev/null
@@ -1,497 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "possible-celebrity",
-   "metadata": {},
-   "source": [
-    "# Test l'installation du paquet"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "supreme-technical",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from pydantic.version import VERSION\n",
-    "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import (\n",
-    "    DistribDeVarVaex,\n",
-    "    get_primary_buckets,\n",
-    ")\n",
-    "\n",
-    "VERSION\n",
-    "\n",
-    "import vaex\n",
-    "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import (\n",
-    "    get_copulas,\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "psychological-voltage",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "50\n"
-     ]
-    }
-   ],
-   "source": [
-    "variable_values = [i * 10 for i in range(50)]\n",
-    "dist = DistribDeVarVaex(\n",
-    "    variable_values=variable_values,\n",
-    "    variable=\"toto\",\n",
-    "    nb_entity=len(variable_values),\n",
-    "    nb_bucket_var=2,\n",
-    "    lower_bound=50,\n",
-    "    upper_bound=1e10,\n",
-    "    debug=False,\n",
-    ")\n",
-    "print(dist.to_dict()[\"count\"])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "middle-damage",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "test_raw = vaex.open(\"fake_pote_light.parquet\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "vital-moral",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<table>\n",
-       "<thead>\n",
-       "<tr><th>#                                </th><th>revkire  </th><th>rev_capital_partiel  </th><th>rev_salaire  </th><th>rente_viagere  </th><th>rev_categ_foncier  </th><th>retraites  </th><th>chomage  </th></tr>\n",
-       "</thead>\n",
-       "<tbody>\n",
-       "<tr><td><i style='opacity: 0.6'>0</i>    </td><td>0        </td><td>0                    </td><td>0            </td><td>0              </td><td>0                  </td><td>0          </td><td>0        </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>1</i>    </td><td>0        </td><td>0                    </td><td>0            </td><td>0              </td><td>0                  </td><td>0          </td><td>0        </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>2</i>    </td><td>0        </td><td>0                    </td><td>0            </td><td>0              </td><td>0                  </td><td>0          </td><td>0        </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3</i>    </td><td>0        </td><td>0                    </td><td>0            </td><td>0              </td><td>0                  </td><td>0          </td><td>0        </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>4</i>    </td><td>0        </td><td>0                    </td><td>0            </td><td>0              </td><td>0                  </td><td>0          </td><td>0        </td></tr>\n",
-       "<tr><td>...                              </td><td>...      </td><td>...                  </td><td>...          </td><td>...            </td><td>...                </td><td>...        </td><td>...      </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3,895</i></td><td>22367    </td><td>67                   </td><td>3355         </td><td>67             </td><td>82                 </td><td>55         </td><td>23178    </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3,896</i></td><td>475      </td><td>23                   </td><td>71           </td><td>23             </td><td>2                  </td><td>1          </td><td>80280    </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3,897</i></td><td>4561     </td><td>12                   </td><td>684          </td><td>12             </td><td>6474               </td><td>4316       </td><td>41896    </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3,898</i></td><td>43151    </td><td>12                   </td><td>6472         </td><td>12             </td><td>18                 </td><td>12         </td><td>123001   </td></tr>\n",
-       "<tr><td><i style='opacity: 0.6'>3,899</i></td><td>2234     </td><td>1                    </td><td>335          </td><td>1              </td><td>209                </td><td>139        </td><td>22409    </td></tr>\n",
-       "</tbody>\n",
-       "</table>"
-      ],
-      "text/plain": [
-       "#      revkire    rev_capital_partiel    rev_salaire    rente_viagere    rev_categ_foncier    retraites    chomage\n",
-       "0      0          0                      0              0                0                    0            0\n",
-       "1      0          0                      0              0                0                    0            0\n",
-       "2      0          0                      0              0                0                    0            0\n",
-       "3      0          0                      0              0                0                    0            0\n",
-       "4      0          0                      0              0                0                    0            0\n",
-       "...    ...        ...                    ...            ...              ...                  ...          ...\n",
-       "3,895  22367      67                     3355           67               82                   55           23178\n",
-       "3,896  475        23                     71             23               2                    1            80280\n",
-       "3,897  4561       12                     684            12               6474                 4316         41896\n",
-       "3,898  43151      12                     6472           12               18                   12           123001\n",
-       "3,899  2234       1                      335            1                209                  139          22409"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "test_raw"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "former-hawaii",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "test_raw = test_raw.sort(\"revkire\", ascending=True)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "included-nigeria",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\u001b[0;31mSignature:\u001b[0m\n",
-      "\u001b[0mget_copulas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mvaex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrameLocal\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.01\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;31mSource:\u001b[0m   \n",
-      "\u001b[0;32mdef\u001b[0m \u001b[0mget_copulas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mvaex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrameLocal\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1e-2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m\"\"\"\u001b[0m\n",
-      "\u001b[0;34m    On nous donne des tranches de RFR, en nombre de personne, et en valeur de RFR\u001b[0m\n",
-      "\u001b[0;34m    Pour chacune de ses tranches on doit extraire les valeurs de 'variable'\u001b[0m\n",
-      "\u001b[0;34m    On ne garde que celle supérieure à 0 et on les envoie à DistribDeVarVaex\u001b[0m\n",
-      "\u001b[0;34m    ::vdf:: Le jeux de données\u001b[0m\n",
-      "\u001b[0;34m    ::variable:: Nom de la variable secondaire.\u001b[0m\n",
-      "\u001b[0;34m    ::nb_bucket_var:: Nombre de tranches de variable secondaire souhaités.\u001b[0m\n",
-      "\u001b[0;34m    ::primary_buckets:: La liste des tranches de RFR.\u001b[0m\n",
-      "\u001b[0;34m    ::debug:: Pour activer un mode debug, qui affiche des traces.\u001b[0m\n",
-      "\u001b[0;34m    ::minimal_bucket_size:: Nombre minimal d'individus pour respecter le secret statistique.\u001b[0m\n",
-      "\u001b[0;34m    \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mcontrole\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mcopules\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mfrontieres_valeurs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"borders_values\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mborders\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"borders\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mif\u001b[0m \u001b[0mprimary_variable\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_column_names\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprimary_variable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprimary_variable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_column_names\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# Conversion en array\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable_array\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_arrays\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcolumn_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mprimary_variable\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mselection\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"python\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdataset_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On vérifie que le dataset est bien trié\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprevious\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;34m//\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0midx\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mprevious\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mraise\u001b[0m \u001b[0mDatasetNotSorted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Your dataset is not sorted on {primary_variable}!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprevious\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On parcourt les frontières de FF (= les index dans le tableau)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0midx_inf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebut\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On ne peut malheureusement pas filtrer par > 0 avant extraction car cela fausserait le nombre de valeur\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable_all_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_arrays\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcolumn_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mvariable\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mselection\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"python\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On fait l'hypothèse que c'est bien trié par ordre croissant\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mlower_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps d'extraction par to_arrays  {time()-debut}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mborders\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mstarttime\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mupper_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfrontieres_valeurs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m  \u001b[0;31m# Car frontieres_valeurs contient 0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvariable_all_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0midx_sup\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# nb_entity = vdf_tmp.shape[0]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mnb_entity\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"-----------------Temps après slice {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32massert\u001b[0m \u001b[0mnb_entity\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Quand il y a beaucoup de personne ayant le même revenu on peut avec des tranches avec lower_bound=upper_bound, mais ce n'est pas gênant\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlower_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mlower_bound\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} WARNING: Il y a peut-être un problème car le RFR du premier index (idx_inf={idx_inf}) est {primary_variable_array[idx_inf]} alors que lower_bound vaut {lower_bound}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mi\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mborders\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_sup\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mlower_bound\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} WARNING: Il y a peut-être un problème car le RFR du dernier index (idx_sup={idx_sup}) est {primary_variable_array[idx_sup]} alors que upper_bound vaut {upper_bound}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Remove 0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvariable_values\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m0.9999\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps avant sort {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Tri des variables : sort() est plus rapide que sorted, mais écrase notre liste\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# variable_values = sorted(variable_values)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps après sort {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} : index entre idx_inf={idx_inf} et idx_sup={idx_sup} - RFR entre lower_bound={lower_bound} et upper_bound={upper_bound} - {len(variable_values)} valeurs différentes de zéro.\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                    \u001b[0;34mf\"\\tmin(variable_values)={min(variable_values)} max(variable_values)={max(variable_values)}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas ERROR i={i} len(variable_values)={len(variable_values)} != {idx_sup - idx_inf}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32massert\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mDistribDeVar_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mbdr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDistribDeVarVaex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mvariable_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mvariable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvariable\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mnb_entity\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnb_entity\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mlower_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlower_bound\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mupper_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mupper_bound\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps de DistribDeVarVaex {time()-DistribDeVar_time}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Et on ajoute ce tableau à la liste des tableaux\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcopules\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mbdr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx_inf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0midx_sup\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mlower_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps après fin de la boucle {time()-starttime} --------------\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"DEBUG EXIT !!!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdico\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"controle\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcontrole\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"copules\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcopules\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mreturn\u001b[0m \u001b[0mdico\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;31mFile:\u001b[0m      ~/leximpact/leximpact-prepare-data/leximpact_prepare_data/scenario_tools/calib_and_copules.py\n",
-      "\u001b[0;31mType:\u001b[0m      function"
-     ]
-    }
-   ],
-   "source": [
-    "get_copulas??"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ee3a8ea4",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\u001b[0;31mSignature:\u001b[0m\n",
-      "\u001b[0mget_copulas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mvaex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrameLocal\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.01\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;31mSource:\u001b[0m   \n",
-      "\u001b[0;32mdef\u001b[0m \u001b[0mget_copulas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvdf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mvaex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrameLocal\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1e-2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m\"\"\"\u001b[0m\n",
-      "\u001b[0;34m    On nous donne des tranches de RFR, en nombre de personne, et en valeur de RFR\u001b[0m\n",
-      "\u001b[0;34m    Pour chacune de ses tranches on doit extraire les valeurs de 'variable'\u001b[0m\n",
-      "\u001b[0;34m    On ne garde que celle supérieure à 0 et on les envoie à DistribDeVarVaex\u001b[0m\n",
-      "\u001b[0;34m    ::vdf:: Le jeux de données\u001b[0m\n",
-      "\u001b[0;34m    ::variable:: Nom de la variable secondaire.\u001b[0m\n",
-      "\u001b[0;34m    ::nb_bucket_var:: Nombre de tranches de variable secondaire souhaités.\u001b[0m\n",
-      "\u001b[0;34m    ::primary_buckets:: La liste des tranches de RFR.\u001b[0m\n",
-      "\u001b[0;34m    ::debug:: Pour activer un mode debug, qui affiche des traces.\u001b[0m\n",
-      "\u001b[0;34m    ::minimal_bucket_size:: Nombre minimal d'individus pour respecter le secret statistique.\u001b[0m\n",
-      "\u001b[0;34m    \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mcontrole\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mcopules\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mfrontieres_valeurs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"borders_values\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mborders\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_buckets\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"borders\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mif\u001b[0m \u001b[0mprimary_variable\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_column_names\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprimary_variable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprimary_variable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_column_names\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# Conversion en array\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprimary_variable_array\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_arrays\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcolumn_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mprimary_variable\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mselection\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"python\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdataset_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On vérifie que le dataset est bien trié\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mprevious\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;34m//\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0midx\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mdataset_size\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mprevious\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mraise\u001b[0m \u001b[0mDatasetNotSorted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Your dataset is not sorted on {primary_variable}!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprevious\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On parcourt les frontières de FF (= les index dans le tableau)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0midx_inf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdebut\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On ne peut malheureusement pas filtrer par > 0 avant extraction car cela fausserait le nombre de valeur\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mvariable_all_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_arrays\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcolumn_names\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mvariable\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mselection\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"python\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;31m# On fait l'hypothèse que c'est bien trié par ordre croissant\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mlower_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps d'extraction par to_arrays  {time()-debut}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mborders\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mstarttime\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mupper_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfrontieres_valeurs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m  \u001b[0;31m# Car frontieres_valeurs contient 0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvariable_all_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0midx_sup\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# nb_entity = vdf_tmp.shape[0]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mnb_entity\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"-----------------Temps après slice {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32massert\u001b[0m \u001b[0mnb_entity\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Quand il y a beaucoup de personne ayant le même revenu on peut avec des tranches avec lower_bound=upper_bound, mais ce n'est pas gênant\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_inf\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlower_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mlower_bound\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} WARNING: Il y a peut-être un problème car le RFR du premier index (idx_inf={idx_inf}) est {primary_variable_array[idx_inf]} alors que lower_bound vaut {lower_bound}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mi\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mborders\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mprimary_variable_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx_sup\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mand\u001b[0m \u001b[0mlower_bound\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} WARNING: Il y a peut-être un problème car le RFR du dernier index (idx_sup={idx_sup}) est {primary_variable_array[idx_sup]} alors que upper_bound vaut {upper_bound}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Remove 0\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mv\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvariable_values\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m0.9999\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps avant sort {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Tri des variables : sort() est plus rapide que sorted, mais écrase notre liste\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mvariable_values\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# variable_values = sorted(variable_values)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps après sort {time()-starttime}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas {i} : index entre idx_inf={idx_inf} et idx_sup={idx_sup} - RFR entre lower_bound={lower_bound} et upper_bound={upper_bound} - {len(variable_values)} valeurs différentes de zéro.\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                    \u001b[0;34mf\"\\tmin(variable_values)={min(variable_values)} max(variable_values)={max(variable_values)}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m                \u001b[0;34mf\"get_copulas ERROR i={i} len(variable_values)={len(variable_values)} != {idx_sup - idx_inf}\"\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32massert\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0midx_sup\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0midx_inf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mDistribDeVar_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mbdr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mDistribDeVarVaex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mvariable_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvariable_values\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mvariable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvariable\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mnb_entity\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnb_entity\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnb_bucket_var\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mlower_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlower_bound\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mupper_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mupper_bound\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0madd_upper_bucket\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mdebug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mminimal_bucket_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps de DistribDeVarVaex {time()-DistribDeVar_time}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;31m# Et on ajoute ce tableau à la liste des tableaux\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mcopules\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mbdr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0midx_inf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0midx_sup\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0mlower_bound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mupper_bound\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Temps après fin de la boucle {time()-starttime} --------------\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m        \u001b[0;32mif\u001b[0m \u001b[0mdebug\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"DEBUG EXIT !!!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m            \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0mdico\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"controle\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcontrole\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"copules\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcopules\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n",
-      "\u001b[0;34m\u001b[0m    \u001b[0;32mreturn\u001b[0m \u001b[0mdico\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
-      "\u001b[0;31mFile:\u001b[0m      ~/leximpact/leximpact-prepare-data/leximpact_prepare_data/scenario_tools/calib_and_copules.py\n",
-      "\u001b[0;31mType:\u001b[0m      function"
-     ]
-    }
-   ],
-   "source": [
-    "??get_copulas"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "abandoned-league",
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "get_borders frontieres de base [390, 780, 1170, 1560, 1950, 2340, 2730, 3120, 3510]\n",
-      "get_borders frontieres avant [390, 780, 1170, 1560, 1950, 2340, 2730, 3120, 3510, 3861, 3900]\n",
-      "get_borders len(borders) avant 11\n",
-      "get_borders frontieres apres [390, 780, 1170, 1560, 1950, 2340, 2730, 3120, 3510, 3861, 3900]\n",
-      "get_borders frontieres avant fin [390, 780, 1170, 1560, 1950, 2340, 2730, 3120, 3510, 3861, 3900]\n"
-     ]
-    }
-   ],
-   "source": [
-    "tranche_rfr_small_test = get_primary_buckets(test_raw, 10, debug=True)\n",
-    "cop = get_copulas(test_raw, 10, \"rev_salaire\", 10, tranche_rfr_small_test)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpact-prepare-data-kernel",
-   "language": "python",
-   "name": "leximpact-prepare-data-kernel"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/_test_spark.ipynb b/notebooks/code_CASD/extractions_base_des_impots/_test_spark.ipynb
deleted file mode 100644
index b4bdeb02b2797bebced491fa4c94d444cbce31cb..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/_test_spark.ipynb
+++ /dev/null
@@ -1,156 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "4b1c23b1",
-   "metadata": {},
-   "source": [
-    "# CASD : Test de l'utilisation de Spark"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7e463584",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import findspark"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7c8ec284",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "findspark.init()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c74420d4",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from pyspark.sql import SparkSession\n",
-    "\n",
-    "spark = SparkSession.builder.appName(\"Basics\").getOrCreate()\n",
-    "print(spark.version)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c187137f",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "calib = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\csg\\data_out\\CalibPOTE_2019.csv\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "25e34ee1",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df = spark.read.csv(parquet_path)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "cb0f594b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "hdf_pote = (\n",
-    "    r\"C:\\Users\\Public\\Documents\\TRAVAIL\\csg\\data_in\\extraction_assiettes_csg\\*.hdf\"\n",
-    ")\n",
-    "hdf_pote"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "91655d9d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "parquet_path = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\csg\\data_in\\assiettes_csg.parquet\"\n",
-    "parquet_path"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "08ae5ffd",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# !dir {parquet_path}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "32f3e09b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df = spark.read.parquet(parquet_path)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "99b1a4ae",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df.createOrReplaceTempView(\"csg\")\n",
-    "df_count = spark.sql(\"SELECT count(*) FROM csg\")\n",
-    "df_count.show()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "328c545c",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "11ff65d3",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# df = spark.read.format(\"com.github.saurfang.sas.spark\").load(r\"\\\\casd.fr\\casdfs\\Projets\\LEXIMPA\\Data\\POTE_POTE_2019\\pote_diff_2019.sas7bdat\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "c2a09032",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "leximpa",
-   "language": "python",
-   "name": "leximpa"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/_test_vispy.ipynb b/notebooks/code_CASD/extractions_base_des_impots/_test_vispy.ipynb
deleted file mode 100644
index 90ca532817095999af5b2c26f43323a21a66d6e7..0000000000000000000000000000000000000000
--- a/notebooks/code_CASD/extractions_base_des_impots/_test_vispy.ipynb
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "e21abfd4",
-   "metadata": {},
-   "source": [
-    "# CASD : Test de la librairie Vispy\n",
-    "[Vispy](https://vispy.org/) permet d'afficher des graphiques contenant des milliers de points."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f741a0b6",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import dask.dataframe as dd\n",
-    "import vispy.app\n",
-    "from vispy import plot as vp"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "d1d2aee6",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "vispy.app.use_app(\"ipynb_webgl\")\n",
-    "fig = vp.Fig(show=False)\n",
-    "fig1 = fig[0, 0]\n",
-    "fig1.plot(range(10), marker_size=0)\n",
-    "fig.show(run=True)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "22d66dc7",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "input_directory = (\n",
-    "    r\"C:\\Users\\Public\\Documents\\TRAVAIL\\csg\\data_in\\extraction_assiettes_csg\\*.hdf\"\n",
-    ")\n",
-    "rfrs = dd.read_hdf(input_directory, \"/pote2019\")\n",
-    "rfrs.columns"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1c06484c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# sample = rfrs\n",
-    "sample = rfrs[rfrs[\"revkire\"] > 500_000]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "b6574e72",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%%time\n",
-    "sample = sample.set_index(\"revkire\").compute()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9b99d525",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "len(sample)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "84b63a38",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# sample.index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "08376150",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "vispy.app.use_app(\"ipynb_webgl\")\n",
-    "from vispy import plot as vp\n",
-    "\n",
-    "fig = vp.Fig(show=False)\n",
-    "fig1 = fig[0, 0]\n",
-    "fig1.plot((range(len(sample)), sample.index), marker_size=10)\n",
-    "fig.show(run=True)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "6a1b3260",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "print(f\"{sample.index.max():,}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "dfe2d117",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "print(f\"{sample.index.min():,}\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3da2e5ff",
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "python3",
-   "language": "python",
-   "name": "python3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/notebooks/code_CASD/extractions_base_des_impots/fake_pote_light.parquet b/notebooks/code_CASD/extractions_base_des_impots/fake_pote_light.parquet
deleted file mode 100644
index db7a9ae46ea8c920110a479b75b8089a8e03e93a..0000000000000000000000000000000000000000
Binary files a/notebooks/code_CASD/extractions_base_des_impots/fake_pote_light.parquet and /dev/null differ
diff --git a/notebooks/code_CASD/extractions_dads_postes/20_Convert_SAS_DADS.ipynb b/notebooks/code_CASD/extractions_dads_postes/20_Convert_SAS_DADS.ipynb
index bf46accb5c3c1f3d1e8a1537ef281f774c57ede7..f4ea103a711b3a7a869ba42a2a66710f1e328b4b 100644
--- a/notebooks/code_CASD/extractions_dads_postes/20_Convert_SAS_DADS.ipynb
+++ b/notebooks/code_CASD/extractions_dads_postes/20_Convert_SAS_DADS.ipynb
@@ -28,11 +28,11 @@
     "# year = \"2018\"\n",
     "SAS_FILE = (\n",
     "    r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\sas/\"\n",
-    "    #+ \"extrait_dads_2020.sas7bdat\"\n",
+    "    # + \"extrait_dads_2020.sas7bdat\"\n",
     "    + \"extrait_dads_2020_220809.sas7bdat\"\n",
     ")\n",
     "\n",
-    "OUT_PATH = r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\data\\chunks\\\"\n",
+    "OUT_PATH = \"\"  # r\"C:\\Users\\Public\\Documents\\TRAVAIL\\agregats\\data\\chunks\\\"\n",
     "OUT_PATH = OUT_PATH + \"extrait_dads_\" + year + r\"-chunk/\"\n",
     "taille_chunk = 2 * 2**20"
    ]
@@ -43,12 +43,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "import shutil\n",
-    "from pathlib import Path\n",
-    "\n",
-    "import pandas as pd\n",
-    "import vaex\n",
-    "from tqdm import tqdm"
+    "import pandas as pd"
    ]
   },
   {
@@ -115,31 +110,31 @@
     }
    ],
    "source": [
-    "%%time\n",
-    "# Temps sur CASD : < 20 minutes.\n",
+    "# %%time\n",
+    "# # Temps sur CASD : < 20 minutes.\n",
     "\n",
-    "# Efface le dossier de sortie\n",
-    "shutil.rmtree(OUT_PATH, ignore_errors=True)\n",
-    "Path(OUT_PATH).mkdir(parents=True, exist_ok=True)\n",
+    "# # Efface le dossier de sortie\n",
+    "# shutil.rmtree(OUT_PATH, ignore_errors=True)\n",
+    "# Path(OUT_PATH).mkdir(parents=True, exist_ok=True)\n",
     "\n",
-    "dfi = pd.read_sas(\n",
-    "    SAS_FILE, chunksize=taille_chunk, encoding=\"iso8859-15\", iterator=True\n",
-    ")\n",
+    "# dfi = pd.read_sas(\n",
+    "#     SAS_FILE, chunksize=taille_chunk, encoding=\"iso8859-15\", iterator=True\n",
+    "# )\n",
     "\n",
-    "dd_values = None\n",
-    "i = 0\n",
-    "print(f\"Nombre d'itérations : {61_689_822/taille_chunk:.0f}\")\n",
-    "for chunk in tqdm(dfi):\n",
-    "    del dd_values\n",
-    "    dd_values = None\n",
-    "    chunk = clean_chunk(chunk)\n",
-    "    dd_values = vaex.from_pandas(chunk, copy_index=False)\n",
-    "    dd_values.export(f\"{OUT_PATH}{year}_{i}.parquet\")\n",
-    "    #### DEBUG\n",
-    "    i += 1\n",
-    "    # if i>=2:\n",
-    "    #     break\n",
-    "    #### DEBUG"
+    "# dd_values = None\n",
+    "# i = 0\n",
+    "# print(f\"Nombre d'itérations : {61_689_822/taille_chunk:.0f}\")\n",
+    "# for chunk in tqdm(dfi):\n",
+    "#     del dd_values\n",
+    "#     dd_values = None\n",
+    "#     chunk = clean_chunk(chunk)\n",
+    "#     dd_values = vaex.from_pandas(chunk, copy_index=False)\n",
+    "#     dd_values.export(f\"{OUT_PATH}{year}_{i}.parquet\")\n",
+    "#     #### DEBUG\n",
+    "#     i += 1\n",
+    "#     # if i>=2:\n",
+    "#     #     break\n",
+    "#     #### DEBUG"
    ]
   },
   {
@@ -180,7 +175,7 @@
     }
    ],
    "source": [
-    "chunk.info()"
+    "# chunk.info()"
    ]
   },
   {
@@ -190,7 +185,7 @@
    "outputs": [],
    "source": [
     "pd.set_option(\"display.max_columns\", None)\n",
-    "chunk"
+    "# chunk"
    ]
   },
   {
@@ -378,7 +373,7 @@
     }
    ],
    "source": [
-    "chunk.describe()"
+    "# chunk.describe()"
    ]
   },
   {
@@ -387,7 +382,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "chunk.query(\"s_brut < 0\")"
+    "# chunk.query(\"s_brut < 0\")"
    ]
   }
  ],
diff --git a/notebooks/code_CASD/extractions_dads_postes/30_DADS-Quantiles.ipynb b/notebooks/code_CASD/extractions_dads_postes/30_DADS-Quantiles.ipynb
index fb9cb285ea3e382ed1cc5b3854968a2ac697f1fc..20c178b54331050a3e8982d25f1d29456c1c1899 100644
--- a/notebooks/code_CASD/extractions_dads_postes/30_DADS-Quantiles.ipynb
+++ b/notebooks/code_CASD/extractions_dads_postes/30_DADS-Quantiles.ipynb
@@ -84,7 +84,16 @@
     "import vaex\n",
     "from tqdm import tqdm\n",
     "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import *"
+    "from leximpact_prepare_data.scenario_tools.calib_and_copules import (\n",
+    "    DistribDeVarVaex,\n",
+    "    variable_to_split_on,\n",
+    "    DatasetNotSorted,\n",
+    "    get_borders,\n",
+    "    get_copulas,\n",
+    "    get_primary_buckets,\n",
+    "    Quantile,\n",
+    "    keep_upper_bound_secret,\n",
+    ")"
    ]
   },
   {
@@ -96,7 +105,7 @@
    "source": [
     "%%time\n",
     "dfv = vaex.open(ARROW_PATH + \"*\")\n",
-    "tc.assertEqual(len(dfv), 44_653_064)"
+    "tqdm.assertEqual(len(dfv), 44_653_064)"
    ]
   },
   {
diff --git a/notebooks/code_CASD/extractions_dads_postes/30a_Agregats_POTE-PER.ipynb b/notebooks/code_CASD/extractions_dads_postes/30a_Agregats_POTE-PER.ipynb
index a19e7d7a77e87dfd2960ff294048528af48dc597..a0c9b644f11f6de33b937445d8cdea72407597e2 100644
--- a/notebooks/code_CASD/extractions_dads_postes/30a_Agregats_POTE-PER.ipynb
+++ b/notebooks/code_CASD/extractions_dads_postes/30a_Agregats_POTE-PER.ipynb
@@ -73,7 +73,12 @@
     "import vaex\n",
     "from tqdm import tqdm\n",
     "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import *"
+    "from leximpact_prepare_data.scenario_tools.calib_and_copules import (\n",
+    "    get_copulas,\n",
+    "    anonimyze_lower_and_upper_bound,\n",
+    "    get_primary_buckets,\n",
+    "    Quantile,\n",
+    ")"
    ]
   },
   {
@@ -404,7 +409,6 @@
    "source": [
     "# Libère la mémoire\n",
     "del df_agg\n",
-    "import gc\n",
     "\n",
     "gc.collect()"
    ]
diff --git a/notebooks/code_CASD/extractions_dads_postes/40_categorical_bi-variate.ipynb b/notebooks/code_CASD/extractions_dads_postes/40_categorical_bi-variate.ipynb
index 71e39dcd5a28aa5b29d2765f4c17e88ea969b0c4..75896d737ac1bc044dea9da0026ab1e65b05aaad 100644
--- a/notebooks/code_CASD/extractions_dads_postes/40_categorical_bi-variate.ipynb
+++ b/notebooks/code_CASD/extractions_dads_postes/40_categorical_bi-variate.ipynb
@@ -72,7 +72,7 @@
     "import vaex\n",
     "from tqdm import tqdm\n",
     "\n",
-    "from leximpact_prepare_data.scenario_tools.calib_and_copules import *"
+    "from leximpact_prepare_data.scenario_tools.calib_and_copules import Quantile"
    ]
   },
   {
@@ -93,7 +93,7 @@
    "source": [
     "%%time\n",
     "dfv = vaex.open(ARROW_PATH + \"*\")\n",
-    "tc.assertEqual(len(dfv), 61_689_822)"
+    "tqdm.assertEqual(len(dfv), 61_689_822)"
    ]
   },
   {
diff --git a/notebooks/memos/memo_aah.ipynb b/notebooks/memos/memo_aah.ipynb
index 65699e8cbfdc8d1d314ab74ffc9096e54759931a..dbf41a7e131a2bdb23d496f07be22f546d9b5f28 100644
--- a/notebooks/memos/memo_aah.ipynb
+++ b/notebooks/memos/memo_aah.ipynb
@@ -121,7 +121,6 @@
    ],
    "source": [
     "# | echo: false\n",
-    "from IPython.display import HTML\n",
     "from pandas import DataFrame\n",
     "\n",
     "import plotly.io as pio\n",
@@ -155,7 +154,7 @@
     "    columns=colonnes,\n",
     ").fillna(\"-\")\n",
     "\n",
-    "display(HTML(df.to_html(escape=False)))"
+    "# display(HTML(df.to_html(escape=False)))"
    ]
   },
   {
diff --git a/notebooks/memos/memo_cotisations_sociales_dash.py b/notebooks/memos/memo_cotisations_sociales_dash.py
index f490f91fcf0c93de4367b3b711c855bc0f367040..8d9e47494e82d285fc6738f78705c5a7b804decc 100644
--- a/notebooks/memos/memo_cotisations_sociales_dash.py
+++ b/notebooks/memos/memo_cotisations_sociales_dash.py
@@ -7,7 +7,7 @@
 
 http://localhost:5000/leximpact_prepare_data/memos/memo_cotisations_sociales_dash/
 
-Cette dataviz en Dash est incluse dans le mémo, mais elle doit être 
+Cette dataviz en Dash est incluse dans le mémo, mais elle doit être
 exécutée à part pour être partagée : les mémos sont des fichiers HTML
  alors que Dash doit lancer un serveur, il faut donc le déployer côté
    serveur en complément du HTML.
diff --git a/poetry.lock b/poetry.lock
index 39ffc8fccf90cf54c5e8f3dbd759ae5983d3c0bd..92d950f792d00b82a55f4f141b40d5fabf5b5b2b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -695,7 +695,7 @@ files = [
     {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
     {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
 ]
-markers = {main = "implementation_name == \"pypy\" or platform_python_implementation == \"PyPy\""}
+markers = {main = "platform_python_implementation == \"PyPy\" or implementation_name == \"pypy\""}
 
 [package.dependencies]
 pycparser = "*"
@@ -4212,7 +4212,7 @@ files = [
     {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
     {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
 ]
-markers = {main = "implementation_name == \"pypy\" or platform_python_implementation == \"PyPy\""}
+markers = {main = "platform_python_implementation == \"PyPy\" or implementation_name == \"pypy\""}
 
 [[package]]
 name = "pydocstyle"