From 6f43c07c6db4e8e4512839e2597fb8b0f42546a7 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:04:06 +1100 Subject: [PATCH 01/32] Add empty test and update GH actions --- .github/CONTRIBUTING.md | 13 +++++- .github/workflows/pr.yml | 48 -------------------- .github/workflows/publish.yaml | 29 ++++++++++++ .github/workflows/pull_request.yaml | 37 ++++++++++++++++ .github/workflows/push.yml | 69 ----------------------------- .github/workflows/versioning.yaml | 36 +++++++++++++++ Makefile | 3 ++ changelog_entry.yaml | 4 ++ tests/test_package.py | 2 + 9 files changed, 123 insertions(+), 118 deletions(-) delete mode 100644 .github/workflows/pr.yml create mode 100644 .github/workflows/publish.yaml create mode 100644 .github/workflows/pull_request.yaml delete mode 100644 .github/workflows/push.yml create mode 100644 .github/workflows/versioning.yaml create mode 100644 tests/test_package.py diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e28c6a8f..2bc52164 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,3 +1,14 @@ ## Updating the versioning -Please add to `changelog.yaml` and then run `make changelog` before committing the results ONCE in this PR. +Please add to `changelog_entry.yaml` an entry in the format: + +```yaml +- bump: minor + changes: + added: + - New feature. + fixed: + - Bug fix. + changed: + - Change. +``` diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index 28fd3178..00000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Pull request -on: - pull_request: - branches: [ main ] - -jobs: - Lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Check formatting - uses: "lgeiger/black-action@master" - with: - args: ". -l 79 --check" - Test: - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v2 - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.10' - - - name: Install package - run: make install - - - name: Install dependencies - run: | - pip install jupyter-book - pip install furo - pip install sphinx-argparse - - - name: Generate documentation - run: make documentation - env: - HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} - - - name: Check documentation build - run: | - for notebook in $(find docs/_build/jupyter_execute -name "*.ipynb"); do - if grep -q '"output_type": "error"' "$notebook"; then - echo "Error found in $notebook" - cat "$notebook" - exit 1 - fi - done diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 00000000..661a042f --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,29 @@ +name: Push +on: + push: + branches: [ main ] + paths: + - pyproject.toml + +jobs: + Publish: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Publish a git tag + run: ".github/publish-git-tag.sh || true" + - name: Install package + run: make install + - name: Build package + run: make + - name: Publish a Python distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI }} + skip-existing: true \ No newline at end of file diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml new file mode 100644 index 00000000..880ebfeb --- /dev/null +++ b/.github/workflows/pull_request.yaml @@ -0,0 +1,37 @@ +# Workflow that runs on code changes to a pull request. + +name: Code changes +on: + pull_request: + branches: + - main + + paths: + - policyengine/ + - tests/ + +jobs: + Lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check formatting + uses: "lgeiger/black-action@master" + with: + args: ". -l 79 --check" + Test: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.10' + + - name: Install package + run: make install + + - name: Run tests + run: make test \ No newline at end of file diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml deleted file mode 100644 index ad3119f4..00000000 --- a/.github/workflows/push.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Push -on: - push: - branches: [ main ] - -jobs: - Lint: - runs-on: ubuntu-latest - if: | - (github.repository == 'PolicyEngine/policyengine-us') - && (github.event.head_commit.message == 'Update PolicyEngine US') - steps: - - uses: actions/checkout@v4 - - name: Check formatting - uses: "lgeiger/black-action@master" - with: - args: ". -l 79 --check" - Publish: - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: 3.12 - - name: Publish a git tag - run: ".github/publish-git-tag.sh || true" - - name: Install package - run: make install - - name: Build package - run: make - - name: Publish a Python distribution to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI }} - skip-existing: true - Deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v2 - - - name: Setup Python - uses: actions/setup-python@v2 - with: - python-version: '3.10' - - - name: Install package - run: make install - - - name: Install dependencies - run: | - pip install jupyter-book - pip install furo - pip install sphinx-argparse - - - name: Generate documentation - run: make documentation - env: - HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} - - - name: Deploy documentation - uses: JamesIves/github-pages-deploy-action@releases/v3 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: gh-pages - FOLDER: docs/_build/html \ No newline at end of file diff --git a/.github/workflows/versioning.yaml b/.github/workflows/versioning.yaml new file mode 100644 index 00000000..fbd1daf7 --- /dev/null +++ b/.github/workflows/versioning.yaml @@ -0,0 +1,36 @@ +# Workflow that runs on versioning metadata updates. + +name: Versioning updates +on: + pull_request: + branches: + - main + + paths: + - changelog_entry.yaml + +jobs: + Versioning: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + token: ${{ secrets.POLICYENGINE_GITHUB }} + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Build changelog + run: pip install yaml-changelog && make changelog + - name: Preview changelog update + run: ".github/get-changelog-diff.sh" + - name: Update changelog + uses: EndBug/add-and-commit@v9 + with: + add: "." + committer_name: Github Actions[bot] + author_name: Github Actions[bot] + message: Update PolicyEngine US \ No newline at end of file diff --git a/Makefile b/Makefile index c6c87d36..c1b795b7 100644 --- a/Makefile +++ b/Makefile @@ -19,3 +19,6 @@ changelog: build: python -m build + +test: + pytest tests \ No newline at end of file diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29b..658d7178 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + changed: + - Moved to strong typing. diff --git a/tests/test_package.py b/tests/test_package.py new file mode 100644 index 00000000..eb706cfd --- /dev/null +++ b/tests/test_package.py @@ -0,0 +1,2 @@ +def test_this(): + assert True From 132bcda6599221e86a991dd553b6a49b60356fcc Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:07:53 +1100 Subject: [PATCH 02/32] Update versioning --- .github/workflows/versioning.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/versioning.yaml b/.github/workflows/versioning.yaml index fbd1daf7..4d83a166 100644 --- a/.github/workflows/versioning.yaml +++ b/.github/workflows/versioning.yaml @@ -31,6 +31,4 @@ jobs: uses: EndBug/add-and-commit@v9 with: add: "." - committer_name: Github Actions[bot] - author_name: Github Actions[bot] - message: Update PolicyEngine US \ No newline at end of file + message: Update package version \ No newline at end of file From 30e3ade7285bbfcf2459822f583ed545ba43bbcf Mon Sep 17 00:00:00 2001 From: nikhilwoodruff Date: Fri, 24 Jan 2025 00:08:27 +0000 Subject: [PATCH 03/32] Update package version --- CHANGELOG.md | 7 +++++++ changelog.yaml | 5 +++++ changelog_entry.yaml | 4 ---- pyproject.toml | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6f8f2a4..5e4c81b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.5.0] - 2025-01-24 00:08:26 + +### Changed + +- Moved to strong typing. + ## [2.4.1] - 2025-01-09 10:52:28 ### Fixed @@ -70,6 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +[2.5.0]: https://github.com/PolicyEngine/policyengine.py/compare/2.4.1...2.5.0 [2.4.1]: https://github.com/PolicyEngine/policyengine.py/compare/2.4.0...2.4.1 [2.4.0]: https://github.com/PolicyEngine/policyengine.py/compare/2.3.0...2.4.0 [2.3.0]: https://github.com/PolicyEngine/policyengine.py/compare/2.2.2...2.3.0 diff --git a/changelog.yaml b/changelog.yaml index 38ab0d20..4ee02bf8 100644 --- a/changelog.yaml +++ b/changelog.yaml @@ -52,3 +52,8 @@ fixed: - Subsetting bug with time periods. date: 2025-01-09 10:52:28 +- bump: minor + changes: + changed: + - Moved to strong typing. + date: 2025-01-24 00:08:26 diff --git a/changelog_entry.yaml b/changelog_entry.yaml index 658d7178..e69de29b 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1,4 +0,0 @@ -- bump: minor - changes: - changed: - - Moved to strong typing. diff --git a/pyproject.toml b/pyproject.toml index f3cef826..59483379 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "policyengine" -version = "2.4.1" +version = "2.5.0" description = "A package to conduct policy analysis using PolicyEngine tax-benefit models." readme = "README.md" authors = [ From b7ee9bee1ca4c2b2491e0ea19be30b33c665947a Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:35:36 +1100 Subject: [PATCH 04/32] Move to python functions (standardised) --- .../macro/comparison/budget/__init__.py | 1 + .../macro/comparison/budget/breakdown.py | 5 +- .../outputs/macro/comparison/budget/budget.py | 15 ++ .../macro/comparison/budget/general.py | 9 +- .../macro/comparison/budget/programs.py | 9 +- .../outputs/macro/comparison/budget/window.py | 11 +- .../outputs/macro/comparison/comparison.py | 11 ++ .../macro/comparison/decile/__init__.py | 1 + .../outputs/macro/comparison/decile/decile.py | 11 ++ .../outputs/macro/comparison/decile/income.py | 9 +- .../outputs/macro/comparison/decile/wealth.py | 9 +- policyengine/outputs/macro/single/__init__.py | 1 + .../outputs/macro/single/gov/__init__.py | 1 + .../outputs/macro/single/gov/balance.py | 2 +- .../outputs/macro/single/gov/budget_window.py | 2 +- policyengine/outputs/macro/single/gov/gov.py | 15 ++ .../macro/single/gov/local_areas/__init__.py | 1 + .../single/gov/local_areas/local_areas.py | 15 ++ .../gov/local_areas/local_authorities.py | 5 +- .../parliamentary_constituencies.py | 2 +- .../outputs/macro/single/gov/programs.py | 2 +- .../macro/single/household/__init__.py | 1 + .../macro/single/household/demographics.py | 2 +- .../outputs/macro/single/household/finance.py | 2 +- .../macro/single/household/household.py | 17 ++ .../single/household/income_distribution.py | 3 +- .../macro/single/household/inequality.py | 2 +- .../macro/single/household/labor_supply.py | 2 +- policyengine/outputs/macro/single/single.py | 11 ++ policyengine/simulation.py | 171 +----------------- 30 files changed, 146 insertions(+), 202 deletions(-) create mode 100644 policyengine/outputs/macro/comparison/budget/__init__.py create mode 100644 policyengine/outputs/macro/comparison/budget/budget.py create mode 100644 policyengine/outputs/macro/comparison/comparison.py create mode 100644 policyengine/outputs/macro/comparison/decile/__init__.py create mode 100644 policyengine/outputs/macro/comparison/decile/decile.py create mode 100644 policyengine/outputs/macro/single/__init__.py create mode 100644 policyengine/outputs/macro/single/gov/__init__.py create mode 100644 policyengine/outputs/macro/single/gov/gov.py create mode 100644 policyengine/outputs/macro/single/gov/local_areas/__init__.py create mode 100644 policyengine/outputs/macro/single/gov/local_areas/local_areas.py create mode 100644 policyengine/outputs/macro/single/household/__init__.py create mode 100644 policyengine/outputs/macro/single/household/household.py create mode 100644 policyengine/outputs/macro/single/single.py diff --git a/policyengine/outputs/macro/comparison/budget/__init__.py b/policyengine/outputs/macro/comparison/budget/__init__.py new file mode 100644 index 00000000..d598215b --- /dev/null +++ b/policyengine/outputs/macro/comparison/budget/__init__.py @@ -0,0 +1 @@ +from .budget import calculate_budget_comparison diff --git a/policyengine/outputs/macro/comparison/budget/breakdown.py b/policyengine/outputs/macro/comparison/budget/breakdown.py index 6f463b74..31c0db92 100644 --- a/policyengine/outputs/macro/comparison/budget/breakdown.py +++ b/policyengine/outputs/macro/comparison/budget/breakdown.py @@ -1,9 +1,10 @@ from policyengine import Simulation from typing import List import pandas as pd +from policyengine.outputs.macro.comparison.budget.general import calculate_general_budget -def breakdown( +def calculate_provision_breakdown_comparison( simulation: Simulation, provisions: List[dict] | None = None, provision_names: List[str] | None = None, @@ -45,7 +46,7 @@ def breakdown( options=options, data=simulation.data, ) - budget = sim.calculate("macro/comparison/budget/general")[ + budget = calculate_general_budget(sim)[ "budgetary_impact" ] key_focus = provision_names[i] diff --git a/policyengine/outputs/macro/comparison/budget/budget.py b/policyengine/outputs/macro/comparison/budget/budget.py new file mode 100644 index 00000000..1ef2f6f4 --- /dev/null +++ b/policyengine/outputs/macro/comparison/budget/budget.py @@ -0,0 +1,15 @@ +from policyengine import Simulation +from .breakdown import calculate_provision_breakdown_comparison +from .general import calculate_general_budget_comparison +from .window import calculate_budget_window_comparison +from .programs import calculate_program_comparison + +def calculate_budget_comparison( + simulation: Simulation, +) -> dict: + return { + "breakdown": calculate_provision_breakdown_comparison(simulation), + "general": calculate_general_budget_comparison(simulation), + "window": calculate_budget_window_comparison(simulation), + "programs": calculate_program_comparison(simulation + } \ No newline at end of file diff --git a/policyengine/outputs/macro/comparison/budget/general.py b/policyengine/outputs/macro/comparison/budget/general.py index c998661d..b9bc7bd1 100644 --- a/policyengine/outputs/macro/comparison/budget/general.py +++ b/policyengine/outputs/macro/comparison/budget/general.py @@ -3,9 +3,10 @@ import plotly.express as px import pandas as pd from policyengine.utils.charts import * +from policyengine.outputs.macro.single.gov.balance import calculate_balance -def general(simulation: Simulation, chart: bool = False): +def calculate_general_budget_comparison(simulation: Simulation, chart: bool = False): """Calculate the budgetary impact of the given simulation. Args: @@ -20,8 +21,10 @@ def general(simulation: Simulation, chart: bool = False): - households (int): The number of households. - baseline_net_income (float): The total net income in the baseline scenario. """ - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") + simulation.selected_sim = simulation.baseline_sim + baseline = calculate_balance(simulation) + simulation.selected_sim = simulation.reformed_sim + reform = calculate_balance(simulation) tax_revenue_impact = ( reform["gov"]["balance"]["total_tax"] diff --git a/policyengine/outputs/macro/comparison/budget/programs.py b/policyengine/outputs/macro/comparison/budget/programs.py index 7d1b9a23..a7941602 100644 --- a/policyengine/outputs/macro/comparison/budget/programs.py +++ b/policyengine/outputs/macro/comparison/budget/programs.py @@ -1,7 +1,8 @@ from policyengine import Simulation +from policyengine.outputs.macro.single import calculate_single_macro_scenario -def programs(simulation: Simulation): +def calculate_program_comparison(simulation: Simulation): """Calculate the detailed budgetary impact of the given simulation. Args: @@ -13,8 +14,10 @@ def programs(simulation: Simulation): - reform (float): The reform budgetary impact of the program. - difference (float): The difference between the reform and baseline budgetary impacts. """ - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") + simulation.selected_sim = simulation.baseline_sim + baseline = calculate_single_macro_scenario(simulation) + simulation.selected_sim = simulation.reformed_sim + reform = calculate_single_macro_scenario(simulation) result = {} if simulation.country == "uk": for program in baseline["gov"]["programs"]: diff --git a/policyengine/outputs/macro/comparison/budget/window.py b/policyengine/outputs/macro/comparison/budget/window.py index 40dccfbb..d9807eea 100644 --- a/policyengine/outputs/macro/comparison/budget/window.py +++ b/policyengine/outputs/macro/comparison/budget/window.py @@ -3,9 +3,10 @@ import plotly.express as px import pandas as pd from policyengine.utils.charts import * +from policyengine.outputs.macro.single.gov.budget_window import calculate_budget_window -def window( +def calculate_budget_window_comparison( simulation: Simulation, chart: bool = False, federal_only: bool = False, @@ -15,10 +16,10 @@ def window( kwargs = {} else: kwargs = {"count_years": count_years} - baseline = simulation.calculate( - "macro/baseline/gov/budget_window", **kwargs - ) - reform = simulation.calculate("macro/reform/gov/budget_window", **kwargs) + simulation.selected_sim = simulation.baseline_sim + baseline = calculate_budget_window(simulation, **kwargs) + simulation.selected_sim = simulation.reformed_sim + reform = calculate_budget_window(simulation, **kwargs) total_budget_effect = [ (y - x) for x, y in zip(baseline["total_budget"], reform["total_budget"]) diff --git a/policyengine/outputs/macro/comparison/comparison.py b/policyengine/outputs/macro/comparison/comparison.py new file mode 100644 index 00000000..dc544a99 --- /dev/null +++ b/policyengine/outputs/macro/comparison/comparison.py @@ -0,0 +1,11 @@ +from policyengine import Simulation +from .budget import calculate_budget_comparison +from .decile import calculate_decile_comparison + +def calculate_budget_comparison( + simulation: Simulation, +) -> dict: + return { + "budget": calculate_budget_comparison(simulation), + "decile": calculate_decile_comparison(simulation) + } \ No newline at end of file diff --git a/policyengine/outputs/macro/comparison/decile/__init__.py b/policyengine/outputs/macro/comparison/decile/__init__.py new file mode 100644 index 00000000..48be4ab1 --- /dev/null +++ b/policyengine/outputs/macro/comparison/decile/__init__.py @@ -0,0 +1 @@ +from .decile import calculate_decile_comparison diff --git a/policyengine/outputs/macro/comparison/decile/decile.py b/policyengine/outputs/macro/comparison/decile/decile.py new file mode 100644 index 00000000..f0478e1c --- /dev/null +++ b/policyengine/outputs/macro/comparison/decile/decile.py @@ -0,0 +1,11 @@ +from policyengine import Simulation +from .income import calculate_income_decile_comparison +from .wealth import calculate_wealth_decile_comparison + +def calculate_decile_comparison( + simulation: Simulation, +) -> dict: + return { + "income": calculate_income_decile_comparison(simulation), + "wealth": calculate_wealth_decile_comparison(simulation), + } \ No newline at end of file diff --git a/policyengine/outputs/macro/comparison/decile/income.py b/policyengine/outputs/macro/comparison/decile/income.py index d4476a1b..bb265049 100644 --- a/policyengine/outputs/macro/comparison/decile/income.py +++ b/policyengine/outputs/macro/comparison/decile/income.py @@ -1,8 +1,9 @@ from policyengine import Simulation from microdf import MicroSeries +from ...single import calculate_single_macro_scenario -def income(simulation: Simulation): +def calculate_income_decile_comparison(simulation: Simulation): """Calculate the impact of the reform on income deciles. Args: @@ -13,8 +14,10 @@ def income(simulation: Simulation): - relative (dict): A dictionary with keys representing deciles and values as relative income changes. - average (dict): A dictionary with keys representing deciles and values as average income changes. """ - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") + simulation.selected_sim = simulation.baseline_sim + baseline = calculate_single_macro_scenario(simulation) + simulation.selected_sim = simulation.reformed_sim + reform = calculate_single_macro_scenario(simulation) baseline["household"]["finance"] = simulation.calculate( "macro/baseline/household/finance", include_arrays=True ) diff --git a/policyengine/outputs/macro/comparison/decile/wealth.py b/policyengine/outputs/macro/comparison/decile/wealth.py index b65153cb..5c412e0d 100644 --- a/policyengine/outputs/macro/comparison/decile/wealth.py +++ b/policyengine/outputs/macro/comparison/decile/wealth.py @@ -1,8 +1,9 @@ from policyengine import Simulation from microdf import MicroSeries +from ...single import calculate_single_macro_scenario -def wealth(simulation: Simulation): +def calculate_wealth_decile_comparison(simulation: Simulation): """Calculate the impact of the reform on wealth deciles. Args: @@ -16,8 +17,10 @@ def wealth(simulation: Simulation): if simulation.country != "uk": return {} - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") + simulation.selected_sim = simulation.baseline_sim + baseline = calculate_single_macro_scenario(simulation) + simulation.selected_sim = simulation.reformed_sim + reform = calculate_single_macro_scenario(simulation) baseline["household"]["finance"] = simulation.calculate( "macro/baseline/household/finance", include_arrays=True ) diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py new file mode 100644 index 00000000..7d688d07 --- /dev/null +++ b/policyengine/outputs/macro/single/__init__.py @@ -0,0 +1 @@ +from .single import calculate_single_macro_scenario \ No newline at end of file diff --git a/policyengine/outputs/macro/single/gov/__init__.py b/policyengine/outputs/macro/single/gov/__init__.py new file mode 100644 index 00000000..ce6cd002 --- /dev/null +++ b/policyengine/outputs/macro/single/gov/__init__.py @@ -0,0 +1 @@ +from .gov import calculate_gov diff --git a/policyengine/outputs/macro/single/gov/balance.py b/policyengine/outputs/macro/single/gov/balance.py index 3bfeb5cc..fb276ff6 100644 --- a/policyengine/outputs/macro/single/gov/balance.py +++ b/policyengine/outputs/macro/single/gov/balance.py @@ -1,7 +1,7 @@ from policyengine import Simulation -def balance(simulation: Simulation) -> dict: +def calculate_balance(simulation: Simulation) -> dict: sim = simulation.selected_sim if simulation.country == "uk": total_tax = sim.calculate("gov_tax").sum() diff --git a/policyengine/outputs/macro/single/gov/budget_window.py b/policyengine/outputs/macro/single/gov/budget_window.py index 61c5b5c4..8d2f62b1 100644 --- a/policyengine/outputs/macro/single/gov/budget_window.py +++ b/policyengine/outputs/macro/single/gov/budget_window.py @@ -3,7 +3,7 @@ DEFAULT_COUNT_YEARS = 1 -def budget_window(simulation: Simulation, count_years: int = None) -> dict: +def calculate_budget_window(simulation: Simulation, count_years: int = None) -> dict: sim = simulation.selected_sim current_year = simulation.time_period if count_years is not None: diff --git a/policyengine/outputs/macro/single/gov/gov.py b/policyengine/outputs/macro/single/gov/gov.py new file mode 100644 index 00000000..2b466eab --- /dev/null +++ b/policyengine/outputs/macro/single/gov/gov.py @@ -0,0 +1,15 @@ +from policyengine import Simulation +from .local_areas import calculate_local_areas +from .balance import calculate_balance +from .budget_window import calculate_budget_window +from .programs import calculate_programs + +def calculate_gov( + simulation: Simulation, +) -> dict: + return { + "balance": calculate_balance(simulation), + "budget_window": calculate_budget_window(simulation), + "programs": calculate_programs(simulation), + "local_areas": calculate_local_areas(simulation), + } \ No newline at end of file diff --git a/policyengine/outputs/macro/single/gov/local_areas/__init__.py b/policyengine/outputs/macro/single/gov/local_areas/__init__.py new file mode 100644 index 00000000..2a793b8e --- /dev/null +++ b/policyengine/outputs/macro/single/gov/local_areas/__init__.py @@ -0,0 +1 @@ +from .local_areas import calculate_local_areas diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py new file mode 100644 index 00000000..76f60321 --- /dev/null +++ b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py @@ -0,0 +1,15 @@ +from policyengine import Simulation +from policyengine.outputs.macro.single.gov.local_areas.local_authorities import calculate_local_authorities +from policyengine.outputs.macro.single.gov.local_areas.parliamentary_constituencies import calculate_parliamentary_constituencies + + +def calculate_local_areas( + simulation: Simulation, +) -> dict: + if simulation.country != "uk": + return None + + return { + "local_authorities": calculate_local_authorities(simulation), + "parliamentary_constituencies": calculate_parliamentary_constituencies(simulation) + } \ No newline at end of file diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py index 009f350b..ed364609 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py @@ -8,7 +8,7 @@ from policyengine.utils.maps import plot_hex_map -def local_authorities( +def calculate_local_authorities( simulation: Simulation, metric: Callable[[Microsimulation], MicroSeries] = None, chart: bool = False, @@ -25,9 +25,6 @@ def local_authorities( Returns: dict: A dictionary with the impact of the reform on parliamentary constituencies (keys=constituency names, values=metric values). """ - if not simulation.options.get("include_local_authorities"): - return {} - if metric is None: metric = lambda sim: sim.calculate("household_net_income").median() weights_file_path = download( diff --git a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py index 9761c9c0..e0260dc7 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py +++ b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py @@ -8,7 +8,7 @@ from policyengine.utils.maps import plot_hex_map -def parliamentary_constituencies( +def calculate_parliamentary_constituencies( simulation: Simulation, metric: Callable[[Microsimulation], MicroSeries] = None, chart: bool = False, diff --git a/policyengine/outputs/macro/single/gov/programs.py b/policyengine/outputs/macro/single/gov/programs.py index a58f1e24..dc211ab2 100644 --- a/policyengine/outputs/macro/single/gov/programs.py +++ b/policyengine/outputs/macro/single/gov/programs.py @@ -24,7 +24,7 @@ class UKPrograms: ] -def programs(simulation: Simulation) -> dict: +def calculate_programs(simulation: Simulation) -> dict: if simulation.country == "uk": return { program.name: simulation.selected_sim.calculate( diff --git a/policyengine/outputs/macro/single/household/__init__.py b/policyengine/outputs/macro/single/household/__init__.py new file mode 100644 index 00000000..4e4ad369 --- /dev/null +++ b/policyengine/outputs/macro/single/household/__init__.py @@ -0,0 +1 @@ +from .household import calculate_household diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index 69070ed1..48e12e09 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,7 +1,7 @@ from policyengine import Simulation -def demographics(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_demographics(simulation: Simulation, include_arrays: bool = False) -> dict: sim = simulation.selected_sim household_count_people = ( sim.calculate("household_count_people").astype(int).tolist() diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index a26b3a2f..2ff1fe5a 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -1,7 +1,7 @@ from policyengine import Simulation -def finance(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_finance(simulation: Simulation, include_arrays: bool = False) -> dict: sim = simulation.selected_sim total_net_income = sim.calculate("household_net_income").sum() diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py new file mode 100644 index 00000000..6e858a8c --- /dev/null +++ b/policyengine/outputs/macro/single/household/household.py @@ -0,0 +1,17 @@ +from policyengine import Simulation +from .demographics import calculate_demographics +from .finance import calculate_finance +from .income_distribution import calculate_income_distribution +from .inequality import calculate_inequality +from .labor_supply import calculate_labor_supply + +def calculate_household( + simulation: Simulation, +) -> dict: + return { + "demographics": calculate_demographics(simulation), + "finance": calculate_finance(simulation), + "income_distribution": calculate_income_distribution(simulation), + "inequality": calculate_inequality(simulation), + "labor_supply": calculate_labor_supply(simulation) + } \ No newline at end of file diff --git a/policyengine/outputs/macro/single/household/income_distribution.py b/policyengine/outputs/macro/single/household/income_distribution.py index af5a9363..39c92e80 100644 --- a/policyengine/outputs/macro/single/household/income_distribution.py +++ b/policyengine/outputs/macro/single/household/income_distribution.py @@ -5,7 +5,7 @@ import pandas as pd -def income_distribution( +def calculate_income_distribution( simulation: Simulation, chart: bool = False, variable: str = "household_net_income", @@ -29,7 +29,6 @@ def income_distribution( def income_distribution_chart(data: pd.Series) -> go.Figure: - fig = px.bar( x=data.index, y=data.values, diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py index 607e9fe7..0da4f8f0 100644 --- a/policyengine/outputs/macro/single/household/inequality.py +++ b/policyengine/outputs/macro/single/household/inequality.py @@ -1,7 +1,7 @@ from policyengine import Simulation -def inequality(simulation: Simulation) -> dict: +def calculate_inequality(simulation: Simulation) -> dict: personal_hh_equiv_income = simulation.selected_sim.calculate( "equiv_household_net_income" ) diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index c882acfe..da278ce4 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -1,7 +1,7 @@ from policyengine import Simulation -def labor_supply(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_labor_supply(simulation: Simulation, include_arrays: bool = False) -> dict: if not simulation.comparison: return {} sim = simulation.selected_sim diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py new file mode 100644 index 00000000..0d6e9904 --- /dev/null +++ b/policyengine/outputs/macro/single/single.py @@ -0,0 +1,11 @@ +from policyengine import Simulation +from .gov import calculate_gov +from .household import calculate_household + +def calculate_single_macro_scenario( + simulation: Simulation, +) -> dict: + return { + "gov": calculate_gov(simulation), + "household": calculate_household(simulation) + } \ No newline at end of file diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 9cdfcb1c..73befac2 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -73,8 +73,6 @@ def __init__( self.comparison = reform is not None - self.output_functions, self.outputs = self._get_outputs() - self._initialise_simulations() def _set_dataset(self, dataset: str | dict | None): @@ -105,168 +103,6 @@ def _set_dataset(self, dataset: str | dict | None): ) self.data = Dataset.from_file(self.data, "2023") - def calculate(self, output: str, force: bool = False, **kwargs) -> Any: - """Calculate the given output (path). - - Args: - output (str): The output to calculate. Must be a valid path in the output tree. - force (bool): Whether to force recalculation of the output, even if it has already been calculated. - **kwargs: Any additional arguments to pass to the output function. - - Returns: - Any: The output of the calculation (using the cache if possible). - """ - if self.verbose: - print(f"Calculating {output}...") - if output.endswith("/"): - output = output[:-1] - - if output == "": - output = self.scope - - node = self.outputs - - for child_key in output.split("/")[:-1]: - if child_key not in node: - raise KeyError( - f"Output '{child_key}' not found in '{node}'. Available keys are: {list(node.keys())}" - ) - node = node[child_key] - - parent = node - child_key = output.split("/")[-1] - if parent is None: - parent = self.calculate("/".join(output.split("/")[:-1])) - if child_key not in parent: - try: - is_numeric_key = int(child_key) in parent - except ValueError: - is_numeric_key = False - if is_numeric_key: - child_key = int(child_key) - else: - # Maybe you've requested a key that is only available as a dictionary - # item in one of the output functions. Let's try to calculate the full output, - # then check the result to see if it's there. - self.calculate("/".join(output.split("/")[:-1])) - if child_key not in parent: - raise KeyError( - f"Output '{child_key}' not found in '{output}'. Available keys are: {list(parent.keys())}" - ) - node = parent[child_key] - - # Check if any descendants are None - - if ( - force or parent[child_key] is None or len(kwargs) > 0 - ) and output in self.output_functions: - output_function = self.output_functions[output] - node = output_function(self, **kwargs) - if len(kwargs) == 0: - # Only save as part of the larger tree if no non-standard args are passed - parent[child_key] = node - - if isinstance(node, dict) and len(kwargs) == 0: - for child_key in node.keys(): - self.calculate(output + "/" + str(child_key)) - - return node - - def _get_outputs(self) -> Tuple[dict, dict]: - """Get all the output functions and construct the output tree. - - Returns: - Tuple[dict, dict]: A tuple containing the output functions and the output tree. - """ - from pathlib import Path - import importlib.util - - output_functions = {} - for output in Path(__file__).parent.glob("outputs/**/*.py"): - module_name = output.stem - spec = importlib.util.spec_from_file_location(module_name, output) - if spec is None: - raise RuntimeError( - f"Expected to load a spec from file '{output.absolute}'" - ) - module = importlib.util.module_from_spec(spec) - relative_path = str( - output.relative_to(Path(__file__).parent / "outputs") - ).replace(".py", "") - if not self.comparison and "/comparison/" in relative_path: - # If we're just analysing one scenario, skip loading the comparison modules. - continue - if f"{self.scope}/" not in relative_path: - # Don't load household modules for macro comparisons, etc. - continue - - if spec.loader is None: - raise RuntimeError( - f"Expected module from '{output.absolute}' to have a loader, but it does not" - ) - spec.loader.exec_module(module) - - # Only import the function with the same name as the module, enforcing one function per file - try: - output_functions[str(relative_path)] = getattr( - module, module_name - ) - except AttributeError: - raise AttributeError( - f"Each module must contain a function with the same name as the module. Module '{str(relative_path)}.py' does not." - ) - - # If we are just calculating for a single scenario, put all 'macro/single/' children under 'macro/'. - # If not, duplicate them into 'macro/baseline/' and 'single/reform'. - - single_keys = [key for key in output_functions if "single/" in key] - for key in single_keys: - root = key.split("/")[0] - rest = "/".join(key.split("/")[2:]) - func = output_functions[key] - - def passed_reform_simulation(func, is_reform): - def adjusted_func(simulation: Simulation, **kwargs): - if is_reform: - simulation.selected_sim = simulation.reformed_sim - else: - simulation.selected_sim = simulation.baseline_sim - return func(simulation, **kwargs) - - adjusted_func.__name__ = func.__name__ - adjusted_func.__doc__ = func.__doc__ - - return adjusted_func - - if self.comparison: - output_functions[f"{root}/baseline/{rest}"] = ( - passed_reform_simulation(func, False) - ) - output_functions[f"{root}/reform/{rest}"] = ( - passed_reform_simulation(func, True) - ) - else: - output_functions[f"{root}/{rest}"] = passed_reform_simulation( - func, False - ) - - del output_functions[key] - - # Construct the output tree, fill with Nones for now - - outputs = {} - - for output_path in output_functions.keys(): - parts = output_path.split("/") - current = outputs - for part in parts[:-1]: - if part not in current: - current[part] = {} - current = current[part] - current[parts[-1]] = None - - return output_functions, outputs - def _to_reform(self, value: int | dict): if isinstance(value, dict): return Reform.from_dict(value, country_id=self.country) @@ -357,6 +193,8 @@ def _initialise_simulations(self): self.reformed_sim.get_branch("baseline").tax_benefit_system = ( self.baseline_sim.tax_benefit_system ) + else: + self.selected_sim = self.baseline_sim def _apply_region_to_simulation( self, @@ -422,11 +260,6 @@ def _apply_region_to_simulation( with h5py.File(weights_file_path, "r") as f: weights = f[str(self.time_period)][...] - print( - weights[constituency_id], - simulation.default_calculation_period, - ) - simulation.calculate("household_net_income") simulation.set_input( From 15216d0128b5bc0656ee27066459ee950eaa49c0 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:40:51 +1100 Subject: [PATCH 05/32] Update docs --- docs/index.ipynb | 4 +- docs/maintaining.ipynb | 36543 ---------------- docs/reference/calculate.md | 608 - .../outputs/macro/comparison/__init__.py | 1 + .../macro/comparison/budget/breakdown.py | 8 +- .../outputs/macro/comparison/budget/budget.py | 7 +- .../macro/comparison/budget/general.py | 4 +- .../outputs/macro/comparison/budget/window.py | 4 +- .../outputs/macro/comparison/comparison.py | 9 +- .../outputs/macro/comparison/decile/decile.py | 5 +- policyengine/outputs/macro/single/__init__.py | 2 +- .../outputs/macro/single/gov/budget_window.py | 4 +- policyengine/outputs/macro/single/gov/gov.py | 5 +- .../single/gov/local_areas/local_areas.py | 16 +- .../macro/single/household/demographics.py | 4 +- .../outputs/macro/single/household/finance.py | 4 +- .../macro/single/household/household.py | 7 +- .../macro/single/household/labor_supply.py | 4 +- policyengine/outputs/macro/single/single.py | 7 +- policyengine/simulation.py | 7 + 20 files changed, 67 insertions(+), 37186 deletions(-) delete mode 100644 docs/maintaining.ipynb delete mode 100644 docs/reference/calculate.md create mode 100644 policyengine/outputs/macro/comparison/__init__.py diff --git a/docs/index.ipynb b/docs/index.ipynb index 2c32f3af..e350d676 100644 --- a/docs/index.ipynb +++ b/docs/index.ipynb @@ -59,7 +59,7 @@ " }\n", " }\n", ")\n", - "sim.calculate(\"household/comparison/net_income_change\")" + "sim.calculate_macro_comparison()" ] }, { @@ -97,7 +97,7 @@ " }\n", " }\n", ")\n", - "sim.calculate(\"macro/comparison/budget/general/tax_revenue_impact\")/1e9" + "sim.calculate_macro_comparison()" ] } ], diff --git a/docs/maintaining.ipynb b/docs/maintaining.ipynb deleted file mode 100644 index d700fef4..00000000 --- a/docs/maintaining.ipynb +++ /dev/null @@ -1,36543 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Maintainance\n", - "\n", - "This package is intended to be simple for users to use, but also for maintainers to maintain (with some kind of maintenance specifically prioritised).\n", - "\n", - "There are two ways we might want to improve this package:\n", - "\n", - "1. Adding more 'outputs' (e.g. more types of results from the simulation inputs, using the underlying tax-benefit models).\n", - "2. Everything else related to the underlying way that the package uses the models.\n", - "\n", - "This package is meant to make (1) as easy as possible, which may come at the expense of some ease of maintaining (2).\n", - "\n", - "## Model outputs\n", - "\n", - "The package is centered around an 'output tree': a hierarchical nested dictionary of outputs from the model, of the type that the user asked for. For example, if we are doing a macro analysis, we might expect something like:\n", - "\n", - "```yaml\n", - "macro:\n", - " baseline:\n", - " tax_revenue: 100 billion\n", - " reform:\n", - " tax_revenue: 200 billion\n", - " comparison:\n", - " tax_revenue_impact: 100 billion\n", - "```\n", - "\n", - "If you look at the file structure of the repo, you'll see a folder `policyengine/outputs/`. This is where all the behaviour to deal with the models is housed. It's designed so that maintainers should be able to add something new, e.g. `macro/comparison/deep_poverty_impact` or `macro/single/deep_poverty_rate`, without needing to know how the rest of the repo works. Each file here is dynamically loaded into the tree (notice how `macro/comparison/tax_revenue_impact.py` aligns with that example- not a coincidence!), and must contain a single function, with the same name as the filename, that takes `policyengine.Simulation` as an argument. `policyengine.Simulation` has all the tax-benefit models initialised that the function might need, as well as all the metadata the user has passing in about their modelling request.\n", - "\n", - "There's a slight caveat here that not everything aligns exactly with this folder structure. At the top level, we have household and macro, but one layer down, we have 'single' (e.g. 'poverty rate') and 'comparison' (e.g. 'change in poverty rate'). At runtime, 'single' is duplicated into 'baseline' and 'reform' with the operations duplicated. For example, here's the output tree under that example from the introduction." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'comparison': {'inequality': {'gini': {'baseline': 0.3477095374202072,\n", - " 'reform': 0.358379064086748},\n", - " 'top_10_pct_share': {'baseline': 0.2999163898629839,\n", - " 'reform': 0.29907741159640616},\n", - " 'top_1_pct_share': {'baseline': 0.12430336324184335,\n", - " 'reform': 0.1347626305894055}},\n", - " 'labor_supply': {'earnings': {'baseline': 1340946114730.9246,\n", - " 'reform': 1340946114730.9246,\n", - " 'change': 0.0,\n", - " 'rel_change': 0.0},\n", - " 'fte': {'baseline': 32697735.717292428,\n", - " 'reform': 32697735.717292428,\n", - " 'change': 0.0,\n", - " 'rel_change': 0.0},\n", - " 'substitution_lsr': 0,\n", - " 'income_lsr': 0,\n", - " 'relative_lsr': {'income': 0.0, 'substitution': 0.0},\n", - " 'decile': {'average': {'income': {-1: 0.0,\n", - " 1: 0.0,\n", - " 2: 0.0,\n", - " 3: 0.0,\n", - " 4: 0.0,\n", - " 5: 0.0,\n", - " 6: 0.0,\n", - " 7: 0.0,\n", - " 8: 0.0,\n", - " 9: 0.0,\n", - " 10: 0.0},\n", - " 'substitution': {-1: 0.0,\n", - " 1: 0.0,\n", - " 2: 0.0,\n", - " 3: 0.0,\n", - " 4: 0.0,\n", - " 5: 0.0,\n", - " 6: 0.0,\n", - " 7: 0.0,\n", - " 8: 0.0,\n", - " 9: 0.0,\n", - " 10: 0.0}},\n", - " 'relative': {'income': {1: 0.0,\n", - " 2: 0.0,\n", - " 3: 0.0,\n", - " 4: 0.0,\n", - " 5: 0.0,\n", - " 6: 0.0,\n", - " 7: 0.0,\n", - " 8: 0.0,\n", - " 9: 0.0,\n", - " 10: 0.0},\n", - " 'substitution': {1: 0.0,\n", - " 2: 0.0,\n", - " 3: 0.0,\n", - " 4: 0.0,\n", - " 5: 0.0,\n", - " 6: 0.0,\n", - " 7: 0.0,\n", - " 8: 0.0,\n", - " 9: 0.0,\n", - " 10: 0.0}}},\n", - " 'hours': {'baseline': 0,\n", - " 'reform': 0,\n", - " 'change': 0,\n", - " 'income_effect': 0,\n", - " 'substitution_effect': 0}},\n", - " 'winners': {'income_decile': {'deciles': {'Lose more than 5%': [0.5699445204207915,\n", - " 0.7660513713045767,\n", - " 0.9115272979214745,\n", - " 0.9089873427537835,\n", - " 0.9373096641703852,\n", - " 0.9941993297036329,\n", - " 0.9805336310463555,\n", - " 0.9858380316796463,\n", - " 0.9817438716629977,\n", - " 0.8064217127560148],\n", - " 'Lose less than 5%': [0.04623230123984697,\n", - " 0.03264940515532148,\n", - " 0.04562889064169612,\n", - " 0.08283609431414457,\n", - " 0.0025646000919409126,\n", - " 0.005471902235667197,\n", - " 0.0012243282337455143,\n", - " 0.008294753032465218,\n", - " 0.009828016505105926,\n", - " 0.13497431791093376],\n", - " 'No change': [0.3837322978104784,\n", - " 0.20119103444945097,\n", - " 0.04279688484051441,\n", - " 0.008176562932071956,\n", - " 0.060123942584159866,\n", - " 0.00032212820585139553,\n", - " 0.01824204071989894,\n", - " 0.005867215287888402,\n", - " 0.008427906702891197,\n", - " 0.05860309479782797],\n", - " 'Gain less than 5%': [4.407871433254147e-05,\n", - " 6.785959400552714e-05,\n", - " 3.991669579473183e-05,\n", - " 0.0,\n", - " 3.0042263718780655e-07,\n", - " 6.639854848509014e-06,\n", - " 0.0,\n", - " 0.0,\n", - " 2.0512900514169538e-07,\n", - " 8.745352234896426e-07],\n", - " 'Gain more than 5%': [4.6801814550575795e-05,\n", - " 4.032949664533201e-05,\n", - " 7.009900520272418e-06,\n", - " 0.0,\n", - " 1.4927308768664487e-06,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0]},\n", - " 'all': {'Lose more than 5%': 0.8842556773419659,\n", - " 'Lose less than 5%': 0.03697046093608677,\n", - " 'No change': 0.07874831083310335,\n", - " 'Gain less than 5%': 1.5987494584712863e-05,\n", - " 'Gain more than 5%': 9.563394259304667e-06}},\n", - " 'wealth_decile': {'deciles': {'Lose more than 5%': [0.7244452463957647,\n", - " 0.862073306968986,\n", - " 0.79202346066192,\n", - " 0.7613851546679026,\n", - " 0.9474930410209476,\n", - " 0.9614123085389141,\n", - " 0.9746393034622329,\n", - " 0.9631525459078952,\n", - " 0.9619904466444714,\n", - " 0.8837320786919578],\n", - " 'Lose less than 5%': [0.04471485704482218,\n", - " 0.03391770357964914,\n", - " 0.013456314513479506,\n", - " 0.0662395329144922,\n", - " 0.04790899982173219,\n", - " 0.0111845171566151,\n", - " 0.014592355673430285,\n", - " 0.01931319905413729,\n", - " 0.019415596264529895,\n", - " 0.1017441544321992],\n", - " 'No change': [0.2308369348646134,\n", - " 0.10400898945136486,\n", - " 0.19446786367002267,\n", - " 0.17227826590095666,\n", - " 0.004564523391138226,\n", - " 0.0274031743044708,\n", - " 0.010768340864336793,\n", - " 0.017534255037967447,\n", - " 0.01852788944863214,\n", - " 0.014523766875843011],\n", - " 'Gain less than 5%': [2.9616947997033396e-06,\n", - " 0.0,\n", - " 4.5732673368976784e-05,\n", - " 8.582633055857693e-06,\n", - " 3.3435766181990405e-05,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6.606764236649033e-05,\n", - " 0.0],\n", - " 'Gain more than 5%': [0.0,\n", - " 0.0,\n", - " 6.6284812088544815e-06,\n", - " 8.846388359267392e-05,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0]},\n", - " 'all': {'Lose more than 5%': 0.8832346892960994,\n", - " 'Lose less than 5%': 0.0372487230455087,\n", - " 'No change': 0.0794914003809346,\n", - " 'Gain less than 5%': 1.5678040977301855e-05,\n", - " 'Gain more than 5%': 9.50923648015284e-06}}},\n", - " 'poverty': {'age': {'poverty': {'child': {'baseline': 0.12168890226715764,\n", - " 'reform': 0.13906769364828317,\n", - " 'change_count': 73691106859.13245},\n", - " 'adult': {'baseline': 0.055351100168371865,\n", - " 'reform': 0.0672586114608156,\n", - " 'change_count': 504814.53572523594},\n", - " 'senior': {'baseline': 0.0303155424559324,\n", - " 'reform': 0.05195631815912117,\n", - " 'change_count': 276136.16579508036},\n", - " 'all': {'baseline': 0.06255884933261711,\n", - " 'reform': 0.07729838532173021,\n", - " 'change_count': 991680.9987457916}},\n", - " 'deep_poverty': {'child': {'baseline': 0.010545578927003885,\n", - " 'reform': 0.011103545122285226},\n", - " 'adult': {'baseline': 0.004071394275275657,\n", - " 'reform': 0.004433283637913219},\n", - " 'senior': {'baseline': 0.00027242701576503007,\n", - " 'reform': 0.0004900264115505804},\n", - " 'all': {'baseline': 0.004517725675831334,\n", - " 'reform': 0.004887588140030611}}},\n", - " 'gender': {'poverty': {'male': {'baseline': 0.06272782335056297,\n", - " 'reform': 0.07186534042039117},\n", - " 'female': {'baseline': 0.06236604536770088,\n", - " 'reform': 0.08349763779427065}},\n", - " 'deep_poverty': {'male': {'baseline': 0.004332994187308553,\n", - " 'reform': 0.004637738572626915},\n", - " 'female': {'baseline': 0.004728509344616894,\n", - " 'reform': 0.0051726733135598725}}},\n", - " 'race': {}},\n", - " 'local_areas': {'parliamentary_constituencies': {}, 'local_authorities': {}},\n", - " 'decile': {'wealth': {'relative': {1: -0.06988451600434342,\n", - " 2: -0.06690050964226048,\n", - " 3: -0.06957796432770857,\n", - " 4: -0.0855831981827258,\n", - " 5: -0.08443696193952503,\n", - " 6: -0.10269157031020644,\n", - " 7: -0.07977654114604822,\n", - " 8: -0.09698548979603118,\n", - " 9: -0.087681247849789,\n", - " 10: -0.07682958414127124},\n", - " 'average': {1: -3151.881847479391,\n", - " 2: -3277.9853742220016,\n", - " 3: -3972.1505911513273,\n", - " 4: -4880.660515693069,\n", - " 5: -5241.44945599207,\n", - " 6: -6731.310911702426,\n", - " 7: -6143.985273199026,\n", - " 8: -7423.894905615251,\n", - " 9: -7357.5333325144375,\n", - " 10: -6840.154203294934}},\n", - " 'income': {'relative': {1: -0.08237040425129202,\n", - " 2: -0.07690095530570724,\n", - " 3: -0.10741530778798607,\n", - " 4: -0.10199372682072694,\n", - " 5: -0.09957736676527221,\n", - " 6: -0.10626716898804343,\n", - " 7: -0.10320367587815783,\n", - " 8: -0.09893943755315644,\n", - " 9: -0.09334618378431991,\n", - " 10: -0.03923552884718168},\n", - " 'average': {1: -1429.3028814446038,\n", - " 2: -2311.7073736265097,\n", - " 3: -4021.069419675288,\n", - " 4: -4624.886462956393,\n", - " 5: -5475.209211631354,\n", - " 6: -6981.3910886900885,\n", - " 7: -7912.898333165142,\n", - " 8: -9079.382193428304,\n", - " 9: -10283.288628758442,\n", - " 10: -8817.973272244115}}},\n", - " 'budget': {'breakdown': {},\n", - " 'window': {'total_budget': [124.40658475991692],\n", - " 'federal_budget': [124.40658475991692]},\n", - " 'programs': {'income_tax': {'baseline': 328945525969.9741,\n", - " 'reform': 459654340398.327,\n", - " 'difference': 130708814428.3529},\n", - " 'national_insurance': {'baseline': 53168761056.25772,\n", - " 'reform': 53168761056.25772,\n", - " 'difference': 0.0},\n", - " 'vat': {'baseline': 214871983017.21628,\n", - " 'reform': 214871983017.21628,\n", - " 'difference': 0.0},\n", - " 'council_tax': {'baseline': 45077685919.83074,\n", - " 'reform': 45077685919.83074,\n", - " 'difference': 0.0},\n", - " 'fuel_duty': {'baseline': 25313698252.372284,\n", - " 'reform': 25313698252.372284,\n", - " 'difference': 0.0},\n", - " 'tax_credits': {'baseline': -81931249.11630942,\n", - " 'reform': -81931249.11630942,\n", - " 'difference': 0.0},\n", - " 'universal_credit': {'baseline': -71486805495.25237,\n", - " 'reform': -74087374720.54732,\n", - " 'difference': -2600569225.2949524},\n", - " 'child_benefit': {'baseline': -14596018214.875364,\n", - " 'reform': -14596018214.875364,\n", - " 'difference': 0.0},\n", - " 'state_pension': {'baseline': -126747036451.91475,\n", - " 'reform': -126747036451.91475,\n", - " 'difference': 0.0},\n", - " 'pension_credit': {'baseline': -6659655701.446462,\n", - " 'reform': -9598227786.405336,\n", - " 'difference': -2938572084.9588747},\n", - " 'ni_employer': {'baseline': 125551554850.68323,\n", - " 'reform': 125551554850.68323,\n", - " 'difference': 0.0}},\n", - " 'general': {'budgetary_impact': 124406584759.91693,\n", - " 'tax_revenue_impact': 130699941012.06226,\n", - " 'state_tax_revenue_impact': 0,\n", - " 'benefit_spending_impact': 6293356252.145325,\n", - " 'households': 23140266.80052776,\n", - " 'baseline_net_income': 1509192152186.7075}}},\n", - " 'baseline': {'household': {'finance': {'total_net_income': 1509192152186.7075,\n", - " 'total_market_income': 1733465565685.8093,\n", - " 'total_tax': 524172820076.6547,\n", - " 'total_benefits': 299899403269.484,\n", - " 'employment_income_hh': [60994.564453125,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 373711.78125,\n", - " 23473.30078125,\n", - " 69819.56640625,\n", - " 0.0,\n", - " 0.0,\n", - " 48027.21484375,\n", - " 138378.40625,\n", - " 24073.640625,\n", - " 67538.271484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 93292.8671875,\n", - " 0.0,\n", - " 99296.26953125,\n", - " 23713.4375,\n", - " 86509.02734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22032.484375,\n", - " 0.0,\n", - " 34519.5625,\n", - " 29056.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 103438.609375,\n", - " 0.0,\n", - " 50848.8125,\n", - " 105960.0390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 8284.6943359375,\n", - " 24493.87890625,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 40402.89453125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 65497.109375,\n", - " 0.0,\n", - " 0.0,\n", - " 54510.888671875,\n", - " 27315.478515625,\n", - " 0.0,\n", - " 75162.59375,\n", - " 0.0,\n", - " 35780.2734375,\n", - " 116045.74609375,\n", - " 0.0,\n", - " 31517.85546875,\n", - " 71980.78515625,\n", - " 0.0,\n", - " 0.0,\n", - " 54931.125,\n", - " 0.0,\n", - " 0.0,\n", - " 65977.388671875,\n", - " 65196.94140625,\n", - " 10505.953125,\n", - " 0.0,\n", - " 97195.0732421875,\n", - " 0.0,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 220444.91796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 453857.169921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16869.55859375,\n", - " 0.0,\n", - " 555614.8359375,\n", - " 130033.6708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 85728.58203125,\n", - " 50968.8828125,\n", - " 37401.1953125,\n", - " 95814.296875,\n", - " 38001.53125,\n", - " 34339.45703125,\n", - " 97675.34765625,\n", - " 0.0,\n", - " 35960.37890625,\n", - " 0.0,\n", - " 33979.25390625,\n", - " 75042.5234375,\n", - " 0.0,\n", - " 0.0,\n", - " 50968.880859375,\n", - " 46046.09375,\n", - " 0.0,\n", - " 0.0,\n", - " 45025.5146484375,\n", - " 0.0,\n", - " 66817.86279296875,\n", - " 0.0,\n", - " 50608.671875,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 0.0,\n", - " 0.0,\n", - " 157109.03125,\n", - " 571824.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27015.30859375,\n", - " 218343.734375,\n", - " 54030.6171875,\n", - " 0.0,\n", - " 109021.76953125,\n", - " 69099.15625,\n", - " 0.0,\n", - " 53610.37890625,\n", - " 0.0,\n", - " 44965.48046875,\n", - " 126611.73828125,\n", - " 454817.734375,\n", - " 25574.4921875,\n", - " 101337.4296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52950.00390625,\n", - " 0.0,\n", - " 9425.3408203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 88069.90625,\n", - " 73121.4326171875,\n", - " 118267.01953125,\n", - " 60754.427734375,\n", - " 59193.533203125,\n", - " 77623.98828125,\n", - " 0.0,\n", - " 20291.49609375,\n", - " 70059.69921875,\n", - " 82306.63330078125,\n", - " 100857.140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29896.94140625,\n", - " 46046.09765625,\n", - " 0.0,\n", - " 13807.82421875,\n", - " 0.0,\n", - " 0.0,\n", - " 12487.0751953125,\n", - " 76963.609375,\n", - " 36020.41015625,\n", - " 44905.4453125,\n", - " 44245.06640625,\n", - " 0.0,\n", - " 36680.78515625,\n", - " 0.0,\n", - " 160651.0390625,\n", - " 64596.603515625,\n", - " 11046.259765625,\n", - " 0.0,\n", - " 34519.5625,\n", - " 117546.60546875,\n", - " 0.0,\n", - " 34519.5625,\n", - " 0.0,\n", - " 0.0,\n", - " 13267.5185546875,\n", - " 31097.62109375,\n", - " 0.0,\n", - " 0.0,\n", - " 16989.625,\n", - " 0.0,\n", - " 25874.66229248047,\n", - " 44905.4453125,\n", - " 0.0,\n", - " 0.0,\n", - " 59493.7119140625,\n", - " 0.0,\n", - " 0.0,\n", - " 29536.73828125,\n", - " 39142.181640625,\n", - " 41423.47265625,\n", - " 0.0,\n", - " 51809.359375,\n", - " 118567.18359375,\n", - " 26354.93359375,\n", - " 9605.4423828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 187246.091796875,\n", - " 57632.65625,\n", - " 0.0,\n", - " 82967.0068359375,\n", - " 0.0,\n", - " 0.0,\n", - " 41423.474609375,\n", - " 0.0,\n", - " 3962.245361328125,\n", - " 21552.212890625,\n", - " 107460.89453125,\n", - " 46046.09375,\n", - " 38781.9765625,\n", - " 0.0,\n", - " 0.0,\n", - " 45745.92254638672,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 34519.5625,\n", - " 49047.79296875,\n", - " 0.0,\n", - " 13987.9267578125,\n", - " 79485.0390625,\n", - " 0.0,\n", - " 13807.82421875,\n", - " 13687.755859375,\n", - " 25394.388671875,\n", - " 0.0,\n", - " 8885.03515625,\n", - " 87409.53125,\n", - " 3301.87109375,\n", - " 50068.3720703125,\n", - " 22152.552734375,\n", - " 20051.365234375,\n", - " 14408.1640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49528.06640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29956.974609375,\n", - " 284020.921875,\n", - " 31998.1328125,\n", - " 176079.765625,\n", - " 25094.220703125,\n", - " 0.0,\n", - " 0.0,\n", - " 36620.75,\n", - " 17950.171875,\n", - " 0.0,\n", - " 82186.572265625,\n", - " 0.0,\n", - " 69459.361328125,\n", - " 0.0,\n", - " 62675.517578125,\n", - " 55291.33203125,\n", - " 54690.9921875,\n", - " 120488.2578125,\n", - " 14468.19921875,\n", - " 25934.693359375,\n", - " 30077.04296875,\n", - " 0.0,\n", - " 25574.4921875,\n", - " 59553.748046875,\n", - " 81406.125,\n", - " 12427.0419921875,\n", - " 0.0,\n", - " 136157.15625,\n", - " 0.0,\n", - " 24673.982421875,\n", - " 55651.53515625,\n", - " 0.0,\n", - " 0.0,\n", - " 50608.677734375,\n", - " 67898.46875,\n", - " 23113.09765625,\n", - " 97975.51953125,\n", - " 5523.1298828125,\n", - " 79965.3203125,\n", - " 16209.18505859375,\n", - " 46526.36328125,\n", - " 21432.14453125,\n", - " 144381.8125,\n", - " 80925.8515625,\n", - " 42624.15234375,\n", - " 0.0,\n", - " 0.0,\n", - " 36020.412109375,\n", - " 59553.748046875,\n", - " 82726.88671875,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 79785.21044921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 64476.53515625,\n", - " 0.0,\n", - " 72461.056640625,\n", - " 66517.6953125,\n", - " 158069.5625,\n", - " 119347.61328125,\n", - " 0.0,\n", - " 0.0,\n", - " 29956.974609375,\n", - " 0.0,\n", - " 69099.154296875,\n", - " 110762.75,\n", - " 116946.265625,\n", - " 11286.3955078125,\n", - " 0.0,\n", - " 46586.39453125,\n", - " 114064.63671875,\n", - " 47426.875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 40943.19921875,\n", - " 86328.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 51389.12109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22272.62109375,\n", - " 40402.89453125,\n", - " 0.0,\n", - " 80745.75390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44245.0703125,\n", - " 54090.650390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49167.86328125,\n", - " 2401.36083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 55711.568359375,\n", - " 0.0,\n", - " 18070.2392578125,\n", - " 87589.6328125,\n", - " 0.0,\n", - " 113284.18359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33619.05078125,\n", - " 0.0,\n", - " 0.0,\n", - " 34339.45703125,\n", - " 0.0,\n", - " 10866.1572265625,\n", - " 0.0,\n", - " 21852.3828125,\n", - " 252683.1875,\n", - " 0.0,\n", - " 45986.05859375,\n", - " 57872.80078125,\n", - " 0.0,\n", - " 49708.171875,\n", - " 83027.05078125,\n", - " 0.0,\n", - " 0.0,\n", - " 47667.01171875,\n", - " 164193.03515625,\n", - " 0.0,\n", - " 35239.96875,\n", - " 0.0,\n", - " 57332.48828125,\n", - " 38001.53125,\n", - " 8224.660522460938,\n", - " 13567.6884765625,\n", - " 258866.703125,\n", - " 0.0,\n", - " 0.0,\n", - " 8704.9326171875,\n", - " 80925.859375,\n", - " 0.0,\n", - " 48027.21484375,\n", - " 0.0,\n", - " 26174.83203125,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 183463.966796875,\n", - " 11406.4638671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 89330.6171875,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 0.0,\n", - " 83927.55859375,\n", - " 226208.18359375,\n", - " 0.0,\n", - " 28756.298828125,\n", - " 114184.70703125,\n", - " 101937.765625,\n", - " 17229.763671875,\n", - " 0.0,\n", - " 0.0,\n", - " 13387.5849609375,\n", - " 0.0,\n", - " 9005.1025390625,\n", - " 69039.125,\n", - " 0.0,\n", - " 0.0,\n", - " 68438.77270507812,\n", - " 0.0,\n", - " 84768.037109375,\n", - " 3121.76904296875,\n", - " 0.0,\n", - " 17349.83203125,\n", - " 186525.7001953125,\n", - " 28816.330078125,\n", - " 0.0,\n", - " 0.0,\n", - " 22512.7578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21011.908203125,\n", - " 104639.2890625,\n", - " 55231.296875,\n", - " 28996.431640625,\n", - " 54811.060546875,\n", - " 0.0,\n", - " 54330.7880859375,\n", - " 0.0,\n", - " 11586.5654296875,\n", - " 10205.7822265625,\n", - " 38541.841796875,\n", - " 0.0,\n", - " 49468.03125,\n", - " 21852.3828125,\n", - " 61654.9365234375,\n", - " 4562.58544921875,\n", - " 28936.3984375,\n", - " 263729.44921875,\n", - " 32478.404296875,\n", - " 0.0,\n", - " 0.0,\n", - " 80985.89031982422,\n", - " 46046.09375,\n", - " 0.0,\n", - " 43584.69921875,\n", - " 17950.171875,\n", - " 0.0,\n", - " 0.0,\n", - " 80805.78125,\n", - " 60994.564453125,\n", - " 4982.82373046875,\n", - " 30797.451171875,\n", - " 24013.607421875,\n", - " 45025.515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 104159.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21432.14453125,\n", - " 63696.095703125,\n", - " 91311.7421875,\n", - " 0.0,\n", - " 68678.91796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 18130.2734375,\n", - " 36860.890625,\n", - " 207357.5,\n", - " 0.0,\n", - " 193609.71875,\n", - " 0.0,\n", - " 3301.87109375,\n", - " 21131.974609375,\n", - " 68618.8828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 129193.205078125,\n", - " 28756.296875,\n", - " 31757.998046875,\n", - " 0.0,\n", - " 5883.33366394043,\n", - " 0.0,\n", - " 0.0,\n", - " 115145.25,\n", - " 10926.19140625,\n", - " 0.0,\n", - " 8764.966796875,\n", - " 0.0,\n", - " 110042.3515625,\n", - " 60454.2578125,\n", - " 76963.607421875,\n", - " 22932.99609375,\n", - " 34519.5625,\n", - " 0.0,\n", - " 20831.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 62675.515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 43164.45703125,\n", - " 0.0,\n", - " 0.0,\n", - " 72521.09375,\n", - " 14708.3330078125,\n", - " 90531.29296875,\n", - " 74562.25390625,\n", - " 72641.1640625,\n", - " 0.0,\n", - " 29956.9765625,\n", - " 76963.6162109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 0.0,\n", - " 20471.599609375,\n", - " 0.0,\n", - " 64836.7431640625,\n", - " 0.0,\n", - " 22092.51953125,\n", - " 0.0,\n", - " 0.0,\n", - " 33799.15234375,\n", - " 128472.796875,\n", - " 0.0,\n", - " 0.0,\n", - " 17830.103515625,\n", - " 0.0,\n", - " 0.0,\n", - " 38481.80712890625,\n", - " 45926.0244140625,\n", - " 265410.40625,\n", - " 0.0,\n", - " 79545.06640625,\n", - " 38001.5341796875,\n", - " 47907.1484375,\n", - " 0.0,\n", - " 110702.7265625,\n", - " 84768.03515625,\n", - " 20231.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 91431.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30317.18359375,\n", - " 71980.7880859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 31577.89453125,\n", - " 63395.923828125,\n", - " 28696.26171875,\n", - " 29896.94140625,\n", - " 49528.06640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 210839.4375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 58953.4072265625,\n", - " 78284.36328125,\n", - " 69459.35107421875,\n", - " 0.0,\n", - " 103918.8828125,\n", - " 0.0,\n", - " 58293.03125,\n", - " 387039.3046875,\n", - " 0.0,\n", - " 111303.0625,\n", - " 0.0,\n", - " 0.0,\n", - " 24193.708984375,\n", - " 0.0,\n", - " 62135.208984375,\n", - " 63155.7890625,\n", - " 3361.905029296875,\n", - " 28756.29443359375,\n", - " 0.0,\n", - " 172597.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52349.6630859375,\n", - " 23653.4033203125,\n", - " 48987.75390625,\n", - " 75282.66015625,\n", - " 20471.599609375,\n", - " 1200.680419921875,\n", - " 49227.896484375,\n", - " 81766.3359375,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 0.0,\n", - " 71860.7109375,\n", - " 26354.93359375,\n", - " 0.0,\n", - " 18190.30859375,\n", - " 13807.82421875,\n", - " 184184.375,\n", - " 149064.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 32238.267578125,\n", - " 0.0,\n", - " 153206.796875,\n", - " 55231.30078125,\n", - " 27255.443359375,\n", - " 41303.40625,\n", - " 40943.19921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29536.73828125,\n", - " 0.0,\n", - " 85128.234375,\n", - " 83147.1171875,\n", - " 23053.064453125,\n", - " 7324.150390625,\n", - " 0.0,\n", - " 126671.78125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 17950.171875,\n", - " 158369.734375,\n", - " 52889.966796875,\n", - " 57572.62109375,\n", - " 121568.87890625,\n", - " 0.0,\n", - " 59553.74609375,\n", - " 0.0,\n", - " 0.0,\n", - " 31397.791015625,\n", - " 7924.49072265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36140.478515625,\n", - " 39742.51953125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44605.27734375,\n", - " 31517.859375,\n", - " 72040.8203125,\n", - " 198352.38671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15188.6064453125,\n", - " 0.0,\n", - " 78284.359375,\n", - " 0.0,\n", - " 229450.0234375,\n", - " 28756.296875,\n", - " 0.0,\n", - " 73541.6748046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 59853.91015625,\n", - " 0.0,\n", - " 0.0,\n", - " 37161.05859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 35960.37890625,\n", - " 4682.6533203125,\n", - " 9005.1025390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 24193.708984375,\n", - " 40342.859375,\n", - " 0.0,\n", - " 46226.1953125,\n", - " 68258.677734375,\n", - " 0.0,\n", - " 25334.35546875,\n", - " 0.0,\n", - " 38601.87109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29056.4609375,\n", - " 0.0,\n", - " 33559.015625,\n", - " 54270.74609375,\n", - " 0.0,\n", - " 59853.91015625,\n", - " 0.0,\n", - " 69999.66796875,\n", - " 0.0,\n", - " 109021.76953125,\n", - " 31818.03125,\n", - " 166414.296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 71920.7578125,\n", - " 0.0,\n", - " 41903.7412109375,\n", - " 36080.4453125,\n", - " 112263.61328125,\n", - " 94613.607421875,\n", - " 46046.09375,\n", - " 86929.25390625,\n", - " 92512.421875,\n", - " 0.0,\n", - " 0.0,\n", - " 91431.7998046875,\n", - " 108601.5380859375,\n", - " 0.0,\n", - " 0.0,\n", - " 95754.26171875,\n", - " 35360.037109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 132074.83203125,\n", - " 0.0,\n", - " 97855.453125,\n", - " 22932.9921875,\n", - " 0.0,\n", - " 44004.9375,\n", - " 46046.08984375,\n", - " 40282.828125,\n", - " 17049.66015625,\n", - " 0.0,\n", - " 0.0,\n", - " 85188.265625,\n", - " 52829.9375,\n", - " 80565.6484375,\n", - " 89270.5859375,\n", - " 20711.736328125,\n", - " 39022.109375,\n", - " 73601.70703125,\n", - " 0.0,\n", - " 32058.166015625,\n", - " 36380.6171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26234.8671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44185.0390625,\n", - " 14288.095703125,\n", - " 9965.646484375,\n", - " 65317.01171875,\n", - " 0.0,\n", - " 0.0,\n", - " 55531.46484375,\n", - " 0.0,\n", - " 23173.130859375,\n", - " 79124.833984375,\n", - " 0.0,\n", - " 60034.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 44785.379150390625,\n", - " 40282.828125,\n", - " 33679.0859375,\n", - " 85188.2734375,\n", - " 0.0,\n", - " 12907.3134765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27555.615234375,\n", - " 10505.953125,\n", - " 71680.62109375,\n", - " 23053.0625,\n", - " 163292.5234375,\n", - " 0.0,\n", - " 0.0,\n", - " 28936.396484375,\n", - " 0.0,\n", - " 16689.45703125,\n", - " 87469.5625,\n", - " 103198.48046875,\n", - " 53430.2763671875,\n", - " 0.0,\n", - " 220384.8828125,\n", - " 0.0,\n", - " 36020.41015625,\n", - " 67658.341796875,\n", - " 137057.6640625,\n", - " 48327.37890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 69759.53125,\n", - " 0.0,\n", - " 45625.8544921875,\n", - " 0.0,\n", - " 46526.365234375,\n", - " 23773.470703125,\n", - " 58052.89453125,\n", - " 29476.703125,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 81226.033203125,\n", - " 0.0,\n", - " 61534.8701171875,\n", - " 0.0,\n", - " 41183.337890625,\n", - " 69879.6015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 61955.109375,\n", - " 98575.85595703125,\n", - " 61895.0751953125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 153446.955078125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52229.58984375,\n", - " 13927.892578125,\n", - " 117966.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29656.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 53250.173828125,\n", - " 9065.13671875,\n", - " 0.0,\n", - " 0.0,\n", - " 24433.845703125,\n", - " 78644.56640625,\n", - " 30497.28125,\n", - " 175479.4375,\n", - " 88910.3828125,\n", - " 0.0,\n", - " 270213.15625,\n", - " 0.0,\n", - " 69159.1875,\n", - " 70179.765625,\n", - " 0.0,\n", - " 49648.12890625,\n", - " 0.0,\n", - " 50008.337890625,\n", - " 207657.666015625,\n", - " 0.0,\n", - " 103318.5546875,\n", - " 24193.70703125,\n", - " 0.0,\n", - " 70479.9375,\n", - " 0.0,\n", - " 249681.484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25994.73046875,\n", - " 0.0,\n", - " 98515.82421875,\n", - " 0.0,\n", - " 57032.316650390625,\n", - " 59433.673828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 10445.91796875,\n", - " 0.0,\n", - " 70600.0,\n", - " 0.0,\n", - " 129793.546875,\n", - " 71800.685546875,\n", - " 55531.46875,\n", - " 0.0,\n", - " 24133.67578125,\n", - " 56852.21484375,\n", - " 89450.6875,\n", - " 110102.38671875,\n", - " 11526.53125,\n", - " 27435.546875,\n", - " 18130.2734375,\n", - " 18130.2734375,\n", - " 51809.359375,\n", - " ...],\n", - " 'self_employment_income_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 14756.951171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 725.751708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 967.6689453125,\n", - " 7499.4345703125,\n", - " 0.0,\n", - " 0.0,\n", - " -1209.586181640625,\n", - " 0.0,\n", - " 58362.5322265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11914.423828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " -45843.31640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36287.5859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11491.068359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 152770.734375,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 307355.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 13910.2412109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21772.55078125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 5866.4931640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 31570.2001953125,\n", - " 0.0,\n", - " 18143.79296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 39795.38671875,\n", - " 0.0,\n", - " 0.0,\n", - " 13910.2412109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 120.9586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 7680.8720703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 73542.841796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3326.362060546875,\n", - " 0.0,\n", - " 1995.8172607421875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44512.7734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9616.2099609375,\n", - " 0.0,\n", - " 44452.29296875,\n", - " 5806.013671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 58906.84765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9555.73046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44633.73046875,\n", - " 19232.419921875,\n", - " 14998.869140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 0.0,\n", - " 0.0,\n", - " 4838.3447265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29574.3828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 63987.1083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 39553.46875,\n", - " 0.0,\n", - " 0.0,\n", - " 2116.77587890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 94226.765625,\n", - " 0.0,\n", - " 0.0,\n", - " 63987.109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 23526.451171875,\n", - " 31388.76171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11732.98583984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25582.748046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 100093.2578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49955.91015625,\n", - " 0.0,\n", - " 0.0,\n", - " 92533.34375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 198311.65625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 41730.72265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 18143.79296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6531.765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 1270.0655517578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 7680.8720703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 17599.478515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 84610.5546875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15301.265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28667.193359375,\n", - " 0.0,\n", - " 0.0,\n", - " 101363.3203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16027.0166015625,\n", - " 11612.02734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1209.586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9071.896484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 170067.8125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1209.586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 71909.8984375,\n", - " 41730.72265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36287.5859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16329.4140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 298344.4208984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11672.5068359375,\n", - " 0.0,\n", - " 24010.28515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26429.45849609375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28788.150390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 37618.12890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 0.0,\n", - " 8346.14453125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30239.654296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 48685.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 64833.8203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28667.193359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11430.58984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33566.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15543.1826171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 69611.6875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9132.3759765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22377.34375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3628.758544921875,\n", - " 0.0,\n", - " 0.0,\n", - " 10281.482666015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15361.744140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33989.37109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 24191.724609375,\n", - " 0.0,\n", - " 8164.70703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25824.6650390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 48685.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30481.572265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11430.58935546875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 64591.90234375,\n", - " 66527.2421875,\n", - " 0.0,\n", - " 17720.4375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21288.716796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21167.7578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 36469.0234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " -241.917236328125,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2358.693115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11067.7138671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 46387.62890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 72575.171875,\n", - " 2479.651611328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'household_net_income': [48735.171875,\n", - " 3142.575439453125,\n", - " 11835.765625,\n", - " 18229.52734375,\n", - " 217617.34375,\n", - " 28916.01171875,\n", - " 55932.65234375,\n", - " 27566.732421875,\n", - " 10779.9990234375,\n", - " 45006.03125,\n", - " 98651.265625,\n", - " 40672.296875,\n", - " 60728.5,\n", - " 24033.255859375,\n", - " 18928.025390625,\n", - " 53673.6484375,\n", - " 36085.91796875,\n", - " 62185.38671875,\n", - " 64941.6640625,\n", - " 25453.51171875,\n", - " 80695.703125,\n", - " 19191.537109375,\n", - " 94906.890625,\n", - " 6124.4677734375,\n", - " 47131.2265625,\n", - " 21241.4140625,\n", - " 25489.986328125,\n", - " 62493.859375,\n", - " 19251.884765625,\n", - " 18277.11328125,\n", - " -128300.203125,\n", - " 25610.78515625,\n", - " 63669.34375,\n", - " 97122.78125,\n", - " -11466.111328125,\n", - " 72770.984375,\n", - " 33811.90234375,\n", - " 44599.46875,\n", - " 15444.091796875,\n", - " 29412.22265625,\n", - " 26329.7578125,\n", - " 25694.806640625,\n", - " 32563.919921875,\n", - " 40376.859375,\n", - " 32127.94140625,\n", - " 5581.7998046875,\n", - " 3272.686767578125,\n", - " 20566.1015625,\n", - " 72541.375,\n", - " 42384.80078125,\n", - " -1579.7364501953125,\n", - " 44116.7265625,\n", - " 46954.26953125,\n", - " 29220.912109375,\n", - " 60124.99609375,\n", - " 23823.865234375,\n", - " 29494.39453125,\n", - " 88395.921875,\n", - " 28604.146484375,\n", - " 67284.484375,\n", - " 45835.12109375,\n", - " 13507.4775390625,\n", - " 11530.6552734375,\n", - " 33266.0,\n", - " 17542.634765625,\n", - " 20067.541015625,\n", - " 52417.671875,\n", - " 51687.140625,\n", - " 10199.404296875,\n", - " 17651.365234375,\n", - " 75689.3125,\n", - " 17026.24609375,\n", - " 29510.6953125,\n", - " 21370.64453125,\n", - " 120927.96875,\n", - " 99638.125,\n", - " 13805.2421875,\n", - " 14573.578125,\n", - " 258048.734375,\n", - " 12795.537109375,\n", - " 13636.86328125,\n", - " 165560.84375,\n", - " 13395.5537109375,\n", - " 16118.572265625,\n", - " 20655.673828125,\n", - " 315940.0625,\n", - " 84108.90625,\n", - " 21643.666015625,\n", - " 9317.88671875,\n", - " 15947.091796875,\n", - " 62917.5859375,\n", - " 41278.57421875,\n", - " 25661.619140625,\n", - " 80058.3828125,\n", - " 27971.4453125,\n", - " 37349.42578125,\n", - " 69476.015625,\n", - " 24709.693359375,\n", - " 29070.9453125,\n", - " 23828.005859375,\n", - " 25703.625,\n", - " 70375.59375,\n", - " 10936.2919921875,\n", - " 21051.166015625,\n", - " 42185.12890625,\n", - " 36170.58984375,\n", - " 38829.1640625,\n", - " 10153.2666015625,\n", - " 38725.96875,\n", - " 16058.94140625,\n", - " 60679.34375,\n", - " 10292.9619140625,\n", - " 38659.7109375,\n", - " 31074.58203125,\n", - " 4330.5078125,\n", - " 20077.91015625,\n", - " 33742.62109375,\n", - " 158518.25,\n", - " 316855.375,\n", - " 9338.2109375,\n", - " 2153.59375,\n", - " 21643.046875,\n", - " 136183.40625,\n", - " 46410.0234375,\n", - " 31450.41015625,\n", - " 82952.5,\n", - " 49190.25,\n", - " 29564.80078125,\n", - " 46273.09765625,\n", - " 43837.7109375,\n", - " 132310.21875,\n", - " 61876.80078125,\n", - " 279531.375,\n", - " 39940.87109375,\n", - " 102430.15625,\n", - " 28704.625,\n", - " 12383.9140625,\n", - " 23801.8046875,\n", - " 18123.349609375,\n", - " 71105.671875,\n", - " 18001.40234375,\n", - " 26786.908203125,\n", - " 17956.12890625,\n", - " 12560.8134765625,\n", - " 31671.96484375,\n", - " 53297.1015625,\n", - " 66676.8671875,\n", - " 22459.076171875,\n", - " 63616.23046875,\n", - " 16215.4189453125,\n", - " 14204.021484375,\n", - " 28680.66015625,\n", - " 49534.875,\n", - " 36158.1796875,\n", - " 74839.046875,\n", - " 70131.9375,\n", - " 87898.171875,\n", - " 49724.5703125,\n", - " 48210.4375,\n", - " 63886.953125,\n", - " 17063.30859375,\n", - " 38594.61328125,\n", - " 49496.640625,\n", - " 73945.625,\n", - " 68215.390625,\n", - " 60682.015625,\n", - " 9282.1025390625,\n", - " 17442.4921875,\n", - " 5559.99658203125,\n", - " 20172.052734375,\n", - " 33351.9765625,\n", - " 22298.16015625,\n", - " 11354.8642578125,\n", - " 9550.8349609375,\n", - " 29042.060546875,\n", - " 12740.640625,\n", - " 60416.58203125,\n", - " 28298.564453125,\n", - " 39099.49609375,\n", - " 31955.103515625,\n", - " 14255.3603515625,\n", - " 35627.87890625,\n", - " 19506.125,\n", - " 105075.84375,\n", - " 47845.6015625,\n", - " 11359.23046875,\n", - " 10517.7939453125,\n", - " 24713.931640625,\n", - " 87334.4375,\n", - " 8378.7890625,\n", - " 47600.73828125,\n", - " 20474.3359375,\n", - " 9107.287109375,\n", - " 50019.3125,\n", - " 35712.40234375,\n", - " 16642.03515625,\n", - " 18209.45703125,\n", - " 16456.224609375,\n", - " 32703.904296875,\n", - " 24866.837890625,\n", - " 34186.828125,\n", - " 37738.44140625,\n", - " 12875.3046875,\n", - " 55756.3828125,\n", - " 37675.6171875,\n", - " 51829.9609375,\n", - " 35025.5234375,\n", - " 34882.34375,\n", - " 49539.1484375,\n", - " 26943.58203125,\n", - " 38624.84375,\n", - " 86724.4375,\n", - " 31549.41015625,\n", - " -2313.6533203125,\n", - " 31528.47265625,\n", - " 9921.365234375,\n", - " 14897.3701171875,\n", - " 118737.8671875,\n", - " 44725.8671875,\n", - " 29973.57421875,\n", - " 80599.234375,\n", - " 3563.61767578125,\n", - " 16904.185546875,\n", - " 30955.6640625,\n", - " 15019.98828125,\n", - " 7462.5888671875,\n", - " 28949.25390625,\n", - " 16058.3828125,\n", - " 83091.671875,\n", - " 30747.46484375,\n", - " 28873.31640625,\n", - " 12259.0654296875,\n", - " 56976.140625,\n", - " 61049.2109375,\n", - " 12487.078125,\n", - " 32094.107421875,\n", - " 12178.74609375,\n", - " 53067.8359375,\n", - " 32520.69921875,\n", - " 45535.484375,\n", - " 27464.06640625,\n", - " 50947.1328125,\n", - " 22289.2265625,\n", - " 10396.4921875,\n", - " 59907.6484375,\n", - " 7731.7958984375,\n", - " 8774.87890625,\n", - " 10877.0263671875,\n", - " 34091.6796875,\n", - " 51231.140625,\n", - " 50064.5625,\n", - " 69947.375,\n", - " 14702.890625,\n", - " 39768.765625,\n", - " 26608.39453125,\n", - " 25633.923828125,\n", - " 12337.6552734375,\n", - " 51767.0,\n", - " 35374.1171875,\n", - " 36497.1796875,\n", - " 15910.53515625,\n", - " 18999.83984375,\n", - " 39605.078125,\n", - " 20666.423828125,\n", - " 10860.1787109375,\n", - " 90212.015625,\n", - " 23932.8984375,\n", - " 170059.71875,\n", - " 29636.888671875,\n", - " 88273.328125,\n", - " 40148.703125,\n", - " 8333.421875,\n", - " 36976.2265625,\n", - " 29832.22265625,\n", - " 23711.326171875,\n", - " 13669.439453125,\n", - " 64170.578125,\n", - " 13990.80078125,\n", - " 54170.50390625,\n", - " 22911.423828125,\n", - " 50761.0234375,\n", - " 53753.98828125,\n", - " 40960.73046875,\n", - " 85809.46875,\n", - " 4021.703125,\n", - " 43113.6796875,\n", - " 19399.125,\n", - " 23956.55859375,\n", - " 20454.65625,\n", - " 44649.2265625,\n", - " 107900.2265625,\n", - " 22575.859375,\n", - " 16263.896484375,\n", - " 94559.328125,\n", - " 55129.42578125,\n", - " 25107.392578125,\n", - " 41568.37109375,\n", - " 8048.712890625,\n", - " 21061.857421875,\n", - " 40774.2109375,\n", - " 44428.7265625,\n", - " 36803.66796875,\n", - " 72778.46875,\n", - " 4254.9306640625,\n", - " 58979.109375,\n", - " 8613.646484375,\n", - " 32859.58984375,\n", - " 14015.240234375,\n", - " 44500.96875,\n", - " 46213.1171875,\n", - " 65936.75,\n", - " 32159.701171875,\n", - " 17937.65234375,\n", - " 59432.9453125,\n", - " 47060.87109375,\n", - " 63605.0078125,\n", - " 2945.0068359375,\n", - " 67809.2890625,\n", - " 41265.7578125,\n", - " 91342.4453125,\n", - " 8328.04296875,\n", - " -1101.66943359375,\n", - " 32880.10546875,\n", - " 47212.578125,\n", - " 10937.8974609375,\n", - " 55094.984375,\n", - " 115751.9921875,\n", - " 108119.609375,\n", - " 92473.1875,\n", - " 49519.48828125,\n", - " 13333.3330078125,\n", - " 23833.1015625,\n", - " 25699.490234375,\n", - " 54085.47265625,\n", - " 93547.6015625,\n", - " 119124.2890625,\n", - " 36243.515625,\n", - " 18532.25390625,\n", - " 37005.23046875,\n", - " 82521.7734375,\n", - " 33985.5546875,\n", - " 13164.248046875,\n", - " 4725.9423828125,\n", - " 30859.658203125,\n", - " 30235.9296875,\n", - " 51327.2109375,\n", - " 8135.8515625,\n", - " 14642.599609375,\n", - " 39812.0390625,\n", - " 21010.294921875,\n", - " 17880.77734375,\n", - " 25586.009765625,\n", - " 18230.74609375,\n", - " 31676.43359375,\n", - " 64068.02734375,\n", - " 62055.109375,\n", - " 8597.9951171875,\n", - " -689.36767578125,\n", - " 22282.40234375,\n", - " 26209.453125,\n", - " 44633.15625,\n", - " 44861.93359375,\n", - " 11799.6728515625,\n", - " 7471.416015625,\n", - " 27270.0703125,\n", - " 30369.8125,\n", - " 57216.08203125,\n", - " 26801.71875,\n", - " 34544.09765625,\n", - " 12862.01953125,\n", - " 46092.71875,\n", - " 36481.62109375,\n", - " 34744.30859375,\n", - " 65425.62109375,\n", - " 4985.2255859375,\n", - " 88636.1875,\n", - " 33294.61328125,\n", - " 11294.2900390625,\n", - " 3804.8603515625,\n", - " 30142.99609375,\n", - " 34193.69921875,\n", - " 27532.00390625,\n", - " 25489.2890625,\n", - " 26718.1796875,\n", - " 20193.59765625,\n", - " 9718.369140625,\n", - " 9718.68359375,\n", - " 16871.986328125,\n", - " 90960.25,\n", - " 173843.09375,\n", - " 10588.7158203125,\n", - " 36211.0859375,\n", - " 41028.60546875,\n", - " 16252.380859375,\n", - " 82963.3359375,\n", - " 87256.375,\n", - " 11670.8408203125,\n", - " 64230.78125,\n", - " 40018.10546875,\n", - " 121421.5625,\n", - " 27089.173828125,\n", - " 29069.052734375,\n", - " 123517.0703125,\n", - " 46898.578125,\n", - " 35206.80078125,\n", - " 15652.1513671875,\n", - " 29536.60546875,\n", - " 123538.28125,\n", - " 107778.09375,\n", - " 57305.15625,\n", - " 9674.052734375,\n", - " 66293.375,\n", - " 14642.1171875,\n", - " 37275.40234375,\n", - " 6044.4794921875,\n", - " 19266.3125,\n", - " 22081.333984375,\n", - " 23549.95703125,\n", - " 111211.328125,\n", - " 16796.87109375,\n", - " 44432.0625,\n", - " 17247.78125,\n", - " 15747.1083984375,\n", - " 60831.34765625,\n", - " 13422.4755859375,\n", - " 13618.771484375,\n", - " 37734.2890625,\n", - " 79883.6875,\n", - " 65422.84375,\n", - " 139841.765625,\n", - " 30277.958984375,\n", - " 46782.796875,\n", - " 87724.796875,\n", - " 77575.9453125,\n", - " 19460.52734375,\n", - " 10200.990234375,\n", - " 40542.1484375,\n", - " 16119.3359375,\n", - " 30213.30859375,\n", - " 8015.21826171875,\n", - " 56752.4453125,\n", - " 43755.609375,\n", - " 20792.73046875,\n", - " 58121.3359375,\n", - " 48741.9375,\n", - " 62631.84375,\n", - " 29709.4609375,\n", - " 17535.095703125,\n", - " 14318.0439453125,\n", - " 121947.75,\n", - " 63020.546875,\n", - " 22930.33984375,\n", - " 7444.3125,\n", - " 18725.72265625,\n", - " 32238.6328125,\n", - " 28379.6875,\n", - " 15389.505859375,\n", - " 35851.96484375,\n", - " 76716.734375,\n", - " 48482.4765625,\n", - " 35916.2421875,\n", - " 51959.78125,\n", - " 23978.173828125,\n", - " 45407.69921875,\n", - " 38203.734375,\n", - " 23195.283203125,\n", - " 50744.5625,\n", - " 44664.5390625,\n", - " 30143.400390625,\n", - " 37249.83203125,\n", - " 84696.34375,\n", - " 57697.51171875,\n", - " 22670.818359375,\n", - " 15780.8330078125,\n", - " 170830.65625,\n", - " 26958.021484375,\n", - " 29272.8046875,\n", - " 23221.171875,\n", - " 62345.078125,\n", - " 32164.08984375,\n", - " 19844.25390625,\n", - " 28834.38671875,\n", - " 17484.2265625,\n", - " 18654.09765625,\n", - " 18236.30859375,\n", - " 58288.6484375,\n", - " 48679.578125,\n", - " 17626.693359375,\n", - " 25815.4921875,\n", - " 19905.19921875,\n", - " 34007.6953125,\n", - " 3652.7958984375,\n", - " 38885.515625,\n", - " 8042.90771484375,\n", - " 23094.939453125,\n", - " 23592.01953125,\n", - " 82367.265625,\n", - " 31373.5703125,\n", - " 26013.9921875,\n", - " 41993.12109375,\n", - " 35568.87109375,\n", - " 17513.2109375,\n", - " 49938.30859375,\n", - " 78099.7265625,\n", - " 18216.48046875,\n", - " 55438.8359375,\n", - " 26214.248046875,\n", - " 26660.55859375,\n", - " 14489.033203125,\n", - " 16435.85546875,\n", - " 100882.6875,\n", - " 141845.203125,\n", - " 32891.84375,\n", - " 50578.953125,\n", - " 14007.357421875,\n", - " 26577.279296875,\n", - " 29075.56640625,\n", - " 56605.7421875,\n", - " 15995.76171875,\n", - " -1082.701171875,\n", - " 13769.41015625,\n", - " 11808.3349609375,\n", - " 21091.166015625,\n", - " 29598.13671875,\n", - " 5805.54296875,\n", - " 97049.390625,\n", - " 25311.091796875,\n", - " 23550.56640625,\n", - " 11378.5185546875,\n", - " 65778.1796875,\n", - " 34958.45703125,\n", - " 31399.0078125,\n", - " 55990.65625,\n", - " 28056.69140625,\n", - " 10245.3671875,\n", - " 30969.162109375,\n", - " 10712.5234375,\n", - " 83004.3828125,\n", - " 49971.23828125,\n", - " 65883.6171875,\n", - " 20040.859375,\n", - " 26816.115234375,\n", - " 13931.8984375,\n", - " 68018.421875,\n", - " 10602.333984375,\n", - " 39263.2890625,\n", - " 18259.47265625,\n", - " 16819.58203125,\n", - " 51139.28515625,\n", - " 56417.15625,\n", - " 7909.02099609375,\n", - " 28856.37109375,\n", - " 15506.7001953125,\n", - " 42477.52734375,\n", - " 37098.3046875,\n", - " 15255.017578125,\n", - " 62622.3828125,\n", - " 109668.921875,\n", - " 70030.0078125,\n", - " 55576.515625,\n", - " 44266.19140625,\n", - " 21576.80078125,\n", - " 22289.6171875,\n", - " 54814.1875,\n", - " 10748.462890625,\n", - " 18472.998046875,\n", - " -1289.754150390625,\n", - " 20888.705078125,\n", - " 32200.671875,\n", - " 49303.4921875,\n", - " 28064.486328125,\n", - " 5019.94384765625,\n", - " 61691.8125,\n", - " 8589.38671875,\n", - " 17698.9375,\n", - " 78804.765625,\n", - " 9738.6875,\n", - " 28316.1015625,\n", - " 93331.9375,\n", - " 49323.765625,\n", - " 25861.751953125,\n", - " 22124.0546875,\n", - " 34074.265625,\n", - " 12622.2392578125,\n", - " 31813.119140625,\n", - " 36619.9375,\n", - " 173246.3125,\n", - " 38042.65234375,\n", - " 60413.390625,\n", - " 40926.84765625,\n", - " 97984.2578125,\n", - " 33284.65234375,\n", - " 78938.4296875,\n", - " 66193.4296875,\n", - " 32187.771484375,\n", - " 21480.85546875,\n", - " 32309.75390625,\n", - " 28786.98046875,\n", - " 79330.890625,\n", - " -1432.4979248046875,\n", - " 10695.7138671875,\n", - " 8774.232421875,\n", - " 25045.369140625,\n", - " 84507.40625,\n", - " 17285.712890625,\n", - " 23519.638671875,\n", - " 19419.4453125,\n", - " 25171.025390625,\n", - " 14673.1201171875,\n", - " 23078.50390625,\n", - " 47375.01171875,\n", - " 48104.9453125,\n", - " 71147.2890625,\n", - " 38288.953125,\n", - " 22726.609375,\n", - " 22989.3125,\n", - " 25380.634765625,\n", - " 16117.1591796875,\n", - " 141947.78125,\n", - " 197894.265625,\n", - " 36242.86328125,\n", - " 21266.84375,\n", - " 22684.693359375,\n", - " 35684.6640625,\n", - " 60435.2734375,\n", - " 58215.671875,\n", - " 15492.6689453125,\n", - " 89727.90625,\n", - " 76607.5078125,\n", - " 49172.60546875,\n", - " 216569.25,\n", - " 25287.96875,\n", - " 65308.08203125,\n", - " 22048.810546875,\n", - " 8387.8349609375,\n", - " 32126.7890625,\n", - " 2719.126953125,\n", - " 79432.2734375,\n", - " 49878.328125,\n", - " 35227.515625,\n", - " 26651.919921875,\n", - " 19152.947265625,\n", - " 115109.09375,\n", - " 23798.35546875,\n", - " 23987.798828125,\n", - " 35485.40234375,\n", - " 11664.9013671875,\n", - " 23100.46484375,\n", - " 28191.5546875,\n", - " 41960.29296875,\n", - " 25195.87109375,\n", - " 30709.34765625,\n", - " 58859.73046875,\n", - " 16826.650390625,\n", - " 10988.0732421875,\n", - " 40416.078125,\n", - " 58385.1484375,\n", - " 22671.58203125,\n", - " 22447.556640625,\n", - " 13146.28125,\n", - " 3150.71728515625,\n", - " 73674.625,\n", - " 16784.513671875,\n", - " 22661.5625,\n", - " 44324.5625,\n", - " 46941.4375,\n", - " 124423.2890625,\n", - " 108287.515625,\n", - " -275.660888671875,\n", - " 18503.80859375,\n", - " 17590.90234375,\n", - " 26986.259765625,\n", - " 35073.8671875,\n", - " 97897.90625,\n", - " 42683.984375,\n", - " 26883.6796875,\n", - " 31239.48828125,\n", - " 23415.150390625,\n", - " 22655.140625,\n", - " 18155.0546875,\n", - " 6546.8583984375,\n", - " 9419.21875,\n", - " -4117.87939453125,\n", - " 20602.771484375,\n", - " 24895.21875,\n", - " 20532.66796875,\n", - " 69457.0625,\n", - " 64357.453125,\n", - " 19708.40234375,\n", - " 27310.90234375,\n", - " 13380.79296875,\n", - " 109890.96875,\n", - " 15409.951171875,\n", - " 14514.390625,\n", - " 87220.0078125,\n", - " 24800.474609375,\n", - " 110535.265625,\n", - " 43672.265625,\n", - " 81139.7421875,\n", - " 89001.015625,\n", - " 11352.458984375,\n", - " 70618.7578125,\n", - " 20185.841796875,\n", - " 20840.169921875,\n", - " 24424.767578125,\n", - " 14054.037109375,\n", - " 16613.875,\n", - " 13399.37109375,\n", - " 17971.177734375,\n", - " 10108.4521484375,\n", - " 28036.4296875,\n", - " 52295.6328125,\n", - " 35380.08203125,\n", - " 61453.43359375,\n", - " 9796.5029296875,\n", - " 18148.3203125,\n", - " 20380.7734375,\n", - " 34954.33984375,\n", - " 44080.58984375,\n", - " 45166.5,\n", - " 134838.25,\n", - " 34.47021484375,\n", - " 65053.234375,\n", - " 18119.6875,\n", - " 13195.9130859375,\n", - " 18033.375,\n", - " 76895.1484375,\n", - " 12766.2294921875,\n", - " 75774.25,\n", - " 18391.4609375,\n", - " 139609.125,\n", - " 44896.77734375,\n", - " 11940.498046875,\n", - " 70493.234375,\n", - " 18957.376953125,\n", - " 9673.37109375,\n", - " 26316.435546875,\n", - " 15348.240234375,\n", - " 29803.703125,\n", - " 22273.8359375,\n", - " 45196.578125,\n", - " 27014.75390625,\n", - " 3366.7294921875,\n", - " 16245.783203125,\n", - " 63377.44921875,\n", - " 26847.748046875,\n", - " 13367.619140625,\n", - " 13310.619140625,\n", - " 28446.22265625,\n", - " 26156.08203125,\n", - " 14805.546875,\n", - " 21826.861328125,\n", - " 47517.5703125,\n", - " 54458.828125,\n", - " 18878.8359375,\n", - " 31010.498046875,\n", - " 22140.984375,\n", - " 37987.83203125,\n", - " 53714.27734375,\n", - " 23767.5625,\n", - " 21090.60546875,\n", - " 21276.80078125,\n", - " 23774.494140625,\n", - " 7280.4423828125,\n", - " 18133.4140625,\n", - " -715.126953125,\n", - " 25483.3515625,\n", - " 24605.9375,\n", - " 29438.05078125,\n", - " 40516.54296875,\n", - " 21309.08203125,\n", - " 46766.5546875,\n", - " 10690.958984375,\n", - " 55742.484375,\n", - " 14359.328125,\n", - " 97370.5390625,\n", - " 45092.5390625,\n", - " 131994.6875,\n", - " 55255.17578125,\n", - " 65933.0,\n", - " 35623.3359375,\n", - " 18859.48046875,\n", - " 73039.5703125,\n", - " 15006.376953125,\n", - " 60373.21875,\n", - " 3136.341796875,\n", - " 35850.01171875,\n", - " 28397.080078125,\n", - " 89028.4453125,\n", - " 72688.2421875,\n", - " 32294.33984375,\n", - " 65947.90625,\n", - " 70144.9609375,\n", - " -12412.365234375,\n", - " 29422.45703125,\n", - " 64145.0546875,\n", - " 90205.3125,\n", - " 29660.3671875,\n", - " 56683.46875,\n", - " 83849.546875,\n", - " 30914.302734375,\n", - " 20099.775390625,\n", - " 42509.1640625,\n", - " 11052.9638671875,\n", - " 94775.46875,\n", - " 19670.07421875,\n", - " 98591.6953125,\n", - " 36196.078125,\n", - " 24977.849609375,\n", - " 37196.64453125,\n", - " 37921.40625,\n", - " 32585.2890625,\n", - " 29565.974609375,\n", - " 29774.85546875,\n", - " 15175.998046875,\n", - " 114067.8828125,\n", - " 40564.43359375,\n", - " 54474.4453125,\n", - " 65041.16015625,\n", - " 17165.8359375,\n", - " 43709.578125,\n", - " 61183.625,\n", - " 21492.251953125,\n", - " 25670.21484375,\n", - " 34801.3515625,\n", - " 13681.240234375,\n", - " 14930.470703125,\n", - " 49058.8671875,\n", - " 46636.1484375,\n", - " 25802.220703125,\n", - " 32968.359375,\n", - " 23501.875,\n", - " 12271.0537109375,\n", - " 35832.171875,\n", - " 21240.30859375,\n", - " 37620.6171875,\n", - " 10132.9580078125,\n", - " 9806.646484375,\n", - " 50847.1484375,\n", - " 41635.14453125,\n", - " 9519.4375,\n", - " 43597.35546875,\n", - " -1186.7822265625,\n", - " 21323.6953125,\n", - " 101471.2109375,\n", - " 11516.294921875,\n", - " 25563.25,\n", - " 41681.7578125,\n", - " 14626.2138671875,\n", - " 36032.91796875,\n", - " 31719.94921875,\n", - " 36590.46875,\n", - " 69308.796875,\n", - " -853.5398559570312,\n", - " 30104.7109375,\n", - " 71779.765625,\n", - " 47072.23828125,\n", - " 60309.02734375,\n", - " 25477.1796875,\n", - " 20557.6171875,\n", - " 49672.38671875,\n", - " 18776.884765625,\n", - " 111971.8125,\n", - " 28504.408203125,\n", - " 2347.626953125,\n", - " 30536.033203125,\n", - " 15141.86328125,\n", - " 14366.30078125,\n", - " 63717.5390625,\n", - " 75040.0625,\n", - " 88302.7734375,\n", - " 56473.6484375,\n", - " 132567.125,\n", - " 34873.6171875,\n", - " 26211.71484375,\n", - " 61707.390625,\n", - " 98261.96875,\n", - " 61716.1171875,\n", - " 22732.71875,\n", - " 12702.92578125,\n", - " 11656.5390625,\n", - " 23491.091796875,\n", - " 34246.4140625,\n", - " 10011.40625,\n", - " 17436.36328125,\n", - " 18173.9453125,\n", - " 55476.59375,\n", - " 3901.5625,\n", - " 40064.7890625,\n", - " -3955.75146484375,\n", - " 87184.3203125,\n", - " 44381.796875,\n", - " 45186.03515625,\n", - " 23237.45703125,\n", - " 18739.51171875,\n", - " 22416.333984375,\n", - " 11585.580078125,\n", - " 24073.537109375,\n", - " 25657.634765625,\n", - " 20785.326171875,\n", - " 66783.4296875,\n", - " 11823.8193359375,\n", - " 52244.109375,\n", - " 27199.931640625,\n", - " 35532.57421875,\n", - " 76208.5703125,\n", - " 7066.720703125,\n", - " 10683.791015625,\n", - " 7010.52685546875,\n", - " 43856.7265625,\n", - " 81659.359375,\n", - " 51864.30078125,\n", - " 19952.162109375,\n", - " 34107.02734375,\n", - " 20947.3125,\n", - " 50038.08984375,\n", - " -159.0,\n", - " 12089.43359375,\n", - " 11676.123046875,\n", - " 108971.140625,\n", - " 21683.626953125,\n", - " 31935.34375,\n", - " 23214.060546875,\n", - " 44252.69921875,\n", - " 17608.5859375,\n", - " 8779.1904296875,\n", - " 59220.6484375,\n", - " 22398.384765625,\n", - " 31132.98046875,\n", - " 35039.66015625,\n", - " 29174.203125,\n", - " 40716.5625,\n", - " 30596.56640625,\n", - " 88177.234375,\n", - " 27013.5859375,\n", - " 38858.6484375,\n", - " 19192.80859375,\n", - " 28213.88671875,\n", - " 8324.7900390625,\n", - " 45828.0703125,\n", - " 8661.08984375,\n", - " 14812.0556640625,\n", - " 32449.478515625,\n", - " 43268.7734375,\n", - " 17871.859375,\n", - " 34640.99609375,\n", - " 40002.9765625,\n", - " 15666.1640625,\n", - " 61550.36328125,\n", - " 58149.5703125,\n", - " 99349.1796875,\n", - " 88744.734375,\n", - " 30388.1875,\n", - " 151692.15625,\n", - " 14220.28515625,\n", - " 49684.85546875,\n", - " 36886.86328125,\n", - " 3546.418212890625,\n", - " 32242.318359375,\n", - " 11286.77734375,\n", - " 43921.79296875,\n", - " 140884.515625,\n", - " 17225.287109375,\n", - " 88046.96875,\n", - " 30767.08203125,\n", - " 18412.998046875,\n", - " 55529.671875,\n", - " 16762.958984375,\n", - " 159593.0625,\n", - " 13866.76171875,\n", - " 29753.38671875,\n", - " 16752.2421875,\n", - " 41025.3828125,\n", - " 13050.986328125,\n", - " 74612.015625,\n", - " 12191.423828125,\n", - " 51126.74609375,\n", - " 41824.6953125,\n", - " 2930.2978515625,\n", - " 13427.787109375,\n", - " 40847.203125,\n", - " 50449.61328125,\n", - " 20014.7109375,\n", - " 10515.1494140625,\n", - " 70940.9609375,\n", - " 42538.3203125,\n", - " 21991.060546875,\n", - " 93191.0,\n", - " 41498.1796875,\n", - " 55685.14453125,\n", - " 98469.078125,\n", - " 52356.38671875,\n", - " 44664.60546875,\n", - " 67308.5703125,\n", - " 83980.828125,\n", - " 52494.28515625,\n", - " 21625.1171875,\n", - " 15164.9970703125,\n", - " 18203.626953125,\n", - " 36446.75,\n", - " ...],\n", - " 'equiv_household_net_income': [40612.640625,\n", - " 2362.838623046875,\n", - " 8899.0712890625,\n", - " 18229.52734375,\n", - " 217617.34375,\n", - " 24096.67578125,\n", - " 55932.65234375,\n", - " 27566.732421875,\n", - " 16089.55078125,\n", - " 45006.03125,\n", - " 70465.1875,\n", - " 21866.826171875,\n", - " 60728.5,\n", - " 24033.255859375,\n", - " 28250.783203125,\n", - " 53673.6484375,\n", - " 36085.91796875,\n", - " 62185.38671875,\n", - " 46386.90234375,\n", - " 19137.978515625,\n", - " 50434.8125,\n", - " 28644.083984375,\n", - " 43336.48046875,\n", - " 9140.99609375,\n", - " 47131.2265625,\n", - " 21241.4140625,\n", - " 25489.986328125,\n", - " 62493.859375,\n", - " 19251.884765625,\n", - " 27279.2734375,\n", - " -128300.203125,\n", - " 25610.78515625,\n", - " 45478.1015625,\n", - " 97122.78125,\n", - " -8190.07958984375,\n", - " 47562.734375,\n", - " 33811.90234375,\n", - " 33533.43359375,\n", - " 17751.830078125,\n", - " 43898.83984375,\n", - " 26329.7578125,\n", - " 25694.806640625,\n", - " 23259.943359375,\n", - " 60263.96875,\n", - " 32127.94140625,\n", - " 8331.0439453125,\n", - " 4884.60693359375,\n", - " 20566.1015625,\n", - " 72541.375,\n", - " 42384.80078125,\n", - " -2357.8154296875,\n", - " 44116.7265625,\n", - " 46954.26953125,\n", - " 29220.912109375,\n", - " 31152.84765625,\n", - " 35558.0078125,\n", - " 44021.484375,\n", - " 57775.11328125,\n", - " 42692.75390625,\n", - " 77338.484375,\n", - " 45835.12109375,\n", - " 20160.4140625,\n", - " 9079.255859375,\n", - " 33266.0,\n", - " 26183.037109375,\n", - " 20067.541015625,\n", - " 52417.671875,\n", - " 51687.140625,\n", - " 10199.404296875,\n", - " 14709.470703125,\n", - " 45595.97265625,\n", - " 17026.24609375,\n", - " 18444.18359375,\n", - " 21370.64453125,\n", - " 60767.82421875,\n", - " 99638.125,\n", - " 20604.837890625,\n", - " 21751.609375,\n", - " 161280.453125,\n", - " 19097.81640625,\n", - " 20353.52734375,\n", - " 247105.734375,\n", - " 19993.36328125,\n", - " 12691.7890625,\n", - " 15530.5810546875,\n", - " 225671.484375,\n", - " 84108.90625,\n", - " 32303.978515625,\n", - " 13907.29296875,\n", - " 15947.091796875,\n", - " 62917.5859375,\n", - " 61609.8125,\n", - " 25661.619140625,\n", - " 80058.3828125,\n", - " 41748.42578125,\n", - " 37349.42578125,\n", - " 69476.015625,\n", - " 36880.13671875,\n", - " 43389.46875,\n", - " 23828.005859375,\n", - " 38363.6171875,\n", - " 70375.59375,\n", - " 16322.8232421875,\n", - " 21051.166015625,\n", - " 42185.12890625,\n", - " 36170.58984375,\n", - " 38829.1640625,\n", - " 15154.12890625,\n", - " 38725.96875,\n", - " 23968.568359375,\n", - " 60679.34375,\n", - " 15362.62890625,\n", - " 57701.05859375,\n", - " 31074.58203125,\n", - " 3256.020751953125,\n", - " 29967.029296875,\n", - " 50362.12109375,\n", - " 113227.3203125,\n", - " 316855.375,\n", - " 13937.6279296875,\n", - " 2153.59375,\n", - " 32303.0546875,\n", - " 97273.859375,\n", - " 33150.015625,\n", - " 46940.91015625,\n", - " 59251.78515625,\n", - " 73418.28125,\n", - " 27630.654296875,\n", - " 46273.09765625,\n", - " 43837.7109375,\n", - " 86477.265625,\n", - " 51564.0,\n", - " 168392.390625,\n", - " 39940.87109375,\n", - " 35078.8203125,\n", - " 42842.72265625,\n", - " 18483.453125,\n", - " 35525.08203125,\n", - " 27049.775390625,\n", - " 71105.671875,\n", - " 26867.763671875,\n", - " 39980.4609375,\n", - " 14963.4404296875,\n", - " 18747.482421875,\n", - " 31671.96484375,\n", - " 53297.1015625,\n", - " 99517.7109375,\n", - " 33521.0078125,\n", - " 63616.23046875,\n", - " 24202.1171875,\n", - " 21200.03125,\n", - " 42806.953125,\n", - " 49534.875,\n", - " 30131.814453125,\n", - " 48914.41015625,\n", - " 37705.34375,\n", - " 73248.4765625,\n", - " 41437.140625,\n", - " 48210.4375,\n", - " 63886.953125,\n", - " 25467.625,\n", - " 24121.6328125,\n", - " 49496.640625,\n", - " 44545.55859375,\n", - " 101814.015625,\n", - " 43344.296875,\n", - " 13853.8837890625,\n", - " 17442.4921875,\n", - " 8298.501953125,\n", - " 30107.541015625,\n", - " 20844.984375,\n", - " 33280.8359375,\n", - " 16947.55859375,\n", - " 14254.9775390625,\n", - " 43346.359375,\n", - " 19015.880859375,\n", - " 60416.58203125,\n", - " 42236.6640625,\n", - " 39099.49609375,\n", - " 47694.18359375,\n", - " 14255.3603515625,\n", - " 29689.8984375,\n", - " 22420.833984375,\n", - " 105075.84375,\n", - " 47845.6015625,\n", - " 13056.5869140625,\n", - " 15698.19921875,\n", - " 36886.46484375,\n", - " 87334.4375,\n", - " 12505.6552734375,\n", - " 47600.73828125,\n", - " 20474.3359375,\n", - " 13592.9658203125,\n", - " 28912.896484375,\n", - " 53302.08984375,\n", - " 16642.03515625,\n", - " 27178.29296875,\n", - " 24561.529296875,\n", - " 48811.796875,\n", - " 18696.869140625,\n", - " 51025.1171875,\n", - " 37738.44140625,\n", - " 14799.201171875,\n", - " 55756.3828125,\n", - " 37675.6171875,\n", - " 51829.9609375,\n", - " 25018.232421875,\n", - " 29068.619140625,\n", - " 73939.0234375,\n", - " 40214.30078125,\n", - " 57649.01953125,\n", - " 50129.73046875,\n", - " 31549.41015625,\n", - " -3453.2138671875,\n", - " 16950.791015625,\n", - " 14808.0078125,\n", - " 22234.880859375,\n", - " 118737.8671875,\n", - " 44725.8671875,\n", - " 29973.57421875,\n", - " 67166.0234375,\n", - " 5318.83203125,\n", - " 25230.126953125,\n", - " 30955.6640625,\n", - " 22417.892578125,\n", - " 11138.1923828125,\n", - " 24124.376953125,\n", - " 16058.3828125,\n", - " 59351.1953125,\n", - " 45891.73828125,\n", - " 28873.31640625,\n", - " 18297.111328125,\n", - " 37239.30859375,\n", - " 61049.2109375,\n", - " 18637.4296875,\n", - " 32094.107421875,\n", - " 18177.232421875,\n", - " 79205.7265625,\n", - " 32520.69921875,\n", - " 45535.484375,\n", - " 40991.14453125,\n", - " 33298.78125,\n", - " 33267.5,\n", - " 15517.15234375,\n", - " 59907.6484375,\n", - " 11539.9931640625,\n", - " 8774.87890625,\n", - " 16234.3671875,\n", - " 50883.1015625,\n", - " 51231.140625,\n", - " 50064.5625,\n", - " 49962.41015625,\n", - " 21944.61328125,\n", - " 39768.765625,\n", - " 24867.65625,\n", - " 38259.5859375,\n", - " 18414.41015625,\n", - " 51767.0,\n", - " 35374.1171875,\n", - " 26069.4140625,\n", - " 23747.06640625,\n", - " 13571.314453125,\n", - " 39605.078125,\n", - " 30845.408203125,\n", - " 16209.2216796875,\n", - " 90212.015625,\n", - " 35720.7421875,\n", - " 121471.2265625,\n", - " 22283.375,\n", - " 88273.328125,\n", - " 30186.994140625,\n", - " 12437.9423828125,\n", - " 27801.673828125,\n", - " 21308.73046875,\n", - " 19759.4375,\n", - " 20402.1484375,\n", - " 64170.578125,\n", - " 20881.791015625,\n", - " 54170.50390625,\n", - " 18040.4921875,\n", - " 36257.875,\n", - " 38395.70703125,\n", - " 61135.41796875,\n", - " 64518.39453125,\n", - " 2513.564453125,\n", - " 28178.876953125,\n", - " 28953.91796875,\n", - " 23956.55859375,\n", - " 30529.337890625,\n", - " 44649.2265625,\n", - " 49269.5078125,\n", - " 21098.93359375,\n", - " 24274.47265625,\n", - " 71097.234375,\n", - " 55129.42578125,\n", - " 25107.392578125,\n", - " 62042.34375,\n", - " 6707.26025390625,\n", - " 31435.607421875,\n", - " 30657.30078125,\n", - " 66311.53125,\n", - " 34395.94921875,\n", - " 51984.62109375,\n", - " 6350.642578125,\n", - " 58979.109375,\n", - " 8613.646484375,\n", - " 32859.58984375,\n", - " 20918.267578125,\n", - " 31786.40625,\n", - " 68974.796875,\n", - " 49576.50390625,\n", - " 32159.701171875,\n", - " 17937.65234375,\n", - " 35802.98046875,\n", - " 33614.91015625,\n", - " 63605.0078125,\n", - " 4395.53271484375,\n", - " 56507.73828125,\n", - " 41265.7578125,\n", - " 44340.9921875,\n", - " 12429.9150390625,\n", - " -1644.28271484375,\n", - " 32880.10546875,\n", - " 47212.578125,\n", - " 16325.2197265625,\n", - " 55094.984375,\n", - " 96459.9921875,\n", - " 77228.296875,\n", - " 69528.7109375,\n", - " 73909.6796875,\n", - " 19900.49609375,\n", - " 35571.79296875,\n", - " 25699.490234375,\n", - " 54085.47265625,\n", - " 93547.6015625,\n", - " 71761.625,\n", - " 27250.763671875,\n", - " 27660.080078125,\n", - " 42534.74609375,\n", - " 82521.7734375,\n", - " 28321.294921875,\n", - " 19648.130859375,\n", - " 7053.64501953125,\n", - " 30859.658203125,\n", - " 45128.25390625,\n", - " 51327.2109375,\n", - " 8135.8515625,\n", - " 21854.625,\n", - " 59420.953125,\n", - " 31358.6484375,\n", - " 26687.7265625,\n", - " 25586.009765625,\n", - " 27210.068359375,\n", - " 47278.2578125,\n", - " 64068.02734375,\n", - " 62055.109375,\n", - " 12832.828125,\n", - " -792.3766479492188,\n", - " 33257.31640625,\n", - " 39118.5859375,\n", - " 33558.76171875,\n", - " 44861.93359375,\n", - " 11799.6728515625,\n", - " 11151.3671875,\n", - " 40701.59765625,\n", - " 30369.8125,\n", - " 43019.609375,\n", - " 26801.71875,\n", - " 34544.09765625,\n", - " 19197.04296875,\n", - " 46092.71875,\n", - " 36481.62109375,\n", - " 21715.193359375,\n", - " 65425.62109375,\n", - " 7440.63525390625,\n", - " 57932.1484375,\n", - " 33294.61328125,\n", - " 16857.1484375,\n", - " 5678.89599609375,\n", - " 16205.912109375,\n", - " 34193.69921875,\n", - " 41092.54296875,\n", - " 25489.2890625,\n", - " 26718.1796875,\n", - " 30139.697265625,\n", - " 14505.0283203125,\n", - " 14505.4970703125,\n", - " 16871.986328125,\n", - " 90960.25,\n", - " 104724.7578125,\n", - " 15804.052734375,\n", - " 54046.39453125,\n", - " 30848.57421875,\n", - " 12219.8349609375,\n", - " 59259.52734375,\n", - " 52564.08203125,\n", - " 17419.1640625,\n", - " 53525.6484375,\n", - " 40018.10546875,\n", - " 65280.41015625,\n", - " 27089.173828125,\n", - " 33412.703125,\n", - " 68620.59375,\n", - " 39082.1484375,\n", - " 32903.55078125,\n", - " 15652.1513671875,\n", - " 21097.576171875,\n", - " 184385.484375,\n", - " 64926.5625,\n", - " 29691.791015625,\n", - " 9041.169921875,\n", - " 66293.375,\n", - " 21853.90625,\n", - " 55634.92578125,\n", - " 6044.4794921875,\n", - " 28755.689453125,\n", - " 32957.21484375,\n", - " 14718.72265625,\n", - " 92676.1015625,\n", - " 16796.87109375,\n", - " 44432.0625,\n", - " 17247.78125,\n", - " 15747.1083984375,\n", - " 90793.0546875,\n", - " 20033.544921875,\n", - " 20326.5234375,\n", - " 37734.2890625,\n", - " 79883.6875,\n", - " 65422.84375,\n", - " 87401.1015625,\n", - " 30277.958984375,\n", - " 46782.796875,\n", - " 87724.796875,\n", - " 77575.9453125,\n", - " 19460.52734375,\n", - " 15225.3583984375,\n", - " 40542.1484375,\n", - " 24058.708984375,\n", - " 30213.30859375,\n", - " 6311.19580078125,\n", - " 40537.4609375,\n", - " 43755.609375,\n", - " 31033.92578125,\n", - " 41515.2421875,\n", - " 48741.9375,\n", - " 40935.84765625,\n", - " 29709.4609375,\n", - " 26171.783203125,\n", - " 21370.21484375,\n", - " 79704.4140625,\n", - " 41189.90234375,\n", - " 34224.38671875,\n", - " 11110.9140625,\n", - " 27948.83984375,\n", - " 32238.6328125,\n", - " 28379.6875,\n", - " 22969.412109375,\n", - " 29876.63671875,\n", - " 63930.609375,\n", - " 48482.4765625,\n", - " 35916.2421875,\n", - " 51959.78125,\n", - " 35788.31640625,\n", - " 34141.125,\n", - " 38203.734375,\n", - " 17440.0625,\n", - " 50744.5625,\n", - " 33582.359375,\n", - " 30143.400390625,\n", - " 55596.76171875,\n", - " 55357.08984375,\n", - " 48081.2578125,\n", - " 16193.4423828125,\n", - " 15780.8330078125,\n", - " 170830.65625,\n", - " 40235.8515625,\n", - " 43690.75390625,\n", - " 23221.171875,\n", - " 62345.078125,\n", - " 32164.08984375,\n", - " 14920.4912109375,\n", - " 28834.38671875,\n", - " 26095.859375,\n", - " 18654.09765625,\n", - " 27218.37109375,\n", - " 86997.984375,\n", - " 48679.578125,\n", - " 26308.49609375,\n", - " 38530.5859375,\n", - " 29709.251953125,\n", - " 25569.6953125,\n", - " 5451.93408203125,\n", - " 38885.515625,\n", - " 12004.33984375,\n", - " 34470.05859375,\n", - " 35211.96875,\n", - " 68639.3828125,\n", - " 46826.22265625,\n", - " 26013.9921875,\n", - " 41993.12109375,\n", - " 35568.87109375,\n", - " 26139.12109375,\n", - " 49938.30859375,\n", - " 78099.7265625,\n", - " 27188.775390625,\n", - " 55438.8359375,\n", - " 39125.7421875,\n", - " 39791.87890625,\n", - " 21625.421875,\n", - " 24531.126953125,\n", - " 100882.6875,\n", - " 106650.5234375,\n", - " 32891.84375,\n", - " 36127.82421875,\n", - " 20906.50390625,\n", - " 24838.578125,\n", - " 29075.56640625,\n", - " 84486.1796875,\n", - " 23874.271484375,\n", - " -1615.9718017578125,\n", - " 20551.357421875,\n", - " 17624.380859375,\n", - " 31479.3515625,\n", - " 44176.32421875,\n", - " 5805.54296875,\n", - " 69320.9921875,\n", - " 15247.6455078125,\n", - " 35150.09765625,\n", - " 8555.2763671875,\n", - " 65778.1796875,\n", - " 52176.80078125,\n", - " 31399.0078125,\n", - " 46658.87890625,\n", - " 16217.740234375,\n", - " 15291.5927734375,\n", - " 30969.162109375,\n", - " 15988.8408203125,\n", - " 62409.30859375,\n", - " 35693.7421875,\n", - " 43061.1875,\n", - " 20040.859375,\n", - " 40024.05078125,\n", - " 20793.876953125,\n", - " 51141.66796875,\n", - " 10602.333984375,\n", - " 39263.2890625,\n", - " 18259.47265625,\n", - " 25103.853515625,\n", - " 36528.0625,\n", - " 56417.15625,\n", - " 11804.5087890625,\n", - " 28856.37109375,\n", - " 23144.328125,\n", - " 30341.091796875,\n", - " 37098.3046875,\n", - " 14257.025390625,\n", - " 40929.6640625,\n", - " 109668.921875,\n", - " 70030.0078125,\n", - " 55576.515625,\n", - " 44266.19140625,\n", - " 32204.1796875,\n", - " 22289.6171875,\n", - " 34258.8671875,\n", - " 16042.4814453125,\n", - " 27571.638671875,\n", - " -1925.006103515625,\n", - " 16447.798828125,\n", - " 48060.703125,\n", - " 49303.4921875,\n", - " 20046.0625,\n", - " 7492.453125,\n", - " 33167.640625,\n", - " 12819.9794921875,\n", - " 26416.32421875,\n", - " 78804.765625,\n", - " 14535.3544921875,\n", - " 28316.1015625,\n", - " 93331.9375,\n", - " 49323.765625,\n", - " 38599.62890625,\n", - " 25429.947265625,\n", - " 34074.265625,\n", - " 12622.2392578125,\n", - " 23919.63671875,\n", - " 30516.61328125,\n", - " 113232.8828125,\n", - " 38042.65234375,\n", - " 60413.390625,\n", - " 25579.279296875,\n", - " 59026.6640625,\n", - " 33284.65234375,\n", - " 51593.74609375,\n", - " 38262.09765625,\n", - " 19390.224609375,\n", - " 32060.9765625,\n", - " 32309.75390625,\n", - " 23989.150390625,\n", - " 118404.3125,\n", - " -2138.056640625,\n", - " 15963.751953125,\n", - " 13095.869140625,\n", - " 28787.78125,\n", - " 35358.74609375,\n", - " 17285.712890625,\n", - " 23519.638671875,\n", - " 28984.24609375,\n", - " 25171.025390625,\n", - " 21900.1796875,\n", - " 34445.52734375,\n", - " 39479.17578125,\n", - " 48104.9453125,\n", - " 71147.2890625,\n", - " 57147.69140625,\n", - " 22726.609375,\n", - " 22989.3125,\n", - " 37881.54296875,\n", - " 16117.1591796875,\n", - " 141947.78125,\n", - " 129342.65625,\n", - " 30202.384765625,\n", - " 31741.556640625,\n", - " 33857.75,\n", - " 35684.6640625,\n", - " 60435.2734375,\n", - " 43771.1796875,\n", - " 23123.38671875,\n", - " 51865.83984375,\n", - " 114339.5625,\n", - " 40977.16796875,\n", - " 216569.25,\n", - " 25287.96875,\n", - " 46648.62890625,\n", - " 32908.671875,\n", - " 8387.8349609375,\n", - " 32126.7890625,\n", - " 4058.3984375,\n", - " 47850.76953125,\n", - " 35627.37890625,\n", - " 26486.853515625,\n", - " 26651.919921875,\n", - " 28586.48828125,\n", - " 82220.78125,\n", - " 35519.93359375,\n", - " 35802.68359375,\n", - " 52963.28515625,\n", - " 17410.30078125,\n", - " 23100.46484375,\n", - " 28191.5546875,\n", - " 29971.638671875,\n", - " 20996.55859375,\n", - " 30709.34765625,\n", - " 58859.73046875,\n", - " 25114.40234375,\n", - " 16400.109375,\n", - " 40416.078125,\n", - " 58385.1484375,\n", - " 33838.1796875,\n", - " 33503.81640625,\n", - " 13146.28125,\n", - " 4702.56298828125,\n", - " 73674.625,\n", - " 16784.513671875,\n", - " 33823.2265625,\n", - " 44324.5625,\n", - " 46941.4375,\n", - " 88873.78125,\n", - " 77348.2265625,\n", - " -180.17051696777344,\n", - " 27617.625,\n", - " 26255.078125,\n", - " 26986.259765625,\n", - " 35073.8671875,\n", - " 97897.90625,\n", - " 42683.984375,\n", - " 19202.62890625,\n", - " 46626.1015625,\n", - " 23415.150390625,\n", - " 22655.140625,\n", - " 16967.33984375,\n", - " 6546.8583984375,\n", - " 14058.53515625,\n", - " -4117.87939453125,\n", - " 30750.404296875,\n", - " 24895.21875,\n", - " 20532.66796875,\n", - " 49612.1875,\n", - " 60147.1484375,\n", - " 29415.525390625,\n", - " 18578.845703125,\n", - " 13380.79296875,\n", - " 78493.546875,\n", - " 22999.92578125,\n", - " 10913.0751953125,\n", - " 87220.0078125,\n", - " 28506.29296875,\n", - " 78953.765625,\n", - " 43672.265625,\n", - " 61007.32421875,\n", - " 74167.5078125,\n", - " 11352.458984375,\n", - " 70618.7578125,\n", - " 20185.841796875,\n", - " 20840.169921875,\n", - " 36454.875,\n", - " 16154.0654296875,\n", - " 24796.828125,\n", - " 12522.7763671875,\n", - " 26822.65234375,\n", - " 15087.2412109375,\n", - " 28036.4296875,\n", - " 52295.6328125,\n", - " 29483.400390625,\n", - " 46205.5859375,\n", - " 14621.6455078125,\n", - " 27087.044921875,\n", - " 30419.064453125,\n", - " 52170.65625,\n", - " 31486.13671875,\n", - " 67412.6875,\n", - " 101382.140625,\n", - " 51.448081970214844,\n", - " 65053.234375,\n", - " 27044.30859375,\n", - " 13195.9130859375,\n", - " 18033.375,\n", - " 76895.1484375,\n", - " 19054.07421875,\n", - " 54124.46484375,\n", - " 27449.94140625,\n", - " 99720.8046875,\n", - " 21794.552734375,\n", - " 9950.4150390625,\n", - " 53002.4296875,\n", - " 28294.591796875,\n", - " 14437.8671875,\n", - " 19786.79296875,\n", - " 15348.240234375,\n", - " 44483.13671875,\n", - " 22273.8359375,\n", - " 67457.578125,\n", - " 27014.75390625,\n", - " 5024.96923828125,\n", - " 16245.783203125,\n", - " 45269.60546875,\n", - " 30859.48046875,\n", - " 19951.669921875,\n", - " 19866.595703125,\n", - " 42457.046875,\n", - " 26156.08203125,\n", - " 22097.830078125,\n", - " 32577.404296875,\n", - " 35727.49609375,\n", - " 54458.828125,\n", - " 28177.3671875,\n", - " 46284.32421875,\n", - " 22140.984375,\n", - " 37987.83203125,\n", - " 35107.37109375,\n", - " 35473.97265625,\n", - " 31478.515625,\n", - " 31756.41796875,\n", - " 35484.3203125,\n", - " 8368.32421875,\n", - " 18133.4140625,\n", - " -1067.3536376953125,\n", - " 18202.39453125,\n", - " 22996.201171875,\n", - " 24531.708984375,\n", - " 60472.44921875,\n", - " 31804.599609375,\n", - " 69800.828125,\n", - " 15956.6552734375,\n", - " 55742.484375,\n", - " 14359.328125,\n", - " 73210.9296875,\n", - " 45092.5390625,\n", - " 79514.875,\n", - " 55255.17578125,\n", - " 65933.0,\n", - " 35623.3359375,\n", - " 18859.48046875,\n", - " 73039.5703125,\n", - " 22397.576171875,\n", - " 43123.7265625,\n", - " 2240.244140625,\n", - " 35850.01171875,\n", - " 42383.69921875,\n", - " 58188.52734375,\n", - " 51920.17578125,\n", - " 48200.5078125,\n", - " 54956.5859375,\n", - " 70144.9609375,\n", - " -12412.365234375,\n", - " 43914.11328125,\n", - " 64145.0546875,\n", - " 45329.30078125,\n", - " 29660.3671875,\n", - " 56683.46875,\n", - " 59892.53515625,\n", - " 30914.302734375,\n", - " 29999.6640625,\n", - " 31961.77734375,\n", - " 16496.9609375,\n", - " 59234.66796875,\n", - " 29358.318359375,\n", - " 74129.09375,\n", - " 25854.341796875,\n", - " 24977.849609375,\n", - " 26569.033203125,\n", - " 37921.40625,\n", - " 48634.7578125,\n", - " 18478.734375,\n", - " 44440.08203125,\n", - " 15175.998046875,\n", - " 81477.0625,\n", - " 30499.572265625,\n", - " 54474.4453125,\n", - " 60786.12890625,\n", - " 25620.650390625,\n", - " 28568.3515625,\n", - " 43702.58984375,\n", - " 32077.986328125,\n", - " 38313.75390625,\n", - " 24858.109375,\n", - " 20419.76171875,\n", - " 14930.470703125,\n", - " 49058.8671875,\n", - " 46636.1484375,\n", - " 25802.220703125,\n", - " 32968.359375,\n", - " 16787.0546875,\n", - " 18315.005859375,\n", - " 35832.171875,\n", - " 31701.953125,\n", - " 28286.177734375,\n", - " 10132.9580078125,\n", - " 14636.78515625,\n", - " 50847.1484375,\n", - " 31304.619140625,\n", - " 14208.115234375,\n", - " 43597.35546875,\n", - " -1186.7822265625,\n", - " 16032.853515625,\n", - " 76294.140625,\n", - " 11516.294921875,\n", - " 38154.10546875,\n", - " 41681.7578125,\n", - " 21830.169921875,\n", - " 23550.927734375,\n", - " 47343.20703125,\n", - " 22869.04296875,\n", - " 49506.28515625,\n", - " -1273.9400634765625,\n", - " 30104.7109375,\n", - " 71779.765625,\n", - " 70257.0703125,\n", - " 60309.02734375,\n", - " 25477.1796875,\n", - " 30683.009765625,\n", - " 37347.65625,\n", - " 28025.201171875,\n", - " 111971.8125,\n", - " 42543.890625,\n", - " 2347.626953125,\n", - " 19085.01953125,\n", - " 22599.794921875,\n", - " 21442.240234375,\n", - " 63717.5390625,\n", - " 75040.0625,\n", - " 88302.7734375,\n", - " 35296.03125,\n", - " 99674.5234375,\n", - " 34873.6171875,\n", - " 39121.9609375,\n", - " 51422.82421875,\n", - " 52829.015625,\n", - " 40337.33203125,\n", - " 33929.4296875,\n", - " 18959.58984375,\n", - " 17397.818359375,\n", - " 23491.091796875,\n", - " 34246.4140625,\n", - " 7151.00439453125,\n", - " 26024.421875,\n", - " 18173.9453125,\n", - " 55476.59375,\n", - " 5823.2275390625,\n", - " 40064.7890625,\n", - " -3955.75146484375,\n", - " 46873.2890625,\n", - " 25654.216796875,\n", - " 67441.84375,\n", - " 23237.45703125,\n", - " 18739.51171875,\n", - " 33457.21484375,\n", - " 17291.91015625,\n", - " 27670.732421875,\n", - " 38294.9765625,\n", - " 31022.875,\n", - " 41739.64453125,\n", - " 17647.490234375,\n", - " 39281.28515625,\n", - " 40596.91015625,\n", - " 35532.57421875,\n", - " 45908.77734375,\n", - " 10547.34375,\n", - " 15945.9560546875,\n", - " 8058.07666015625,\n", - " 65457.80078125,\n", - " 49192.38671875,\n", - " 37045.9296875,\n", - " 19952.162109375,\n", - " 34107.02734375,\n", - " 31264.64453125,\n", - " 37622.62109375,\n", - " -237.3134307861328,\n", - " 18043.9296875,\n", - " 17427.048828125,\n", - " 62989.09765625,\n", - " 17073.72265625,\n", - " 31935.34375,\n", - " 34647.8515625,\n", - " 44252.69921875,\n", - " 26281.470703125,\n", - " 13103.2685546875,\n", - " 59220.6484375,\n", - " 22398.384765625,\n", - " 31132.98046875,\n", - " 26345.607421875,\n", - " 29174.203125,\n", - " 60770.98828125,\n", - " 28594.919921875,\n", - " 57632.1796875,\n", - " 27013.5859375,\n", - " 38858.6484375,\n", - " 28645.982421875,\n", - " 17633.6796875,\n", - " 12425.0595703125,\n", - " 45828.0703125,\n", - " 12926.9990234375,\n", - " 14812.0556640625,\n", - " 32449.478515625,\n", - " 43268.7734375,\n", - " 13437.48828125,\n", - " 34640.99609375,\n", - " 40002.9765625,\n", - " 23382.333984375,\n", - " 51291.96875,\n", - " 48457.97265625,\n", - " 62093.23828125,\n", - " 88744.734375,\n", - " 30388.1875,\n", - " 141768.359375,\n", - " 21224.306640625,\n", - " 41404.04296875,\n", - " 55055.01953125,\n", - " 3546.418212890625,\n", - " 48122.86328125,\n", - " 16845.935546875,\n", - " 36601.4921875,\n", - " 92081.3828125,\n", - " 17225.287109375,\n", - " 88046.96875,\n", - " 30767.08203125,\n", - " 27482.0859375,\n", - " 55529.671875,\n", - " 25019.341796875,\n", - " 159593.0625,\n", - " 13866.76171875,\n", - " 44408.0390625,\n", - " 25003.345703125,\n", - " 26813.9765625,\n", - " 19479.083984375,\n", - " 44947.0,\n", - " 18196.154296875,\n", - " 33416.17578125,\n", - " 27336.40234375,\n", - " 2930.2978515625,\n", - " 15434.23828125,\n", - " 60965.97265625,\n", - " 50449.61328125,\n", - " 20014.7109375,\n", - " 12086.37890625,\n", - " 70940.9609375,\n", - " 42538.3203125,\n", - " 32822.4765625,\n", - " 93191.0,\n", - " 41498.1796875,\n", - " 39775.10546875,\n", - " 98469.078125,\n", - " 39365.703125,\n", - " 66663.5859375,\n", - " 67308.5703125,\n", - " 69984.0234375,\n", - " 52494.28515625,\n", - " 32276.29296875,\n", - " 22634.32421875,\n", - " 18203.626953125,\n", - " 30372.291015625,\n", - " ...],\n", - " 'household_income_decile': [4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 6,\n", - " 6,\n", - " 2,\n", - " 7,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " -1,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 4,\n", - " -1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 6,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 6,\n", - " 10,\n", - " 3,\n", - " 9,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 9,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 5,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " -1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 5,\n", - " 5,\n", - " 3,\n", - " 8,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 1,\n", - " -1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 9,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 8,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 10,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 7,\n", - " 8,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 10,\n", - " 9,\n", - " 5,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 8,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 7,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 6,\n", - " 5,\n", - " 1,\n", - " 8,\n", - " 7,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 9,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 9,\n", - " 4,\n", - " 7,\n", - " 8,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 10,\n", - " 4,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 5,\n", - " 6,\n", - " 3,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " -1,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 8,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 1,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " -1,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " -1,\n", - " 2,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 9,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 5,\n", - " 10,\n", - " 3,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " -1,\n", - " 8,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 7,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 10,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 10,\n", - " 1,\n", - " 8,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 4,\n", - " 1,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 8,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " ...],\n", - " 'household_market_income': [60994.5625,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 373717.65625,\n", - " 26749.30078125,\n", - " 69821.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 52528.16015625,\n", - " 146368.4375,\n", - " 39185.9609375,\n", - " 67567.671875,\n", - " 10514.4208984375,\n", - " 27047.498046875,\n", - " 51374.58984375,\n", - " 26812.302734375,\n", - " 106063.8203125,\n", - " 94472.2109375,\n", - " 30842.599609375,\n", - " 99296.265625,\n", - " 23713.4375,\n", - " 101794.2578125,\n", - " 0.0,\n", - " 58362.53125,\n", - " 3544.39794921875,\n", - " 22040.716796875,\n", - " 117900.046875,\n", - " 46433.984375,\n", - " 29057.640625,\n", - " 2313.760498046875,\n", - " 8525.25390625,\n", - " 103453.3203125,\n", - " 136669.625,\n", - " 5078.99462890625,\n", - " 105974.7421875,\n", - " 29681.6875,\n", - " 2794.124267578125,\n", - " 2.351956367492676,\n", - " 36287.5859375,\n", - " 56010.59375,\n", - " 24493.87890625,\n", - " 36788.27734375,\n", - " 44295.5703125,\n", - " 52423.15234375,\n", - " 0.0,\n", - " 0.0,\n", - " 963.843505859375,\n", - " 72829.4296875,\n", - " 41371.1015625,\n", - " 0.0,\n", - " 54511.30078125,\n", - " 50426.7421875,\n", - " 11403.8486328125,\n", - " 75162.59375,\n", - " 9752.9755859375,\n", - " 35792.03515625,\n", - " 120037.6171875,\n", - " 32626.22265625,\n", - " 31517.85546875,\n", - " 75488.5859375,\n", - " 4687.91943359375,\n", - " 0.0,\n", - " 54931.125,\n", - " 570.3494262695312,\n", - " 22931.576171875,\n", - " 66097.3359375,\n", - " 65230.10546875,\n", - " 10505.953125,\n", - " 0.0,\n", - " 97300.9140625,\n", - " 14273.4345703125,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 224138.15625,\n", - " 154240.703125,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 453857.15625,\n", - " 4600.4267578125,\n", - " 6467.8798828125,\n", - " 308531.8125,\n", - " 8219.962890625,\n", - " 16871.029296875,\n", - " 9610.6103515625,\n", - " 555938.25,\n", - " 130033.8203125,\n", - " 17524.42578125,\n", - " 1.175978183746338,\n", - " 0.0,\n", - " 85743.28125,\n", - " 55672.796875,\n", - " 37401.25390625,\n", - " 109751.8828125,\n", - " 38001.53125,\n", - " 34339.45703125,\n", - " 97675.34375,\n", - " 11555.5400390625,\n", - " 36049.75390625,\n", - " 0.0,\n", - " 33979.28515625,\n", - " 101109.75,\n", - " 0.0,\n", - " 0.0,\n", - " 50993.75390625,\n", - " 46046.09375,\n", - " 44347.078125,\n", - " 0.0,\n", - " 45025.515625,\n", - " 5869.43310546875,\n", - " 87662.078125,\n", - " 0.0,\n", - " 50608.671875,\n", - " 1984.2515869140625,\n", - " 4802.7216796875,\n", - " 0.0,\n", - " 31455.01953125,\n", - " 253553.9375,\n", - " 571865.1875,\n", - " 0.0,\n", - " 0.0,\n", - " 27327.73828125,\n", - " 218343.734375,\n", - " 54030.6171875,\n", - " 55581.90234375,\n", - " 109028.828125,\n", - " 69128.5546875,\n", - " 0.0,\n", - " 53610.37890625,\n", - " 45810.53515625,\n", - " 252410.265625,\n", - " 126613.40625,\n", - " 477236.21875,\n", - " 26165.421875,\n", - " 101337.4296875,\n", - " 24459.087890625,\n", - " 3034.0234375,\n", - " 587.9890747070312,\n", - " 9638.4580078125,\n", - " 66619.453125,\n", - " 4614.98486328125,\n", - " 19264.216796875,\n", - " 17127.716796875,\n", - " 3527.934326171875,\n", - " 23460.763671875,\n", - " 59636.203125,\n", - " 95814.671875,\n", - " 476.2711486816406,\n", - " 84878.234375,\n", - " 0.0,\n", - " 9425.3408203125,\n", - " 22254.314453125,\n", - " 26168.7109375,\n", - " 0.0,\n", - " 95750.78125,\n", - " 73121.4296875,\n", - " 118737.4140625,\n", - " 60758.8359375,\n", - " 59193.81640625,\n", - " 82704.2109375,\n", - " 0.0,\n", - " 20291.49609375,\n", - " 70062.0546875,\n", - " 82321.3359375,\n", - " 101886.125,\n", - " 73660.4375,\n", - " 0.0,\n", - " 129.35760498046875,\n", - " 0.0,\n", - " 29896.94140625,\n", - " 46046.09765625,\n", - " 0.0,\n", - " 14528.1103515625,\n", - " 295.4645080566406,\n", - " 0.0,\n", - " 12501.775390625,\n", - " 77576.796875,\n", - " 36022.17578125,\n", - " 47971.38671875,\n", - " 44245.06640625,\n", - " 3485.740234375,\n", - " 41464.78515625,\n", - " 0.0,\n", - " 160651.03125,\n", - " 64680.390625,\n", - " 12866.259765625,\n", - " 0.0,\n", - " 49606.8828125,\n", - " 117636.2734375,\n", - " 11823.7373046875,\n", - " 47131.9296875,\n", - " 0.0,\n", - " 0.0,\n", - " 57780.29296875,\n", - " 31121.046875,\n", - " 35920.48828125,\n", - " 12869.9052734375,\n", - " 16989.625,\n", - " 33162.5859375,\n", - " 25892.302734375,\n", - " 44905.4453125,\n", - " 1.4699727296829224,\n", - " 0.0,\n", - " 69195.53125,\n", - " 21254.62890625,\n", - " 52285.1640625,\n", - " 39170.58984375,\n", - " 39142.1796875,\n", - " 85875.765625,\n", - " 8830.6298828125,\n", - " 51844.640625,\n", - " 118567.1875,\n", - " 26357.580078125,\n", - " 9605.4423828125,\n", - " 11769.330078125,\n", - " 1252.416748046875,\n", - " 11304.08984375,\n", - " 187246.09375,\n", - " 57632.65625,\n", - " 23031.533203125,\n", - " 82971.7109375,\n", - " 0.0,\n", - " 36030.23046875,\n", - " 59063.1484375,\n", - " 7327.52001953125,\n", - " 3962.245361328125,\n", - " 23944.212890625,\n", - " 107468.8359375,\n", - " 104952.9375,\n", - " 39492.1484375,\n", - " 21654.88671875,\n", - " 0.0,\n", - " 45807.66015625,\n", - " 43652.3046875,\n", - " 0.0,\n", - " 29917.26171875,\n", - " 7178.89990234375,\n", - " 47112.625,\n", - " 43661.61328125,\n", - " 74368.859375,\n", - " 34519.5625,\n", - " 49047.79296875,\n", - " 9412.529296875,\n", - " 14896.076171875,\n", - " 79558.5390625,\n", - " 9555.73046875,\n", - " 13807.82421875,\n", - " 13687.755859375,\n", - " 43038.765625,\n", - " 30546.033203125,\n", - " 29833.322265625,\n", - " 87424.234375,\n", - " 7775.99755859375,\n", - " 50312.9765625,\n", - " 23000.224609375,\n", - " 20051.365234375,\n", - " 14408.1640625,\n", - " 28311.673828125,\n", - " 21404.37890625,\n", - " 44633.73046875,\n", - " 19255.939453125,\n", - " 15003.796875,\n", - " 49557.46484375,\n", - " 21380.833984375,\n", - " 352.7934265136719,\n", - " 130404.21875,\n", - " 29959.326171875,\n", - " 284020.9375,\n", - " 31998.1328125,\n", - " 176079.765625,\n", - " 52914.703125,\n", - " 0.0,\n", - " 6622.10888671875,\n", - " 41470.85546875,\n", - " 17950.171875,\n", - " 4233.521484375,\n", - " 82186.5703125,\n", - " 8802.1962890625,\n", - " 69459.359375,\n", - " 0.0,\n", - " 62675.515625,\n", - " 84865.71875,\n", - " 54690.9921875,\n", - " 126683.9140625,\n", - " 20448.19921875,\n", - " 25934.693359375,\n", - " 30077.04296875,\n", - " 2419.69287109375,\n", - " 25574.4921875,\n", - " 59553.77734375,\n", - " 145393.25,\n", - " 12712.216796875,\n", - " 7100.74462890625,\n", - " 141503.09375,\n", - " 55718.109375,\n", - " 28213.67578125,\n", - " 55651.53515625,\n", - " 0.0,\n", - " 8992.19921875,\n", - " 50608.6796875,\n", - " 67898.46875,\n", - " 29060.62109375,\n", - " 98090.1796875,\n", - " 5523.1298828125,\n", - " 79967.671875,\n", - " 16209.185546875,\n", - " 46526.36328125,\n", - " 21432.14453125,\n", - " 149433.8125,\n", - " 80925.8515625,\n", - " 82211.4296875,\n", - " 12401.1142578125,\n", - " 6519.623046875,\n", - " 45940.375,\n", - " 59630.1875,\n", - " 82844.484375,\n", - " 260.220458984375,\n", - " 66813.296875,\n", - " 34485.55859375,\n", - " 119627.3515625,\n", - " 0.0,\n", - " 0.0,\n", - " 6074.3974609375,\n", - " 64946.92578125,\n", - " 919.7828979492188,\n", - " 72825.609375,\n", - " 160773.859375,\n", - " 160902.203125,\n", - " 119425.8125,\n", - " 63987.109375,\n", - " 17746.685546875,\n", - " 29956.974609375,\n", - " 15085.447265625,\n", - " 69099.15625,\n", - " 134289.203125,\n", - " 151239.796875,\n", - " 11949.6474609375,\n", - " 11742.142578125,\n", - " 46587.86328125,\n", - " 114064.640625,\n", - " 47426.875,\n", - " 13275.3818359375,\n", - " 9666.541015625,\n", - " 13758.9443359375,\n", - " 40943.19921875,\n", - " 86330.390625,\n", - " 11732.986328125,\n", - " 6088.97998046875,\n", - " 51389.12109375,\n", - " 0.0,\n", - " 4291.802734375,\n", - " 19286.04296875,\n", - " 22272.62109375,\n", - " 40402.89453125,\n", - " 63938.2265625,\n", - " 80745.75,\n", - " 0.0,\n", - " 1675.397216796875,\n", - " 25453.884765625,\n", - " 0.0,\n", - " 44245.0703125,\n", - " 54090.6484375,\n", - " 12420.0927734375,\n", - " 0.0,\n", - " 25606.267578125,\n", - " 11465.7880859375,\n", - " 50353.25,\n", - " 22559.107421875,\n", - " 49336.98828125,\n", - " 0.0,\n", - " 55711.5703125,\n", - " 23672.44140625,\n", - " 18070.23828125,\n", - " 87611.6796875,\n", - " 1228.0152587890625,\n", - " 113666.375,\n", - " 18304.099609375,\n", - " 1513.20166015625,\n", - " 5879.890625,\n", - " 0.0,\n", - " 18115.943359375,\n", - " 33619.05078125,\n", - " 6749.00927734375,\n", - " 0.0,\n", - " 38691.75390625,\n", - " 0.0,\n", - " 10867.568359375,\n", - " 2549.520751953125,\n", - " 122945.21875,\n", - " 277619.96875,\n", - " 0.0,\n", - " 47543.1484375,\n", - " 59433.91015625,\n", - " 24331.318359375,\n", - " 99664.078125,\n", - " 103771.9765625,\n", - " 2981.104736328125,\n", - " 96061.28125,\n", - " 47667.01171875,\n", - " 164195.96875,\n", - " 0.0,\n", - " 35244.37890625,\n", - " 198399.859375,\n", - " 57332.48828125,\n", - " 40401.76171875,\n", - " 8256.2646484375,\n", - " 13567.6884765625,\n", - " 261062.84375,\n", - " 151547.078125,\n", - " 0.0,\n", - " 8712.2822265625,\n", - " 86416.2109375,\n", - " 18242.28125,\n", - " 48027.21484375,\n", - " 14111.884765625,\n", - " 26268.91015625,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 183610.96875,\n", - " 11406.4638671875,\n", - " 37213.828125,\n", - " 6761.8740234375,\n", - " 13120.9755859375,\n", - " 89477.6171875,\n", - " 4139.02294921875,\n", - " 211.6760711669922,\n", - " 47086.30078125,\n", - " 76914.8515625,\n", - " 83927.5625,\n", - " 226208.1875,\n", - " 6620.7568359375,\n", - " 56576.78125,\n", - " 115454.7734375,\n", - " 101937.765625,\n", - " 24569.337890625,\n", - " 0.0,\n", - " 24709.5,\n", - " 13387.5849609375,\n", - " 30502.521484375,\n", - " 9005.1025390625,\n", - " 69039.125,\n", - " 125768.21875,\n", - " 55151.46484375,\n", - " 68600.46875,\n", - " 30870.015625,\n", - " 84768.0390625,\n", - " 44309.65234375,\n", - " 20872.7109375,\n", - " 17353.359375,\n", - " 194500.5625,\n", - " 74538.359375,\n", - " 0.0,\n", - " 0.0,\n", - " 22512.7578125,\n", - " 35279.34375,\n", - " 16884.9765625,\n", - " 0.0,\n", - " 21011.908203125,\n", - " 104639.2890625,\n", - " 55233.6484375,\n", - " 46595.91015625,\n", - " 70399.90625,\n", - " 0.0,\n", - " 54330.7890625,\n", - " 25153.32421875,\n", - " 11586.5654296875,\n", - " 45676.19921875,\n", - " 38541.84375,\n", - " 21761.5234375,\n", - " 49468.03125,\n", - " 106462.9375,\n", - " 73866.296875,\n", - " 4562.58544921875,\n", - " 29458.296875,\n", - " 275635.0625,\n", - " 33536.78515625,\n", - " 0.587989091873169,\n", - " 33574.3515625,\n", - " 80985.890625,\n", - " 46046.09375,\n", - " 0.0,\n", - " 43584.69921875,\n", - " 18896.833984375,\n", - " 0.0,\n", - " 10426.45703125,\n", - " 82469.9609375,\n", - " 61013.00390625,\n", - " 23017.625,\n", - " 30797.451171875,\n", - " 24016.546875,\n", - " 45025.515625,\n", - " 0.0,\n", - " 21530.9140625,\n", - " 15301.265625,\n", - " 5100.87548828125,\n", - " 0.0,\n", - " 104229.578125,\n", - " 22076.048828125,\n", - " 0.0,\n", - " 34421.3515625,\n", - " 15745.6123046875,\n", - " 21432.14453125,\n", - " 64730.1640625,\n", - " 102832.5078125,\n", - " 9324.1904296875,\n", - " 68787.6953125,\n", - " 24914.861328125,\n", - " 37501.73046875,\n", - " 4167.05517578125,\n", - " 18151.734375,\n", - " 138226.5625,\n", - " 216556.59375,\n", - " 18614.51171875,\n", - " 194050.703125,\n", - " 8813.044921875,\n", - " 7721.87109375,\n", - " 21131.974609375,\n", - " 79169.7578125,\n", - " 3.5279343128204346,\n", - " 199.45205688476562,\n", - " 7532.14013671875,\n", - " 96.2391128540039,\n", - " 44.099178314208984,\n", - " 15553.7802734375,\n", - " 0.0,\n", - " 135831.609375,\n", - " 28759.236328125,\n", - " 31765.34765625,\n", - " 0.0,\n", - " 66152.2109375,\n", - " 18455.517578125,\n", - " 35611.265625,\n", - " 121700.1484375,\n", - " 26953.20703125,\n", - " 11612.02734375,\n", - " 16773.37890625,\n", - " 1.175978183746338,\n", - " 113108.296875,\n", - " 60520.40625,\n", - " 77016.5234375,\n", - " 22932.99609375,\n", - " 34519.5625,\n", - " 0.0,\n", - " 85534.125,\n", - " 31474.224609375,\n", - " 110279.203125,\n", - " 3045.666015625,\n", - " 0.0,\n", - " 62675.515625,\n", - " 59198.7421875,\n", - " 0.0,\n", - " 24702.31640625,\n", - " 0.0,\n", - " 52255.16796875,\n", - " 34171.90234375,\n", - " 0.0,\n", - " 75350.0546875,\n", - " 194419.171875,\n", - " 91966.0234375,\n", - " 74870.9453125,\n", - " 72677.9140625,\n", - " 0.0,\n", - " 29956.9765625,\n", - " 76977.7265625,\n", - " 0.0,\n", - " 14792.634765625,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 68847.640625,\n", - " 20471.599609375,\n", - " 0.0,\n", - " 76371.2109375,\n", - " 0.0,\n", - " 22286.556640625,\n", - " 81114.0859375,\n", - " 0.0,\n", - " 34156.35546875,\n", - " 128472.796875,\n", - " 46161.796875,\n", - " 20939.341796875,\n", - " 17831.57421875,\n", - " 24190.48046875,\n", - " 0.0,\n", - " 38499.4453125,\n", - " 45926.0234375,\n", - " 275500.59375,\n", - " 16746.31640625,\n", - " 79721.4609375,\n", - " 38001.53515625,\n", - " 139552.484375,\n", - " 45364.49609375,\n", - " 111315.9140625,\n", - " 84768.03125,\n", - " 20231.46484375,\n", - " 1717.883544921875,\n", - " 10470.392578125,\n", - " 36287.5859375,\n", - " 92061.8671875,\n", - " 0.0,\n", - " 282.2347717285156,\n", - " 3118.270751953125,\n", - " 30320.123046875,\n", - " 78028.71875,\n", - " 16757.689453125,\n", - " 6359.2548828125,\n", - " 10717.865234375,\n", - " 16799.8046875,\n", - " 6661.611328125,\n", - " 31577.89453125,\n", - " 63395.921875,\n", - " 35766.83203125,\n", - " 76936.0625,\n", - " 49528.06640625,\n", - " 3887.50146484375,\n", - " 17230.431640625,\n", - " 0.0,\n", - " 6061.1611328125,\n", - " 211180.46875,\n", - " 339856.4375,\n", - " 4654.38671875,\n", - " 15659.99609375,\n", - " 18362.900390625,\n", - " 58976.92578125,\n", - " 78284.359375,\n", - " 81131.859375,\n", - " 11847.98046875,\n", - " 127929.25,\n", - " 134957.015625,\n", - " 58298.91015625,\n", - " 389736.71875,\n", - " 16369.6162109375,\n", - " 111303.0625,\n", - " 11.759781837463379,\n", - " 0.0,\n", - " 25831.376953125,\n", - " 0.0,\n", - " 93817.046875,\n", - " 63155.7890625,\n", - " 3361.905029296875,\n", - " 28756.294921875,\n", - " 524.3922119140625,\n", - " 172633.078125,\n", - " 29082.16015625,\n", - " 20873.68359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 10223.53125,\n", - " 52358.484375,\n", - " 23653.40234375,\n", - " 48987.75390625,\n", - " 75282.65625,\n", - " 20471.599609375,\n", - " 1208.0302734375,\n", - " 49227.8984375,\n", - " 81766.3359375,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 5293.07763671875,\n", - " 96112.90625,\n", - " 26360.814453125,\n", - " 702.6351928710938,\n", - " 51273.29296875,\n", - " 65672.9296875,\n", - " 184742.96875,\n", - " 151644.5625,\n", - " 0.0,\n", - " 8692.8310546875,\n", - " 20865.361328125,\n", - " 32238.267578125,\n", - " 22103.591796875,\n", - " 164257.6875,\n", - " 55234.2421875,\n", - " 27255.443359375,\n", - " 41303.40625,\n", - " 42992.33984375,\n", - " 30461.501953125,\n", - " 0.0,\n", - " 0.0,\n", - " 15902.7529296875,\n", - " 0.0,\n", - " 4367.41845703125,\n", - " 29552.908203125,\n", - " 0.0,\n", - " 85188.5,\n", - " 88555.1171875,\n", - " 23053.064453125,\n", - " 7324.150390625,\n", - " 5785.8125,\n", - " 175363.5,\n", - " 7112.31591796875,\n", - " 36.74931716918945,\n", - " 94591.9453125,\n", - " 21590.171875,\n", - " 158468.515625,\n", - " 52889.96875,\n", - " 105823.0,\n", - " 121568.875,\n", - " 8568.2939453125,\n", - " 99286.890625,\n", - " 10639.4033203125,\n", - " 1550.233154296875,\n", - " 31404.59765625,\n", - " 7924.49072265625,\n", - " 3799.679443359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26773.412109375,\n", - " 63708.0078125,\n", - " 40452.015625,\n", - " 55398.31640625,\n", - " 11430.58984375,\n", - " 3.5279343128204346,\n", - " 15106.6162109375,\n", - " 45207.96484375,\n", - " 42071.8515625,\n", - " 72040.8203125,\n", - " 198352.390625,\n", - " 0.0,\n", - " 85596.34375,\n", - " 0.0,\n", - " 7905.9130859375,\n", - " 12171.375,\n", - " 74626.140625,\n", - " 10400.0,\n", - " 96082.7890625,\n", - " 2822.347412109375,\n", - " 229699.921875,\n", - " 28756.296875,\n", - " 0.0,\n", - " 89180.40625,\n", - " 0.0,\n", - " 46.33353805541992,\n", - " 0.0,\n", - " 1411.1737060546875,\n", - " 16405.482421875,\n", - " 8363.9208984375,\n", - " 59853.91015625,\n", - " 3704.3310546875,\n", - " 0.0,\n", - " 40540.01953125,\n", - " 81018.671875,\n", - " 0.0,\n", - " 889.0394897460938,\n", - " 5163.908203125,\n", - " 35960.37890625,\n", - " 37652.109375,\n", - " 9005.1025390625,\n", - " 0.0,\n", - " 27373.904296875,\n", - " 54747.375,\n", - " 24193.708984375,\n", - " 40347.26953125,\n", - " 5510.6337890625,\n", - " 49374.3828125,\n", - " 68258.6796875,\n", - " 0.0,\n", - " 25336.70703125,\n", - " 0.0,\n", - " 38608.92578125,\n", - " 0.0,\n", - " 22377.34375,\n", - " 0.17639672756195068,\n", - " 29056.4609375,\n", - " 0.0,\n", - " 33559.015625,\n", - " 54274.86328125,\n", - " 13495.818359375,\n", - " 59868.609375,\n", - " 4.703912734985352,\n", - " 69999.671875,\n", - " 13299.68359375,\n", - " 121747.3203125,\n", - " 60792.81640625,\n", - " 167597.21875,\n", - " 74192.4609375,\n", - " 79429.9765625,\n", - " 32080.68359375,\n", - " 6688.9638671875,\n", - " 79343.2421875,\n", - " 10592.1298828125,\n", - " 71920.7578125,\n", - " 3634.638427734375,\n", - " 42609.328125,\n", - " 36156.0,\n", - " 129600.9609375,\n", - " 94613.609375,\n", - " 46047.5625,\n", - " 87108.4765625,\n", - " 92759.375,\n", - " 11759.78125,\n", - " 60.26887893676758,\n", - " 91431.796875,\n", - " 111691.0,\n", - " 31176.591796875,\n", - " 54481.3046875,\n", - " 95754.265625,\n", - " 35360.0390625,\n", - " 0.0,\n", - " 12601.7822265625,\n", - " 0.0,\n", - " 132118.9375,\n", - " 16118.2509765625,\n", - " 114389.46875,\n", - " 28980.923828125,\n", - " 4071.1943359375,\n", - " 44004.9375,\n", - " 46082.83984375,\n", - " 40282.828125,\n", - " 17049.689453125,\n", - " 39311.5078125,\n", - " 1411.173828125,\n", - " 149867.15625,\n", - " 52829.96875,\n", - " 80565.6484375,\n", - " 89840.9375,\n", - " 20711.736328125,\n", - " 54622.109375,\n", - " 73607.5859375,\n", - " 24191.724609375,\n", - " 32199.283203125,\n", - " 44545.32421875,\n", - " 6519.4482421875,\n", - " 11.759781837463379,\n", - " 48219.29296875,\n", - " 28861.185546875,\n", - " 11289.3896484375,\n", - " 28659.947265625,\n", - " 26234.8671875,\n", - " 0.0,\n", - " 15620.751953125,\n", - " 8904.505859375,\n", - " 72640.65625,\n", - " 14452.732421875,\n", - " 9965.646484375,\n", - " 69506.7265625,\n", - " 2106.600341796875,\n", - " 7361.67041015625,\n", - " 56727.46484375,\n", - " 852.5841674804688,\n", - " 23173.130859375,\n", - " 127906.2265625,\n", - " 4910.884765625,\n", - " 73601.859375,\n", - " 30867.955078125,\n", - " 6534.72265625,\n", - " 44785.37890625,\n", - " 40282.828125,\n", - " 33708.484375,\n", - " 85202.9765625,\n", - " 0.0,\n", - " 21809.46875,\n", - " 79411.453125,\n", - " 58822.64453125,\n", - " 97591.984375,\n", - " 45914.3984375,\n", - " 24587.02734375,\n", - " 75561.3515625,\n", - " 23088.341796875,\n", - " 163292.53125,\n", - " 26411.544921875,\n", - " 11430.58984375,\n", - " 28936.396484375,\n", - " 26360.724609375,\n", - " 16689.892578125,\n", - " 87514.5703125,\n", - " 103198.484375,\n", - " 118022.1796875,\n", - " 66527.2421875,\n", - " 220431.921875,\n", - " 17727.787109375,\n", - " 36020.41015625,\n", - " 67658.34375,\n", - " 137087.0625,\n", - " 91912.640625,\n", - " 22897.001953125,\n", - " 4120.62744140625,\n", - " 0.0,\n", - " 37413.74609375,\n", - " 19732.537109375,\n", - " 9126.69921875,\n", - " 9947.646484375,\n", - " 9082.6904296875,\n", - " 70465.1171875,\n", - " 0.0,\n", - " 45659.6640625,\n", - " 0.0,\n", - " 103345.21875,\n", - " 44941.2265625,\n", - " 58052.89453125,\n", - " 29476.703125,\n", - " 6836.2548828125,\n", - " 27615.6484375,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 36469.0234375,\n", - " 15.287715911865234,\n", - " 81343.6328125,\n", - " 1058.38037109375,\n", - " 61534.87109375,\n", - " 0.0,\n", - " 41300.9375,\n", - " 79660.3125,\n", - " 10668.3310546875,\n", - " 1448.8050537109375,\n", - " 0.0,\n", - " 61955.109375,\n", - " 100918.796875,\n", - " 61909.7734375,\n", - " 0.0,\n", - " 20934.009765625,\n", - " 10.5838041305542,\n", - " 0.0,\n", - " 0.0,\n", - " 1975.643310546875,\n", - " 102.8980941772461,\n", - " 219007.734375,\n", - " 0.0,\n", - " 11968.517578125,\n", - " 36161.328125,\n", - " 33311.63671875,\n", - " 11722.150390625,\n", - " 29.39945411682129,\n", - " 105538.1640625,\n", - " 0.0,\n", - " 34882.16015625,\n", - " 470.3912658691406,\n", - " 5221.3427734375,\n", - " 52229.58984375,\n", - " 17255.892578125,\n", - " 123361.53125,\n", - " 0.0,\n", - " 34065.1484375,\n", - " 26751.15234375,\n", - " 0.0,\n", - " 7.055868625640869,\n", - " 50404.0,\n", - " 1315.33154296875,\n", - " 0.0,\n", - " 36686.3984375,\n", - " 53283.984375,\n", - " 9096.005859375,\n", - " 25768.033203125,\n", - " 36746.44921875,\n", - " 24507.34375,\n", - " 78644.5625,\n", - " 76884.90625,\n", - " 175729.328125,\n", - " 132550.046875,\n", - " 24142.83203125,\n", - " 270213.15625,\n", - " 29634.650390625,\n", - " 69159.1875,\n", - " 70420.84375,\n", - " 4953.22021484375,\n", - " 52482.234375,\n", - " 17.639673233032227,\n", - " 50008.3359375,\n", - " 214713.53125,\n", - " 5688.20654296875,\n", - " 118137.0703125,\n", - " 24193.70703125,\n", - " 9805.2587890625,\n", - " 70479.9375,\n", - " 973.7098999023438,\n", - " 258618.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 13421.9677734375,\n", - " 28388.154296875,\n", - " 13858.9033203125,\n", - " 98515.828125,\n", - " 4115.92333984375,\n", - " 57036.7265625,\n", - " 59433.671875,\n", - " 0.0,\n", - " 0.0,\n", - " 38844.171875,\n", - " 0.0,\n", - " 5392.80078125,\n", - " 10445.91796875,\n", - " 76379.1328125,\n", - " 74255.6328125,\n", - " 4198.2421875,\n", - " 129793.546875,\n", - " 71836.140625,\n", - " 55531.46875,\n", - " 211076.53125,\n", - " 24133.67578125,\n", - " 58300.13671875,\n", - " 89458.578125,\n", - " 110255.265625,\n", - " 64992.375,\n", - " 27437.017578125,\n", - " 18165.552734375,\n", - " 24202.3203125,\n", - " 51809.359375,\n", - " ...],\n", - " 'wealth': [507750.28125,\n", - " 1067.5635986328125,\n", - " 747250.75,\n", - " 1397688.625,\n", - " 606589.6875,\n", - " 247674.78125,\n", - " 58716.0,\n", - " 275997.375,\n", - " 0.0,\n", - " 324425.78125,\n", - " 2097985.75,\n", - " 334147.40625,\n", - " 230.59375,\n", - " 60364.26171875,\n", - " 1733829.25,\n", - " 1433314.625,\n", - " 1207726.0,\n", - " 3006496.0,\n", - " 564050.1875,\n", - " 905116.5,\n", - " 572141.625,\n", - " 112307.6953125,\n", - " 292512.4375,\n", - " 0.0,\n", - " 22418.8359375,\n", - " 298917.8125,\n", - " 0.0,\n", - " 6658247.5,\n", - " 2887480.0,\n", - " 825638.0625,\n", - " 25625604.0,\n", - " 444819.71875,\n", - " 1781341.625,\n", - " 2387968.0,\n", - " 21218.111328125,\n", - " 1297775.5,\n", - " 330944.71875,\n", - " 70.31910705566406,\n", - " 0.0,\n", - " 117432.0,\n", - " 5363003.0,\n", - " 213.51272583007812,\n", - " 411652.53125,\n", - " 785838.625,\n", - " 1371507.75,\n", - " 0.0,\n", - " 6405.3818359375,\n", - " 85405.09375,\n", - " 1390957.25,\n", - " 1788789.0,\n", - " 0.0,\n", - " 0.0,\n", - " 638290.625,\n", - " 553132.125,\n", - " 7579.7021484375,\n", - " 322373.625,\n", - " 0.0,\n", - " 0.0,\n", - " 1083783.875,\n", - " 3202.69091796875,\n", - " 2539473.75,\n", - " 107389.546875,\n", - " 152375.5,\n", - " 2249420.5,\n", - " 0.0,\n", - " 2242828.25,\n", - " 96454.375,\n", - " 168087.890625,\n", - " 0.0,\n", - " 0.0,\n", - " 753114.9375,\n", - " 1419960.75,\n", - " 0.0,\n", - " 354757.46875,\n", - " 5291913.0,\n", - " 31816.814453125,\n", - " 0.0,\n", - " 983985.3125,\n", - " 382591.3125,\n", - " 10675.63671875,\n", - " 237830.078125,\n", - " 1741196.375,\n", - " 1423958.0,\n", - " 13851.638671875,\n", - " 411624.375,\n", - " 992834.25,\n", - " 128107.640625,\n", - " 762538.125,\n", - " 49641.7109375,\n", - " 0.0,\n", - " 498539.90625,\n", - " 422755.1875,\n", - " 96454.375,\n", - " 345356.84375,\n", - " 286950.4375,\n", - " 0.0,\n", - " 1366481.5,\n", - " 111953.125,\n", - " 8540.5087890625,\n", - " 0.0,\n", - " 258350.40625,\n", - " 871828.625,\n", - " 0.0,\n", - " 338951.4375,\n", - " 228458.609375,\n", - " 162381.765625,\n", - " 2019988.5,\n", - " 266890.90625,\n", - " 0.0,\n", - " 279820.0625,\n", - " 945605.625,\n", - " 229526.1875,\n", - " 725409.5,\n", - " 45388.53515625,\n", - " 0.0,\n", - " 0.0,\n", - " 180867.484375,\n", - " 2057195.125,\n", - " 1395626.0,\n", - " 92878.0390625,\n", - " 7472.94580078125,\n", - " 97361.8046875,\n", - " 755348.25,\n", - " 80761.1875,\n", - " 2932274.25,\n", - " 645876.0,\n", - " 352584.25,\n", - " 17115.9921875,\n", - " 16753.146484375,\n", - " 1481337.0,\n", - " 6950412.0,\n", - " 6021059.0,\n", - " 1983533.25,\n", - " 2135.127197265625,\n", - " 64053.8203125,\n", - " 769498.9375,\n", - " 106756.3671875,\n", - " 557396.25,\n", - " 419209.8125,\n", - " 0.0,\n", - " 67084.984375,\n", - " 125476.3359375,\n", - " 97066.4375,\n", - " 50994.31640625,\n", - " 1270369.375,\n", - " 1088321.125,\n", - " 1403919.75,\n", - " 40033.63671875,\n", - " 926879.75,\n", - " 0.0,\n", - " 0.0,\n", - " 346958.1875,\n", - " 1106711.5,\n", - " 92878.0390625,\n", - " 543689.5,\n", - " 37229.1171875,\n", - " 918515.75,\n", - " 1251718.375,\n", - " 253124.671875,\n", - " 302358.5625,\n", - " 0.0,\n", - " 1067.5635986328125,\n", - " 483708.21875,\n", - " 559252.125,\n", - " 178895.90625,\n", - " 383680.25,\n", - " 0.0,\n", - " 106756.3671875,\n", - " 0.0,\n", - " 271921.34375,\n", - " 1138396.75,\n", - " 9873.1220703125,\n", - " 106756.3671875,\n", - " 433666.875,\n", - " 0.0,\n", - " 87633.1171875,\n", - " 4110.1201171875,\n", - " 0.0,\n", - " 117773.6171875,\n", - " 365106.75,\n", - " 978395.375,\n", - " 0.0,\n", - " 0.0,\n", - " 619186.9375,\n", - " 572346.5,\n", - " 0.0,\n", - " 243404.515625,\n", - " 3218704.25,\n", - " 334147.4375,\n", - " 1803390.125,\n", - " 403054.0,\n", - " 0.0,\n", - " 0.0,\n", - " 416349.8125,\n", - " 0.0,\n", - " 5959862.5,\n", - " 404143.0625,\n", - " 0.0,\n", - " 689945.75,\n", - " 112799.6015625,\n", - " 162269.671875,\n", - " 192161.453125,\n", - " 0.0,\n", - " 32743.0859375,\n", - " 668700.5,\n", - " 1691490.375,\n", - " 0.0,\n", - " 0.0,\n", - " 2320883.5,\n", - " 286537.8125,\n", - " 420620.0625,\n", - " 405674.1875,\n", - " 467592.875,\n", - " 969646.0,\n", - " 605193.25,\n", - " 388289.09375,\n", - " 837757.125,\n", - " 722184.375,\n", - " 161666.5,\n", - " 1531876.375,\n", - " 115296.875,\n", - " 234864.0,\n", - " 4341282.0,\n", - " 6050610.0,\n", - " 216974.28125,\n", - " 0.0,\n", - " 96080.7265625,\n", - " 11203013.0,\n", - " 255399.65625,\n", - " 241596.03125,\n", - " 982369.5625,\n", - " 12168.7138671875,\n", - " 197499.28125,\n", - " 672193.25,\n", - " 0.0,\n", - " 1034562.875,\n", - " 361839.71875,\n", - " 1364177.625,\n", - " 1284279.125,\n", - " 5550926.0,\n", - " 0.0,\n", - " 0.0,\n", - " 65313.2578125,\n", - " 907429.125,\n", - " 597944.6875,\n", - " 106756.3671875,\n", - " 1085510.625,\n", - " 393783.9375,\n", - " 125476.3359375,\n", - " 1153726.375,\n", - " 200889.859375,\n", - " 213561.9375,\n", - " 81683.5078125,\n", - " 361300.15625,\n", - " 215412.203125,\n", - " 0.0,\n", - " 0.0,\n", - " 655246.25,\n", - " 249901.03125,\n", - " 0.0,\n", - " 80067.2734375,\n", - " 960807.25,\n", - " 483708.21875,\n", - " 864687.875,\n", - " 154796.734375,\n", - " 3548105.25,\n", - " 0.0,\n", - " 380891.75,\n", - " 0.0,\n", - " 2393477.75,\n", - " 687511.0,\n", - " 0.0,\n", - " 224623.4375,\n", - " 702848.75,\n", - " 731000.8125,\n", - " 47506.0859375,\n", - " 0.0,\n", - " 573081.4375,\n", - " 365687.46875,\n", - " 360302.75,\n", - " 101418.546875,\n", - " 2361350.0,\n", - " 1878.9119873046875,\n", - " 341252.0625,\n", - " 2650760.5,\n", - " 187500.5625,\n", - " 699934.25,\n", - " 223757.5625,\n", - " 0.0,\n", - " 33073.12109375,\n", - " 828322.625,\n", - " 138783.28125,\n", - " 0.0,\n", - " 782524.125,\n", - " 1442407.875,\n", - " 120407.3359375,\n", - " 10675.63671875,\n", - " 44783.2265625,\n", - " 114171.140625,\n", - " 112799.6015625,\n", - " 461350.9375,\n", - " 140651.5,\n", - " 778260.3125,\n", - " 0.0,\n", - " 512067.65625,\n", - " 628933.1875,\n", - " 354720.28125,\n", - " 823005.8125,\n", - " 11096257.0,\n", - " 2171884.0,\n", - " 117965.78125,\n", - " 777746.8125,\n", - " 743576.6875,\n", - " 238600.484375,\n", - " 639470.625,\n", - " 619186.9375,\n", - " 0.0,\n", - " 1360039.625,\n", - " 1605535.5,\n", - " 1328583.0,\n", - " 69690.734375,\n", - " 0.0,\n", - " 234158.71875,\n", - " 360302.71875,\n", - " 176447.09375,\n", - " 672560.375,\n", - " 811233.25,\n", - " 912455.625,\n", - " 0.0,\n", - " 1608489.875,\n", - " 1895736.0,\n", - " 0.0,\n", - " 870300.625,\n", - " 57602.81640625,\n", - " 0.0,\n", - " 146790.0,\n", - " 0.0,\n", - " 540319.75,\n", - " 0.0,\n", - " 267851.71875,\n", - " 316212.34375,\n", - " 870857.3125,\n", - " 791450.0,\n", - " 0.0,\n", - " 211377.609375,\n", - " 2572220.5,\n", - " 591978.8125,\n", - " 0.0,\n", - " 200701.96875,\n", - " 0.0,\n", - " 374601.5,\n", - " 1433826.0,\n", - " 65540.9375,\n", - " 0.0,\n", - " 1210119.75,\n", - " 279536.40625,\n", - " 0.0,\n", - " 104044.796875,\n", - " 1380494.0,\n", - " 12276.982421875,\n", - " 0.0,\n", - " 1068.6312255859375,\n", - " 91362.4140625,\n", - " 420299.8125,\n", - " 351735.53125,\n", - " 426335.4375,\n", - " 109745.546875,\n", - " 238358.4375,\n", - " 2651943.75,\n", - " 138783.28125,\n", - " 19237.49609375,\n", - " 626846.3125,\n", - " 0.0,\n", - " 784982.75,\n", - " 865351.3125,\n", - " 255334.453125,\n", - " 484022.0,\n", - " 123612.0625,\n", - " 206039.78125,\n", - " 8540.5087890625,\n", - " 894286.75,\n", - " 0.0,\n", - " 602958.875,\n", - " 254782.859375,\n", - " 1857510.5,\n", - " 253784.890625,\n", - " 0.0,\n", - " 416300.90625,\n", - " 618466.9375,\n", - " 2282319.5,\n", - " 0.0,\n", - " 189617.453125,\n", - " 1525494.25,\n", - " 1182061.125,\n", - " 1067.5635986328125,\n", - " 510922.1875,\n", - " 301203.375,\n", - " 562606.0625,\n", - " 0.0,\n", - " 815618.625,\n", - " 160134.546875,\n", - " 0.0,\n", - " 1772445.25,\n", - " 221536.53125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 4323633.0,\n", - " 1726028.375,\n", - " 224465.9375,\n", - " 113171.03125,\n", - " 639104.0,\n", - " 373647.28125,\n", - " 0.0,\n", - " 1271569.5,\n", - " 528530.625,\n", - " 0.0,\n", - " 104044.796875,\n", - " 675384.4375,\n", - " 166539.921875,\n", - " 1254758.5,\n", - " 411864.84375,\n", - " 1872726.375,\n", - " 653648.9375,\n", - " 82560.2421875,\n", - " 45950.07421875,\n", - " 176148.0,\n", - " 0.0,\n", - " 123837.3828125,\n", - " 2135.127197265625,\n", - " 163434.96875,\n", - " 0.0,\n", - " 418116.65625,\n", - " 443255.25,\n", - " 618563.1875,\n", - " 0.0,\n", - " 0.0,\n", - " 163337.25,\n", - " 587070.5,\n", - " 0.0,\n", - " 77697.7421875,\n", - " 10904282.0,\n", - " 5310385.0,\n", - " 351229.5625,\n", - " 250258.8125,\n", - " 857734.0,\n", - " 4849014.0,\n", - " 0.0,\n", - " 32026.91015625,\n", - " 517768.375,\n", - " 491079.28125,\n", - " 154796.734375,\n", - " 220985.6875,\n", - " 0.0,\n", - " 1047966.25,\n", - " 1062120.625,\n", - " 0.0,\n", - " 0.0,\n", - " 750438.0,\n", - " 0.0,\n", - " 136019.484375,\n", - " 1099278.75,\n", - " 204607.734375,\n", - " 138783.28125,\n", - " 700778.1875,\n", - " 1067.5635986328125,\n", - " 1262422.75,\n", - " 1067.5635986328125,\n", - " 1456262.75,\n", - " 122769.8203125,\n", - " 769820.125,\n", - " 437701.09375,\n", - " 0.0,\n", - " 1118174.0,\n", - " 695714.9375,\n", - " 130509.65625,\n", - " 0.0,\n", - " 2755893.0,\n", - " 895.6859130859375,\n", - " 18575.607421875,\n", - " 3040.727294921875,\n", - " 561615.5625,\n", - " 1082509.5,\n", - " 0.0,\n", - " 240060.765625,\n", - " 538052.0625,\n", - " 4377.0107421875,\n", - " 626705.6875,\n", - " 1067.5635986328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1044561.75,\n", - " 1201009.125,\n", - " 85999.90625,\n", - " 10675.63671875,\n", - " 332695.5625,\n", - " 602403.0625,\n", - " 176002.6875,\n", - " 845737.25,\n", - " 431946.03125,\n", - " 0.0,\n", - " 187176.65625,\n", - " 612781.5625,\n", - " 267908.5625,\n", - " 0.0,\n", - " 571642.0625,\n", - " 463044.40625,\n", - " 57377.43359375,\n", - " 0.0,\n", - " 168675.0625,\n", - " 1201906.625,\n", - " 388780.8125,\n", - " 11363148.0,\n", - " 261625.84375,\n", - " 0.0,\n", - " 2241.8837890625,\n", - " 144121.09375,\n", - " 0.0,\n", - " 0.0,\n", - " 218747.8125,\n", - " 278207.09375,\n", - " 747.2945556640625,\n", - " 345443.75,\n", - " 0.0,\n", - " 146790.0,\n", - " 0.0,\n", - " 401715.375,\n", - " 37364.7265625,\n", - " 867228.125,\n", - " 599923.875,\n", - " 2174702.0,\n", - " 4364728.0,\n", - " 0.0,\n", - " 0.0,\n", - " 568339.0625,\n", - " 0.0,\n", - " 202837.09375,\n", - " 437701.09375,\n", - " 157239.265625,\n", - " 0.0,\n", - " 0.0,\n", - " 69761.015625,\n", - " 1000200.375,\n", - " 2674366.0,\n", - " 9783340.0,\n", - " 2709460.0,\n", - " 0.0,\n", - " 112799.6015625,\n", - " 1761479.5,\n", - " 0.0,\n", - " 558588.375,\n", - " 0.0,\n", - " 94621.3671875,\n", - " 245539.640625,\n", - " 1708.101806640625,\n", - " 401537.375,\n", - " 551369.875,\n", - " 0.0,\n", - " 809234.5,\n", - " 1515940.375,\n", - " 0.0,\n", - " 299131.34375,\n", - " 454782.125,\n", - " 0.0,\n", - " 396117.375,\n", - " 133445.453125,\n", - " 0.0,\n", - " 611.7139892578125,\n", - " 733528.0,\n", - " 0.0,\n", - " 0.0,\n", - " 945911.125,\n", - " 0.0,\n", - " 229664.171875,\n", - " 812766.875,\n", - " 0.0,\n", - " 1996.343994140625,\n", - " 90597.6015625,\n", - " 1357006.875,\n", - " 1305630.375,\n", - " 0.0,\n", - " 922372.625,\n", - " 600184.25,\n", - " 286107.0625,\n", - " 347532.5625,\n", - " 1229477.875,\n", - " 722080.6875,\n", - " 123610.0078125,\n", - " 0.0,\n", - " 1044381.5625,\n", - " 373647.28125,\n", - " 1152968.75,\n", - " 365036.3125,\n", - " 0.0,\n", - " 371305.4375,\n", - " 349995.09375,\n", - " 6031.73486328125,\n", - " 279274.65625,\n", - " 0.0,\n", - " 0.0,\n", - " 563436.625,\n", - " 0.0,\n", - " 30959.345703125,\n", - " 1680861.5,\n", - " 25621.52734375,\n", - " 389024.71875,\n", - " 264538.9375,\n", - " 528321.5,\n", - " 297465.03125,\n", - " 49310.765625,\n", - " 668460.625,\n", - " 0.0,\n", - " 4270.25439453125,\n", - " 480403.65625,\n", - " 103623.34375,\n", - " 87633.1171875,\n", - " 0.0,\n", - " 1344598.25,\n", - " 880873.75,\n", - " 74954.875,\n", - " 26689.091796875,\n", - " 486815.5,\n", - " 2053774.5,\n", - " 309809.8125,\n", - " 992282.0625,\n", - " 241269.375,\n", - " 512430.5625,\n", - " 3384459.5,\n", - " 0.0,\n", - " 3565732.0,\n", - " 1270852.25,\n", - " 2651828.0,\n", - " 0.0,\n", - " 640.5382080078125,\n", - " 21992.201171875,\n", - " 0.0,\n", - " 455849.6875,\n", - " 341620.375,\n", - " 18699.4453125,\n", - " 4655.64501953125,\n", - " 102059.4765625,\n", - " 947192.875,\n", - " 2668.9091796875,\n", - " 471935.0625,\n", - " 49992.6640625,\n", - " 0.0,\n", - " 800.6727294921875,\n", - " 389024.71875,\n", - " 719361.625,\n", - " 98429.3671875,\n", - " 744776.0625,\n", - " 293580.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29487.880859375,\n", - " 775404.125,\n", - " 92878.0390625,\n", - " 0.0,\n", - " 0.0,\n", - " 236225.703125,\n", - " 619226.5,\n", - " 639834.8125,\n", - " 202143.8125,\n", - " 680656.9375,\n", - " 1459632.5,\n", - " 601194.1875,\n", - " 441779.5625,\n", - " 92878.0390625,\n", - " 441469.25,\n", - " 3736.472900390625,\n", - " 107060.6171875,\n", - " 271743.09375,\n", - " 1150086.375,\n", - " 112799.6015625,\n", - " 34083.0390625,\n", - " 318667.75,\n", - " 2215096.0,\n", - " 501314.8125,\n", - " 106756.3671875,\n", - " 2150325.0,\n", - " 838684.8125,\n", - " 49107.9296875,\n", - " 375615.625,\n", - " 0.0,\n", - " 0.0,\n", - " 216086.890625,\n", - " 117432.0,\n", - " 0.0,\n", - " 0.0,\n", - " 383866.8125,\n", - " 1096381.375,\n", - " 367798.4375,\n", - " 61863.8828125,\n", - " 0.0,\n", - " 183620.953125,\n", - " 320269.09375,\n", - " 145188.65625,\n", - " 981339.125,\n", - " 345522.3125,\n", - " 1310912.125,\n", - " 1400643.25,\n", - " 2522832.5,\n", - " 0.0,\n", - " 108243.484375,\n", - " 0.0,\n", - " 234324.0,\n", - " 575492.125,\n", - " 0.0,\n", - " 0.0,\n", - " 809791.625,\n", - " 1125291.75,\n", - " 336287.65625,\n", - " 855107.0,\n", - " 69391.640625,\n", - " 183300.6875,\n", - " 744314.125,\n", - " 20283.708984375,\n", - " 816266.625,\n", - " 302120.5,\n", - " 1218761.625,\n", - " 478432.875,\n", - " 2060763.25,\n", - " 0.0,\n", - " 1884897.25,\n", - " 0.0,\n", - " 747497.0,\n", - " 0.0,\n", - " 800557.625,\n", - " 197660.40625,\n", - " 1775358.375,\n", - " 0.0,\n", - " 160134.546875,\n", - " 332290.90625,\n", - " 0.0,\n", - " 303897.6875,\n", - " 4655.64501953125,\n", - " 1490871.25,\n", - " 812121.625,\n", - " 0.0,\n", - " 0.0,\n", - " 509824.25,\n", - " 0.0,\n", - " 3210802.0,\n", - " 256215.28125,\n", - " 7965.1640625,\n", - " 250993.109375,\n", - " 350722.28125,\n", - " 0.0,\n", - " 1131995.375,\n", - " 0.0,\n", - " 546592.5625,\n", - " 1140392.5,\n", - " 1248230.25,\n", - " 8540.5087890625,\n", - " 147323.78125,\n", - " 577273.9375,\n", - " 1260030.625,\n", - " 369377.03125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 447224.5625,\n", - " 0.0,\n", - " 120898.3828125,\n", - " 281836.8125,\n", - " 0.0,\n", - " 0.0,\n", - " 151594.046875,\n", - " 319201.53125,\n", - " 18110.25,\n", - " 0.0,\n", - " 106756.3671875,\n", - " 0.0,\n", - " 2610416.5,\n", - " 372280.3125,\n", - " 1293597.25,\n", - " 363398.65625,\n", - " 2361640.25,\n", - " 2731340.0,\n", - " 1266474.25,\n", - " 368371.75,\n", - " 1625985.25,\n", - " 572397.4375,\n", - " 1067.5635986328125,\n", - " 405674.1875,\n", - " 106.75636291503906,\n", - " 0.0,\n", - " 1390957.25,\n", - " 213512.734375,\n", - " 334487.5625,\n", - " 521504.84375,\n", - " 764555.75,\n", - " 4493188.0,\n", - " 0.0,\n", - " 624848.25,\n", - " 273296.28125,\n", - " 675927.9375,\n", - " 1327808.25,\n", - " 0.0,\n", - " 2.135127305984497,\n", - " 0.0,\n", - " 875297.0,\n", - " 237341.953125,\n", - " 170810.1875,\n", - " 709159.375,\n", - " 787353.0,\n", - " 0.0,\n", - " 346020.625,\n", - " 161735.890625,\n", - " 269559.8125,\n", - " 0.0,\n", - " 114400.5859375,\n", - " 289623.40625,\n", - " 676351.0,\n", - " 0.0,\n", - " 128107.640625,\n", - " 454938.5,\n", - " 511780.03125,\n", - " 0.0,\n", - " 866263.0625,\n", - " 236417.3125,\n", - " 0.0,\n", - " 108037.4453125,\n", - " 394998.5625,\n", - " 68441.3828125,\n", - " 666992.875,\n", - " 1780669.25,\n", - " 706966.75,\n", - " 524138.875,\n", - " 192161.453125,\n", - " 0.0,\n", - " 6405.3818359375,\n", - " 520125.8125,\n", - " 90464.03125,\n", - " 7657293.0,\n", - " 552046.75,\n", - " 0.0,\n", - " 195297.953125,\n", - " 0.0,\n", - " 743028.875,\n", - " 1068.6312255859375,\n", - " 1399576.0,\n", - " 0.0,\n", - " 3202.69091796875,\n", - " 364679.75,\n", - " 6287790.5,\n", - " 1381104.25,\n", - " 75691.828125,\n", - " 305323.1875,\n", - " 0.0,\n", - " 160134.546875,\n", - " 117432.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1504161.5,\n", - " 259496.6875,\n", - " 2139926.0,\n", - " 5543517.0,\n", - " 499861.125,\n", - " 1866738.25,\n", - " 0.0,\n", - " 475102.53125,\n", - " 661253.4375,\n", - " 1237351.125,\n", - " 387674.9375,\n", - " 1562918.625,\n", - " 160145.21875,\n", - " 864929.0,\n", - " 437914.59375,\n", - " 0.0,\n", - " 1601.345458984375,\n", - " 6252720.5,\n", - " 202837.09375,\n", - " 79912.171875,\n", - " 0.0,\n", - " 9608.0732421875,\n", - " 2633129.0,\n", - " 1549600.0,\n", - " 53187.84765625,\n", - " 213512.734375,\n", - " 1382672.5,\n", - " 494443.0,\n", - " 0.0,\n", - " 43267.06640625,\n", - " 225206.0,\n", - " 306390.75,\n", - " 1772155.75,\n", - " 0.0,\n", - " 559983.0,\n", - " 4845735.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27.756654739379883,\n", - " 0.0,\n", - " 1878.9119873046875,\n", - " 337883.875,\n", - " 0.0,\n", - " 344081.8125,\n", - " 585745.5,\n", - " 182660.140625,\n", - " 0.0,\n", - " 187891.203125,\n", - " 0.0,\n", - " 192161.46875,\n", - " 394278.5625,\n", - " 585187.5,\n", - " 7342.24658203125,\n", - " 92465.9609375,\n", - " 595700.5,\n", - " 490311.3125,\n", - " 211252.6875,\n", - " 288242.1875,\n", - " 640126.75,\n", - " 97682.0703125,\n", - " 322730.53125,\n", - " 0.0,\n", - " 166017.609375,\n", - " 356165.5625,\n", - " 6677597.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1180581.0,\n", - " 1026397.625,\n", - " 248735.0625,\n", - " 320523.96875,\n", - " 5934129.5,\n", - " 501912.25,\n", - " 1517408.0,\n", - " 517768.375,\n", - " 125065.078125,\n", - " 16753.146484375,\n", - " 0.0,\n", - " 618794.0625,\n", - " 18191.28515625,\n", - " 1100554.75,\n", - " 2929579.0,\n", - " 546756.0,\n", - " 0.0,\n", - " 1072856.25,\n", - " 255981.390625,\n", - " 497356.5625,\n", - " 390869.65625,\n", - " 339953.21875,\n", - " 3202.69091796875,\n", - " 1103408.875,\n", - " 1696551.25,\n", - " 620504.6875,\n", - " 337563.625,\n", - " 827564.25,\n", - " 1750743.75,\n", - " 1543906.75,\n", - " 1907432.0,\n", - " 747294.5625,\n", - " 2888960.25,\n", - " 2135.127197265625,\n", - " 2005883.25,\n", - " 0.0,\n", - " 1758220.25,\n", - " 122769.8203125,\n", - " 0.0,\n", - " 266.8908996582031,\n", - " 90742.9140625,\n", - " 986749.125,\n", - " 0.0,\n", - " 60824.84765625,\n", - " 245655.28125,\n", - " 0.0,\n", - " 587160.0,\n", - " 0.0,\n", - " 113161.75,\n", - " 68193.9609375,\n", - " 295274.375,\n", - " 78610.3203125,\n", - " 1310890.0,\n", - " 309377.0625,\n", - " 108338.7421875,\n", - " 2229072.0,\n", - " 320269.09375,\n", - " 0.0,\n", - " 335387.25,\n", - " 1708.101806640625,\n", - " 939412.1875,\n", - " 533.7817993164062,\n", - " 0.0,\n", - " 3581676.0,\n", - " 82560.2421875,\n", - " 848713.125,\n", - " 3177471.5,\n", - " 16013.455078125,\n", - " 10046951.0,\n", - " 4729.30712890625,\n", - " 0.0,\n", - " 309630.15625,\n", - " 325606.90625,\n", - " 793508.75,\n", - " 4804.03662109375,\n", - " 183514.203125,\n", - " 498994.25,\n", - " 479985.9375,\n", - " ...],\n", - " 'wealth_decile': [7,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 7,\n", - " 5,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 8,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 8,\n", - " 10,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 3,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 3,\n", - " 10,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 6,\n", - " 3,\n", - " 5,\n", - " 10,\n", - " 9,\n", - " 3,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 6,\n", - " 5,\n", - " 2,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 6,\n", - " 5,\n", - " 5,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 9,\n", - " 9,\n", - " 9,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 7,\n", - " 3,\n", - " 8,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 3,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 6,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 6,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 4,\n", - " 9,\n", - " 4,\n", - " 5,\n", - " 10,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 5,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 4,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 9,\n", - " 5,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 5,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 7,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 4,\n", - " 8,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 6,\n", - " 6,\n", - " 4,\n", - " 5,\n", - " 10,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 5,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 5,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 5,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 10,\n", - " 6,\n", - " 5,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 5,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 9,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 7,\n", - " 9,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 3,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 7,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 8,\n", - " 7,\n", - " 5,\n", - " 6,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 5,\n", - " 7,\n", - " 5,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 10,\n", - " 6,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 8,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 4,\n", - " 5,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 4,\n", - " 10,\n", - " 8,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 9,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 9,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 6,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 10,\n", - " 10,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 8,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 5,\n", - " 9,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 7,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 5,\n", - " 7,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 5,\n", - " 4,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " ...],\n", - " 'in_poverty': [False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " ...],\n", - " 'person_in_poverty': [False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " ...],\n", - " 'person_in_deep_poverty': [False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " ...],\n", - " 'poverty_gap': 7105343211.114211,\n", - " 'deep_poverty_gap': 534585750.78572667,\n", - " 'poverty_rate': 0.06255884933261711,\n", - " 'deep_poverty_rate': 0.004517725675831334},\n", - " 'demographics': {'household_count_people': [3,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 5,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " ...],\n", - " 'person_weight': [28.242149353027344,\n", - " 28.242149353027344,\n", - " 28.242149353027344,\n", - " 46.80501937866211,\n", - " 46.80501937866211,\n", - " 46.80501937866211,\n", - " 23.999473571777344,\n", - " 23.999473571777344,\n", - " 23.999473571777344,\n", - " 40.036590576171875,\n", - " 40.036590576171875,\n", - " 319.1246032714844,\n", - " 319.1246032714844,\n", - " 58.23358154296875,\n", - " 58.23358154296875,\n", - " 58.23358154296875,\n", - " 290.2938537597656,\n", - " 290.2938537597656,\n", - " 10.826322555541992,\n", - " 10.826322555541992,\n", - " 18.18562889099121,\n", - " 32.117332458496094,\n", - " 32.117332458496094,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 20.178485870361328,\n", - " 20.178485870361328,\n", - " 18.06965446472168,\n", - " 18.06965446472168,\n", - " 18.671987533569336,\n", - " 209.88294982910156,\n", - " 209.88294982910156,\n", - " 21.307418823242188,\n", - " 21.307418823242188,\n", - " 114.24542236328125,\n", - " 114.24542236328125,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 44.90141677856445,\n", - " 44.90141677856445,\n", - " 44.90141677856445,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 24.144590377807617,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 14.016646385192871,\n", - " 282.30853271484375,\n", - " 282.30853271484375,\n", - " 34.989463806152344,\n", - " 34.989463806152344,\n", - " 21.942724227905273,\n", - " 21.942724227905273,\n", - " 205.44015502929688,\n", - " 205.44015502929688,\n", - " 39.89904022216797,\n", - " 39.89904022216797,\n", - " 19.02444076538086,\n", - " 29.60257911682129,\n", - " 29.60257911682129,\n", - " 104.54341125488281,\n", - " 104.54341125488281,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 63.71830368041992,\n", - " 63.71830368041992,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 262.5146179199219,\n", - " 262.5146179199219,\n", - " 301.7978210449219,\n", - " 301.7978210449219,\n", - " 301.7978210449219,\n", - " 59.51349639892578,\n", - " 59.51349639892578,\n", - " 39.839420318603516,\n", - " 25.185821533203125,\n", - " 25.185821533203125,\n", - " 36.8460807800293,\n", - " 36.8460807800293,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 28.797687530517578,\n", - " 38.371482849121094,\n", - " 38.371482849121094,\n", - " 7.789304256439209,\n", - " 6.997937202453613,\n", - " 111.38818359375,\n", - " 111.38818359375,\n", - " 40.009578704833984,\n", - " 40.009578704833984,\n", - " 212.98501586914062,\n", - " 212.98501586914062,\n", - " 23.419477462768555,\n", - " 73.20986938476562,\n", - " 73.20986938476562,\n", - " 110.51835632324219,\n", - " 110.51835632324219,\n", - " 92.79043579101562,\n", - " 92.79043579101562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 9.06320858001709,\n", - " 7.600617408752441,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 36.01832962036133,\n", - " 27.438125610351562,\n", - " 27.438125610351562,\n", - " 56.51862335205078,\n", - " 56.51862335205078,\n", - " 34.7610969543457,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 46.22690200805664,\n", - " 46.22690200805664,\n", - " 184.8269500732422,\n", - " 28.927675247192383,\n", - " 28.927675247192383,\n", - " 81.71466827392578,\n", - " 81.71466827392578,\n", - " 80.8134765625,\n", - " 80.8134765625,\n", - " 94.04654693603516,\n", - " 94.04654693603516,\n", - " 9.590133666992188,\n", - " 9.590133666992188,\n", - " 9.590133666992188,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 76.40959167480469,\n", - " 76.40959167480469,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 33.174442291259766,\n", - " 33.174442291259766,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 53.31949996948242,\n", - " 53.31949996948242,\n", - " 30.570446014404297,\n", - " 26.836687088012695,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 134.6366729736328,\n", - " 28.297229766845703,\n", - " 38.551185607910156,\n", - " 19.281497955322266,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 90.17884063720703,\n", - " 90.17884063720703,\n", - " 90.17884063720703,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 41.390586853027344,\n", - " 41.390586853027344,\n", - " 25.554105758666992,\n", - " 19.096031188964844,\n", - " 23.780738830566406,\n", - " 23.780738830566406,\n", - " 71.38541412353516,\n", - " 71.38541412353516,\n", - " 69.7490005493164,\n", - " 490.34344482421875,\n", - " 490.34344482421875,\n", - " 1640.6968994140625,\n", - " 1640.6968994140625,\n", - " 26.102113723754883,\n", - " 8.504029273986816,\n", - " 8.504029273986816,\n", - " 8.9138822555542,\n", - " 8.9138822555542,\n", - " 30.532691955566406,\n", - " 26.963403701782227,\n", - " 123.43195343017578,\n", - " 123.43195343017578,\n", - " 19.758426666259766,\n", - " 23.556047439575195,\n", - " 23.556047439575195,\n", - " 21.44287109375,\n", - " 47.156822204589844,\n", - " 47.156822204589844,\n", - " 83.73397064208984,\n", - " 83.73397064208984,\n", - " 116.41424560546875,\n", - " 116.41424560546875,\n", - " 53.18351364135742,\n", - " 53.18351364135742,\n", - " 16.176658630371094,\n", - " 43.51107406616211,\n", - " 43.51107406616211,\n", - " 7.990398406982422,\n", - " 39.139984130859375,\n", - " 39.139984130859375,\n", - " 39.13148498535156,\n", - " 77.44499206542969,\n", - " 244.87086486816406,\n", - " 244.87086486816406,\n", - " 32.5803108215332,\n", - " 32.5803108215332,\n", - " 32.5803108215332,\n", - " 8.641592979431152,\n", - " 34.258522033691406,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 44.93291091918945,\n", - " 44.93291091918945,\n", - " 63.7723503112793,\n", - " 61.97844696044922,\n", - " 61.97844696044922,\n", - " 32.464134216308594,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 8.623653411865234,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 37.4765510559082,\n", - " 111.99394989013672,\n", - " 111.99394989013672,\n", - " 111.99394989013672,\n", - " 125.22480010986328,\n", - " 125.22480010986328,\n", - " 114.73353576660156,\n", - " 114.73353576660156,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 24.17667007446289,\n", - " 24.17667007446289,\n", - " 24.17667007446289,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 74.58797454833984,\n", - " 74.58797454833984,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 24.592029571533203,\n", - " 100.23110961914062,\n", - " 8.019574165344238,\n", - " 22.024221420288086,\n", - " 196.55812072753906,\n", - " 196.55812072753906,\n", - " 10.0629301071167,\n", - " 26.633651733398438,\n", - " 9.341270446777344,\n", - " 9.341270446777344,\n", - " 9.341270446777344,\n", - " 160.00205993652344,\n", - " 25.090591430664062,\n", - " 25.090591430664062,\n", - " 27.958616256713867,\n", - " 27.958616256713867,\n", - " 33.413421630859375,\n", - " 56.58835983276367,\n", - " 75.11299133300781,\n", - " 75.11299133300781,\n", - " 90.420654296875,\n", - " 32.67418670654297,\n", - " 54.854827880859375,\n", - " 65.36970520019531,\n", - " 65.36970520019531,\n", - " 15.61748218536377,\n", - " 15.61748218536377,\n", - " 15.61748218536377,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 39.399654388427734,\n", - " 39.399654388427734,\n", - " 39.399654388427734,\n", - " 29.0726375579834,\n", - " 29.0726375579834,\n", - " 29.0726375579834,\n", - " 82.9017333984375,\n", - " 82.9017333984375,\n", - " 51.59709930419922,\n", - " 51.59709930419922,\n", - " 36.804237365722656,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 142.19129943847656,\n", - " 142.19129943847656,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 50.495479583740234,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 95.4728775024414,\n", - " 13.032922744750977,\n", - " 13.032922744750977,\n", - " 438.0936584472656,\n", - " 25.435516357421875,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 18.926958084106445,\n", - " 79.778564453125,\n", - " 24.411231994628906,\n", - " 30.95073890686035,\n", - " 23.880308151245117,\n", - " 98.3361587524414,\n", - " 98.3361587524414,\n", - " 53.99956512451172,\n", - " 31.282690048217773,\n", - " 31.282690048217773,\n", - " 24.828489303588867,\n", - " 95.39952087402344,\n", - " 95.39952087402344,\n", - " 29.91636848449707,\n", - " 29.91636848449707,\n", - " 29.91636848449707,\n", - " 29.046144485473633,\n", - " 29.046144485473633,\n", - " 280.32794189453125,\n", - " 280.32794189453125,\n", - " 52.531494140625,\n", - " 52.531494140625,\n", - " 32.828460693359375,\n", - " 32.828460693359375,\n", - " 21.872875213623047,\n", - " 31.914512634277344,\n", - " 60.90550231933594,\n", - " 60.90550231933594,\n", - " 24.419986724853516,\n", - " 26.44912338256836,\n", - " 26.44912338256836,\n", - " 57.484676361083984,\n", - " 57.484676361083984,\n", - " 7.871554374694824,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 8.477884292602539,\n", - " 72.51541900634766,\n", - " 72.51541900634766,\n", - " 20.13242530822754,\n", - " 23.228296279907227,\n", - " 28.653247833251953,\n", - " 12.58013916015625,\n", - " 12.58013916015625,\n", - " 12.58013916015625,\n", - " 23.084768295288086,\n", - " 68.72532653808594,\n", - " 68.72532653808594,\n", - " 30.086450576782227,\n", - " 30.086450576782227,\n", - " 52.67949295043945,\n", - " 52.67949295043945,\n", - " 38.49380111694336,\n", - " 38.49380111694336,\n", - " 37.2798957824707,\n", - " 37.2798957824707,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 59.176551818847656,\n", - " 59.176551818847656,\n", - " 59.176551818847656,\n", - " 44.63967514038086,\n", - " 42.50554275512695,\n", - " 29.16765022277832,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 33.469566345214844,\n", - " 33.469566345214844,\n", - " 26.317380905151367,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 13.612092971801758,\n", - " 21.696300506591797,\n", - " 25.094533920288086,\n", - " 25.094533920288086,\n", - " 83.97547912597656,\n", - " 83.97547912597656,\n", - " 35.32173156738281,\n", - " 35.32173156738281,\n", - " 26.05023956298828,\n", - " 26.05023956298828,\n", - " 26.05023956298828,\n", - " 20.915502548217773,\n", - " 23.04576873779297,\n", - " 28.619813919067383,\n", - " 28.619813919067383,\n", - " 28.61835289001465,\n", - " 33.329410552978516,\n", - " 17.94207763671875,\n", - " 17.94207763671875,\n", - " 17.94207763671875,\n", - " 9.63046646118164,\n", - " 9.63046646118164,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 52.847835540771484,\n", - " 41.31187057495117,\n", - " 41.31187057495117,\n", - " 31.275516510009766,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 30.938993453979492,\n", - " 30.938993453979492,\n", - " 59.856266021728516,\n", - " 43.062042236328125,\n", - " 43.062042236328125,\n", - " 44.59657287597656,\n", - " 51.06792068481445,\n", - " 102.48807525634766,\n", - " 102.48807525634766,\n", - " 3726.961669921875,\n", - " 3726.961669921875,\n", - " 26.917036056518555,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 25.2055606842041,\n", - " 84.37887573242188,\n", - " 44.74599838256836,\n", - " 44.74599838256836,\n", - " 17.199106216430664,\n", - " 36.21172332763672,\n", - " 36.21172332763672,\n", - " 35.43221664428711,\n", - " 24.235986709594727,\n", - " 1349.5811767578125,\n", - " 1349.5811767578125,\n", - " 140.4710693359375,\n", - " 140.4710693359375,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 23.45647621154785,\n", - " 25.17761993408203,\n", - " 25.17761993408203,\n", - " 37.43434524536133,\n", - " 37.43434524536133,\n", - " 37.43434524536133,\n", - " 53.80603790283203,\n", - " 31.383758544921875,\n", - " 53.90730667114258,\n", - " 53.90730667114258,\n", - " 343.1087646484375,\n", - " 343.1087646484375,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 39.77899169921875,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 122.82071685791016,\n", - " 122.82071685791016,\n", - " 20.101877212524414,\n", - " 18.68659019470215,\n", - " 204.53883361816406,\n", - " 204.53883361816406,\n", - " 57.286155700683594,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 39.236366271972656,\n", - " 39.236366271972656,\n", - " 39.236366271972656,\n", - " 23.45498275756836,\n", - " 23.45498275756836,\n", - " 25.313365936279297,\n", - " 25.313365936279297,\n", - " 25.313365936279297,\n", - " 7.640000343322754,\n", - " 55.74361801147461,\n", - " 55.74361801147461,\n", - " 55.74361801147461,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 46.266693115234375,\n", - " 46.266693115234375,\n", - " 46.266693115234375,\n", - " 101.79549407958984,\n", - " 26.219223022460938,\n", - " 26.219223022460938,\n", - " 26.59097671508789,\n", - " 73.16544342041016,\n", - " 73.16544342041016,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.42319679260254,\n", - " 35.7122688293457,\n", - " 35.7122688293457,\n", - " 35.7122688293457,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 35.29640197753906,\n", - " 41.34097671508789,\n", - " 41.34097671508789,\n", - " 17.646257400512695,\n", - " 54.104286193847656,\n", - " 54.104286193847656,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 254.66741943359375,\n", - " 254.66741943359375,\n", - " 254.66741943359375,\n", - " 35.556182861328125,\n", - " 20.405641555786133,\n", - " 20.405641555786133,\n", - " 20.405641555786133,\n", - " 35.32471466064453,\n", - " 35.32471466064453,\n", - " 35.729862213134766,\n", - " 35.729862213134766,\n", - " 36.06106185913086,\n", - " 664.3406372070312,\n", - " 664.3406372070312,\n", - " 664.3406372070312,\n", - " 8.032919883728027,\n", - " 31.60088348388672,\n", - " 31.60088348388672,\n", - " 31.60088348388672,\n", - " 24.500505447387695,\n", - " 30.368999481201172,\n", - " 30.368999481201172,\n", - " 30.368999481201172,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 41.470497131347656,\n", - " 198.9549560546875,\n", - " 198.9549560546875,\n", - " 22.570316314697266,\n", - " 22.570316314697266,\n", - " 61.06841278076172,\n", - " 61.06841278076172,\n", - " 19.733320236206055,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 26.698163986206055,\n", - " 132.5131072998047,\n", - " 132.5131072998047,\n", - " 132.5131072998047,\n", - " 87.39599609375,\n", - " 87.39599609375,\n", - " 15.069024085998535,\n", - " 15.069024085998535,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 30.030494689941406,\n", - " 30.030494689941406,\n", - " 46.02188491821289,\n", - " 12.42951774597168,\n", - " 12.42951774597168,\n", - " 12.42951774597168,\n", - " 31.426227569580078,\n", - " 31.426227569580078,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 8.660289764404297,\n", - " 38.9617919921875,\n", - " 56.292938232421875,\n", - " 56.292938232421875,\n", - " 26.372861862182617,\n", - " 26.372861862182617,\n", - " 22.04472541809082,\n", - " 68.2925796508789,\n", - " 68.2925796508789,\n", - " 320.4150085449219,\n", - " 320.4150085449219,\n", - " 320.4150085449219,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 443.4452819824219,\n", - " 443.4452819824219,\n", - " 443.4452819824219,\n", - " 10.389924049377441,\n", - " 19.26616859436035,\n", - " 44.08513259887695,\n", - " 22.871849060058594,\n", - " 22.871849060058594,\n", - " 124.8387680053711,\n", - " 124.8387680053711,\n", - " 38.5760383605957,\n", - " 38.5760383605957,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 209.7700958251953,\n", - " 209.7700958251953,\n", - " 209.7700958251953,\n", - " 25.145465850830078,\n", - " 46.553932189941406,\n", - " 46.553932189941406,\n", - " 1077.1380615234375,\n", - " 1077.1380615234375,\n", - " 36.829097747802734,\n", - " 36.829097747802734,\n", - " 36.829097747802734,\n", - " 28.240446090698242,\n", - " 19.669275283813477,\n", - " 31.054983139038086,\n", - " 31.054983139038086,\n", - " 20.774761199951172,\n", - " 48.37118911743164,\n", - " 48.37118911743164,\n", - " 17.527498245239258,\n", - " 17.527498245239258,\n", - " 31.0816650390625,\n", - " 20.67710304260254,\n", - " 30.72968292236328,\n", - " 20.236570358276367,\n", - " 65.9017333984375,\n", - " 65.9017333984375,\n", - " 23.537521362304688,\n", - " 37.6465950012207,\n", - " 36.654090881347656,\n", - " 36.654090881347656,\n", - " 87.95944213867188,\n", - " 87.95944213867188,\n", - " 30.14996337890625,\n", - " 58.37077713012695,\n", - " 58.37077713012695,\n", - " 30.13671112060547,\n", - " 24.07550621032715,\n", - " 40.146114349365234,\n", - " 40.146114349365234,\n", - " 40.146114349365234,\n", - " 115.78044128417969,\n", - " 115.78044128417969,\n", - " 14.15937614440918,\n", - " 14.15937614440918,\n", - " 20.89550018310547,\n", - " 3.9720547199249268,\n", - " 33.40971755981445,\n", - " 33.40971755981445,\n", - " 52.2775993347168,\n", - " 52.2775993347168,\n", - " 52.2775993347168,\n", - " 25.43512725830078,\n", - " 25.43512725830078,\n", - " 64.60677337646484,\n", - " 64.60677337646484,\n", - " 7.628475189208984,\n", - " 75422.34375,\n", - " 75422.34375,\n", - " 110.41958618164062,\n", - " 110.41958618164062,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 35.505279541015625,\n", - " 35.505279541015625,\n", - " 42.56560134887695,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 29.779067993164062,\n", - " 29.779067993164062,\n", - " 19.369304656982422,\n", - " 24.996742248535156,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 61.66079330444336,\n", - " 61.66079330444336,\n", - " 21.175073623657227,\n", - " 98.76887512207031,\n", - " 98.76887512207031,\n", - " 20.606599807739258,\n", - " 20.606599807739258,\n", - " 33.786659240722656,\n", - " 18.662525177001953,\n", - " 28.453044891357422,\n", - " 19.431034088134766,\n", - " 19.431034088134766,\n", - " 120.7717514038086,\n", - " 120.7717514038086,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 22.18948745727539,\n", - " 16.650720596313477,\n", - " 54.773746490478516,\n", - " 54.773746490478516,\n", - " 54.773746490478516,\n", - " 99.66673278808594,\n", - " 99.66673278808594,\n", - " 99.66673278808594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 26.252056121826172,\n", - " 57.84855270385742,\n", - " 57.84855270385742,\n", - " 57.84855270385742,\n", - " 20.360336303710938,\n", - " 20.360336303710938,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 228742.90625,\n", - " 228742.90625,\n", - " 31.200725555419922,\n", - " 31.200725555419922,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 42.9063606262207,\n", - " 42.9063606262207,\n", - " 42.9063606262207,\n", - " 35.15571594238281,\n", - " 35.15571594238281,\n", - " 35.15571594238281,\n", - " 38.43263244628906,\n", - " 38.43263244628906,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 7.553915977478027,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 6.828880786895752,\n", - " 6.828880786895752,\n", - " 6.828880786895752,\n", - " 1789.230712890625,\n", - " 1789.230712890625,\n", - " 20.204023361206055,\n", - " 24.286148071289062,\n", - " 346.27386474609375,\n", - " 346.27386474609375,\n", - " 19.6539363861084,\n", - " 227.10731506347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 26.937658309936523,\n", - " 26.937658309936523,\n", - " 26.937658309936523,\n", - " 41.5850715637207,\n", - " 41.5850715637207,\n", - " 74.98391723632812,\n", - " 74.98391723632812,\n", - " 24.90932273864746,\n", - " 24.90932273864746,\n", - " 23.569917678833008,\n", - " 23.569917678833008,\n", - " 74.51676940917969,\n", - " 23.479656219482422,\n", - " 7.8914408683776855,\n", - " 32.133968353271484,\n", - " 32.133968353271484,\n", - " 101.44974517822266,\n", - " 101.44974517822266,\n", - " 478.8811950683594,\n", - " 478.8811950683594,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 32.73618698120117,\n", - " 32.73618698120117,\n", - " 48.27867126464844,\n", - " 48.27867126464844,\n", - " 98.82022094726562,\n", - " 98.82022094726562,\n", - " 49.547908782958984,\n", - " 49.547908782958984,\n", - " 41.0729866027832,\n", - " 41.0729866027832,\n", - " 19.117454528808594,\n", - " 27.5860538482666,\n", - " 27.5860538482666,\n", - " 41.13151931762695,\n", - " 28.08635139465332,\n", - " 28.08635139465332,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 233.0972137451172,\n", - " 233.0972137451172,\n", - " 50.8763427734375,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 44.79485321044922,\n", - " 44.79485321044922,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 38.82398986816406,\n", - " 38.82398986816406,\n", - " 29.37957191467285,\n", - " 22.65690803527832,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 8.021744728088379,\n", - " 36.637908935546875,\n", - " 20.358747482299805,\n", - " 24.077688217163086,\n", - " 24.077688217163086,\n", - " 317.02789306640625,\n", - " 317.02789306640625,\n", - " 25.808713912963867,\n", - " 43.17150115966797,\n", - " 43.17150115966797,\n", - " 43.17150115966797,\n", - " 32.133785247802734,\n", - " 32.133785247802734,\n", - " 32.133785247802734,\n", - " 10.273715019226074,\n", - " 10.273715019226074,\n", - " 27.704740524291992,\n", - " 27.704740524291992,\n", - " 45.786766052246094,\n", - " 45.786766052246094,\n", - " 28.401771545410156,\n", - " 31.565929412841797,\n", - " 31.565929412841797,\n", - " 31.565929412841797,\n", - " 33.33272933959961,\n", - " 33.33272933959961,\n", - " 68.33909606933594,\n", - " ...],\n", - " 'household_weight': [28.242149353027344,\n", - " 46.80501937866211,\n", - " 23.999473571777344,\n", - " 40.036590576171875,\n", - " 319.1246032714844,\n", - " 58.23358154296875,\n", - " 290.2938537597656,\n", - " 10.826322555541992,\n", - " 18.18562889099121,\n", - " 32.117332458496094,\n", - " 43.09082794189453,\n", - " 31.772851943969727,\n", - " 20.178485870361328,\n", - " 18.06965446472168,\n", - " 18.671987533569336,\n", - " 209.88294982910156,\n", - " 21.307418823242188,\n", - " 114.24542236328125,\n", - " 33.831478118896484,\n", - " 44.90141677856445,\n", - " 45.325626373291016,\n", - " 24.144590377807617,\n", - " 79.82612609863281,\n", - " 14.016646385192871,\n", - " 282.30853271484375,\n", - " 34.989463806152344,\n", - " 21.942724227905273,\n", - " 205.44015502929688,\n", - " 39.89904022216797,\n", - " 19.02444076538086,\n", - " 29.60257911682129,\n", - " 104.54341125488281,\n", - " 94.42530822753906,\n", - " 63.71830368041992,\n", - " 30.37379264831543,\n", - " 746.3109741210938,\n", - " 262.5146179199219,\n", - " 301.7978210449219,\n", - " 59.51349639892578,\n", - " 39.839420318603516,\n", - " 25.185821533203125,\n", - " 36.8460807800293,\n", - " 47.40287399291992,\n", - " 28.797687530517578,\n", - " 38.371482849121094,\n", - " 7.789304256439209,\n", - " 6.997937202453613,\n", - " 111.38818359375,\n", - " 40.009578704833984,\n", - " 212.98501586914062,\n", - " 23.419477462768555,\n", - " 73.20986938476562,\n", - " 110.51835632324219,\n", - " 92.79043579101562,\n", - " 184.57461547851562,\n", - " 9.06320858001709,\n", - " 7.600617408752441,\n", - " 29.39621925354004,\n", - " 36.01832962036133,\n", - " 27.438125610351562,\n", - " 56.51862335205078,\n", - " 34.7610969543457,\n", - " 28.407873153686523,\n", - " 46.22690200805664,\n", - " 184.8269500732422,\n", - " 28.927675247192383,\n", - " 81.71466827392578,\n", - " 80.8134765625,\n", - " 94.04654693603516,\n", - " 9.590133666992188,\n", - " 1194.1971435546875,\n", - " 76.40959167480469,\n", - " 20.353389739990234,\n", - " 33.174442291259766,\n", - " 45.14307403564453,\n", - " 53.31949996948242,\n", - " 30.570446014404297,\n", - " 26.836687088012695,\n", - " 74.53304290771484,\n", - " 134.6366729736328,\n", - " 28.297229766845703,\n", - " 38.551185607910156,\n", - " 19.281497955322266,\n", - " 30.92945671081543,\n", - " 90.17884063720703,\n", - " 154.83297729492188,\n", - " 41.390586853027344,\n", - " 25.554105758666992,\n", - " 19.096031188964844,\n", - " 23.780738830566406,\n", - " 71.38541412353516,\n", - " 69.7490005493164,\n", - " 490.34344482421875,\n", - " 1640.6968994140625,\n", - " 26.102113723754883,\n", - " 8.504029273986816,\n", - " 8.9138822555542,\n", - " 30.532691955566406,\n", - " 26.963403701782227,\n", - " 123.43195343017578,\n", - " 19.758426666259766,\n", - " 23.556047439575195,\n", - " 21.44287109375,\n", - " 47.156822204589844,\n", - " 83.73397064208984,\n", - " 116.41424560546875,\n", - " 53.18351364135742,\n", - " 16.176658630371094,\n", - " 43.51107406616211,\n", - " 7.990398406982422,\n", - " 39.139984130859375,\n", - " 39.13148498535156,\n", - " 77.44499206542969,\n", - " 244.87086486816406,\n", - " 32.5803108215332,\n", - " 8.641592979431152,\n", - " 34.258522033691406,\n", - " 8736.19140625,\n", - " 44.93291091918945,\n", - " 63.7723503112793,\n", - " 61.97844696044922,\n", - " 32.464134216308594,\n", - " 23.566247940063477,\n", - " 16645.962890625,\n", - " 8.623653411865234,\n", - " 127.91293334960938,\n", - " 37.4765510559082,\n", - " 111.99394989013672,\n", - " 125.22480010986328,\n", - " 114.73353576660156,\n", - " 1555.2490234375,\n", - " 24.17667007446289,\n", - " 244.0413818359375,\n", - " 74.58797454833984,\n", - " 16150.6162109375,\n", - " 24.592029571533203,\n", - " 100.23110961914062,\n", - " 8.019574165344238,\n", - " 22.024221420288086,\n", - " 196.55812072753906,\n", - " 10.0629301071167,\n", - " 26.633651733398438,\n", - " 9.341270446777344,\n", - " 160.00205993652344,\n", - " 25.090591430664062,\n", - " 27.958616256713867,\n", - " 33.413421630859375,\n", - " 56.58835983276367,\n", - " 75.11299133300781,\n", - " 90.420654296875,\n", - " 32.67418670654297,\n", - " 54.854827880859375,\n", - " 65.36970520019531,\n", - " 15.61748218536377,\n", - " 34.05690383911133,\n", - " 767.959716796875,\n", - " 39.399654388427734,\n", - " 29.0726375579834,\n", - " 82.9017333984375,\n", - " 51.59709930419922,\n", - " 36.804237365722656,\n", - " 28.704092025756836,\n", - " 142.19129943847656,\n", - " 29.95490264892578,\n", - " 50.495479583740234,\n", - " 160.04151916503906,\n", - " 95.4728775024414,\n", - " 13.032922744750977,\n", - " 438.0936584472656,\n", - " 25.435516357421875,\n", - " 62.001888275146484,\n", - " 18.926958084106445,\n", - " 79.778564453125,\n", - " 24.411231994628906,\n", - " 30.95073890686035,\n", - " 23.880308151245117,\n", - " 98.3361587524414,\n", - " 53.99956512451172,\n", - " 31.282690048217773,\n", - " 24.828489303588867,\n", - " 95.39952087402344,\n", - " 29.91636848449707,\n", - " 29.046144485473633,\n", - " 280.32794189453125,\n", - " 52.531494140625,\n", - " 32.828460693359375,\n", - " 21.872875213623047,\n", - " 31.914512634277344,\n", - " 60.90550231933594,\n", - " 24.419986724853516,\n", - " 26.44912338256836,\n", - " 57.484676361083984,\n", - " 7.871554374694824,\n", - " 179.61581420898438,\n", - " 8.477884292602539,\n", - " 72.51541900634766,\n", - " 20.13242530822754,\n", - " 23.228296279907227,\n", - " 28.653247833251953,\n", - " 12.58013916015625,\n", - " 23.084768295288086,\n", - " 68.72532653808594,\n", - " 30.086450576782227,\n", - " 52.67949295043945,\n", - " 38.49380111694336,\n", - " 37.2798957824707,\n", - " 48.809207916259766,\n", - " 59.176551818847656,\n", - " 44.63967514038086,\n", - " 42.50554275512695,\n", - " 29.16765022277832,\n", - " 134.17138671875,\n", - " 33.469566345214844,\n", - " 26.317380905151367,\n", - " 85.4616470336914,\n", - " 13.612092971801758,\n", - " 21.696300506591797,\n", - " 25.094533920288086,\n", - " 83.97547912597656,\n", - " 35.32173156738281,\n", - " 26.05023956298828,\n", - " 20.915502548217773,\n", - " 23.04576873779297,\n", - " 28.619813919067383,\n", - " 28.61835289001465,\n", - " 33.329410552978516,\n", - " 17.94207763671875,\n", - " 9.63046646118164,\n", - " 95.58506774902344,\n", - " 52.847835540771484,\n", - " 41.31187057495117,\n", - " 31.275516510009766,\n", - " 26494.5234375,\n", - " 30.938993453979492,\n", - " 59.856266021728516,\n", - " 43.062042236328125,\n", - " 44.59657287597656,\n", - " 51.06792068481445,\n", - " 102.48807525634766,\n", - " 3726.961669921875,\n", - " 26.917036056518555,\n", - " 18.76892852783203,\n", - " 25.2055606842041,\n", - " 84.37887573242188,\n", - " 44.74599838256836,\n", - " 17.199106216430664,\n", - " 36.21172332763672,\n", - " 35.43221664428711,\n", - " 24.235986709594727,\n", - " 1349.5811767578125,\n", - " 140.4710693359375,\n", - " 31.35894012451172,\n", - " 23.45647621154785,\n", - " 25.17761993408203,\n", - " 37.43434524536133,\n", - " 53.80603790283203,\n", - " 31.383758544921875,\n", - " 53.90730667114258,\n", - " 343.1087646484375,\n", - " 38.38011169433594,\n", - " 39.77899169921875,\n", - " 112.42691802978516,\n", - " 122.82071685791016,\n", - " 20.101877212524414,\n", - " 18.68659019470215,\n", - " 204.53883361816406,\n", - " 57.286155700683594,\n", - " 14.508488655090332,\n", - " 39.236366271972656,\n", - " 23.45498275756836,\n", - " 25.313365936279297,\n", - " 7.640000343322754,\n", - " 55.74361801147461,\n", - " 118.56034851074219,\n", - " 46.266693115234375,\n", - " 101.79549407958984,\n", - " 26.219223022460938,\n", - " 26.59097671508789,\n", - " 73.16544342041016,\n", - " 4.6649675369262695,\n", - " 102.63156127929688,\n", - " 25.901548385620117,\n", - " 25.42319679260254,\n", - " 35.7122688293457,\n", - " 123.4432601928711,\n", - " 12773.021484375,\n", - " 35.29640197753906,\n", - " 41.34097671508789,\n", - " 17.646257400512695,\n", - " 54.104286193847656,\n", - " 227.4977264404297,\n", - " 254.66741943359375,\n", - " 35.556182861328125,\n", - " 20.405641555786133,\n", - " 35.32471466064453,\n", - " 35.729862213134766,\n", - " 36.06106185913086,\n", - " 664.3406372070312,\n", - " 8.032919883728027,\n", - " 31.60088348388672,\n", - " 24.500505447387695,\n", - " 30.368999481201172,\n", - " 49.92478942871094,\n", - " 41.470497131347656,\n", - " 198.9549560546875,\n", - " 22.570316314697266,\n", - " 61.06841278076172,\n", - " 19.733320236206055,\n", - " 18.51359748840332,\n", - " 26.698163986206055,\n", - " 132.5131072998047,\n", - " 87.39599609375,\n", - " 15.069024085998535,\n", - " 27.100372314453125,\n", - " 63.87034225463867,\n", - " 30.030494689941406,\n", - " 46.02188491821289,\n", - " 12.42951774597168,\n", - " 31.426227569580078,\n", - " 11399.9130859375,\n", - " 8.660289764404297,\n", - " 38.9617919921875,\n", - " 56.292938232421875,\n", - " 26.372861862182617,\n", - " 22.04472541809082,\n", - " 68.2925796508789,\n", - " 320.4150085449219,\n", - " 118.28704071044922,\n", - " 443.4452819824219,\n", - " 10.389924049377441,\n", - " 19.26616859436035,\n", - " 44.08513259887695,\n", - " 22.871849060058594,\n", - " 124.8387680053711,\n", - " 38.5760383605957,\n", - " 11681.0107421875,\n", - " 209.7700958251953,\n", - " 25.145465850830078,\n", - " 46.553932189941406,\n", - " 1077.1380615234375,\n", - " 36.829097747802734,\n", - " 28.240446090698242,\n", - " 19.669275283813477,\n", - " 31.054983139038086,\n", - " 20.774761199951172,\n", - " 48.37118911743164,\n", - " 17.527498245239258,\n", - " 31.0816650390625,\n", - " 20.67710304260254,\n", - " 30.72968292236328,\n", - " 20.236570358276367,\n", - " 65.9017333984375,\n", - " 23.537521362304688,\n", - " 37.6465950012207,\n", - " 36.654090881347656,\n", - " 87.95944213867188,\n", - " 30.14996337890625,\n", - " 58.37077713012695,\n", - " 30.13671112060547,\n", - " 24.07550621032715,\n", - " 40.146114349365234,\n", - " 115.78044128417969,\n", - " 14.15937614440918,\n", - " 20.89550018310547,\n", - " 3.9720547199249268,\n", - " 33.40971755981445,\n", - " 52.2775993347168,\n", - " 25.43512725830078,\n", - " 64.60677337646484,\n", - " 7.628475189208984,\n", - " 75422.34375,\n", - " 110.41958618164062,\n", - " 194.68777465820312,\n", - " 35.505279541015625,\n", - " 42.56560134887695,\n", - " 39.07632827758789,\n", - " 29.779067993164062,\n", - " 19.369304656982422,\n", - " 24.996742248535156,\n", - " 11720.8369140625,\n", - " 61.66079330444336,\n", - " 21.175073623657227,\n", - " 98.76887512207031,\n", - " 20.606599807739258,\n", - " 33.786659240722656,\n", - " 18.662525177001953,\n", - " 28.453044891357422,\n", - " 19.431034088134766,\n", - " 120.7717514038086,\n", - " 151.54269409179688,\n", - " 22.18948745727539,\n", - " 16.650720596313477,\n", - " 54.773746490478516,\n", - " 99.66673278808594,\n", - " 32.324241638183594,\n", - " 4308.68994140625,\n", - " 26.252056121826172,\n", - " 57.84855270385742,\n", - " 20.360336303710938,\n", - " 57646.9921875,\n", - " 228742.90625,\n", - " 31.200725555419922,\n", - " 40.30677795410156,\n", - " 42.9063606262207,\n", - " 35.15571594238281,\n", - " 38.43263244628906,\n", - " 91.56676483154297,\n", - " 7.553915977478027,\n", - " 15.160603523254395,\n", - " 20.811511993408203,\n", - " 6.828880786895752,\n", - " 1789.230712890625,\n", - " 20.204023361206055,\n", - " 24.286148071289062,\n", - " 346.27386474609375,\n", - " 19.6539363861084,\n", - " 227.10731506347656,\n", - " 186.01747131347656,\n", - " 26.937658309936523,\n", - " 41.5850715637207,\n", - " 74.98391723632812,\n", - " 24.90932273864746,\n", - " 23.569917678833008,\n", - " 74.51676940917969,\n", - " 23.479656219482422,\n", - " 7.8914408683776855,\n", - " 32.133968353271484,\n", - " 101.44974517822266,\n", - " 478.8811950683594,\n", - " 481.9111022949219,\n", - " 32.73618698120117,\n", - " 48.27867126464844,\n", - " 98.82022094726562,\n", - " 49.547908782958984,\n", - " 41.0729866027832,\n", - " 19.117454528808594,\n", - " 27.5860538482666,\n", - " 41.13151931762695,\n", - " 28.08635139465332,\n", - " 37.49348449707031,\n", - " 49.498023986816406,\n", - " 233.0972137451172,\n", - " 50.8763427734375,\n", - " 124.87788391113281,\n", - " 44.79485321044922,\n", - " 15.80577278137207,\n", - " 38.82398986816406,\n", - " 29.37957191467285,\n", - " 22.65690803527832,\n", - " 45.49738311767578,\n", - " 3500.255126953125,\n", - " 8.021744728088379,\n", - " 36.637908935546875,\n", - " 20.358747482299805,\n", - " 24.077688217163086,\n", - " 317.02789306640625,\n", - " 25.808713912963867,\n", - " 43.17150115966797,\n", - " 32.133785247802734,\n", - " 10.273715019226074,\n", - " 27.704740524291992,\n", - " 45.786766052246094,\n", - " 28.401771545410156,\n", - " 31.565929412841797,\n", - " 33.33272933959961,\n", - " 68.33909606933594,\n", - " 78.24613952636719,\n", - " 12.20848274230957,\n", - " 43.32186508178711,\n", - " 27.522151947021484,\n", - " 93.13650512695312,\n", - " 24.294950485229492,\n", - " 189.66326904296875,\n", - " 146.65618896484375,\n", - " 25.84233856201172,\n", - " 50.18196105957031,\n", - " 28.27105140686035,\n", - " 40.21383285522461,\n", - " 26.37224578857422,\n", - " 116.51704406738281,\n", - " 180.51116943359375,\n", - " 38.27302551269531,\n", - " 29.138916015625,\n", - " 81209.3515625,\n", - " 26.80150604248047,\n", - " 48.34397888183594,\n", - " 77.17735290527344,\n", - " 36.51317596435547,\n", - " 8.339164733886719,\n", - " 31.767253875732422,\n", - " 55.910152435302734,\n", - " 25.986488342285156,\n", - " 12671.03515625,\n", - " 27.51320457458496,\n", - " 56.45180130004883,\n", - " 76.10295104980469,\n", - " 44.57008361816406,\n", - " 36.456851959228516,\n", - " 68.07799530029297,\n", - " 29.730253219604492,\n", - " 32.43329620361328,\n", - " 18.978092193603516,\n", - " 9.371033668518066,\n", - " 80.16841125488281,\n", - " 30.737377166748047,\n", - " 44.296260833740234,\n", - " 24.082406997680664,\n", - " 42.62151336669922,\n", - " 9.543537139892578,\n", - " 27.178924560546875,\n", - " 122.48465728759766,\n", - " 211.5702362060547,\n", - " 29.55289077758789,\n", - " 90.36311340332031,\n", - " 32.936710357666016,\n", - " 48.66644287109375,\n", - " 28.885408401489258,\n", - " 100.52787017822266,\n", - " 49.253517150878906,\n", - " 50.8596076965332,\n", - " 33.19301223754883,\n", - " 123.25515747070312,\n", - " 17.03289031982422,\n", - " 21.81167984008789,\n", - " 42.217891693115234,\n", - " 107.16097259521484,\n", - " 75.89432525634766,\n", - " 23.667015075683594,\n", - " 56.91862487792969,\n", - " 54.842350006103516,\n", - " 27.949846267700195,\n", - " 42.967987060546875,\n", - " 22.591413497924805,\n", - " 475.7314758300781,\n", - " 27.852066040039062,\n", - " 26.91028594970703,\n", - " 28.905298233032227,\n", - " 22.205158233642578,\n", - " 495.7840881347656,\n", - " 139.74560546875,\n", - " 41.20463180541992,\n", - " 20.8092098236084,\n", - " 64.87281036376953,\n", - " 25509.48828125,\n", - " 742.6254272460938,\n", - " 88.88448333740234,\n", - " 37.8209342956543,\n", - " 45.28633117675781,\n", - " 49.422019958496094,\n", - " 33.699546813964844,\n", - " 7.88087797164917,\n", - " 35.27408981323242,\n", - " 24.21812629699707,\n", - " 27.140623092651367,\n", - " 27.43670082092285,\n", - " 35.01750564575195,\n", - " 88.72260284423828,\n", - " 69.74231719970703,\n", - " 48.520477294921875,\n", - " 81.13410186767578,\n", - " 31.859851837158203,\n", - " 9.064040184020996,\n", - " 23.752965927124023,\n", - " 180.64532470703125,\n", - " 521.6224975585938,\n", - " 19.425310134887695,\n", - " 30.754941940307617,\n", - " 11.20598316192627,\n", - " 20.52555274963379,\n", - " 16.73333168029785,\n", - " 142.5982208251953,\n", - " 8.130870819091797,\n", - " 57.091121673583984,\n", - " 45.064292907714844,\n", - " 21.070842742919922,\n", - " 110.8116455078125,\n", - " 26.09881591796875,\n", - " 36.49736022949219,\n", - " 40.8791618347168,\n", - " 69.22997283935547,\n", - " 92.81848907470703,\n", - " 11.977202415466309,\n", - " 120.67728424072266,\n", - " 13.511035919189453,\n", - " 47.45903396606445,\n", - " 57.43730545043945,\n", - " 97.10781860351562,\n", - " 128.81521606445312,\n", - " 54.1357421875,\n", - " 559.6054077148438,\n", - " 201.12103271484375,\n", - " 53.43246841430664,\n", - " 66.09152221679688,\n", - " 36.68221664428711,\n", - " 370.2716979980469,\n", - " 60.584129333496094,\n", - " 124.5239028930664,\n", - " 82.646240234375,\n", - " 35.10287857055664,\n", - " 40.58534622192383,\n", - " 21.88373565673828,\n", - " 22.397127151489258,\n", - " 23.788694381713867,\n", - " 8998.4521484375,\n", - " 32.30588912963867,\n", - " 26.71613311767578,\n", - " 25.443115234375,\n", - " 26.071346282958984,\n", - " 37.27550506591797,\n", - " 25.599700927734375,\n", - " 49.656471252441406,\n", - " 116.1102294921875,\n", - " 93.41844940185547,\n", - " 23.849533081054688,\n", - " 25.36341667175293,\n", - " 35.1338996887207,\n", - " 52.95706558227539,\n", - " 36.73451614379883,\n", - " 6.117847442626953,\n", - " 524.9666748046875,\n", - " 9.699667930603027,\n", - " 39.9635009765625,\n", - " 42.189476013183594,\n", - " 63.87661361694336,\n", - " 68.07786560058594,\n", - " 47.901031494140625,\n", - " 17.65812110900879,\n", - " 664.2684326171875,\n", - " 321.7586669921875,\n", - " 31.622394561767578,\n", - " 26.346460342407227,\n", - " 30.11229133605957,\n", - " 67.34693908691406,\n", - " 162.7297821044922,\n", - " 130.43927001953125,\n", - " 33.19267272949219,\n", - " 27.963655471801758,\n", - " 22398.759765625,\n", - " 51.41410446166992,\n", - " 111.35924530029297,\n", - " 44.99341583251953,\n", - " 25.26917839050293,\n", - " 23.641569137573242,\n", - " 21.86798858642578,\n", - " 23.061235427856445,\n", - " 22.17639923095703,\n", - " 114.16553497314453,\n", - " 309.32916259765625,\n", - " 53.26786422729492,\n", - " 53.183563232421875,\n", - " 10.897358894348145,\n", - " 60.68538284301758,\n", - " 71.96173095703125,\n", - " 70.36080169677734,\n", - " 31.388673782348633,\n", - " 20145.208984375,\n", - " 25.005765914916992,\n", - " 878.1486206054688,\n", - " 36.71416091918945,\n", - " 40.28757095336914,\n", - " 23.292160034179688,\n", - " 1416.2142333984375,\n", - " 35.93791198730469,\n", - " 149.52703857421875,\n", - " 50.79178237915039,\n", - " 55.27119445800781,\n", - " 36.429298400878906,\n", - " 47.621307373046875,\n", - " 34.303409576416016,\n", - " 15.042612075805664,\n", - " 17.039262771606445,\n", - " 23.58864974975586,\n", - " 210.0742950439453,\n", - " 36.1551399230957,\n", - " 45.853240966796875,\n", - " 12030.251953125,\n", - " 31.810583114624023,\n", - " 33.43047332763672,\n", - " 33.70047378540039,\n", - " 43.46784973144531,\n", - " 20.2988224029541,\n", - " 21.06975746154785,\n", - " 67.80582427978516,\n", - " 82.29581451416016,\n", - " 8.1028413772583,\n", - " 47.00740051269531,\n", - " 28.639923095703125,\n", - " 21.906150817871094,\n", - " 46.424827575683594,\n", - " 36.915645599365234,\n", - " 26.711196899414062,\n", - " 32.44154739379883,\n", - " 59.117042541503906,\n", - " 74.95713806152344,\n", - " 148.52203369140625,\n", - " 8.828947067260742,\n", - " 560.364013671875,\n", - " 62.23111343383789,\n", - " 288.2350769042969,\n", - " 81.37005615234375,\n", - " 144.430908203125,\n", - " 63.74538040161133,\n", - " 26.690271377563477,\n", - " 28.667530059814453,\n", - " 30.918338775634766,\n", - " 34.81563949584961,\n", - " 35.908424377441406,\n", - " 192.0653839111328,\n", - " 648.81103515625,\n", - " 26.497249603271484,\n", - " 26.941646575927734,\n", - " 22.58795166015625,\n", - " 57.01644515991211,\n", - " 252.75946044921875,\n", - " 17.341148376464844,\n", - " 144.19741821289062,\n", - " 29.277118682861328,\n", - " 41.46324157714844,\n", - " 169.3571014404297,\n", - " 27.72432518005371,\n", - " 101.27507019042969,\n", - " 19.45806121826172,\n", - " 53.42601013183594,\n", - " 19.13066864013672,\n", - " 42.555809020996094,\n", - " 68.21251678466797,\n", - " 48.53764724731445,\n", - " 27.182392120361328,\n", - " 1236.9078369140625,\n", - " 16.671600341796875,\n", - " 87.8784408569336,\n", - " 12.048067092895508,\n", - " 41.45891189575195,\n", - " 123.57081604003906,\n", - " 27.613815307617188,\n", - " 20.524578094482422,\n", - " 14.835566520690918,\n", - " 37.99099349975586,\n", - " 65.80184936523438,\n", - " 52.391544342041016,\n", - " 27.784547805786133,\n", - " 25.413583755493164,\n", - " 24.290721893310547,\n", - " 29.84189796447754,\n", - " 93.54571533203125,\n", - " 12.833515167236328,\n", - " 31.93730926513672,\n", - " 21.837779998779297,\n", - " 40.02711486816406,\n", - " 30.645097732543945,\n", - " 34.03675842285156,\n", - " 28.055727005004883,\n", - " 4114.03173828125,\n", - " 312.41644287109375,\n", - " 38.029319763183594,\n", - " 20.067974090576172,\n", - " 27.55293846130371,\n", - " 130.69515991210938,\n", - " 270.5059509277344,\n", - " 28.26038932800293,\n", - " 79.09233093261719,\n", - " 22.47134780883789,\n", - " 39.074195861816406,\n", - " 20.090557098388672,\n", - " 39.33311080932617,\n", - " 25.52715492248535,\n", - " 32.4786491394043,\n", - " 37.721580505371094,\n", - " 37.12297821044922,\n", - " 19.233322143554688,\n", - " 25.292463302612305,\n", - " 27.200090408325195,\n", - " 20.994054794311523,\n", - " 73.67050170898438,\n", - " 32.33354568481445,\n", - " 32.11463165283203,\n", - " 41.62809371948242,\n", - " 126795.9921875,\n", - " 39.350181579589844,\n", - " 87.79580688476562,\n", - " 26.401588439941406,\n", - " 362.6590576171875,\n", - " 101.25609588623047,\n", - " 23.456106185913086,\n", - " 21.45635223388672,\n", - " 74.17300415039062,\n", - " 95.09648895263672,\n", - " 26.410736083984375,\n", - " 20095.244140625,\n", - " 230.7347869873047,\n", - " 28.685497283935547,\n", - " 63.63335037231445,\n", - " 77.13699340820312,\n", - " 26.481613159179688,\n", - " 47.524681091308594,\n", - " 70.77971649169922,\n", - " 1843.601806640625,\n", - " 25.848678588867188,\n", - " 10.336939811706543,\n", - " 705.9268798828125,\n", - " 75.44247436523438,\n", - " 39.02870178222656,\n", - " 302.1763916015625,\n", - " 8.006257057189941,\n", - " 73.46619415283203,\n", - " 33.51382064819336,\n", - " 10439.8505859375,\n", - " 13.362417221069336,\n", - " 162.15960693359375,\n", - " 22.18136978149414,\n", - " 17.125961303710938,\n", - " 7.7348737716674805,\n", - " 4586.9482421875,\n", - " 20.210079193115234,\n", - " 28.537137985229492,\n", - " 36466.9921875,\n", - " 22.20534324645996,\n", - " 80.39472961425781,\n", - " 87.31310272216797,\n", - " 19.035451889038086,\n", - " 26.727052688598633,\n", - " 82.311279296875,\n", - " 30.64400291442871,\n", - " 37.439701080322266,\n", - " 66.1491928100586,\n", - " 35.504981994628906,\n", - " 28.596227645874023,\n", - " 28.70524787902832,\n", - " 18.56167984008789,\n", - " 94.56891632080078,\n", - " 199.69964599609375,\n", - " 93.15608978271484,\n", - " 46.64133071899414,\n", - " 26.3082275390625,\n", - " 26.84583282470703,\n", - " 85.1803970336914,\n", - " 126.94952392578125,\n", - " 7.7427873611450195,\n", - " 53.60639953613281,\n", - " 42.93661117553711,\n", - " 30.18895721435547,\n", - " 20.523786544799805,\n", - " 15.289114952087402,\n", - " 39.26758575439453,\n", - " 2192.096435546875,\n", - " 28.176273345947266,\n", - " 25.65544891357422,\n", - " 171.06246948242188,\n", - " 29.983619689941406,\n", - " 30.42803192138672,\n", - " 31.714704513549805,\n", - " 15044.09765625,\n", - " 22.15239143371582,\n", - " 67.68681335449219,\n", - " 100.11336517333984,\n", - " 40.42636489868164,\n", - " 29.605331420898438,\n", - " 48.155216217041016,\n", - " 14.396186828613281,\n", - " 29.013254165649414,\n", - " 26.361364364624023,\n", - " 19.960866928100586,\n", - " 68.8355941772461,\n", - " 29.29583740234375,\n", - " 32.82291793823242,\n", - " 31.780738830566406,\n", - " 16.08697509765625,\n", - " 34.93206787109375,\n", - " 27.36103630065918,\n", - " 50.44474792480469,\n", - " 59.522010803222656,\n", - " 312.6104736328125,\n", - " 29.054109573364258,\n", - " 34.75701904296875,\n", - " 8.09687614440918,\n", - " 54.09621047973633,\n", - " 61.44231414794922,\n", - " 271.42462158203125,\n", - " 35.14213180541992,\n", - " 111.99459075927734,\n", - " 8.44454288482666,\n", - " 123.31929779052734,\n", - " 126.59722137451172,\n", - " 36.5045166015625,\n", - " 35.1024169921875,\n", - " 30.776689529418945,\n", - " 42.19173049926758,\n", - " 23.56074333190918,\n", - " 16.27764320373535,\n", - " 21.946983337402344,\n", - " 2847.523681640625,\n", - " 6.010672092437744,\n", - " 7.208390712738037,\n", - " 57.01736831665039,\n", - " 143.33522033691406,\n", - " 18.823171615600586,\n", - " 75.49005126953125,\n", - " 28.074281692504883,\n", - " 50.36292266845703,\n", - " 22.38804054260254,\n", - " 10922.8642578125,\n", - " 77.86014556884766,\n", - " 206.0198211669922,\n", - " 26.313854217529297,\n", - " 28.7144832611084,\n", - " 683.16259765625,\n", - " 14.72204875946045,\n", - " 22.581785202026367,\n", - " 12.513693809509277,\n", - " 7.676373481750488,\n", - " 167.21697998046875,\n", - " 59.42802429199219,\n", - " 79.70228576660156,\n", - " 28.858816146850586,\n", - " 34.82012176513672,\n", - " 29.310733795166016,\n", - " 7.445798397064209,\n", - " 107.870361328125,\n", - " 24.9678897857666,\n", - " 8972.31640625,\n", - " 75.58406066894531,\n", - " 33.64850997924805,\n", - " 26.492366790771484,\n", - " 105.02246856689453,\n", - " 33.26601028442383,\n", - " 28.82748031616211,\n", - " 107.10002899169922,\n", - " 22.544139862060547,\n", - " 34.292964935302734,\n", - " 140.15126037597656,\n", - " 42.346309661865234,\n", - " 53.06807327270508,\n", - " 49.23423767089844,\n", - " 95.54383087158203,\n", - " 75.17684936523438,\n", - " 37.09901809692383,\n", - " 37.3985481262207,\n", - " 239.65248107910156,\n", - " 19.611927032470703,\n", - " 50.67652130126953,\n", - " 29.766639709472656,\n", - " 79.36975860595703,\n", - " 576.424560546875,\n", - " 49.84981155395508,\n", - " 157.46791076660156,\n", - " 23.33124351501465,\n", - " 48.718997955322266,\n", - " 16.699039459228516,\n", - " 53.90824508666992,\n", - " 30.789085388183594,\n", - " 157.50238037109375,\n", - " 33.97496795654297,\n", - " 42.18190383911133,\n", - " 9.393257141113281,\n", - " 20.298938751220703,\n", - " 59.12922286987305,\n", - " 28.1489315032959,\n", - " 41.633888244628906,\n", - " 43.42710876464844,\n", - " 24.689950942993164,\n", - " 27.106510162353516,\n", - " 24.369211196899414,\n", - " 30.363527297973633,\n", - " 25.330059051513672,\n", - " 12.639852523803711,\n", - " 25.034690856933594,\n", - " 42.8533821105957,\n", - " 180.43011474609375,\n", - " 60.7864875793457,\n", - " 69.09495544433594,\n", - " 32.384464263916016,\n", - " 32.742679595947266,\n", - " 254.2848358154297,\n", - " 25.241365432739258,\n", - " 102.80842590332031,\n", - " 111.0848388671875,\n", - " 235.91416931152344,\n", - " 45.50685501098633,\n", - " 23.011512756347656,\n", - " 687.4073486328125,\n", - " 43.0496940612793,\n", - " 25.37106704711914,\n", - " 86.02627563476562,\n", - " 22.015275955200195,\n", - " 44.18194580078125,\n", - " 44.794288635253906,\n", - " 46.876468658447266,\n", - " 25.577377319335938,\n", - " 81.19080352783203,\n", - " 36.699668884277344,\n", - " 1552.510498046875,\n", - " 309.1971740722656,\n", - " 29.970518112182617,\n", - " 57.91835403442383,\n", - " 62.551612854003906,\n", - " 25.855674743652344,\n", - " 29.283212661743164,\n", - " 28.56865692138672,\n", - " 38.86330032348633,\n", - " 48.388038635253906,\n", - " ...],\n", - " 'total_households': 23140266.80052776,\n", - " 'is_male': [True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " ...],\n", - " 'age': [34,\n", - " 33,\n", - " 2,\n", - " 20,\n", - " 19,\n", - " 19,\n", - " 48,\n", - " 42,\n", - " 18,\n", - " 80,\n", - " 80,\n", - " 58,\n", - " 27,\n", - " 48,\n", - " 14,\n", - " 9,\n", - " 30,\n", - " 26,\n", - " 78,\n", - " 80,\n", - " 77,\n", - " 56,\n", - " 62,\n", - " 39,\n", - " 46,\n", - " 13,\n", - " 11,\n", - " 49,\n", - " 55,\n", - " 16,\n", - " 13,\n", - " 18,\n", - " 66,\n", - " 34,\n", - " 67,\n", - " 54,\n", - " 71,\n", - " 68,\n", - " 71,\n", - " 71,\n", - " 80,\n", - " 63,\n", - " 61,\n", - " 45,\n", - " 51,\n", - " 10,\n", - " 7,\n", - " 55,\n", - " 61,\n", - " 17,\n", - " 39,\n", - " 40,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 50,\n", - " 74,\n", - " 76,\n", - " 45,\n", - " 38,\n", - " 16,\n", - " 13,\n", - " 80,\n", - " 39,\n", - " 37,\n", - " 60,\n", - " 60,\n", - " 43,\n", - " 15,\n", - " 69,\n", - " 65,\n", - " 48,\n", - " 56,\n", - " 44,\n", - " 56,\n", - " 60,\n", - " 69,\n", - " 67,\n", - " 40,\n", - " 40,\n", - " 11,\n", - " 5,\n", - " 75,\n", - " 74,\n", - " 40,\n", - " 45,\n", - " 11,\n", - " 8,\n", - " 44,\n", - " 46,\n", - " 14,\n", - " 8,\n", - " 62,\n", - " 61,\n", - " 75,\n", - " 78,\n", - " 42,\n", - " 35,\n", - " 5,\n", - " 51,\n", - " 68,\n", - " 64,\n", - " 23,\n", - " 23,\n", - " 47,\n", - " 47,\n", - " 11,\n", - " 8,\n", - " 80,\n", - " 58,\n", - " 54,\n", - " 60,\n", - " 35,\n", - " 80,\n", - " 77,\n", - " 70,\n", - " 74,\n", - " 80,\n", - " 80,\n", - " 48,\n", - " 35,\n", - " 41,\n", - " 71,\n", - " 43,\n", - " 75,\n", - " 74,\n", - " 43,\n", - " 45,\n", - " 19,\n", - " 13,\n", - " 11,\n", - " 6,\n", - " 80,\n", - " 27,\n", - " 43,\n", - " 53,\n", - " 18,\n", - " 12,\n", - " 79,\n", - " 48,\n", - " 1,\n", - " 61,\n", - " 57,\n", - " 74,\n", - " 35,\n", - " 10,\n", - " 9,\n", - " 2,\n", - " 30,\n", - " 34,\n", - " 80,\n", - " 70,\n", - " 63,\n", - " 34,\n", - " 40,\n", - " 45,\n", - " 19,\n", - " 48,\n", - " 18,\n", - " 40,\n", - " 15,\n", - " 2,\n", - " 48,\n", - " 50,\n", - " 21,\n", - " 19,\n", - " 80,\n", - " 80,\n", - " 46,\n", - " 45,\n", - " 11,\n", - " 8,\n", - " 7,\n", - " 63,\n", - " 59,\n", - " 55,\n", - " 50,\n", - " 15,\n", - " 15,\n", - " 17,\n", - " 70,\n", - " 70,\n", - " 52,\n", - " 71,\n", - " 34,\n", - " 42,\n", - " 8,\n", - " 7,\n", - " 2,\n", - " 78,\n", - " 73,\n", - " 39,\n", - " 73,\n", - " 35,\n", - " 13,\n", - " 9,\n", - " 3,\n", - " 79,\n", - " 17,\n", - " 16,\n", - " 38,\n", - " 42,\n", - " 7,\n", - " 5,\n", - " 59,\n", - " 57,\n", - " 80,\n", - " 78,\n", - " 70,\n", - " 69,\n", - " 44,\n", - " 40,\n", - " 27,\n", - " 31,\n", - " 32,\n", - " 41,\n", - " 43,\n", - " 32,\n", - " 61,\n", - " 59,\n", - " 58,\n", - " 56,\n", - " 80,\n", - " 26,\n", - " 69,\n", - " 72,\n", - " 34,\n", - " 60,\n", - " 61,\n", - " 68,\n", - " 32,\n", - " 35,\n", - " 64,\n", - " 28,\n", - " 32,\n", - " 30,\n", - " 80,\n", - " 80,\n", - " 68,\n", - " 59,\n", - " 57,\n", - " 69,\n", - " 62,\n", - " 56,\n", - " 80,\n", - " 50,\n", - " 80,\n", - " 66,\n", - " 53,\n", - " 17,\n", - " 21,\n", - " 78,\n", - " 75,\n", - " 43,\n", - " 47,\n", - " 7,\n", - " 9,\n", - " 65,\n", - " 53,\n", - " 62,\n", - " 55,\n", - " 33,\n", - " 34,\n", - " 42,\n", - " 46,\n", - " 12,\n", - " 9,\n", - " 45,\n", - " 40,\n", - " 5,\n", - " 8,\n", - " 55,\n", - " 40,\n", - " 40,\n", - " 6,\n", - " 0,\n", - " 50,\n", - " 29,\n", - " 6,\n", - " 3,\n", - " 57,\n", - " 27,\n", - " 69,\n", - " 65,\n", - " 51,\n", - " 45,\n", - " 15,\n", - " 12,\n", - " 42,\n", - " 43,\n", - " 4,\n", - " 52,\n", - " 28,\n", - " 29,\n", - " 25,\n", - " 63,\n", - " 80,\n", - " 34,\n", - " 28,\n", - " 5,\n", - " 30,\n", - " 32,\n", - " 2,\n", - " 0,\n", - " 53,\n", - " 54,\n", - " 78,\n", - " 79,\n", - " 58,\n", - " 72,\n", - " 74,\n", - " 74,\n", - " 80,\n", - " 71,\n", - " 50,\n", - " 15,\n", - " 11,\n", - " 80,\n", - " 71,\n", - " 70,\n", - " 80,\n", - " 75,\n", - " 72,\n", - " 52,\n", - " 63,\n", - " 53,\n", - " 80,\n", - " 21,\n", - " 75,\n", - " 75,\n", - " 69,\n", - " 76,\n", - " 15,\n", - " 13,\n", - " 41,\n", - " 42,\n", - " 14,\n", - " 12,\n", - " 38,\n", - " 52,\n", - " 5,\n", - " 21,\n", - " 17,\n", - " 35,\n", - " 35,\n", - " 1,\n", - " 36,\n", - " 29,\n", - " 0,\n", - " 50,\n", - " 50,\n", - " 31,\n", - " 33,\n", - " 22,\n", - " 39,\n", - " 43,\n", - " 10,\n", - " 8,\n", - " 13,\n", - " 27,\n", - " 30,\n", - " 50,\n", - " 53,\n", - " 15,\n", - " 16,\n", - " 49,\n", - " 44,\n", - " 43,\n", - " 12,\n", - " 8,\n", - " 80,\n", - " 78,\n", - " 77,\n", - " 65,\n", - " 54,\n", - " 37,\n", - " 43,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 80,\n", - " 62,\n", - " 69,\n", - " 53,\n", - " 65,\n", - " 32,\n", - " 23,\n", - " 58,\n", - " 57,\n", - " 18,\n", - " 47,\n", - " 78,\n", - " 76,\n", - " 39,\n", - " 14,\n", - " 12,\n", - " 36,\n", - " 4,\n", - " 48,\n", - " 56,\n", - " 58,\n", - " 61,\n", - " 32,\n", - " 3,\n", - " 70,\n", - " 60,\n", - " 60,\n", - " 33,\n", - " 72,\n", - " 74,\n", - " 67,\n", - " 60,\n", - " 56,\n", - " 38,\n", - " 41,\n", - " 47,\n", - " 15,\n", - " 12,\n", - " 2,\n", - " 51,\n", - " 80,\n", - " 80,\n", - " 72,\n", - " 25,\n", - " 76,\n", - " 51,\n", - " 15,\n", - " 19,\n", - " 54,\n", - " 68,\n", - " 39,\n", - " 40,\n", - " 12,\n", - " 63,\n", - " 57,\n", - " 76,\n", - " 69,\n", - " 74,\n", - " 76,\n", - " 46,\n", - " 43,\n", - " 11,\n", - " 9,\n", - " 33,\n", - " 27,\n", - " 1,\n", - " 41,\n", - " 70,\n", - " 40,\n", - " 51,\n", - " 49,\n", - " 16,\n", - " 13,\n", - " 9,\n", - " 66,\n", - " 61,\n", - " 52,\n", - " 68,\n", - " 67,\n", - " 37,\n", - " 34,\n", - " 13,\n", - " 77,\n", - " 74,\n", - " 56,\n", - " 56,\n", - " 23,\n", - " 23,\n", - " 72,\n", - " 73,\n", - " 30,\n", - " 30,\n", - " 0,\n", - " 65,\n", - " 76,\n", - " 72,\n", - " 69,\n", - " 77,\n", - " 39,\n", - " 48,\n", - " 14,\n", - " 11,\n", - " 27,\n", - " 33,\n", - " 43,\n", - " 40,\n", - " 7,\n", - " 12,\n", - " 43,\n", - " 77,\n", - " 75,\n", - " 77,\n", - " 59,\n", - " 62,\n", - " 27,\n", - " 0,\n", - " 69,\n", - " 74,\n", - " 56,\n", - " 77,\n", - " 78,\n", - " 74,\n", - " 80,\n", - " 58,\n", - " 58,\n", - " 80,\n", - " 80,\n", - " 51,\n", - " 46,\n", - " 38,\n", - " 7,\n", - " 67,\n", - " 79,\n", - " 61,\n", - " 30,\n", - " 31,\n", - " 53,\n", - " 62,\n", - " 62,\n", - " 62,\n", - " 61,\n", - " 80,\n", - " 80,\n", - " 63,\n", - " 71,\n", - " 49,\n", - " 44,\n", - " 8,\n", - " 1,\n", - " 68,\n", - " 65,\n", - " 62,\n", - " 47,\n", - " 12,\n", - " 9,\n", - " 66,\n", - " 57,\n", - " 60,\n", - " 31,\n", - " 71,\n", - " 71,\n", - " 38,\n", - " 40,\n", - " 13,\n", - " 10,\n", - " 51,\n", - " 37,\n", - " 32,\n", - " 7,\n", - " 5,\n", - " 25,\n", - " 19,\n", - " 67,\n", - " 69,\n", - " 74,\n", - " 69,\n", - " 22,\n", - " 37,\n", - " 45,\n", - " 4,\n", - " 4,\n", - " 53,\n", - " 56,\n", - " 17,\n", - " 52,\n", - " 56,\n", - " 40,\n", - " 42,\n", - " 14,\n", - " 37,\n", - " 72,\n", - " 80,\n", - " 73,\n", - " 34,\n", - " 37,\n", - " 4,\n", - " 2,\n", - " 37,\n", - " 16,\n", - " 12,\n", - " 66,\n", - " 62,\n", - " 65,\n", - " 76,\n", - " 25,\n", - " 25,\n", - " 26,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 32,\n", - " 34,\n", - " 4,\n", - " 0,\n", - " 37,\n", - " 38,\n", - " 10,\n", - " 5,\n", - " 46,\n", - " 54,\n", - " 14,\n", - " 21,\n", - " 41,\n", - " 35,\n", - " 13,\n", - " 4,\n", - " 11,\n", - " 77,\n", - " 70,\n", - " 50,\n", - " 12,\n", - " 42,\n", - " 72,\n", - " 74,\n", - " 58,\n", - " 25,\n", - " 27,\n", - " 30,\n", - " 30,\n", - " 35,\n", - " 32,\n", - " 1,\n", - " 55,\n", - " 32,\n", - " 7,\n", - " 4,\n", - " 76,\n", - " 47,\n", - " 50,\n", - " 17,\n", - " 69,\n", - " 69,\n", - " 65,\n", - " 28,\n", - " 50,\n", - " 29,\n", - " 27,\n", - " 9,\n", - " 66,\n", - " 50,\n", - " 41,\n", - " 14,\n", - " 39,\n", - " 30,\n", - " 6,\n", - " 2,\n", - " 41,\n", - " 40,\n", - " 6,\n", - " 2,\n", - " 46,\n", - " 48,\n", - " 47,\n", - " 47,\n", - " 20,\n", - " 56,\n", - " 54,\n", - " 43,\n", - " 42,\n", - " 39,\n", - " 12,\n", - " 10,\n", - " 51,\n", - " 56,\n", - " 57,\n", - " 21,\n", - " 69,\n", - " 79,\n", - " 72,\n", - " 67,\n", - " 45,\n", - " 17,\n", - " 14,\n", - " 18,\n", - " 34,\n", - " 38,\n", - " 9,\n", - " 6,\n", - " 62,\n", - " 58,\n", - " 55,\n", - " 40,\n", - " 8,\n", - " 73,\n", - " 67,\n", - " 70,\n", - " 50,\n", - " 40,\n", - " 14,\n", - " 11,\n", - " 7,\n", - " 20,\n", - " 80,\n", - " 45,\n", - " 78,\n", - " 79,\n", - " 51,\n", - " 35,\n", - " 79,\n", - " 51,\n", - " 47,\n", - " 32,\n", - " 32,\n", - " 0,\n", - " 39,\n", - " 38,\n", - " 4,\n", - " 4,\n", - " 56,\n", - " 57,\n", - " 25,\n", - " 70,\n", - " 80,\n", - " 27,\n", - " 73,\n", - " 74,\n", - " 21,\n", - " 20,\n", - " 62,\n", - " 63,\n", - " 56,\n", - " 60,\n", - " 20,\n", - " 18,\n", - " 49,\n", - " 64,\n", - " 24,\n", - " 75,\n", - " 34,\n", - " 6,\n", - " 30,\n", - " 29,\n", - " 26,\n", - " 26,\n", - " 1,\n", - " 73,\n", - " 64,\n", - " 70,\n", - " 69,\n", - " 29,\n", - " 31,\n", - " 31,\n", - " 52,\n", - " 54,\n", - " 69,\n", - " 34,\n", - " 61,\n", - " 73,\n", - " 69,\n", - " 73,\n", - " 62,\n", - " 58,\n", - " 74,\n", - " 75,\n", - " 54,\n", - " 55,\n", - " 54,\n", - " 24,\n", - " 1,\n", - " 71,\n", - " 69,\n", - " 57,\n", - " 63,\n", - " 18,\n", - " 33,\n", - " 34,\n", - " 64,\n", - " 63,\n", - " 69,\n", - " 71,\n", - " 74,\n", - " 74,\n", - " 73,\n", - " 74,\n", - " 45,\n", - " 67,\n", - " 63,\n", - " 68,\n", - " 80,\n", - " 65,\n", - " 42,\n", - " 28,\n", - " 75,\n", - " 77,\n", - " 31,\n", - " 37,\n", - " 8,\n", - " 4,\n", - " 1,\n", - " 54,\n", - " 54,\n", - " 80,\n", - " 45,\n", - " 44,\n", - " 15,\n", - " 9,\n", - " 75,\n", - " 76,\n", - " 74,\n", - " 57,\n", - " 46,\n", - " 57,\n", - " 17,\n", - " 16,\n", - " 11,\n", - " 80,\n", - " 80,\n", - " 65,\n", - " 80,\n", - " 80,\n", - " 80,\n", - " 71,\n", - " 65,\n", - " 68,\n", - " 25,\n", - " 78,\n", - " 78,\n", - " 60,\n", - " 72,\n", - " 53,\n", - " 57,\n", - " 21,\n", - " 19,\n", - " 68,\n", - " 63,\n", - " 58,\n", - " 50,\n", - " 16,\n", - " 59,\n", - " 64,\n", - " 20,\n", - " 40,\n", - " 38,\n", - " 7,\n", - " 5,\n", - " 45,\n", - " 46,\n", - " 17,\n", - " 20,\n", - " 73,\n", - " 45,\n", - " 57,\n", - " 9,\n", - " 29,\n", - " 28,\n", - " 46,\n", - " 46,\n", - " 14,\n", - " 10,\n", - " 25,\n", - " 61,\n", - " 29,\n", - " 29,\n", - " 6,\n", - " 47,\n", - " 43,\n", - " 11,\n", - " 9,\n", - " 8,\n", - " 5,\n", - " 40,\n", - " 36,\n", - " 9,\n", - " 38,\n", - " 9,\n", - " 7,\n", - " 64,\n", - " 63,\n", - " 23,\n", - " 23,\n", - " 4,\n", - " 3,\n", - " 58,\n", - " 57,\n", - " 52,\n", - " 17,\n", - " 14,\n", - " 42,\n", - " 45,\n", - " 14,\n", - " 13,\n", - " 11,\n", - " 10,\n", - " 42,\n", - " 7,\n", - " 9,\n", - " 23,\n", - " 26,\n", - " 60,\n", - " 36,\n", - " 63,\n", - " 51,\n", - " 46,\n", - " 31,\n", - " 27,\n", - " 28,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 42,\n", - " 42,\n", - " 7,\n", - " 56,\n", - " 56,\n", - " 79,\n", - " 80,\n", - " 79,\n", - " 80,\n", - " 71,\n", - " 73,\n", - " 29,\n", - " 80,\n", - " 60,\n", - " 43,\n", - " 45,\n", - " 73,\n", - " 33,\n", - " 38,\n", - " 41,\n", - " 41,\n", - " 50,\n", - " 12,\n", - " 6,\n", - " 4,\n", - " 74,\n", - " 73,\n", - " 53,\n", - " 58,\n", - " 40,\n", - " 40,\n", - " 28,\n", - " 28,\n", - " 64,\n", - " 58,\n", - " 74,\n", - " 73,\n", - " 74,\n", - " 21,\n", - " 77,\n", - " 76,\n", - " 27,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 29,\n", - " 27,\n", - " 6,\n", - " 5,\n", - " 72,\n", - " 70,\n", - " 80,\n", - " 38,\n", - " 40,\n", - " 2,\n", - " 0,\n", - " 67,\n", - " 69,\n", - " 51,\n", - " 51,\n", - " 15,\n", - " 12,\n", - " 71,\n", - " 75,\n", - " 55,\n", - " 27,\n", - " 45,\n", - " 49,\n", - " 14,\n", - " 11,\n", - " 47,\n", - " 46,\n", - " 17,\n", - " 13,\n", - " 66,\n", - " 29,\n", - " 25,\n", - " 73,\n", - " 64,\n", - " 80,\n", - " 76,\n", - " 72,\n", - " 37,\n", - " 16,\n", - " 8,\n", - " 42,\n", - " 44,\n", - " 6,\n", - " 26,\n", - " 24,\n", - " 56,\n", - " 27,\n", - " 60,\n", - " 58,\n", - " 71,\n", - " 37,\n", - " 35,\n", - " 14,\n", - " 68,\n", - " 67,\n", - " 62,\n", - " ...],\n", - " 'race': None},\n", - " 'inequality': {'gini': 0.3477095374202072,\n", - " 'top_10_percent_share': 0.2999163898629839,\n", - " 'top_1_percent_share': 0.12430336324184335},\n", - " 'labor_supply': {'substitution_lsr': 0,\n", - " 'income_lsr': 0,\n", - " 'income_lsr_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'substitution_lsr_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'weekly_hours': 0,\n", - " 'weekly_hours_income_effect': 0,\n", - " 'weekly_hours_substitution_effect': 0,\n", - " 'total_earnings': 1340946114730.9246,\n", - " 'total_workers': 32697735.717292428},\n", - " 'income_distribution': {0: 28638.17159663886,\n", - " 5000: 334671.02372761816,\n", - " 10000: 892901.8871991932,\n", - " 15000: 1192876.201390043,\n", - " 20000: 1372329.1174580976,\n", - " 25000: 1579255.1622462124,\n", - " 30000: 1946388.5832830966,\n", - " 35000: 1401869.1041857302,\n", - " 40000: 1468807.3108290136,\n", - " 45000: 1215675.881689474,\n", - " 50000: 1354563.5807273462,\n", - " 55000: 964829.5402759314,\n", - " 60000: 922988.8669875562,\n", - " 65000: 957018.2603768259,\n", - " 70000: 1079843.9408770353,\n", - " 75000: 637419.0076136664,\n", - " 80000: 498186.0265044421,\n", - " 85000: 831455.4363349453,\n", - " 90000: 516631.74205611646,\n", - " 95000: 517338.60617863387,\n", - " 100000: 459757.5646894872,\n", - " 105000: 368505.1371051371,\n", - " 110000: 229580.181141451,\n", - " 115000: 460770.2185702473}},\n", - " 'gov': {'budget_window': {'total_tax': [649724373822.0885],\n", - " 'total_spending': [299987301207.83545],\n", - " 'total_state_tax': [0],\n", - " 'total_budget': [349737072614.25305],\n", - " 'total_federal_budget': [349737072614.25305]},\n", - " 'programs': {'income_tax': 328945525969.9741,\n", - " 'national_insurance': 53168761056.25772,\n", - " 'vat': 214871983017.21628,\n", - " 'council_tax': 45077685919.83074,\n", - " 'fuel_duty': 25313698252.372284,\n", - " 'tax_credits': -81931249.11630942,\n", - " 'universal_credit': -71486805495.25237,\n", - " 'child_benefit': -14596018214.875364,\n", - " 'state_pension': -126747036451.91475,\n", - " 'pension_credit': -6659655701.446462,\n", - " 'ni_employer': 125551554850.68323},\n", - " 'balance': {'total_tax': 649724373822.0885,\n", - " 'total_spending': 299987301207.83545,\n", - " 'total_state_tax': 0},\n", - " 'local_areas': {'parliamentary_constituencies': {},\n", - " 'local_authorities': {}}}},\n", - " 'reform': {'household': {'finance': {'total_net_income': 1384785487189.1448,\n", - " 'total_market_income': 1733465565685.8093,\n", - " 'total_tax': 654872761112.2869,\n", - " 'total_benefits': 306192679687.824,\n", - " 'employment_income_hh': [60994.564453125,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 373711.78125,\n", - " 23473.30078125,\n", - " 69819.56640625,\n", - " 0.0,\n", - " 0.0,\n", - " 48027.21484375,\n", - " 138378.40625,\n", - " 24073.640625,\n", - " 67538.271484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 93292.8671875,\n", - " 0.0,\n", - " 99296.26953125,\n", - " 23713.4375,\n", - " 86509.02734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22032.484375,\n", - " 0.0,\n", - " 34519.5625,\n", - " 29056.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 103438.609375,\n", - " 0.0,\n", - " 50848.8125,\n", - " 105960.0390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 8284.6943359375,\n", - " 24493.87890625,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 40402.89453125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 65497.109375,\n", - " 0.0,\n", - " 0.0,\n", - " 54510.888671875,\n", - " 27315.478515625,\n", - " 0.0,\n", - " 75162.59375,\n", - " 0.0,\n", - " 35780.2734375,\n", - " 116045.74609375,\n", - " 0.0,\n", - " 31517.85546875,\n", - " 71980.78515625,\n", - " 0.0,\n", - " 0.0,\n", - " 54931.125,\n", - " 0.0,\n", - " 0.0,\n", - " 65977.388671875,\n", - " 65196.94140625,\n", - " 10505.953125,\n", - " 0.0,\n", - " 97195.0732421875,\n", - " 0.0,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 220444.91796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 453857.169921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16869.55859375,\n", - " 0.0,\n", - " 555614.8359375,\n", - " 130033.6708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 85728.58203125,\n", - " 50968.8828125,\n", - " 37401.1953125,\n", - " 95814.296875,\n", - " 38001.53125,\n", - " 34339.45703125,\n", - " 97675.34765625,\n", - " 0.0,\n", - " 35960.37890625,\n", - " 0.0,\n", - " 33979.25390625,\n", - " 75042.5234375,\n", - " 0.0,\n", - " 0.0,\n", - " 50968.880859375,\n", - " 46046.09375,\n", - " 0.0,\n", - " 0.0,\n", - " 45025.5146484375,\n", - " 0.0,\n", - " 66817.86279296875,\n", - " 0.0,\n", - " 50608.671875,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 0.0,\n", - " 0.0,\n", - " 157109.03125,\n", - " 571824.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27015.30859375,\n", - " 218343.734375,\n", - " 54030.6171875,\n", - " 0.0,\n", - " 109021.76953125,\n", - " 69099.15625,\n", - " 0.0,\n", - " 53610.37890625,\n", - " 0.0,\n", - " 44965.48046875,\n", - " 126611.73828125,\n", - " 454817.734375,\n", - " 25574.4921875,\n", - " 101337.4296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52950.00390625,\n", - " 0.0,\n", - " 9425.3408203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 88069.90625,\n", - " 73121.4326171875,\n", - " 118267.01953125,\n", - " 60754.427734375,\n", - " 59193.533203125,\n", - " 77623.98828125,\n", - " 0.0,\n", - " 20291.49609375,\n", - " 70059.69921875,\n", - " 82306.63330078125,\n", - " 100857.140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29896.94140625,\n", - " 46046.09765625,\n", - " 0.0,\n", - " 13807.82421875,\n", - " 0.0,\n", - " 0.0,\n", - " 12487.0751953125,\n", - " 76963.609375,\n", - " 36020.41015625,\n", - " 44905.4453125,\n", - " 44245.06640625,\n", - " 0.0,\n", - " 36680.78515625,\n", - " 0.0,\n", - " 160651.0390625,\n", - " 64596.603515625,\n", - " 11046.259765625,\n", - " 0.0,\n", - " 34519.5625,\n", - " 117546.60546875,\n", - " 0.0,\n", - " 34519.5625,\n", - " 0.0,\n", - " 0.0,\n", - " 13267.5185546875,\n", - " 31097.62109375,\n", - " 0.0,\n", - " 0.0,\n", - " 16989.625,\n", - " 0.0,\n", - " 25874.66229248047,\n", - " 44905.4453125,\n", - " 0.0,\n", - " 0.0,\n", - " 59493.7119140625,\n", - " 0.0,\n", - " 0.0,\n", - " 29536.73828125,\n", - " 39142.181640625,\n", - " 41423.47265625,\n", - " 0.0,\n", - " 51809.359375,\n", - " 118567.18359375,\n", - " 26354.93359375,\n", - " 9605.4423828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 187246.091796875,\n", - " 57632.65625,\n", - " 0.0,\n", - " 82967.0068359375,\n", - " 0.0,\n", - " 0.0,\n", - " 41423.474609375,\n", - " 0.0,\n", - " 3962.245361328125,\n", - " 21552.212890625,\n", - " 107460.89453125,\n", - " 46046.09375,\n", - " 38781.9765625,\n", - " 0.0,\n", - " 0.0,\n", - " 45745.92254638672,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 34519.5625,\n", - " 49047.79296875,\n", - " 0.0,\n", - " 13987.9267578125,\n", - " 79485.0390625,\n", - " 0.0,\n", - " 13807.82421875,\n", - " 13687.755859375,\n", - " 25394.388671875,\n", - " 0.0,\n", - " 8885.03515625,\n", - " 87409.53125,\n", - " 3301.87109375,\n", - " 50068.3720703125,\n", - " 22152.552734375,\n", - " 20051.365234375,\n", - " 14408.1640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49528.06640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29956.974609375,\n", - " 284020.921875,\n", - " 31998.1328125,\n", - " 176079.765625,\n", - " 25094.220703125,\n", - " 0.0,\n", - " 0.0,\n", - " 36620.75,\n", - " 17950.171875,\n", - " 0.0,\n", - " 82186.572265625,\n", - " 0.0,\n", - " 69459.361328125,\n", - " 0.0,\n", - " 62675.517578125,\n", - " 55291.33203125,\n", - " 54690.9921875,\n", - " 120488.2578125,\n", - " 14468.19921875,\n", - " 25934.693359375,\n", - " 30077.04296875,\n", - " 0.0,\n", - " 25574.4921875,\n", - " 59553.748046875,\n", - " 81406.125,\n", - " 12427.0419921875,\n", - " 0.0,\n", - " 136157.15625,\n", - " 0.0,\n", - " 24673.982421875,\n", - " 55651.53515625,\n", - " 0.0,\n", - " 0.0,\n", - " 50608.677734375,\n", - " 67898.46875,\n", - " 23113.09765625,\n", - " 97975.51953125,\n", - " 5523.1298828125,\n", - " 79965.3203125,\n", - " 16209.18505859375,\n", - " 46526.36328125,\n", - " 21432.14453125,\n", - " 144381.8125,\n", - " 80925.8515625,\n", - " 42624.15234375,\n", - " 0.0,\n", - " 0.0,\n", - " 36020.412109375,\n", - " 59553.748046875,\n", - " 82726.88671875,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 79785.21044921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 64476.53515625,\n", - " 0.0,\n", - " 72461.056640625,\n", - " 66517.6953125,\n", - " 158069.5625,\n", - " 119347.61328125,\n", - " 0.0,\n", - " 0.0,\n", - " 29956.974609375,\n", - " 0.0,\n", - " 69099.154296875,\n", - " 110762.75,\n", - " 116946.265625,\n", - " 11286.3955078125,\n", - " 0.0,\n", - " 46586.39453125,\n", - " 114064.63671875,\n", - " 47426.875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 40943.19921875,\n", - " 86328.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 51389.12109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22272.62109375,\n", - " 40402.89453125,\n", - " 0.0,\n", - " 80745.75390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44245.0703125,\n", - " 54090.650390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49167.86328125,\n", - " 2401.36083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 55711.568359375,\n", - " 0.0,\n", - " 18070.2392578125,\n", - " 87589.6328125,\n", - " 0.0,\n", - " 113284.18359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33619.05078125,\n", - " 0.0,\n", - " 0.0,\n", - " 34339.45703125,\n", - " 0.0,\n", - " 10866.1572265625,\n", - " 0.0,\n", - " 21852.3828125,\n", - " 252683.1875,\n", - " 0.0,\n", - " 45986.05859375,\n", - " 57872.80078125,\n", - " 0.0,\n", - " 49708.171875,\n", - " 83027.05078125,\n", - " 0.0,\n", - " 0.0,\n", - " 47667.01171875,\n", - " 164193.03515625,\n", - " 0.0,\n", - " 35239.96875,\n", - " 0.0,\n", - " 57332.48828125,\n", - " 38001.53125,\n", - " 8224.660522460938,\n", - " 13567.6884765625,\n", - " 258866.703125,\n", - " 0.0,\n", - " 0.0,\n", - " 8704.9326171875,\n", - " 80925.859375,\n", - " 0.0,\n", - " 48027.21484375,\n", - " 0.0,\n", - " 26174.83203125,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 183463.966796875,\n", - " 11406.4638671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 89330.6171875,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 0.0,\n", - " 83927.55859375,\n", - " 226208.18359375,\n", - " 0.0,\n", - " 28756.298828125,\n", - " 114184.70703125,\n", - " 101937.765625,\n", - " 17229.763671875,\n", - " 0.0,\n", - " 0.0,\n", - " 13387.5849609375,\n", - " 0.0,\n", - " 9005.1025390625,\n", - " 69039.125,\n", - " 0.0,\n", - " 0.0,\n", - " 68438.77270507812,\n", - " 0.0,\n", - " 84768.037109375,\n", - " 3121.76904296875,\n", - " 0.0,\n", - " 17349.83203125,\n", - " 186525.7001953125,\n", - " 28816.330078125,\n", - " 0.0,\n", - " 0.0,\n", - " 22512.7578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21011.908203125,\n", - " 104639.2890625,\n", - " 55231.296875,\n", - " 28996.431640625,\n", - " 54811.060546875,\n", - " 0.0,\n", - " 54330.7880859375,\n", - " 0.0,\n", - " 11586.5654296875,\n", - " 10205.7822265625,\n", - " 38541.841796875,\n", - " 0.0,\n", - " 49468.03125,\n", - " 21852.3828125,\n", - " 61654.9365234375,\n", - " 4562.58544921875,\n", - " 28936.3984375,\n", - " 263729.44921875,\n", - " 32478.404296875,\n", - " 0.0,\n", - " 0.0,\n", - " 80985.89031982422,\n", - " 46046.09375,\n", - " 0.0,\n", - " 43584.69921875,\n", - " 17950.171875,\n", - " 0.0,\n", - " 0.0,\n", - " 80805.78125,\n", - " 60994.564453125,\n", - " 4982.82373046875,\n", - " 30797.451171875,\n", - " 24013.607421875,\n", - " 45025.515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 104159.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21432.14453125,\n", - " 63696.095703125,\n", - " 91311.7421875,\n", - " 0.0,\n", - " 68678.91796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 18130.2734375,\n", - " 36860.890625,\n", - " 207357.5,\n", - " 0.0,\n", - " 193609.71875,\n", - " 0.0,\n", - " 3301.87109375,\n", - " 21131.974609375,\n", - " 68618.8828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 129193.205078125,\n", - " 28756.296875,\n", - " 31757.998046875,\n", - " 0.0,\n", - " 5883.33366394043,\n", - " 0.0,\n", - " 0.0,\n", - " 115145.25,\n", - " 10926.19140625,\n", - " 0.0,\n", - " 8764.966796875,\n", - " 0.0,\n", - " 110042.3515625,\n", - " 60454.2578125,\n", - " 76963.607421875,\n", - " 22932.99609375,\n", - " 34519.5625,\n", - " 0.0,\n", - " 20831.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 62675.515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 43164.45703125,\n", - " 0.0,\n", - " 0.0,\n", - " 72521.09375,\n", - " 14708.3330078125,\n", - " 90531.29296875,\n", - " 74562.25390625,\n", - " 72641.1640625,\n", - " 0.0,\n", - " 29956.9765625,\n", - " 76963.6162109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 0.0,\n", - " 20471.599609375,\n", - " 0.0,\n", - " 64836.7431640625,\n", - " 0.0,\n", - " 22092.51953125,\n", - " 0.0,\n", - " 0.0,\n", - " 33799.15234375,\n", - " 128472.796875,\n", - " 0.0,\n", - " 0.0,\n", - " 17830.103515625,\n", - " 0.0,\n", - " 0.0,\n", - " 38481.80712890625,\n", - " 45926.0244140625,\n", - " 265410.40625,\n", - " 0.0,\n", - " 79545.06640625,\n", - " 38001.5341796875,\n", - " 47907.1484375,\n", - " 0.0,\n", - " 110702.7265625,\n", - " 84768.03515625,\n", - " 20231.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 91431.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30317.18359375,\n", - " 71980.7880859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 31577.89453125,\n", - " 63395.923828125,\n", - " 28696.26171875,\n", - " 29896.94140625,\n", - " 49528.06640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 210839.4375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 58953.4072265625,\n", - " 78284.36328125,\n", - " 69459.35107421875,\n", - " 0.0,\n", - " 103918.8828125,\n", - " 0.0,\n", - " 58293.03125,\n", - " 387039.3046875,\n", - " 0.0,\n", - " 111303.0625,\n", - " 0.0,\n", - " 0.0,\n", - " 24193.708984375,\n", - " 0.0,\n", - " 62135.208984375,\n", - " 63155.7890625,\n", - " 3361.905029296875,\n", - " 28756.29443359375,\n", - " 0.0,\n", - " 172597.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52349.6630859375,\n", - " 23653.4033203125,\n", - " 48987.75390625,\n", - " 75282.66015625,\n", - " 20471.599609375,\n", - " 1200.680419921875,\n", - " 49227.896484375,\n", - " 81766.3359375,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 0.0,\n", - " 71860.7109375,\n", - " 26354.93359375,\n", - " 0.0,\n", - " 18190.30859375,\n", - " 13807.82421875,\n", - " 184184.375,\n", - " 149064.46484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 32238.267578125,\n", - " 0.0,\n", - " 153206.796875,\n", - " 55231.30078125,\n", - " 27255.443359375,\n", - " 41303.40625,\n", - " 40943.19921875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29536.73828125,\n", - " 0.0,\n", - " 85128.234375,\n", - " 83147.1171875,\n", - " 23053.064453125,\n", - " 7324.150390625,\n", - " 0.0,\n", - " 126671.78125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 17950.171875,\n", - " 158369.734375,\n", - " 52889.966796875,\n", - " 57572.62109375,\n", - " 121568.87890625,\n", - " 0.0,\n", - " 59553.74609375,\n", - " 0.0,\n", - " 0.0,\n", - " 31397.791015625,\n", - " 7924.49072265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36140.478515625,\n", - " 39742.51953125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44605.27734375,\n", - " 31517.859375,\n", - " 72040.8203125,\n", - " 198352.38671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15188.6064453125,\n", - " 0.0,\n", - " 78284.359375,\n", - " 0.0,\n", - " 229450.0234375,\n", - " 28756.296875,\n", - " 0.0,\n", - " 73541.6748046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 59853.91015625,\n", - " 0.0,\n", - " 0.0,\n", - " 37161.05859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 35960.37890625,\n", - " 4682.6533203125,\n", - " 9005.1025390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 24193.708984375,\n", - " 40342.859375,\n", - " 0.0,\n", - " 46226.1953125,\n", - " 68258.677734375,\n", - " 0.0,\n", - " 25334.35546875,\n", - " 0.0,\n", - " 38601.87109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29056.4609375,\n", - " 0.0,\n", - " 33559.015625,\n", - " 54270.74609375,\n", - " 0.0,\n", - " 59853.91015625,\n", - " 0.0,\n", - " 69999.66796875,\n", - " 0.0,\n", - " 109021.76953125,\n", - " 31818.03125,\n", - " 166414.296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 71920.7578125,\n", - " 0.0,\n", - " 41903.7412109375,\n", - " 36080.4453125,\n", - " 112263.61328125,\n", - " 94613.607421875,\n", - " 46046.09375,\n", - " 86929.25390625,\n", - " 92512.421875,\n", - " 0.0,\n", - " 0.0,\n", - " 91431.7998046875,\n", - " 108601.5380859375,\n", - " 0.0,\n", - " 0.0,\n", - " 95754.26171875,\n", - " 35360.037109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 132074.83203125,\n", - " 0.0,\n", - " 97855.453125,\n", - " 22932.9921875,\n", - " 0.0,\n", - " 44004.9375,\n", - " 46046.08984375,\n", - " 40282.828125,\n", - " 17049.66015625,\n", - " 0.0,\n", - " 0.0,\n", - " 85188.265625,\n", - " 52829.9375,\n", - " 80565.6484375,\n", - " 89270.5859375,\n", - " 20711.736328125,\n", - " 39022.109375,\n", - " 73601.70703125,\n", - " 0.0,\n", - " 32058.166015625,\n", - " 36380.6171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26234.8671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44185.0390625,\n", - " 14288.095703125,\n", - " 9965.646484375,\n", - " 65317.01171875,\n", - " 0.0,\n", - " 0.0,\n", - " 55531.46484375,\n", - " 0.0,\n", - " 23173.130859375,\n", - " 79124.833984375,\n", - " 0.0,\n", - " 60034.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 44785.379150390625,\n", - " 40282.828125,\n", - " 33679.0859375,\n", - " 85188.2734375,\n", - " 0.0,\n", - " 12907.3134765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27555.615234375,\n", - " 10505.953125,\n", - " 71680.62109375,\n", - " 23053.0625,\n", - " 163292.5234375,\n", - " 0.0,\n", - " 0.0,\n", - " 28936.396484375,\n", - " 0.0,\n", - " 16689.45703125,\n", - " 87469.5625,\n", - " 103198.48046875,\n", - " 53430.2763671875,\n", - " 0.0,\n", - " 220384.8828125,\n", - " 0.0,\n", - " 36020.41015625,\n", - " 67658.341796875,\n", - " 137057.6640625,\n", - " 48327.37890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 69759.53125,\n", - " 0.0,\n", - " 45625.8544921875,\n", - " 0.0,\n", - " 46526.365234375,\n", - " 23773.470703125,\n", - " 58052.89453125,\n", - " 29476.703125,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 81226.033203125,\n", - " 0.0,\n", - " 61534.8701171875,\n", - " 0.0,\n", - " 41183.337890625,\n", - " 69879.6015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 61955.109375,\n", - " 98575.85595703125,\n", - " 61895.0751953125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 153446.955078125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 52229.58984375,\n", - " 13927.892578125,\n", - " 117966.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29656.8046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 53250.173828125,\n", - " 9065.13671875,\n", - " 0.0,\n", - " 0.0,\n", - " 24433.845703125,\n", - " 78644.56640625,\n", - " 30497.28125,\n", - " 175479.4375,\n", - " 88910.3828125,\n", - " 0.0,\n", - " 270213.15625,\n", - " 0.0,\n", - " 69159.1875,\n", - " 70179.765625,\n", - " 0.0,\n", - " 49648.12890625,\n", - " 0.0,\n", - " 50008.337890625,\n", - " 207657.666015625,\n", - " 0.0,\n", - " 103318.5546875,\n", - " 24193.70703125,\n", - " 0.0,\n", - " 70479.9375,\n", - " 0.0,\n", - " 249681.484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25994.73046875,\n", - " 0.0,\n", - " 98515.82421875,\n", - " 0.0,\n", - " 57032.316650390625,\n", - " 59433.673828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 10445.91796875,\n", - " 0.0,\n", - " 70600.0,\n", - " 0.0,\n", - " 129793.546875,\n", - " 71800.685546875,\n", - " 55531.46875,\n", - " 0.0,\n", - " 24133.67578125,\n", - " 56852.21484375,\n", - " 89450.6875,\n", - " 110102.38671875,\n", - " 11526.53125,\n", - " 27435.546875,\n", - " 18130.2734375,\n", - " 18130.2734375,\n", - " 51809.359375,\n", - " ...],\n", - " 'self_employment_income_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 14756.951171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 725.751708984375,\n", - " 0.0,\n", - " 0.0,\n", - " 967.6689453125,\n", - " 7499.4345703125,\n", - " 0.0,\n", - " 0.0,\n", - " -1209.586181640625,\n", - " 0.0,\n", - " 58362.5322265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11914.423828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " -45843.31640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36287.5859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11491.068359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 152770.734375,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 307355.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 13910.2412109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21772.55078125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 5866.4931640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 31570.2001953125,\n", - " 0.0,\n", - " 18143.79296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 39795.38671875,\n", - " 0.0,\n", - " 0.0,\n", - " 13910.2412109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 120.9586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 7680.8720703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 73542.841796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3326.362060546875,\n", - " 0.0,\n", - " 1995.8172607421875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44512.7734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9616.2099609375,\n", - " 0.0,\n", - " 44452.29296875,\n", - " 5806.013671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 58906.84765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9555.73046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 44633.73046875,\n", - " 19232.419921875,\n", - " 14998.869140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 0.0,\n", - " 0.0,\n", - " 4838.3447265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29574.3828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 63987.1083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 39553.46875,\n", - " 0.0,\n", - " 0.0,\n", - " 2116.77587890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 94226.765625,\n", - " 0.0,\n", - " 0.0,\n", - " 63987.109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 23526.451171875,\n", - " 31388.76171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11732.98583984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25582.748046875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 100093.2578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 49955.91015625,\n", - " 0.0,\n", - " 0.0,\n", - " 92533.34375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 198311.65625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 41730.72265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 18143.79296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6531.765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 1270.0655517578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 7680.8720703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 17599.478515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 84610.5546875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15301.265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28667.193359375,\n", - " 0.0,\n", - " 0.0,\n", - " 101363.3203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16027.0166015625,\n", - " 11612.02734375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1209.586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9071.896484375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 170067.8125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1209.586181640625,\n", - " 0.0,\n", - " 0.0,\n", - " 71909.8984375,\n", - " 41730.72265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 36287.5859375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 16329.4140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 298344.4208984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11672.5068359375,\n", - " 0.0,\n", - " 24010.28515625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26429.45849609375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28788.150390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27820.482421875,\n", - " 37618.12890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 0.0,\n", - " 0.0,\n", - " 8346.14453125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30239.654296875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 48685.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 64833.8203125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 28667.193359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11430.58984375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33566.015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15543.1826171875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 69611.6875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 9132.3759765625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 22377.34375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 3628.758544921875,\n", - " 0.0,\n", - " 0.0,\n", - " 10281.482666015625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 15361.744140625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 6047.93115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 33989.37109375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 24191.724609375,\n", - " 0.0,\n", - " 8164.70703125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 25824.6650390625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 48685.84375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 30481.572265625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11430.58935546875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 64591.90234375,\n", - " 66527.2421875,\n", - " 0.0,\n", - " 17720.4375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21288.716796875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 21167.7578125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 36469.0234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " -241.917236328125,\n", - " 3507.800048828125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 2358.693115234375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 11067.7138671875,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 46387.62890625,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 72575.171875,\n", - " 2479.651611328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'household_net_income': [43707.171875,\n", - " 3142.575439453125,\n", - " 10704.46484375,\n", - " 18229.52734375,\n", - " 215954.0625,\n", - " 27784.7109375,\n", - " 49857.5078125,\n", - " 25629.09375,\n", - " 10780.0,\n", - " 39978.03125,\n", - " 88595.265625,\n", - " 34119.4296875,\n", - " 57078.1484375,\n", - " 21267.255859375,\n", - " 16414.025390625,\n", - " 48645.6484375,\n", - " 31204.416015625,\n", - " 55746.21484375,\n", - " 59913.6640625,\n", - " 22340.91796875,\n", - " 72637.5546875,\n", - " 16677.537109375,\n", - " 82880.53125,\n", - " 4289.765625,\n", - " 40684.71875,\n", - " 19268.46875,\n", - " 24358.6875,\n", - " 52437.859375,\n", - " 14303.0,\n", - " 15763.11328125,\n", - " -128506.71875,\n", - " 20571.6328125,\n", - " 59331.125,\n", - " 86451.25,\n", - " -20468.474609375,\n", - " 64220.46484375,\n", - " 30045.90234375,\n", - " 40225.640625,\n", - " 15444.091796875,\n", - " 26898.22265625,\n", - " 21301.7578125,\n", - " 22928.806640625,\n", - " 27535.919921875,\n", - " 35348.859375,\n", - " 26723.1484375,\n", - " 5581.7998046875,\n", - " 3272.686767578125,\n", - " 16732.796875,\n", - " 65054.0859375,\n", - " 37356.80078125,\n", - " -1579.7364501953125,\n", - " 39088.7265625,\n", - " 41926.2734375,\n", - " 24192.912109375,\n", - " 52582.99609375,\n", - " 21309.865234375,\n", - " 26980.39453125,\n", - " 80769.25,\n", - " 25535.3359375,\n", - " 66153.1796875,\n", - " 39811.79296875,\n", - " 10993.4775390625,\n", - " 11530.6552734375,\n", - " 28238.001953125,\n", - " 15275.302734375,\n", - " 17301.541015625,\n", - " 47389.671875,\n", - " 45542.71484375,\n", - " 8121.85546875,\n", - " 17651.365234375,\n", - " 66589.65625,\n", - " 13023.8046875,\n", - " 27685.66015625,\n", - " 20504.427734375,\n", - " 117678.140625,\n", - " 98947.515625,\n", - " 13805.2431640625,\n", - " 12059.578125,\n", - " 255534.734375,\n", - " 10281.537109375,\n", - " 11122.86328125,\n", - " 165560.84375,\n", - " 13347.9189453125,\n", - " 13604.572265625,\n", - " 18141.673828125,\n", - " 315940.0625,\n", - " 81476.265625,\n", - " 19129.666015625,\n", - " 9317.88671875,\n", - " 15947.091796875,\n", - " 56296.94921875,\n", - " 36250.57421875,\n", - " 22895.619140625,\n", - " 72516.3828125,\n", - " 25457.4453125,\n", - " 36104.72265625,\n", - " 61934.015625,\n", - " 22195.693359375,\n", - " 26556.9453125,\n", - " 20767.580078125,\n", - " 23189.625,\n", - " 65076.65234375,\n", - " 10264.12890625,\n", - " 21051.16796875,\n", - " 36979.61328125,\n", - " 31142.58984375,\n", - " 33127.40234375,\n", - " 9797.783203125,\n", - " 33696.6796875,\n", - " 13544.94140625,\n", - " 54366.6171875,\n", - " 7868.0595703125,\n", - " 36050.8671875,\n", - " 28560.58203125,\n", - " 3898.26318359375,\n", - " 19578.28125,\n", - " 30264.376953125,\n", - " 153490.25,\n", - " 316855.375,\n", - " 9338.2109375,\n", - " 2153.59375,\n", - " 19003.345703125,\n", - " 131155.40625,\n", - " 41031.05078125,\n", - " 26422.41015625,\n", - " 74388.5859375,\n", - " 44162.25,\n", - " 28698.5859375,\n", - " 42627.796875,\n", - " 37928.48046875,\n", - " 127189.078125,\n", - " 51820.8046875,\n", - " 271989.375,\n", - " 37655.34765625,\n", - " 93391.453125,\n", - " 25902.857421875,\n", - " 9869.9140625,\n", - " 23801.8046875,\n", - " 15609.349609375,\n", - " 62699.0625,\n", - " 17095.65625,\n", - " 24272.908203125,\n", - " 15442.1279296875,\n", - " 10046.8134765625,\n", - " 26728.060546875,\n", - " 47194.2578125,\n", - " 62641.12109375,\n", - " 20087.623046875,\n", - " 56074.23046875,\n", - " 16215.41796875,\n", - " 13355.7421875,\n", - " 25064.40625,\n", - " 44506.875,\n", - " 37325.0625,\n", - " 67297.046875,\n", - " 63122.0703125,\n", - " 79026.96875,\n", - " 44696.5703125,\n", - " 43182.4375,\n", - " 55756.03125,\n", - " 17063.30859375,\n", - " 37349.9140625,\n", - " 42640.640625,\n", - " 65707.234375,\n", - " 63564.61328125,\n", - " 54662.140625,\n", - " 8340.36328125,\n", - " 16616.28515625,\n", - " 4204.4443359375,\n", - " 17658.052734375,\n", - " 31401.080078125,\n", - " 20776.923828125,\n", - " 8840.8642578125,\n", - " 9550.8349609375,\n", - " 29042.060546875,\n", - " 11616.8046875,\n", - " 55008.265625,\n", - " 25784.564453125,\n", - " 34279.21875,\n", - " 29016.31640625,\n", - " 10254.0078125,\n", - " 34496.578125,\n", - " 19506.125,\n", - " 101436.125,\n", - " 42817.6015625,\n", - " 9149.978515625,\n", - " 9762.638671875,\n", - " 20512.794921875,\n", - " 77278.4375,\n", - " 5808.01171875,\n", - " 42562.12109375,\n", - " 20474.3359375,\n", - " 9107.287109375,\n", - " 43880.46875,\n", - " 33198.40234375,\n", - " 9970.51953125,\n", - " 15695.4560546875,\n", - " 15324.92578125,\n", - " 29335.076171875,\n", - " 22148.72265625,\n", - " 30231.73828125,\n", - " 36034.15234375,\n", - " 12875.3046875,\n", - " 49377.890625,\n", - " 32652.716796875,\n", - " 44287.9609375,\n", - " 30536.28125,\n", - " 32627.7109375,\n", - " 44511.1484375,\n", - " 25435.1796875,\n", - " 33596.84375,\n", - " 79182.4375,\n", - " 26521.69921875,\n", - " -4152.615234375,\n", - " 27172.6640625,\n", - " 8587.8232421875,\n", - " 12383.3701171875,\n", - " 116223.8671875,\n", - " 39697.8671875,\n", - " 24945.57421875,\n", - " 73057.234375,\n", - " 3563.61767578125,\n", - " 12544.15625,\n", - " 23413.66796875,\n", - " 12505.98828125,\n", - " 5689.939453125,\n", - " 27817.953125,\n", - " 7410.8515625,\n", - " 74294.9296875,\n", - " 28233.46484375,\n", - " 23850.513671875,\n", - " 11525.75,\n", - " 50286.09765625,\n", - " 53617.3828125,\n", - " 12487.078125,\n", - " 27981.734375,\n", - " 9664.7451171875,\n", - " 48108.6484375,\n", - " 27492.69921875,\n", - " 38381.6171875,\n", - " 24950.06640625,\n", - " 46402.2890625,\n", - " 19775.2265625,\n", - " 7882.49169921875,\n", - " 54711.28125,\n", - " 6020.64990234375,\n", - " 7532.173828125,\n", - " 8363.025390625,\n", - " 30841.052734375,\n", - " 47589.80859375,\n", - " 45036.5625,\n", - " 63125.37109375,\n", - " 12188.890625,\n", - " 34874.015625,\n", - " 25477.09765625,\n", - " 23119.92578125,\n", - " 9823.6552734375,\n", - " 49253.0,\n", - " 30346.115234375,\n", - " 32544.435546875,\n", - " 13396.53515625,\n", - " 17755.140625,\n", - " 35959.77734375,\n", - " 18152.423828125,\n", - " 9776.66015625,\n", - " 85743.5,\n", - " 21293.19921875,\n", - " 166705.46875,\n", - " 24838.140625,\n", - " 88273.328125,\n", - " 35120.703125,\n", - " 8333.421875,\n", - " 32576.6171875,\n", - " 26298.5546875,\n", - " 22580.025390625,\n", - " 11155.439453125,\n", - " 56628.578125,\n", - " 11476.80078125,\n", - " 49142.50390625,\n", - " 22911.423828125,\n", - " 45223.921875,\n", - " 46211.98828125,\n", - " 35932.73046875,\n", - " 84854.34375,\n", - " 1255.703125,\n", - " 36483.07421875,\n", - " 16885.125,\n", - " 19078.2421875,\n", - " 19249.6171875,\n", - " 39621.2265625,\n", - " 95830.6875,\n", - " 21457.423828125,\n", - " 13749.896484375,\n", - " 88781.125,\n", - " 47923.5234375,\n", - " 20228.052734375,\n", - " 36540.3671875,\n", - " 8048.712890625,\n", - " 18547.857421875,\n", - " 38261.85546875,\n", - " 39400.7265625,\n", - " 35672.3671875,\n", - " 65236.46484375,\n", - " 3173.94677734375,\n", - " 51162.7578125,\n", - " 7003.6923828125,\n", - " 28688.521484375,\n", - " 11501.2412109375,\n", - " 34444.96875,\n", - " 41185.1171875,\n", - " 59785.4609375,\n", - " 27131.701171875,\n", - " 12944.48828125,\n", - " 54700.546875,\n", - " 40771.8828125,\n", - " 58167.84375,\n", - " 2892.962890625,\n", - " 61649.984375,\n", - " 36237.7578125,\n", - " 79323.2421875,\n", - " 6546.900390625,\n", - " -1101.66943359375,\n", - " 27923.158203125,\n", - " 42184.578125,\n", - " 9520.78125,\n", - " 49270.84375,\n", - " 105695.9921875,\n", - " 98063.609375,\n", - " 84931.1875,\n", - " 44491.48828125,\n", - " 10819.33203125,\n", - " 21319.1015625,\n", - " 20797.1875,\n", - " 48348.96484375,\n", - " 87744.53125,\n", - " 108673.21875,\n", - " 33853.5859375,\n", - " 16018.2529296875,\n", - " 31761.56640625,\n", - " 74979.7734375,\n", - " 29424.263671875,\n", - " 10650.248046875,\n", - " 2891.41650390625,\n", - " 26328.6953125,\n", - " 27482.13671875,\n", - " 44666.06640625,\n", - " 6244.5185546875,\n", - " 12128.6005859375,\n", - " 35588.3515625,\n", - " 21010.294921875,\n", - " 16372.37890625,\n", - " 20546.333984375,\n", - " 15648.65234375,\n", - " 27971.59765625,\n", - " 56526.02734375,\n", - " 54513.109375,\n", - " 8597.9951171875,\n", - " -689.36767578125,\n", - " 19768.40234375,\n", - " 25372.240234375,\n", - " 39605.15625,\n", - " 39833.93359375,\n", - " 9318.8291015625,\n", - " 6799.25341796875,\n", - " 24756.0703125,\n", - " 25564.44140625,\n", - " 50549.015625,\n", - " 23252.044921875,\n", - " 29516.09765625,\n", - " 12862.01953125,\n", - " 41064.71875,\n", - " 31453.62109375,\n", - " 33117.98828125,\n", - " 58318.9140625,\n", - " 4985.224609375,\n", - " 78580.1875,\n", - " 28448.42578125,\n", - " 9988.7646484375,\n", - " 3804.8603515625,\n", - " 30142.9921875,\n", - " 30300.75,\n", - " 25018.00390625,\n", - " 21507.98828125,\n", - " 24167.09765625,\n", - " 17679.59765625,\n", - " 9347.9091796875,\n", - " 7545.45263671875,\n", - " 12772.56640625,\n", - " 85620.8828125,\n", - " 169038.6875,\n", - " 10588.7158203125,\n", - " 31739.74609375,\n", - " 36000.60546875,\n", - " 12157.25390625,\n", - " 74236.6015625,\n", - " 74747.625,\n", - " 9156.8408203125,\n", - " 58697.1953125,\n", - " 34990.1015625,\n", - " 108851.5625,\n", - " 27089.173828125,\n", - " 26555.052734375,\n", - " 118571.2421875,\n", - " 41870.578125,\n", - " 34075.5,\n", - " 12395.0458984375,\n", - " 28315.513671875,\n", - " 123538.28125,\n", - " 97454.359375,\n", - " 56438.9375,\n", - " 7933.06640625,\n", - " 59713.8515625,\n", - " 12128.1171875,\n", - " 33329.78515625,\n", - " 3278.4794921875,\n", - " 16752.3125,\n", - " 22081.333984375,\n", - " 22589.412109375,\n", - " 108697.328125,\n", - " 14515.5791015625,\n", - " 37489.3203125,\n", - " 12504.7041015625,\n", - " 11300.720703125,\n", - " 55803.34765625,\n", - " 10908.4755859375,\n", - " 13618.771484375,\n", - " 33706.3984375,\n", - " 74855.6875,\n", - " 57880.84375,\n", - " 137180.96875,\n", - " 25264.890625,\n", - " 41754.796875,\n", - " 78207.6015625,\n", - " 68069.359375,\n", - " 17386.11328125,\n", - " 10200.990234375,\n", - " 35514.1484375,\n", - " 13605.3359375,\n", - " 27048.25390625,\n", - " 6214.19775390625,\n", - " 53338.625,\n", - " 36059.703125,\n", - " 15764.73046875,\n", - " 53728.0625,\n", - " 43713.9375,\n", - " 55100.3046875,\n", - " 22285.546875,\n", - " 15021.095703125,\n", - " 11804.04296875,\n", - " 119433.75,\n", - " 57992.546875,\n", - " 22262.857421875,\n", - " 7444.3125,\n", - " 17285.37890625,\n", - " 28090.86328125,\n", - " 23351.6875,\n", - " 15389.505859375,\n", - " 34720.66015625,\n", - " 69174.734375,\n", - " 44837.1796875,\n", - " 30888.240234375,\n", - " 46319.32421875,\n", - " 23978.17578125,\n", - " 39908.25,\n", - " 33175.734375,\n", - " 20011.755859375,\n", - " 45716.5625,\n", - " 39636.5390625,\n", - " 25115.400390625,\n", - " 32382.224609375,\n", - " 77154.34375,\n", - " 50155.51171875,\n", - " 21758.30078125,\n", - " 10752.83203125,\n", - " 165802.65625,\n", - " 24444.01953125,\n", - " 29272.8046875,\n", - " 18202.853515625,\n", - " 57241.4296875,\n", - " 26884.689453125,\n", - " 19844.25390625,\n", - " 25258.953125,\n", - " 14970.2275390625,\n", - " 16612.43359375,\n", - " 15722.3095703125,\n", - " 53260.6484375,\n", - " 43651.578125,\n", - " 15112.693359375,\n", - " 23301.4921875,\n", - " 17306.51171875,\n", - " 30268.7265625,\n", - " 3652.7958984375,\n", - " 33857.515625,\n", - " 5528.908203125,\n", - " 20664.146484375,\n", - " 22085.55859375,\n", - " 72952.5859375,\n", - " 28859.5703125,\n", - " 26013.9921875,\n", - " 36117.046875,\n", - " 30540.87109375,\n", - " 14999.2109375,\n", - " 44903.4921875,\n", - " 70017.3125,\n", - " 15702.48046875,\n", - " 50410.8359375,\n", - " 23700.248046875,\n", - " 24146.55859375,\n", - " 11975.033203125,\n", - " 13921.8544921875,\n", - " 93413.3515625,\n", - " 136784.28125,\n", - " 27863.84375,\n", - " 50578.953125,\n", - " 11493.357421875,\n", - " 25916.90625,\n", - " 26561.56640625,\n", - " 51577.7421875,\n", - " 15995.7626953125,\n", - " -1082.701171875,\n", - " 11255.41015625,\n", - " 9294.3349609375,\n", - " 19874.62109375,\n", - " 27084.13671875,\n", - " 4962.96875,\n", - " 90098.34375,\n", - " 22797.091796875,\n", - " 21036.56640625,\n", - " 11378.5185546875,\n", - " 58236.171875,\n", - " 32444.45703125,\n", - " 26321.439453125,\n", - " 53789.734375,\n", - " 23105.453125,\n", - " 8122.96142578125,\n", - " 25941.162109375,\n", - " 10712.5224609375,\n", - " 74849.1953125,\n", - " 43276.09375,\n", - " 58011.6328125,\n", - " 17440.96875,\n", - " 24302.11328125,\n", - " 13931.8984375,\n", - " 60661.9609375,\n", - " 5558.8203125,\n", - " 33343.953125,\n", - " 13231.47265625,\n", - " 16819.58203125,\n", - " 46111.28515625,\n", - " 48875.15625,\n", - " 7909.02099609375,\n", - " 26090.37109375,\n", - " 12992.7001953125,\n", - " 40143.86328125,\n", - " 32070.3046875,\n", - " 15255.017578125,\n", - " 57086.359375,\n", - " 107163.1875,\n", - " 62488.0078125,\n", - " 50284.09375,\n", - " 39238.19140625,\n", - " 21576.80078125,\n", - " 19523.6171875,\n", - " 47961.15234375,\n", - " 10748.462890625,\n", - " 15958.998046875,\n", - " -1289.754150390625,\n", - " 20888.705078125,\n", - " 29686.671875,\n", - " 43619.296875,\n", - " 26819.783203125,\n", - " 5019.94384765625,\n", - " 54461.796875,\n", - " 8589.38671875,\n", - " 15184.9375,\n", - " 69761.015625,\n", - " 9738.6875,\n", - " 25802.1015625,\n", - " 83275.9375,\n", - " 41495.890625,\n", - " 23339.52734375,\n", - " 19610.0546875,\n", - " 29048.76953125,\n", - " 10953.4326171875,\n", - " 28458.642578125,\n", - " 31591.9375,\n", - " 170732.3125,\n", - " 33014.65234375,\n", - " 52871.390625,\n", - " 35898.84765625,\n", - " 88868.109375,\n", - " 29324.517578125,\n", - " 68759.796875,\n", - " 58651.4296875,\n", - " 28359.154296875,\n", - " 19972.45703125,\n", - " 27281.75390625,\n", - " 26020.98046875,\n", - " 75310.515625,\n", - " -1432.4979248046875,\n", - " 9981.8935546875,\n", - " 6308.1796875,\n", - " 22531.369140625,\n", - " 77373.9296875,\n", - " 13452.158203125,\n", - " 18496.826171875,\n", - " 16808.37109375,\n", - " 20784.705078125,\n", - " 12159.1201171875,\n", - " 20564.50390625,\n", - " 42347.015625,\n", - " 45590.9453125,\n", - " 61605.2890625,\n", - " 33906.71875,\n", - " 17697.06640625,\n", - " 20223.3125,\n", - " 25380.6328125,\n", - " 16098.6103515625,\n", - " 139717.875,\n", - " 195380.265625,\n", - " 34873.7421875,\n", - " 18414.890625,\n", - " 20170.693359375,\n", - " 29637.55859375,\n", - " 54936.13671875,\n", - " 49564.328125,\n", - " 14323.072265625,\n", - " 82969.6875,\n", - " 76607.5078125,\n", - " 44144.60546875,\n", - " 212275.28125,\n", - " 20259.96875,\n", - " 57766.08203125,\n", - " 20551.419921875,\n", - " 8387.8349609375,\n", - " 27138.552734375,\n", - " 2719.126953125,\n", - " 69755.53125,\n", - " 44748.2421875,\n", - " 34924.94921875,\n", - " 24866.9140625,\n", - " 19152.947265625,\n", - " 105053.09375,\n", - " 21284.35546875,\n", - " 21473.798828125,\n", - " 35485.40234375,\n", - " 9150.9013671875,\n", - " 19319.8984375,\n", - " 23271.291015625,\n", - " 36932.8828125,\n", - " 23183.7890625,\n", - " 25429.947265625,\n", - " 53831.73046875,\n", - " 14312.650390625,\n", - " 10251.283203125,\n", - " 35388.078125,\n", - " 53019.0234375,\n", - " 21784.01953125,\n", - " 19933.556640625,\n", - " 13146.28125,\n", - " 2092.3369140625,\n", - " 66132.625,\n", - " 15539.8134765625,\n", - " 20147.5625,\n", - " 39296.5625,\n", - " 41056.796875,\n", - " 119921.1484375,\n", - " 98231.515625,\n", - " -275.660888671875,\n", - " 17291.0859375,\n", - " 16320.4580078125,\n", - " 24472.259765625,\n", - " 30045.8671875,\n", - " 96428.6796875,\n", - " 37655.984375,\n", - " 22469.14453125,\n", - " 28419.2890625,\n", - " 20409.701171875,\n", - " 19889.140625,\n", - " 18155.0546875,\n", - " 4545.45703125,\n", - " 6905.21875,\n", - " -4117.87939453125,\n", - " 19094.37109375,\n", - " 22129.21875,\n", - " 19860.50390625,\n", - " 62055.0390625,\n", - " 59329.453125,\n", - " 18577.1015625,\n", - " 26651.73046875,\n", - " 10583.7568359375,\n", - " 105379.8046875,\n", - " 12856.748046875,\n", - " 14514.390625,\n", - " 78950.5625,\n", - " 23669.17578125,\n", - " 100479.265625,\n", - " 38644.265625,\n", - " 71929.921875,\n", - " 81459.015625,\n", - " 6371.166015625,\n", - " 62952.44921875,\n", - " 15155.853515625,\n", - " 16380.400390625,\n", - " 21910.765625,\n", - " 12469.138671875,\n", - " 16210.109375,\n", - " 13399.37109375,\n", - " 17971.1796875,\n", - " 10108.451171875,\n", - " 25270.4296875,\n", - " 47267.6328125,\n", - " 30352.08203125,\n", - " 53706.3828125,\n", - " 7710.384765625,\n", - " 15634.3203125,\n", - " 17866.7734375,\n", - " 31242.775390625,\n", - " 42507.79296875,\n", - " 39646.046875,\n", - " 122859.921875,\n", - " 34.47021484375,\n", - " 58943.23828125,\n", - " 18119.6875,\n", - " 9362.609375,\n", - " 13975.076171875,\n", - " 68694.8671875,\n", - " 12766.2294921875,\n", - " 67705.0390625,\n", - " 16093.1591796875,\n", - " 134581.125,\n", - " 42130.77734375,\n", - " 11074.2822265625,\n", - " 61294.296875,\n", - " 18957.376953125,\n", - " 9606.78515625,\n", - " 26316.435546875,\n", - " 15348.2412109375,\n", - " 27289.703125,\n", - " 18072.572265625,\n", - " 40168.578125,\n", - " 25484.669921875,\n", - " 3366.7294921875,\n", - " 12809.869140625,\n", - " 56291.5703125,\n", - " 26847.74609375,\n", - " 10853.619140625,\n", - " 10796.619140625,\n", - " 25932.22265625,\n", - " 21763.607421875,\n", - " 13995.087890625,\n", - " 21826.861328125,\n", - " 42489.5625,\n", - " 46900.8515625,\n", - " 16364.8359375,\n", - " 28233.193359375,\n", - " 17819.859375,\n", - " 30276.599609375,\n", - " 47215.890625,\n", - " 23767.5625,\n", - " 18576.60546875,\n", - " 21276.80078125,\n", - " 21260.494140625,\n", - " 7280.4423828125,\n", - " 15367.4140625,\n", - " -977.975830078125,\n", - " 22717.3515625,\n", - " 24605.9375,\n", - " 28193.3515625,\n", - " 35655.515625,\n", - " 18795.08203125,\n", - " 41738.5546875,\n", - " 10020.65234375,\n", - " 50714.484375,\n", - " 9839.55078125,\n", - " 87314.53125,\n", - " 39717.01171875,\n", - " 119136.2578125,\n", - " 47548.41796875,\n", - " 58391.0,\n", - " 30451.890625,\n", - " 16345.4794921875,\n", - " 65415.3359375,\n", - " 12428.73046875,\n", - " 54778.15625,\n", - " 2989.754150390625,\n", - " 30820.69921875,\n", - " 25883.080078125,\n", - " 81486.4453125,\n", - " 65146.2421875,\n", - " 28453.31640625,\n", - " 60011.13671875,\n", - " 62602.9609375,\n", - " -14764.322265625,\n", - " 29422.45703125,\n", - " 56603.05859375,\n", - " 79536.125,\n", - " 24632.3671875,\n", - " 50500.9375,\n", - " 74423.0859375,\n", - " 25874.40234375,\n", - " 19938.669921875,\n", - " 37494.46484375,\n", - " 11052.96484375,\n", - " 87075.03125,\n", - " 17156.07421875,\n", - " 89175.234375,\n", - " 34497.0625,\n", - " 19949.849609375,\n", - " 32168.64453125,\n", - " 33110.2890625,\n", - " 29775.78125,\n", - " 28321.275390625,\n", - " 27260.85546875,\n", - " 11453.2607421875,\n", - " 104797.5078125,\n", - " 35536.43359375,\n", - " 49446.4453125,\n", - " 60013.16015625,\n", - " 14651.8359375,\n", - " 40943.578125,\n", - " 53349.96484375,\n", - " 18978.25390625,\n", - " 23156.21484375,\n", - " 30602.41015625,\n", - " 11167.240234375,\n", - " 10488.865234375,\n", - " 44030.8671875,\n", - " 41608.1484375,\n", - " 21066.318359375,\n", - " 27940.359375,\n", - " 20735.875,\n", - " 12271.0537109375,\n", - " 30823.646484375,\n", - " 18726.30859375,\n", - " 29251.9921875,\n", - " 8649.9384765625,\n", - " 7813.51708984375,\n", - " 44993.0546875,\n", - " 37498.5078125,\n", - " 7005.4375,\n", - " 38569.35546875,\n", - " -1186.7822265625,\n", - " 18557.6953125,\n", - " 89530.6796875,\n", - " 10534.1181640625,\n", - " 20535.25,\n", - " 36713.5390625,\n", - " 12112.21484375,\n", - " 33041.1328125,\n", - " 29103.86328125,\n", - " 32324.65234375,\n", - " 61935.7421875,\n", - " -853.5398559570312,\n", - " 25072.08984375,\n", - " 64521.859375,\n", - " 42044.234375,\n", - " 56234.7890625,\n", - " 18445.2578125,\n", - " 18043.615234375,\n", - " 44490.83984375,\n", - " 16262.884765625,\n", - " 102411.421875,\n", - " 25990.408203125,\n", - " 461.5087890625,\n", - " 28273.4296875,\n", - " 12627.86328125,\n", - " 11866.4677734375,\n", - " 56651.421875,\n", - " 67058.5859375,\n", - " 79814.296875,\n", - " 53811.64453125,\n", - " 119997.1171875,\n", - " 29939.85546875,\n", - " 23697.71484375,\n", - " 55665.9375,\n", - " 90454.625,\n", - " 54460.23046875,\n", - " 20218.71875,\n", - " 10188.92578125,\n", - " 11656.5380859375,\n", - " 20977.091796875,\n", - " 29226.65625,\n", - " 8186.3720703125,\n", - " 14922.36328125,\n", - " 14584.759765625,\n", - " 48875.7578125,\n", - " 3901.5625,\n", - " 35036.7890625,\n", - " -3955.75146484375,\n", - " 77031.15625,\n", - " 40220.6875,\n", - " 40158.0390625,\n", - " 20471.45703125,\n", - " 14843.423828125,\n", - " 19902.333984375,\n", - " 9071.580078125,\n", - " 24073.537109375,\n", - " 23143.634765625,\n", - " 19286.841796875,\n", - " 58864.328125,\n", - " 9309.8193359375,\n", - " 44742.70703125,\n", - " 27199.931640625,\n", - " 30623.63671875,\n", - " 66152.5703125,\n", - " 5314.98193359375,\n", - " 9292.396484375,\n", - " 7010.52685546875,\n", - " 38828.7265625,\n", - " 72328.65625,\n", - " 45320.06640625,\n", - " 15622.8408203125,\n", - " 29079.02734375,\n", - " 20947.3125,\n", - " 50038.08984375,\n", - " -159.0,\n", - " 9575.43359375,\n", - " 9162.123046875,\n", - " 103943.140625,\n", - " 21683.626953125,\n", - " 27127.5625,\n", - " 20700.060546875,\n", - " 44252.69921875,\n", - " 14941.79296875,\n", - " 8779.1904296875,\n", - " 49708.484375,\n", - " 22398.3828125,\n", - " 26104.982421875,\n", - " 30356.255859375,\n", - " 24146.203125,\n", - " 36263.76953125,\n", - " 29465.265625,\n", - " 80635.234375,\n", - " 26993.50390625,\n", - " 33609.140625,\n", - " 16236.87890625,\n", - " 27347.669921875,\n", - " 6354.88720703125,\n", - " 37887.20703125,\n", - " 8661.08984375,\n", - " 14153.3037109375,\n", - " 27421.478515625,\n", - " 38240.7734375,\n", - " 15192.6162109375,\n", - " 29741.29296875,\n", - " 33518.7421875,\n", - " 13152.1640625,\n", - " 55347.19921875,\n", - " 51584.04296875,\n", - " 96965.234375,\n", - " 78077.4296875,\n", - " 25348.595703125,\n", - " 151692.15625,\n", - " 11671.310546875,\n", - " 44656.85546875,\n", - " 31858.8671875,\n", - " 2555.774169921875,\n", - " 27334.552734375,\n", - " 10566.009765625,\n", - " 41659.19140625,\n", - " 138370.515625,\n", - " 13393.873046875,\n", - " 77990.96875,\n", - " 28253.08203125,\n", - " 15898.998046875,\n", - " 50501.671875,\n", - " 14248.9599609375,\n", - " 155358.1875,\n", - " 13866.76171875,\n", - " 29753.38671875,\n", - " 14182.369140625,\n", - " 39780.6796875,\n", - " 10536.986328125,\n", - " 66818.015625,\n", - " 9677.423828125,\n", - " 45774.5625,\n", - " 36796.6953125,\n", - " 2930.2978515625,\n", - " 12540.2236328125,\n", - " 35819.203125,\n", - " 50449.61328125,\n", - " 15071.6865234375,\n", - " 8441.494140625,\n", - " 63421.1484375,\n", - " 37510.3203125,\n", - " 20482.66015625,\n", - " 85649.0,\n", - " 36468.55078125,\n", - " 49493.98828125,\n", - " 90344.46875,\n", - " 47439.37109375,\n", - " 39636.60546875,\n", - " 59364.3359375,\n", - " 73924.828125,\n", - " 47466.28515625,\n", - " 20133.70703125,\n", - " 12650.9970703125,\n", - " 14498.7373046875,\n", - " 34246.42578125,\n", - " ...],\n", - " 'equiv_household_net_income': [36422.640625,\n", - " 2362.838623046875,\n", - " 8048.4697265625,\n", - " 18229.52734375,\n", - " 215954.0625,\n", - " 23153.92578125,\n", - " 49857.5078125,\n", - " 25629.09375,\n", - " 16089.5517578125,\n", - " 39978.03125,\n", - " 63282.33203125,\n", - " 18343.779296875,\n", - " 57078.1484375,\n", - " 21267.255859375,\n", - " 24498.544921875,\n", - " 48645.6484375,\n", - " 31204.416015625,\n", - " 55746.21484375,\n", - " 42795.4765625,\n", - " 16797.681640625,\n", - " 45398.47265625,\n", - " 24891.845703125,\n", - " 37844.9921875,\n", - " 6402.63525390625,\n", - " 40684.71875,\n", - " 19268.46875,\n", - " 24358.6875,\n", - " 52437.859375,\n", - " 14303.0,\n", - " 23527.033203125,\n", - " -128506.71875,\n", - " 20571.6328125,\n", - " 42379.375,\n", - " 86451.25,\n", - " -14620.3388671875,\n", - " 41974.16015625,\n", - " 30045.90234375,\n", - " 30244.841796875,\n", - " 17751.830078125,\n", - " 40146.6015625,\n", - " 21301.7578125,\n", - " 22928.806640625,\n", - " 19668.513671875,\n", - " 52759.4921875,\n", - " 26723.1484375,\n", - " 8331.0439453125,\n", - " 4884.60693359375,\n", - " 16732.796875,\n", - " 65054.0859375,\n", - " 37356.80078125,\n", - " -2357.8154296875,\n", - " 39088.7265625,\n", - " 41926.2734375,\n", - " 24192.912109375,\n", - " 27245.076171875,\n", - " 31805.767578125,\n", - " 40269.24609375,\n", - " 52790.359375,\n", - " 38112.44140625,\n", - " 76038.140625,\n", - " 39811.79296875,\n", - " 16408.17578125,\n", - " 9079.255859375,\n", - " 28238.001953125,\n", - " 22798.958984375,\n", - " 17301.541015625,\n", - " 47389.671875,\n", - " 45542.71484375,\n", - " 8121.85546875,\n", - " 14709.470703125,\n", - " 40114.25,\n", - " 13023.8046875,\n", - " 17303.537109375,\n", - " 20504.427734375,\n", - " 59134.7421875,\n", - " 98947.515625,\n", - " 20604.83984375,\n", - " 17999.369140625,\n", - " 159709.203125,\n", - " 15345.5771484375,\n", - " 16601.287109375,\n", - " 247105.734375,\n", - " 19922.265625,\n", - " 10712.26171875,\n", - " 13640.35546875,\n", - " 225671.484375,\n", - " 81476.265625,\n", - " 28551.740234375,\n", - " 13907.29296875,\n", - " 15947.091796875,\n", - " 56296.94921875,\n", - " 54105.33203125,\n", - " 22895.619140625,\n", - " 72516.3828125,\n", - " 37996.1875,\n", - " 36104.72265625,\n", - " 61934.015625,\n", - " 33127.8984375,\n", - " 39637.23046875,\n", - " 20767.580078125,\n", - " 34611.37890625,\n", - " 65076.65234375,\n", - " 15319.5947265625,\n", - " 21051.16796875,\n", - " 36979.61328125,\n", - " 31142.58984375,\n", - " 33127.40234375,\n", - " 14623.556640625,\n", - " 33696.6796875,\n", - " 20216.330078125,\n", - " 54366.6171875,\n", - " 11743.3720703125,\n", - " 53807.26171875,\n", - " 28560.58203125,\n", - " 2931.02490234375,\n", - " 29221.314453125,\n", - " 45170.7109375,\n", - " 109635.8984375,\n", - " 316855.375,\n", - " 13937.6279296875,\n", - " 2153.59375,\n", - " 28363.201171875,\n", - " 93682.4375,\n", - " 29307.89453125,\n", - " 39436.43359375,\n", - " 53134.70703125,\n", - " 65913.8046875,\n", - " 26821.107421875,\n", - " 42627.796875,\n", - " 37928.48046875,\n", - " 83130.1171875,\n", - " 43184.00390625,\n", - " 163849.03125,\n", - " 37655.34765625,\n", - " 31983.373046875,\n", - " 38660.98046875,\n", - " 14731.21484375,\n", - " 35525.08203125,\n", - " 23297.537109375,\n", - " 62699.0625,\n", - " 25515.904296875,\n", - " 36228.21875,\n", - " 12868.439453125,\n", - " 14995.2431640625,\n", - " 26728.060546875,\n", - " 47194.2578125,\n", - " 93494.2109375,\n", - " 29981.525390625,\n", - " 56074.23046875,\n", - " 24202.115234375,\n", - " 19933.943359375,\n", - " 37409.5625,\n", - " 44506.875,\n", - " 31104.216796875,\n", - " 43985.0,\n", - " 33936.59765625,\n", - " 65855.8046875,\n", - " 37247.140625,\n", - " 43182.4375,\n", - " 55756.03125,\n", - " 25467.625,\n", - " 23343.6953125,\n", - " 42640.640625,\n", - " 39582.671875,\n", - " 94872.5546875,\n", - " 39044.38671875,\n", - " 12448.302734375,\n", - " 16616.28515625,\n", - " 6275.2900390625,\n", - " 26355.302734375,\n", - " 19625.673828125,\n", - " 31010.333984375,\n", - " 13195.3193359375,\n", - " 14254.9775390625,\n", - " 43346.359375,\n", - " 17338.513671875,\n", - " 55008.265625,\n", - " 38484.421875,\n", - " 34279.21875,\n", - " 43307.93359375,\n", - " 10254.0078125,\n", - " 28747.146484375,\n", - " 22420.833984375,\n", - " 101436.125,\n", - " 42817.6015625,\n", - " 10517.216796875,\n", - " 14571.1025390625,\n", - " 30616.111328125,\n", - " 77278.4375,\n", - " 8668.673828125,\n", - " 42562.12109375,\n", - " 20474.3359375,\n", - " 13592.9658203125,\n", - " 25364.431640625,\n", - " 49549.8515625,\n", - " 9970.51953125,\n", - " 23426.052734375,\n", - " 22873.0234375,\n", - " 43783.6953125,\n", - " 16653.173828125,\n", - " 45121.99609375,\n", - " 36034.15234375,\n", - " 14799.201171875,\n", - " 49377.890625,\n", - " 32652.716796875,\n", - " 44287.9609375,\n", - " 21811.62890625,\n", - " 27189.7578125,\n", - " 66434.546875,\n", - " 37962.953125,\n", - " 50144.54296875,\n", - " 45770.1953125,\n", - " 26521.69921875,\n", - " -6197.93310546875,\n", - " 14608.958984375,\n", - " 12817.646484375,\n", - " 18482.640625,\n", - " 116223.8671875,\n", - " 39697.8671875,\n", - " 24945.57421875,\n", - " 60881.02734375,\n", - " 5318.83203125,\n", - " 18722.62109375,\n", - " 23413.66796875,\n", - " 18665.654296875,\n", - " 8492.4462890625,\n", - " 23181.626953125,\n", - " 7410.8515625,\n", - " 53067.80859375,\n", - " 42139.5,\n", - " 23850.513671875,\n", - " 17202.611328125,\n", - " 32866.73046875,\n", - " 53617.3828125,\n", - " 18637.4296875,\n", - " 27981.734375,\n", - " 14424.9921875,\n", - " 71803.953125,\n", - " 27492.69921875,\n", - " 38381.6171875,\n", - " 37238.90234375,\n", - " 30328.294921875,\n", - " 29515.263671875,\n", - " 11764.9130859375,\n", - " 54711.28125,\n", - " 8986.0439453125,\n", - " 7532.173828125,\n", - " 12482.126953125,\n", - " 46031.421875,\n", - " 47589.80859375,\n", - " 45036.5625,\n", - " 45089.55078125,\n", - " 18192.373046875,\n", - " 34874.015625,\n", - " 23810.37109375,\n", - " 34507.3515625,\n", - " 14662.171875,\n", - " 49253.0,\n", - " 30346.115234375,\n", - " 23246.025390625,\n", - " 19994.828125,\n", - " 12682.2431640625,\n", - " 35959.77734375,\n", - " 27093.169921875,\n", - " 14592.029296875,\n", - " 85743.5,\n", - " 31780.89453125,\n", - " 119075.3359375,\n", - " 18675.29296875,\n", - " 88273.328125,\n", - " 26406.54296875,\n", - " 12437.9423828125,\n", - " 24493.697265625,\n", - " 18784.681640625,\n", - " 18816.6875,\n", - " 16649.91015625,\n", - " 56628.578125,\n", - " 17129.552734375,\n", - " 49142.50390625,\n", - " 18040.4921875,\n", - " 32302.802734375,\n", - " 33008.5625,\n", - " 53630.94140625,\n", - " 63800.2578125,\n", - " 784.814453125,\n", - " 23845.146484375,\n", - " 25201.677734375,\n", - " 19078.2421875,\n", - " 28730.771484375,\n", - " 39621.2265625,\n", - " 43758.3046875,\n", - " 20053.666015625,\n", - " 20522.232421875,\n", - " 66752.7265625,\n", - " 47923.5234375,\n", - " 20228.052734375,\n", - " 54537.859375,\n", - " 6707.26025390625,\n", - " 27683.369140625,\n", - " 28768.310546875,\n", - " 58807.0546875,\n", - " 33338.66015625,\n", - " 46597.4765625,\n", - " 4737.23388671875,\n", - " 51162.7578125,\n", - " 7003.6923828125,\n", - " 28688.521484375,\n", - " 17166.03125,\n", - " 24603.548828125,\n", - " 61470.32421875,\n", - " 44951.47265625,\n", - " 27131.701171875,\n", - " 12944.48828125,\n", - " 32952.13671875,\n", - " 29122.7734375,\n", - " 58167.84375,\n", - " 4317.85498046875,\n", - " 51374.984375,\n", - " 36237.7578125,\n", - " 38506.4296875,\n", - " 9771.4931640625,\n", - " -1644.28271484375,\n", - " 27923.158203125,\n", - " 42184.578125,\n", - " 14210.12109375,\n", - " 49270.84375,\n", - " 88079.9921875,\n", - " 70045.4375,\n", - " 63858.03515625,\n", - " 66405.203125,\n", - " 16148.2568359375,\n", - " 31819.5546875,\n", - " 20797.1875,\n", - " 48348.96484375,\n", - " 87744.53125,\n", - " 65465.796875,\n", - " 25453.822265625,\n", - " 23907.83984375,\n", - " 36507.546875,\n", - " 74979.7734375,\n", - " 24520.21875,\n", - " 15895.892578125,\n", - " 4315.546875,\n", - " 26328.6953125,\n", - " 41018.11328125,\n", - " 44666.06640625,\n", - " 6244.5185546875,\n", - " 18102.388671875,\n", - " 53116.94140625,\n", - " 31358.6484375,\n", - " 24436.38671875,\n", - " 20546.333984375,\n", - " 23356.197265625,\n", - " 41748.65234375,\n", - " 56526.02734375,\n", - " 54513.109375,\n", - " 12832.828125,\n", - " -792.3766479492188,\n", - " 29505.078125,\n", - " 37869.015625,\n", - " 29778.3125,\n", - " 39833.93359375,\n", - " 9318.8291015625,\n", - " 10148.1396484375,\n", - " 36949.359375,\n", - " 25564.44140625,\n", - " 38006.77734375,\n", - " 23252.044921875,\n", - " 29516.09765625,\n", - " 19197.04296875,\n", - " 41064.71875,\n", - " 31453.62109375,\n", - " 20698.7421875,\n", - " 58318.9140625,\n", - " 7440.6337890625,\n", - " 51359.6015625,\n", - " 28448.42578125,\n", - " 14908.603515625,\n", - " 5678.89599609375,\n", - " 16205.9091796875,\n", - " 30300.75,\n", - " 37340.3046875,\n", - " 21507.98828125,\n", - " 24167.09765625,\n", - " 26387.458984375,\n", - " 13952.1025390625,\n", - " 11261.869140625,\n", - " 12772.56640625,\n", - " 85620.8828125,\n", - " 101830.5390625,\n", - " 15804.052734375,\n", - " 47372.75390625,\n", - " 27068.123046875,\n", - " 9140.7919921875,\n", - " 53026.14453125,\n", - " 45028.69140625,\n", - " 13666.92578125,\n", - " 48914.328125,\n", - " 34990.1015625,\n", - " 58522.34375,\n", - " 27089.173828125,\n", - " 30523.048828125,\n", - " 65872.9140625,\n", - " 34892.1484375,\n", - " 31846.259765625,\n", - " 12395.0458984375,\n", - " 20225.3671875,\n", - " 184385.484375,\n", - " 58707.4453125,\n", - " 29242.97265625,\n", - " 7414.08056640625,\n", - " 59713.8515625,\n", - " 18101.66796875,\n", - " 49745.9453125,\n", - " 3278.4794921875,\n", - " 25003.451171875,\n", - " 32957.21484375,\n", - " 14118.3828125,\n", - " 90581.1015625,\n", - " 14515.5791015625,\n", - " 37489.3203125,\n", - " 12504.7041015625,\n", - " 11300.720703125,\n", - " 83288.578125,\n", - " 16281.306640625,\n", - " 20326.5234375,\n", - " 33706.3984375,\n", - " 74855.6875,\n", - " 57880.84375,\n", - " 85738.1015625,\n", - " 25264.890625,\n", - " 41754.796875,\n", - " 78207.6015625,\n", - " 68069.359375,\n", - " 17386.11328125,\n", - " 15225.3583984375,\n", - " 35514.1484375,\n", - " 20306.470703125,\n", - " 27048.25390625,\n", - " 4893.0693359375,\n", - " 38099.01953125,\n", - " 36059.703125,\n", - " 23529.447265625,\n", - " 38377.1875,\n", - " 43713.9375,\n", - " 36013.2734375,\n", - " 22285.546875,\n", - " 22419.544921875,\n", - " 17617.974609375,\n", - " 78061.2734375,\n", - " 37903.625,\n", - " 33228.14453125,\n", - " 11110.9140625,\n", - " 25799.072265625,\n", - " 28090.86328125,\n", - " 23351.6875,\n", - " 22969.412109375,\n", - " 28933.8828125,\n", - " 57645.609375,\n", - " 44837.1796875,\n", - " 30888.240234375,\n", - " 46319.32421875,\n", - " 35788.3203125,\n", - " 30006.201171875,\n", - " 33175.734375,\n", - " 15046.4326171875,\n", - " 45716.5625,\n", - " 29801.908203125,\n", - " 25115.400390625,\n", - " 48331.67578125,\n", - " 50427.67578125,\n", - " 41796.2578125,\n", - " 15541.6435546875,\n", - " 10752.83203125,\n", - " 165802.65625,\n", - " 36483.609375,\n", - " 43690.75390625,\n", - " 18202.853515625,\n", - " 57241.4296875,\n", - " 26884.689453125,\n", - " 14920.4912109375,\n", - " 25258.953125,\n", - " 22343.623046875,\n", - " 16612.43359375,\n", - " 23466.1328125,\n", - " 79493.5,\n", - " 43651.578125,\n", - " 22556.2578125,\n", - " 34778.34375,\n", - " 25830.61328125,\n", - " 22758.439453125,\n", - " 5451.93408203125,\n", - " 33857.515625,\n", - " 8252.1015625,\n", - " 30842.009765625,\n", - " 32963.51953125,\n", - " 60793.8203125,\n", - " 43073.984375,\n", - " 26013.9921875,\n", - " 36117.046875,\n", - " 30540.87109375,\n", - " 22386.880859375,\n", - " 44903.4921875,\n", - " 70017.3125,\n", - " 23436.537109375,\n", - " 50410.8359375,\n", - " 35373.50390625,\n", - " 36039.640625,\n", - " 17873.18359375,\n", - " 20778.88671875,\n", - " 93413.3515625,\n", - " 102845.3203125,\n", - " 27863.84375,\n", - " 36127.82421875,\n", - " 17154.263671875,\n", - " 24221.40625,\n", - " 26561.56640625,\n", - " 76981.703125,\n", - " 23874.271484375,\n", - " -1615.9718017578125,\n", - " 16799.119140625,\n", - " 13872.1416015625,\n", - " 29663.61328125,\n", - " 40424.08203125,\n", - " 4962.96875,\n", - " 64355.9609375,\n", - " 13733.1884765625,\n", - " 31397.859375,\n", - " 8555.2763671875,\n", - " 58236.171875,\n", - " 48424.5625,\n", - " 26321.439453125,\n", - " 44824.77734375,\n", - " 13355.7529296875,\n", - " 12123.822265625,\n", - " 25941.162109375,\n", - " 15988.8388671875,\n", - " 56277.58984375,\n", - " 30911.49609375,\n", - " 37916.1015625,\n", - " 17440.96875,\n", - " 36271.80859375,\n", - " 20793.876953125,\n", - " 45610.49609375,\n", - " 5558.8203125,\n", - " 33343.953125,\n", - " 13231.47265625,\n", - " 25103.853515625,\n", - " 32936.6328125,\n", - " 48875.15625,\n", - " 11804.5087890625,\n", - " 26090.37109375,\n", - " 19392.08984375,\n", - " 28674.189453125,\n", - " 32070.3046875,\n", - " 14257.025390625,\n", - " 37311.34765625,\n", - " 107163.1875,\n", - " 62488.0078125,\n", - " 50284.09375,\n", - " 39238.19140625,\n", - " 32204.1796875,\n", - " 19523.6171875,\n", - " 29975.720703125,\n", - " 16042.4814453125,\n", - " 23819.400390625,\n", - " -1925.006103515625,\n", - " 16447.798828125,\n", - " 44308.46484375,\n", - " 43619.296875,\n", - " 19156.98828125,\n", - " 7492.453125,\n", - " 29280.53515625,\n", - " 12819.9794921875,\n", - " 22664.0859375,\n", - " 69761.015625,\n", - " 14535.3544921875,\n", - " 25802.1015625,\n", - " 83275.9375,\n", - " 41495.890625,\n", - " 34835.11328125,\n", - " 22540.29296875,\n", - " 29048.76953125,\n", - " 10953.4326171875,\n", - " 21397.474609375,\n", - " 26326.61328125,\n", - " 111589.75,\n", - " 33014.65234375,\n", - " 52871.390625,\n", - " 22436.779296875,\n", - " 53535.0078125,\n", - " 29324.517578125,\n", - " 44941.04296875,\n", - " 33902.55859375,\n", - " 17083.828125,\n", - " 29809.63671875,\n", - " 27281.75390625,\n", - " 21684.150390625,\n", - " 112403.75,\n", - " -2138.056640625,\n", - " 14898.3486328125,\n", - " 9415.193359375,\n", - " 25898.125,\n", - " 32374.02734375,\n", - " 13452.158203125,\n", - " 18496.826171875,\n", - " 25087.12109375,\n", - " 20784.705078125,\n", - " 18147.939453125,\n", - " 30693.2890625,\n", - " 35289.1796875,\n", - " 45590.9453125,\n", - " 61605.2890625,\n", - " 50607.04296875,\n", - " 17697.06640625,\n", - " 20223.3125,\n", - " 37881.5390625,\n", - " 16098.6103515625,\n", - " 139717.875,\n", - " 127699.5234375,\n", - " 29061.451171875,\n", - " 27484.91015625,\n", - " 30105.51171875,\n", - " 29637.55859375,\n", - " 54936.13671875,\n", - " 37266.41015625,\n", - " 21377.71875,\n", - " 47959.35546875,\n", - " 114339.5625,\n", - " 36787.16796875,\n", - " 212275.28125,\n", - " 20259.96875,\n", - " 41261.48828125,\n", - " 30673.759765625,\n", - " 8387.8349609375,\n", - " 27138.552734375,\n", - " 4058.3984375,\n", - " 42021.40625,\n", - " 31963.03125,\n", - " 26259.359375,\n", - " 24866.9140625,\n", - " 28586.48828125,\n", - " 75037.921875,\n", - " 31767.693359375,\n", - " 32050.4453125,\n", - " 52963.28515625,\n", - " 13658.0615234375,\n", - " 19319.8984375,\n", - " 23271.291015625,\n", - " 26380.630859375,\n", - " 19319.82421875,\n", - " 25429.947265625,\n", - " 53831.73046875,\n", - " 21362.1640625,\n", - " 15300.421875,\n", - " 35388.078125,\n", - " 53019.0234375,\n", - " 32513.4609375,\n", - " 29751.576171875,\n", - " 13146.28125,\n", - " 3122.890869140625,\n", - " 66132.625,\n", - " 15539.8134765625,\n", - " 30070.98828125,\n", - " 39296.5625,\n", - " 41056.796875,\n", - " 85657.9609375,\n", - " 70165.3671875,\n", - " -180.17051696777344,\n", - " 25807.58984375,\n", - " 24358.892578125,\n", - " 24472.259765625,\n", - " 30045.8671875,\n", - " 96428.6796875,\n", - " 37655.984375,\n", - " 16049.3896484375,\n", - " 42416.84765625,\n", - " 20409.701171875,\n", - " 19889.140625,\n", - " 16967.33984375,\n", - " 4545.45703125,\n", - " 10306.2958984375,\n", - " -4117.87939453125,\n", - " 28499.060546875,\n", - " 22129.21875,\n", - " 19860.50390625,\n", - " 44325.02734375,\n", - " 55448.0859375,\n", - " 27727.015625,\n", - " 18130.427734375,\n", - " 10583.7568359375,\n", - " 75271.2890625,\n", - " 19189.17578125,\n", - " 10913.0751953125,\n", - " 78950.5625,\n", - " 27205.94921875,\n", - " 71770.90625,\n", - " 38644.265625,\n", - " 54082.64453125,\n", - " 67882.5078125,\n", - " 6371.166015625,\n", - " 62952.44921875,\n", - " 15155.853515625,\n", - " 16380.400390625,\n", - " 32702.634765625,\n", - " 14332.3427734375,\n", - " 24194.193359375,\n", - " 12522.7763671875,\n", - " 26822.65625,\n", - " 15087.240234375,\n", - " 25270.4296875,\n", - " 47267.6328125,\n", - " 25293.400390625,\n", - " 40380.73828125,\n", - " 11508.037109375,\n", - " 23334.806640625,\n", - " 26666.826171875,\n", - " 46631.0078125,\n", - " 30362.708984375,\n", - " 59173.203125,\n", - " 92375.875,\n", - " 51.448081970214844,\n", - " 58943.23828125,\n", - " 27044.30859375,\n", - " 9362.609375,\n", - " 13975.076171875,\n", - " 68694.8671875,\n", - " 19054.07421875,\n", - " 48360.7421875,\n", - " 24019.640625,\n", - " 96129.375,\n", - " 20451.833984375,\n", - " 9228.568359375,\n", - " 46085.9375,\n", - " 28294.591796875,\n", - " 14338.4853515625,\n", - " 19786.79296875,\n", - " 15348.2412109375,\n", - " 40730.8984375,\n", - " 18072.572265625,\n", - " 59953.1015625,\n", - " 25484.669921875,\n", - " 5024.96923828125,\n", - " 12809.869140625,\n", - " 40208.265625,\n", - " 30859.478515625,\n", - " 16199.4306640625,\n", - " 16114.3564453125,\n", - " 38704.80859375,\n", - " 21763.607421875,\n", - " 20888.189453125,\n", - " 32577.404296875,\n", - " 31947.0390625,\n", - " 46900.8515625,\n", - " 24425.126953125,\n", - " 42139.09375,\n", - " 17819.859375,\n", - " 30276.599609375,\n", - " 30860.060546875,\n", - " 35473.97265625,\n", - " 27726.275390625,\n", - " 31756.41796875,\n", - " 31732.080078125,\n", - " 8368.32421875,\n", - " 15367.4140625,\n", - " -1459.6654052734375,\n", - " 16226.6796875,\n", - " 22996.201171875,\n", - " 23494.458984375,\n", - " 53217.1875,\n", - " 28052.361328125,\n", - " 62296.34765625,\n", - " 14956.197265625,\n", - " 50714.484375,\n", - " 9839.55078125,\n", - " 65650.0234375,\n", - " 39717.01171875,\n", - " 71768.828125,\n", - " 47548.41796875,\n", - " 58391.0,\n", - " 30451.890625,\n", - " 16345.4794921875,\n", - " 65415.3359375,\n", - " 18550.34375,\n", - " 39127.25390625,\n", - " 2135.538818359375,\n", - " 30820.69921875,\n", - " 38631.4609375,\n", - " 53259.1171875,\n", - " 46533.03125,\n", - " 42467.63671875,\n", - " 50009.27734375,\n", - " 62602.9609375,\n", - " -14764.322265625,\n", - " 43914.11328125,\n", - " 56603.05859375,\n", - " 39967.90234375,\n", - " 24632.3671875,\n", - " 50500.9375,\n", - " 53159.34765625,\n", - " 25874.40234375,\n", - " 29759.208984375,\n", - " 28191.326171875,\n", - " 16496.962890625,\n", - " 54421.89453125,\n", - " 25606.080078125,\n", - " 67049.046875,\n", - " 24640.759765625,\n", - " 19949.849609375,\n", - " 22977.603515625,\n", - " 33110.2890625,\n", - " 44441.46484375,\n", - " 17700.796875,\n", - " 40687.84375,\n", - " 11453.2607421875,\n", - " 74855.3671875,\n", - " 26719.123046875,\n", - " 49446.4453125,\n", - " 56087.0625,\n", - " 21868.412109375,\n", - " 26760.509765625,\n", - " 38107.1171875,\n", - " 28325.751953125,\n", - " 34561.515625,\n", - " 21858.865234375,\n", - " 16667.521484375,\n", - " 10488.865234375,\n", - " 44030.8671875,\n", - " 41608.1484375,\n", - " 21066.318359375,\n", - " 27940.359375,\n", - " 14811.33984375,\n", - " 18315.005859375,\n", - " 30823.646484375,\n", - " 27949.712890625,\n", - " 21993.978515625,\n", - " 8649.9384765625,\n", - " 11661.9658203125,\n", - " 44993.0546875,\n", - " 28194.365234375,\n", - " 10455.876953125,\n", - " 38569.35546875,\n", - " -1186.7822265625,\n", - " 13953.154296875,\n", - " 67316.296875,\n", - " 10534.1181640625,\n", - " 30649.626953125,\n", - " 36713.5390625,\n", - " 18077.931640625,\n", - " 21595.51171875,\n", - " 43438.6015625,\n", - " 20202.908203125,\n", - " 44239.81640625,\n", - " -1273.9400634765625,\n", - " 25072.08984375,\n", - " 64521.859375,\n", - " 62752.5859375,\n", - " 56234.7890625,\n", - " 18445.2578125,\n", - " 26930.767578125,\n", - " 33451.7578125,\n", - " 24272.9609375,\n", - " 102411.421875,\n", - " 38791.65234375,\n", - " 461.5087890625,\n", - " 17670.892578125,\n", - " 18847.556640625,\n", - " 17711.14453125,\n", - " 56651.421875,\n", - " 67058.5859375,\n", - " 79814.296875,\n", - " 33632.27734375,\n", - " 90223.390625,\n", - " 29939.85546875,\n", - " 35369.72265625,\n", - " 46388.28125,\n", - " 48631.51953125,\n", - " 35594.921875,\n", - " 30177.19140625,\n", - " 15207.3515625,\n", - " 17397.818359375,\n", - " 20977.091796875,\n", - " 29226.65625,\n", - " 5847.40869140625,\n", - " 22272.18359375,\n", - " 14584.759765625,\n", - " 48875.7578125,\n", - " 5823.2275390625,\n", - " 35036.7890625,\n", - " -3955.75146484375,\n", - " 41414.6015625,\n", - " 23248.951171875,\n", - " 59937.37109375,\n", - " 20471.45703125,\n", - " 14843.423828125,\n", - " 29704.974609375,\n", - " 13539.671875,\n", - " 27670.732421875,\n", - " 34542.73828125,\n", - " 28786.330078125,\n", - " 36790.203125,\n", - " 13895.251953125,\n", - " 33641.1328125,\n", - " 40596.91015625,\n", - " 30623.63671875,\n", - " 39850.9453125,\n", - " 7932.80859375,\n", - " 13869.248046875,\n", - " 8058.07666015625,\n", - " 57953.3203125,\n", - " 43571.48046875,\n", - " 32371.4765625,\n", - " 15622.8408203125,\n", - " 29079.02734375,\n", - " 31264.64453125,\n", - " 37622.62109375,\n", - " -237.3134307861328,\n", - " 14291.69140625,\n", - " 13674.810546875,\n", - " 60082.73828125,\n", - " 17073.72265625,\n", - " 27127.5625,\n", - " 30895.611328125,\n", - " 44252.69921875,\n", - " 22301.18359375,\n", - " 13103.2685546875,\n", - " 49708.484375,\n", - " 22398.3828125,\n", - " 26104.982421875,\n", - " 22824.251953125,\n", - " 24146.203125,\n", - " 54125.02734375,\n", - " 27537.630859375,\n", - " 52702.76953125,\n", - " 26993.50390625,\n", - " 33609.140625,\n", - " 24234.146484375,\n", - " 17092.29296875,\n", - " 9484.90625,\n", - " 37887.20703125,\n", - " 12926.9990234375,\n", - " 14153.3037109375,\n", - " 27421.478515625,\n", - " 38240.7734375,\n", - " 11423.01953125,\n", - " 29741.29296875,\n", - " 33518.7421875,\n", - " 19630.095703125,\n", - " 46122.6640625,\n", - " 42986.69921875,\n", - " 60603.26953125,\n", - " 78077.4296875,\n", - " 25348.595703125,\n", - " 141768.359375,\n", - " 17419.865234375,\n", - " 37214.04296875,\n", - " 47550.546875,\n", - " 2555.774169921875,\n", - " 40797.83984375,\n", - " 15770.1630859375,\n", - " 34715.9921875,\n", - " 90438.25,\n", - " 13393.873046875,\n", - " 77990.96875,\n", - " 28253.08203125,\n", - " 23729.84765625,\n", - " 50501.671875,\n", - " 21267.103515625,\n", - " 155358.1875,\n", - " 13866.76171875,\n", - " 44408.0390625,\n", - " 21167.71484375,\n", - " 26000.4453125,\n", - " 15726.8447265625,\n", - " 40251.81640625,\n", - " 14443.916015625,\n", - " 29918.015625,\n", - " 24050.12890625,\n", - " 2930.2978515625,\n", - " 14414.0498046875,\n", - " 53461.49609375,\n", - " 50449.61328125,\n", - " 15071.6865234375,\n", - " 9702.8671875,\n", - " 63421.1484375,\n", - " 37510.3203125,\n", - " 30571.134765625,\n", - " 85649.0,\n", - " 36468.55078125,\n", - " 35352.84765625,\n", - " 90344.46875,\n", - " 35668.69921875,\n", - " 59159.109375,\n", - " 59364.3359375,\n", - " 61604.01953125,\n", - " 47466.28515625,\n", - " 30050.30859375,\n", - " 18882.083984375,\n", - " 14498.7373046875,\n", - " 28538.6875,\n", - " ...],\n", - " 'household_income_decile': [4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 6,\n", - " 8,\n", - " -1,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 3,\n", - " -1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 10,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 1,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 5,\n", - " 10,\n", - " 4,\n", - " 9,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 9,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " -1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 4,\n", - " 5,\n", - " 3,\n", - " 8,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 1,\n", - " -1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 9,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 6,\n", - " 1,\n", - " 8,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 10,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 7,\n", - " 7,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 9,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 10,\n", - " 9,\n", - " 6,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 5,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 5,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 9,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 9,\n", - " 4,\n", - " 7,\n", - " 8,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 10,\n", - " 4,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " -1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " -1,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 8,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 9,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 1,\n", - " 4,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " -1,\n", - " 1,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " -1,\n", - " 2,\n", - " 7,\n", - " 4,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 9,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 5,\n", - " 10,\n", - " 2,\n", - " 1,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " -1,\n", - " 8,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 7,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " -1,\n", - " 1,\n", - " 1,\n", - " 9,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 6,\n", - " 5,\n", - " 9,\n", - " 8,\n", - " 2,\n", - " 10,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 10,\n", - " 1,\n", - " 8,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 10,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 7,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 6,\n", - " 4,\n", - " 1,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 9,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " ...],\n", - " 'household_market_income': [60994.5625,\n", - " 0.0,\n", - " 18010.205078125,\n", - " 0.0,\n", - " 373717.65625,\n", - " 26749.30078125,\n", - " 69821.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 52528.16015625,\n", - " 146368.4375,\n", - " 39185.9609375,\n", - " 67567.671875,\n", - " 10514.4208984375,\n", - " 27047.498046875,\n", - " 51374.58984375,\n", - " 26812.302734375,\n", - " 106063.8203125,\n", - " 94472.2109375,\n", - " 30842.599609375,\n", - " 99296.265625,\n", - " 23713.4375,\n", - " 101794.2578125,\n", - " 0.0,\n", - " 58362.53125,\n", - " 3544.39794921875,\n", - " 22040.716796875,\n", - " 117900.046875,\n", - " 46433.984375,\n", - " 29057.640625,\n", - " 2313.760498046875,\n", - " 8525.25390625,\n", - " 103453.3203125,\n", - " 136669.625,\n", - " 5078.99462890625,\n", - " 105974.7421875,\n", - " 29681.6875,\n", - " 2794.124267578125,\n", - " 2.351956367492676,\n", - " 36287.5859375,\n", - " 56010.59375,\n", - " 24493.87890625,\n", - " 36788.27734375,\n", - " 44295.5703125,\n", - " 52423.15234375,\n", - " 0.0,\n", - " 0.0,\n", - " 963.843505859375,\n", - " 72829.4296875,\n", - " 41371.1015625,\n", - " 0.0,\n", - " 54511.30078125,\n", - " 50426.7421875,\n", - " 11403.8486328125,\n", - " 75162.59375,\n", - " 9752.9755859375,\n", - " 35792.03515625,\n", - " 120037.6171875,\n", - " 32626.22265625,\n", - " 31517.85546875,\n", - " 75488.5859375,\n", - " 4687.91943359375,\n", - " 0.0,\n", - " 54931.125,\n", - " 570.3494262695312,\n", - " 22931.576171875,\n", - " 66097.3359375,\n", - " 65230.10546875,\n", - " 10505.953125,\n", - " 0.0,\n", - " 97300.9140625,\n", - " 14273.4345703125,\n", - " 9125.1708984375,\n", - " 0.0,\n", - " 224138.15625,\n", - " 154240.703125,\n", - " 0.0,\n", - " 20865.361328125,\n", - " 453857.15625,\n", - " 4600.4267578125,\n", - " 6467.8798828125,\n", - " 308531.8125,\n", - " 8219.962890625,\n", - " 16871.029296875,\n", - " 9610.6103515625,\n", - " 555938.25,\n", - " 130033.8203125,\n", - " 17524.42578125,\n", - " 1.175978183746338,\n", - " 0.0,\n", - " 85743.28125,\n", - " 55672.796875,\n", - " 37401.25390625,\n", - " 109751.8828125,\n", - " 38001.53125,\n", - " 34339.45703125,\n", - " 97675.34375,\n", - " 11555.5400390625,\n", - " 36049.75390625,\n", - " 0.0,\n", - " 33979.28515625,\n", - " 101109.75,\n", - " 0.0,\n", - " 0.0,\n", - " 50993.75390625,\n", - " 46046.09375,\n", - " 44347.078125,\n", - " 0.0,\n", - " 45025.515625,\n", - " 5869.43310546875,\n", - " 87662.078125,\n", - " 0.0,\n", - " 50608.671875,\n", - " 1984.2515869140625,\n", - " 4802.7216796875,\n", - " 0.0,\n", - " 31455.01953125,\n", - " 253553.9375,\n", - " 571865.1875,\n", - " 0.0,\n", - " 0.0,\n", - " 27327.73828125,\n", - " 218343.734375,\n", - " 54030.6171875,\n", - " 55581.90234375,\n", - " 109028.828125,\n", - " 69128.5546875,\n", - " 0.0,\n", - " 53610.37890625,\n", - " 45810.53515625,\n", - " 252410.265625,\n", - " 126613.40625,\n", - " 477236.21875,\n", - " 26165.421875,\n", - " 101337.4296875,\n", - " 24459.087890625,\n", - " 3034.0234375,\n", - " 587.9890747070312,\n", - " 9638.4580078125,\n", - " 66619.453125,\n", - " 4614.98486328125,\n", - " 19264.216796875,\n", - " 17127.716796875,\n", - " 3527.934326171875,\n", - " 23460.763671875,\n", - " 59636.203125,\n", - " 95814.671875,\n", - " 476.2711486816406,\n", - " 84878.234375,\n", - " 0.0,\n", - " 9425.3408203125,\n", - " 22254.314453125,\n", - " 26168.7109375,\n", - " 0.0,\n", - " 95750.78125,\n", - " 73121.4296875,\n", - " 118737.4140625,\n", - " 60758.8359375,\n", - " 59193.81640625,\n", - " 82704.2109375,\n", - " 0.0,\n", - " 20291.49609375,\n", - " 70062.0546875,\n", - " 82321.3359375,\n", - " 101886.125,\n", - " 73660.4375,\n", - " 0.0,\n", - " 129.35760498046875,\n", - " 0.0,\n", - " 29896.94140625,\n", - " 46046.09765625,\n", - " 0.0,\n", - " 14528.1103515625,\n", - " 295.4645080566406,\n", - " 0.0,\n", - " 12501.775390625,\n", - " 77576.796875,\n", - " 36022.17578125,\n", - " 47971.38671875,\n", - " 44245.06640625,\n", - " 3485.740234375,\n", - " 41464.78515625,\n", - " 0.0,\n", - " 160651.03125,\n", - " 64680.390625,\n", - " 12866.259765625,\n", - " 0.0,\n", - " 49606.8828125,\n", - " 117636.2734375,\n", - " 11823.7373046875,\n", - " 47131.9296875,\n", - " 0.0,\n", - " 0.0,\n", - " 57780.29296875,\n", - " 31121.046875,\n", - " 35920.48828125,\n", - " 12869.9052734375,\n", - " 16989.625,\n", - " 33162.5859375,\n", - " 25892.302734375,\n", - " 44905.4453125,\n", - " 1.4699727296829224,\n", - " 0.0,\n", - " 69195.53125,\n", - " 21254.62890625,\n", - " 52285.1640625,\n", - " 39170.58984375,\n", - " 39142.1796875,\n", - " 85875.765625,\n", - " 8830.6298828125,\n", - " 51844.640625,\n", - " 118567.1875,\n", - " 26357.580078125,\n", - " 9605.4423828125,\n", - " 11769.330078125,\n", - " 1252.416748046875,\n", - " 11304.08984375,\n", - " 187246.09375,\n", - " 57632.65625,\n", - " 23031.533203125,\n", - " 82971.7109375,\n", - " 0.0,\n", - " 36030.23046875,\n", - " 59063.1484375,\n", - " 7327.52001953125,\n", - " 3962.245361328125,\n", - " 23944.212890625,\n", - " 107468.8359375,\n", - " 104952.9375,\n", - " 39492.1484375,\n", - " 21654.88671875,\n", - " 0.0,\n", - " 45807.66015625,\n", - " 43652.3046875,\n", - " 0.0,\n", - " 29917.26171875,\n", - " 7178.89990234375,\n", - " 47112.625,\n", - " 43661.61328125,\n", - " 74368.859375,\n", - " 34519.5625,\n", - " 49047.79296875,\n", - " 9412.529296875,\n", - " 14896.076171875,\n", - " 79558.5390625,\n", - " 9555.73046875,\n", - " 13807.82421875,\n", - " 13687.755859375,\n", - " 43038.765625,\n", - " 30546.033203125,\n", - " 29833.322265625,\n", - " 87424.234375,\n", - " 7775.99755859375,\n", - " 50312.9765625,\n", - " 23000.224609375,\n", - " 20051.365234375,\n", - " 14408.1640625,\n", - " 28311.673828125,\n", - " 21404.37890625,\n", - " 44633.73046875,\n", - " 19255.939453125,\n", - " 15003.796875,\n", - " 49557.46484375,\n", - " 21380.833984375,\n", - " 352.7934265136719,\n", - " 130404.21875,\n", - " 29959.326171875,\n", - " 284020.9375,\n", - " 31998.1328125,\n", - " 176079.765625,\n", - " 52914.703125,\n", - " 0.0,\n", - " 6622.10888671875,\n", - " 41470.85546875,\n", - " 17950.171875,\n", - " 4233.521484375,\n", - " 82186.5703125,\n", - " 8802.1962890625,\n", - " 69459.359375,\n", - " 0.0,\n", - " 62675.515625,\n", - " 84865.71875,\n", - " 54690.9921875,\n", - " 126683.9140625,\n", - " 20448.19921875,\n", - " 25934.693359375,\n", - " 30077.04296875,\n", - " 2419.69287109375,\n", - " 25574.4921875,\n", - " 59553.77734375,\n", - " 145393.25,\n", - " 12712.216796875,\n", - " 7100.74462890625,\n", - " 141503.09375,\n", - " 55718.109375,\n", - " 28213.67578125,\n", - " 55651.53515625,\n", - " 0.0,\n", - " 8992.19921875,\n", - " 50608.6796875,\n", - " 67898.46875,\n", - " 29060.62109375,\n", - " 98090.1796875,\n", - " 5523.1298828125,\n", - " 79967.671875,\n", - " 16209.185546875,\n", - " 46526.36328125,\n", - " 21432.14453125,\n", - " 149433.8125,\n", - " 80925.8515625,\n", - " 82211.4296875,\n", - " 12401.1142578125,\n", - " 6519.623046875,\n", - " 45940.375,\n", - " 59630.1875,\n", - " 82844.484375,\n", - " 260.220458984375,\n", - " 66813.296875,\n", - " 34485.55859375,\n", - " 119627.3515625,\n", - " 0.0,\n", - " 0.0,\n", - " 6074.3974609375,\n", - " 64946.92578125,\n", - " 919.7828979492188,\n", - " 72825.609375,\n", - " 160773.859375,\n", - " 160902.203125,\n", - " 119425.8125,\n", - " 63987.109375,\n", - " 17746.685546875,\n", - " 29956.974609375,\n", - " 15085.447265625,\n", - " 69099.15625,\n", - " 134289.203125,\n", - " 151239.796875,\n", - " 11949.6474609375,\n", - " 11742.142578125,\n", - " 46587.86328125,\n", - " 114064.640625,\n", - " 47426.875,\n", - " 13275.3818359375,\n", - " 9666.541015625,\n", - " 13758.9443359375,\n", - " 40943.19921875,\n", - " 86330.390625,\n", - " 11732.986328125,\n", - " 6088.97998046875,\n", - " 51389.12109375,\n", - " 0.0,\n", - " 4291.802734375,\n", - " 19286.04296875,\n", - " 22272.62109375,\n", - " 40402.89453125,\n", - " 63938.2265625,\n", - " 80745.75,\n", - " 0.0,\n", - " 1675.397216796875,\n", - " 25453.884765625,\n", - " 0.0,\n", - " 44245.0703125,\n", - " 54090.6484375,\n", - " 12420.0927734375,\n", - " 0.0,\n", - " 25606.267578125,\n", - " 11465.7880859375,\n", - " 50353.25,\n", - " 22559.107421875,\n", - " 49336.98828125,\n", - " 0.0,\n", - " 55711.5703125,\n", - " 23672.44140625,\n", - " 18070.23828125,\n", - " 87611.6796875,\n", - " 1228.0152587890625,\n", - " 113666.375,\n", - " 18304.099609375,\n", - " 1513.20166015625,\n", - " 5879.890625,\n", - " 0.0,\n", - " 18115.943359375,\n", - " 33619.05078125,\n", - " 6749.00927734375,\n", - " 0.0,\n", - " 38691.75390625,\n", - " 0.0,\n", - " 10867.568359375,\n", - " 2549.520751953125,\n", - " 122945.21875,\n", - " 277619.96875,\n", - " 0.0,\n", - " 47543.1484375,\n", - " 59433.91015625,\n", - " 24331.318359375,\n", - " 99664.078125,\n", - " 103771.9765625,\n", - " 2981.104736328125,\n", - " 96061.28125,\n", - " 47667.01171875,\n", - " 164195.96875,\n", - " 0.0,\n", - " 35244.37890625,\n", - " 198399.859375,\n", - " 57332.48828125,\n", - " 40401.76171875,\n", - " 8256.2646484375,\n", - " 13567.6884765625,\n", - " 261062.84375,\n", - " 151547.078125,\n", - " 0.0,\n", - " 8712.2822265625,\n", - " 86416.2109375,\n", - " 18242.28125,\n", - " 48027.21484375,\n", - " 14111.884765625,\n", - " 26268.91015625,\n", - " 0.0,\n", - " 4802.7216796875,\n", - " 183610.96875,\n", - " 11406.4638671875,\n", - " 37213.828125,\n", - " 6761.8740234375,\n", - " 13120.9755859375,\n", - " 89477.6171875,\n", - " 4139.02294921875,\n", - " 211.6760711669922,\n", - " 47086.30078125,\n", - " 76914.8515625,\n", - " 83927.5625,\n", - " 226208.1875,\n", - " 6620.7568359375,\n", - " 56576.78125,\n", - " 115454.7734375,\n", - " 101937.765625,\n", - " 24569.337890625,\n", - " 0.0,\n", - " 24709.5,\n", - " 13387.5849609375,\n", - " 30502.521484375,\n", - " 9005.1025390625,\n", - " 69039.125,\n", - " 125768.21875,\n", - " 55151.46484375,\n", - " 68600.46875,\n", - " 30870.015625,\n", - " 84768.0390625,\n", - " 44309.65234375,\n", - " 20872.7109375,\n", - " 17353.359375,\n", - " 194500.5625,\n", - " 74538.359375,\n", - " 0.0,\n", - " 0.0,\n", - " 22512.7578125,\n", - " 35279.34375,\n", - " 16884.9765625,\n", - " 0.0,\n", - " 21011.908203125,\n", - " 104639.2890625,\n", - " 55233.6484375,\n", - " 46595.91015625,\n", - " 70399.90625,\n", - " 0.0,\n", - " 54330.7890625,\n", - " 25153.32421875,\n", - " 11586.5654296875,\n", - " 45676.19921875,\n", - " 38541.84375,\n", - " 21761.5234375,\n", - " 49468.03125,\n", - " 106462.9375,\n", - " 73866.296875,\n", - " 4562.58544921875,\n", - " 29458.296875,\n", - " 275635.0625,\n", - " 33536.78515625,\n", - " 0.587989091873169,\n", - " 33574.3515625,\n", - " 80985.890625,\n", - " 46046.09375,\n", - " 0.0,\n", - " 43584.69921875,\n", - " 18896.833984375,\n", - " 0.0,\n", - " 10426.45703125,\n", - " 82469.9609375,\n", - " 61013.00390625,\n", - " 23017.625,\n", - " 30797.451171875,\n", - " 24016.546875,\n", - " 45025.515625,\n", - " 0.0,\n", - " 21530.9140625,\n", - " 15301.265625,\n", - " 5100.87548828125,\n", - " 0.0,\n", - " 104229.578125,\n", - " 22076.048828125,\n", - " 0.0,\n", - " 34421.3515625,\n", - " 15745.6123046875,\n", - " 21432.14453125,\n", - " 64730.1640625,\n", - " 102832.5078125,\n", - " 9324.1904296875,\n", - " 68787.6953125,\n", - " 24914.861328125,\n", - " 37501.73046875,\n", - " 4167.05517578125,\n", - " 18151.734375,\n", - " 138226.5625,\n", - " 216556.59375,\n", - " 18614.51171875,\n", - " 194050.703125,\n", - " 8813.044921875,\n", - " 7721.87109375,\n", - " 21131.974609375,\n", - " 79169.7578125,\n", - " 3.5279343128204346,\n", - " 199.45205688476562,\n", - " 7532.14013671875,\n", - " 96.2391128540039,\n", - " 44.099178314208984,\n", - " 15553.7802734375,\n", - " 0.0,\n", - " 135831.609375,\n", - " 28759.236328125,\n", - " 31765.34765625,\n", - " 0.0,\n", - " 66152.2109375,\n", - " 18455.517578125,\n", - " 35611.265625,\n", - " 121700.1484375,\n", - " 26953.20703125,\n", - " 11612.02734375,\n", - " 16773.37890625,\n", - " 1.175978183746338,\n", - " 113108.296875,\n", - " 60520.40625,\n", - " 77016.5234375,\n", - " 22932.99609375,\n", - " 34519.5625,\n", - " 0.0,\n", - " 85534.125,\n", - " 31474.224609375,\n", - " 110279.203125,\n", - " 3045.666015625,\n", - " 0.0,\n", - " 62675.515625,\n", - " 59198.7421875,\n", - " 0.0,\n", - " 24702.31640625,\n", - " 0.0,\n", - " 52255.16796875,\n", - " 34171.90234375,\n", - " 0.0,\n", - " 75350.0546875,\n", - " 194419.171875,\n", - " 91966.0234375,\n", - " 74870.9453125,\n", - " 72677.9140625,\n", - " 0.0,\n", - " 29956.9765625,\n", - " 76977.7265625,\n", - " 0.0,\n", - " 14792.634765625,\n", - " 0.0,\n", - " 0.0,\n", - " 40342.859375,\n", - " 68847.640625,\n", - " 20471.599609375,\n", - " 0.0,\n", - " 76371.2109375,\n", - " 0.0,\n", - " 22286.556640625,\n", - " 81114.0859375,\n", - " 0.0,\n", - " 34156.35546875,\n", - " 128472.796875,\n", - " 46161.796875,\n", - " 20939.341796875,\n", - " 17831.57421875,\n", - " 24190.48046875,\n", - " 0.0,\n", - " 38499.4453125,\n", - " 45926.0234375,\n", - " 275500.59375,\n", - " 16746.31640625,\n", - " 79721.4609375,\n", - " 38001.53515625,\n", - " 139552.484375,\n", - " 45364.49609375,\n", - " 111315.9140625,\n", - " 84768.03125,\n", - " 20231.46484375,\n", - " 1717.883544921875,\n", - " 10470.392578125,\n", - " 36287.5859375,\n", - " 92061.8671875,\n", - " 0.0,\n", - " 282.2347717285156,\n", - " 3118.270751953125,\n", - " 30320.123046875,\n", - " 78028.71875,\n", - " 16757.689453125,\n", - " 6359.2548828125,\n", - " 10717.865234375,\n", - " 16799.8046875,\n", - " 6661.611328125,\n", - " 31577.89453125,\n", - " 63395.921875,\n", - " 35766.83203125,\n", - " 76936.0625,\n", - " 49528.06640625,\n", - " 3887.50146484375,\n", - " 17230.431640625,\n", - " 0.0,\n", - " 6061.1611328125,\n", - " 211180.46875,\n", - " 339856.4375,\n", - " 4654.38671875,\n", - " 15659.99609375,\n", - " 18362.900390625,\n", - " 58976.92578125,\n", - " 78284.359375,\n", - " 81131.859375,\n", - " 11847.98046875,\n", - " 127929.25,\n", - " 134957.015625,\n", - " 58298.91015625,\n", - " 389736.71875,\n", - " 16369.6162109375,\n", - " 111303.0625,\n", - " 11.759781837463379,\n", - " 0.0,\n", - " 25831.376953125,\n", - " 0.0,\n", - " 93817.046875,\n", - " 63155.7890625,\n", - " 3361.905029296875,\n", - " 28756.294921875,\n", - " 524.3922119140625,\n", - " 172633.078125,\n", - " 29082.16015625,\n", - " 20873.68359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 10223.53125,\n", - " 52358.484375,\n", - " 23653.40234375,\n", - " 48987.75390625,\n", - " 75282.65625,\n", - " 20471.599609375,\n", - " 1208.0302734375,\n", - " 49227.8984375,\n", - " 81766.3359375,\n", - " 0.0,\n", - " 27615.6484375,\n", - " 0.0,\n", - " 5293.07763671875,\n", - " 96112.90625,\n", - " 26360.814453125,\n", - " 702.6351928710938,\n", - " 51273.29296875,\n", - " 65672.9296875,\n", - " 184742.96875,\n", - " 151644.5625,\n", - " 0.0,\n", - " 8692.8310546875,\n", - " 20865.361328125,\n", - " 32238.267578125,\n", - " 22103.591796875,\n", - " 164257.6875,\n", - " 55234.2421875,\n", - " 27255.443359375,\n", - " 41303.40625,\n", - " 42992.33984375,\n", - " 30461.501953125,\n", - " 0.0,\n", - " 0.0,\n", - " 15902.7529296875,\n", - " 0.0,\n", - " 4367.41845703125,\n", - " 29552.908203125,\n", - " 0.0,\n", - " 85188.5,\n", - " 88555.1171875,\n", - " 23053.064453125,\n", - " 7324.150390625,\n", - " 5785.8125,\n", - " 175363.5,\n", - " 7112.31591796875,\n", - " 36.74931716918945,\n", - " 94591.9453125,\n", - " 21590.171875,\n", - " 158468.515625,\n", - " 52889.96875,\n", - " 105823.0,\n", - " 121568.875,\n", - " 8568.2939453125,\n", - " 99286.890625,\n", - " 10639.4033203125,\n", - " 1550.233154296875,\n", - " 31404.59765625,\n", - " 7924.49072265625,\n", - " 3799.679443359375,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 26773.412109375,\n", - " 63708.0078125,\n", - " 40452.015625,\n", - " 55398.31640625,\n", - " 11430.58984375,\n", - " 3.5279343128204346,\n", - " 15106.6162109375,\n", - " 45207.96484375,\n", - " 42071.8515625,\n", - " 72040.8203125,\n", - " 198352.390625,\n", - " 0.0,\n", - " 85596.34375,\n", - " 0.0,\n", - " 7905.9130859375,\n", - " 12171.375,\n", - " 74626.140625,\n", - " 10400.0,\n", - " 96082.7890625,\n", - " 2822.347412109375,\n", - " 229699.921875,\n", - " 28756.296875,\n", - " 0.0,\n", - " 89180.40625,\n", - " 0.0,\n", - " 46.33353805541992,\n", - " 0.0,\n", - " 1411.1737060546875,\n", - " 16405.482421875,\n", - " 8363.9208984375,\n", - " 59853.91015625,\n", - " 3704.3310546875,\n", - " 0.0,\n", - " 40540.01953125,\n", - " 81018.671875,\n", - " 0.0,\n", - " 889.0394897460938,\n", - " 5163.908203125,\n", - " 35960.37890625,\n", - " 37652.109375,\n", - " 9005.1025390625,\n", - " 0.0,\n", - " 27373.904296875,\n", - " 54747.375,\n", - " 24193.708984375,\n", - " 40347.26953125,\n", - " 5510.6337890625,\n", - " 49374.3828125,\n", - " 68258.6796875,\n", - " 0.0,\n", - " 25336.70703125,\n", - " 0.0,\n", - " 38608.92578125,\n", - " 0.0,\n", - " 22377.34375,\n", - " 0.17639672756195068,\n", - " 29056.4609375,\n", - " 0.0,\n", - " 33559.015625,\n", - " 54274.86328125,\n", - " 13495.818359375,\n", - " 59868.609375,\n", - " 4.703912734985352,\n", - " 69999.671875,\n", - " 13299.68359375,\n", - " 121747.3203125,\n", - " 60792.81640625,\n", - " 167597.21875,\n", - " 74192.4609375,\n", - " 79429.9765625,\n", - " 32080.68359375,\n", - " 6688.9638671875,\n", - " 79343.2421875,\n", - " 10592.1298828125,\n", - " 71920.7578125,\n", - " 3634.638427734375,\n", - " 42609.328125,\n", - " 36156.0,\n", - " 129600.9609375,\n", - " 94613.609375,\n", - " 46047.5625,\n", - " 87108.4765625,\n", - " 92759.375,\n", - " 11759.78125,\n", - " 60.26887893676758,\n", - " 91431.796875,\n", - " 111691.0,\n", - " 31176.591796875,\n", - " 54481.3046875,\n", - " 95754.265625,\n", - " 35360.0390625,\n", - " 0.0,\n", - " 12601.7822265625,\n", - " 0.0,\n", - " 132118.9375,\n", - " 16118.2509765625,\n", - " 114389.46875,\n", - " 28980.923828125,\n", - " 4071.1943359375,\n", - " 44004.9375,\n", - " 46082.83984375,\n", - " 40282.828125,\n", - " 17049.689453125,\n", - " 39311.5078125,\n", - " 1411.173828125,\n", - " 149867.15625,\n", - " 52829.96875,\n", - " 80565.6484375,\n", - " 89840.9375,\n", - " 20711.736328125,\n", - " 54622.109375,\n", - " 73607.5859375,\n", - " 24191.724609375,\n", - " 32199.283203125,\n", - " 44545.32421875,\n", - " 6519.4482421875,\n", - " 11.759781837463379,\n", - " 48219.29296875,\n", - " 28861.185546875,\n", - " 11289.3896484375,\n", - " 28659.947265625,\n", - " 26234.8671875,\n", - " 0.0,\n", - " 15620.751953125,\n", - " 8904.505859375,\n", - " 72640.65625,\n", - " 14452.732421875,\n", - " 9965.646484375,\n", - " 69506.7265625,\n", - " 2106.600341796875,\n", - " 7361.67041015625,\n", - " 56727.46484375,\n", - " 852.5841674804688,\n", - " 23173.130859375,\n", - " 127906.2265625,\n", - " 4910.884765625,\n", - " 73601.859375,\n", - " 30867.955078125,\n", - " 6534.72265625,\n", - " 44785.37890625,\n", - " 40282.828125,\n", - " 33708.484375,\n", - " 85202.9765625,\n", - " 0.0,\n", - " 21809.46875,\n", - " 79411.453125,\n", - " 58822.64453125,\n", - " 97591.984375,\n", - " 45914.3984375,\n", - " 24587.02734375,\n", - " 75561.3515625,\n", - " 23088.341796875,\n", - " 163292.53125,\n", - " 26411.544921875,\n", - " 11430.58984375,\n", - " 28936.396484375,\n", - " 26360.724609375,\n", - " 16689.892578125,\n", - " 87514.5703125,\n", - " 103198.484375,\n", - " 118022.1796875,\n", - " 66527.2421875,\n", - " 220431.921875,\n", - " 17727.787109375,\n", - " 36020.41015625,\n", - " 67658.34375,\n", - " 137087.0625,\n", - " 91912.640625,\n", - " 22897.001953125,\n", - " 4120.62744140625,\n", - " 0.0,\n", - " 37413.74609375,\n", - " 19732.537109375,\n", - " 9126.69921875,\n", - " 9947.646484375,\n", - " 9082.6904296875,\n", - " 70465.1171875,\n", - " 0.0,\n", - " 45659.6640625,\n", - " 0.0,\n", - " 103345.21875,\n", - " 44941.2265625,\n", - " 58052.89453125,\n", - " 29476.703125,\n", - " 6836.2548828125,\n", - " 27615.6484375,\n", - " 2963.486083984375,\n", - " 0.0,\n", - " 36469.0234375,\n", - " 15.287715911865234,\n", - " 81343.6328125,\n", - " 1058.38037109375,\n", - " 61534.87109375,\n", - " 0.0,\n", - " 41300.9375,\n", - " 79660.3125,\n", - " 10668.3310546875,\n", - " 1448.8050537109375,\n", - " 0.0,\n", - " 61955.109375,\n", - " 100918.796875,\n", - " 61909.7734375,\n", - " 0.0,\n", - " 20934.009765625,\n", - " 10.5838041305542,\n", - " 0.0,\n", - " 0.0,\n", - " 1975.643310546875,\n", - " 102.8980941772461,\n", - " 219007.734375,\n", - " 0.0,\n", - " 11968.517578125,\n", - " 36161.328125,\n", - " 33311.63671875,\n", - " 11722.150390625,\n", - " 29.39945411682129,\n", - " 105538.1640625,\n", - " 0.0,\n", - " 34882.16015625,\n", - " 470.3912658691406,\n", - " 5221.3427734375,\n", - " 52229.58984375,\n", - " 17255.892578125,\n", - " 123361.53125,\n", - " 0.0,\n", - " 34065.1484375,\n", - " 26751.15234375,\n", - " 0.0,\n", - " 7.055868625640869,\n", - " 50404.0,\n", - " 1315.33154296875,\n", - " 0.0,\n", - " 36686.3984375,\n", - " 53283.984375,\n", - " 9096.005859375,\n", - " 25768.033203125,\n", - " 36746.44921875,\n", - " 24507.34375,\n", - " 78644.5625,\n", - " 76884.90625,\n", - " 175729.328125,\n", - " 132550.046875,\n", - " 24142.83203125,\n", - " 270213.15625,\n", - " 29634.650390625,\n", - " 69159.1875,\n", - " 70420.84375,\n", - " 4953.22021484375,\n", - " 52482.234375,\n", - " 17.639673233032227,\n", - " 50008.3359375,\n", - " 214713.53125,\n", - " 5688.20654296875,\n", - " 118137.0703125,\n", - " 24193.70703125,\n", - " 9805.2587890625,\n", - " 70479.9375,\n", - " 973.7098999023438,\n", - " 258618.921875,\n", - " 0.0,\n", - " 0.0,\n", - " 13421.9677734375,\n", - " 28388.154296875,\n", - " 13858.9033203125,\n", - " 98515.828125,\n", - " 4115.92333984375,\n", - " 57036.7265625,\n", - " 59433.671875,\n", - " 0.0,\n", - " 0.0,\n", - " 38844.171875,\n", - " 0.0,\n", - " 5392.80078125,\n", - " 10445.91796875,\n", - " 76379.1328125,\n", - " 74255.6328125,\n", - " 4198.2421875,\n", - " 129793.546875,\n", - " 71836.140625,\n", - " 55531.46875,\n", - " 211076.53125,\n", - " 24133.67578125,\n", - " 58300.13671875,\n", - " 89458.578125,\n", - " 110255.265625,\n", - " 64992.375,\n", - " 27437.017578125,\n", - " 18165.552734375,\n", - " 24202.3203125,\n", - " 51809.359375,\n", - " ...],\n", - " 'wealth': [507750.28125,\n", - " 1067.5635986328125,\n", - " 747250.75,\n", - " 1397688.625,\n", - " 606589.6875,\n", - " 247674.78125,\n", - " 58716.0,\n", - " 275997.375,\n", - " 0.0,\n", - " 324425.78125,\n", - " 2097985.75,\n", - " 334147.40625,\n", - " 230.59375,\n", - " 60364.26171875,\n", - " 1733829.25,\n", - " 1433314.625,\n", - " 1207726.0,\n", - " 3006496.0,\n", - " 564050.1875,\n", - " 905116.5,\n", - " 572141.625,\n", - " 112307.6953125,\n", - " 292512.4375,\n", - " 0.0,\n", - " 22418.8359375,\n", - " 298917.8125,\n", - " 0.0,\n", - " 6658247.5,\n", - " 2887480.0,\n", - " 825638.0625,\n", - " 25625604.0,\n", - " 444819.71875,\n", - " 1781341.625,\n", - " 2387968.0,\n", - " 21218.111328125,\n", - " 1297775.5,\n", - " 330944.71875,\n", - " 70.31910705566406,\n", - " 0.0,\n", - " 117432.0,\n", - " 5363003.0,\n", - " 213.51272583007812,\n", - " 411652.53125,\n", - " 785838.625,\n", - " 1371507.75,\n", - " 0.0,\n", - " 6405.3818359375,\n", - " 85405.09375,\n", - " 1390957.25,\n", - " 1788789.0,\n", - " 0.0,\n", - " 0.0,\n", - " 638290.625,\n", - " 553132.125,\n", - " 7579.7021484375,\n", - " 322373.625,\n", - " 0.0,\n", - " 0.0,\n", - " 1083783.875,\n", - " 3202.69091796875,\n", - " 2539473.75,\n", - " 107389.546875,\n", - " 152375.5,\n", - " 2249420.5,\n", - " 0.0,\n", - " 2242828.25,\n", - " 96454.375,\n", - " 168087.890625,\n", - " 0.0,\n", - " 0.0,\n", - " 753114.9375,\n", - " 1419960.75,\n", - " 0.0,\n", - " 354757.46875,\n", - " 5291913.0,\n", - " 31816.814453125,\n", - " 0.0,\n", - " 983985.3125,\n", - " 382591.3125,\n", - " 10675.63671875,\n", - " 237830.078125,\n", - " 1741196.375,\n", - " 1423958.0,\n", - " 13851.638671875,\n", - " 411624.375,\n", - " 992834.25,\n", - " 128107.640625,\n", - " 762538.125,\n", - " 49641.7109375,\n", - " 0.0,\n", - " 498539.90625,\n", - " 422755.1875,\n", - " 96454.375,\n", - " 345356.84375,\n", - " 286950.4375,\n", - " 0.0,\n", - " 1366481.5,\n", - " 111953.125,\n", - " 8540.5087890625,\n", - " 0.0,\n", - " 258350.40625,\n", - " 871828.625,\n", - " 0.0,\n", - " 338951.4375,\n", - " 228458.609375,\n", - " 162381.765625,\n", - " 2019988.5,\n", - " 266890.90625,\n", - " 0.0,\n", - " 279820.0625,\n", - " 945605.625,\n", - " 229526.1875,\n", - " 725409.5,\n", - " 45388.53515625,\n", - " 0.0,\n", - " 0.0,\n", - " 180867.484375,\n", - " 2057195.125,\n", - " 1395626.0,\n", - " 92878.0390625,\n", - " 7472.94580078125,\n", - " 97361.8046875,\n", - " 755348.25,\n", - " 80761.1875,\n", - " 2932274.25,\n", - " 645876.0,\n", - " 352584.25,\n", - " 17115.9921875,\n", - " 16753.146484375,\n", - " 1481337.0,\n", - " 6950412.0,\n", - " 6021059.0,\n", - " 1983533.25,\n", - " 2135.127197265625,\n", - " 64053.8203125,\n", - " 769498.9375,\n", - " 106756.3671875,\n", - " 557396.25,\n", - " 419209.8125,\n", - " 0.0,\n", - " 67084.984375,\n", - " 125476.3359375,\n", - " 97066.4375,\n", - " 50994.31640625,\n", - " 1270369.375,\n", - " 1088321.125,\n", - " 1403919.75,\n", - " 40033.63671875,\n", - " 926879.75,\n", - " 0.0,\n", - " 0.0,\n", - " 346958.1875,\n", - " 1106711.5,\n", - " 92878.0390625,\n", - " 543689.5,\n", - " 37229.1171875,\n", - " 918515.75,\n", - " 1251718.375,\n", - " 253124.671875,\n", - " 302358.5625,\n", - " 0.0,\n", - " 1067.5635986328125,\n", - " 483708.21875,\n", - " 559252.125,\n", - " 178895.90625,\n", - " 383680.25,\n", - " 0.0,\n", - " 106756.3671875,\n", - " 0.0,\n", - " 271921.34375,\n", - " 1138396.75,\n", - " 9873.1220703125,\n", - " 106756.3671875,\n", - " 433666.875,\n", - " 0.0,\n", - " 87633.1171875,\n", - " 4110.1201171875,\n", - " 0.0,\n", - " 117773.6171875,\n", - " 365106.75,\n", - " 978395.375,\n", - " 0.0,\n", - " 0.0,\n", - " 619186.9375,\n", - " 572346.5,\n", - " 0.0,\n", - " 243404.515625,\n", - " 3218704.25,\n", - " 334147.4375,\n", - " 1803390.125,\n", - " 403054.0,\n", - " 0.0,\n", - " 0.0,\n", - " 416349.8125,\n", - " 0.0,\n", - " 5959862.5,\n", - " 404143.0625,\n", - " 0.0,\n", - " 689945.75,\n", - " 112799.6015625,\n", - " 162269.671875,\n", - " 192161.453125,\n", - " 0.0,\n", - " 32743.0859375,\n", - " 668700.5,\n", - " 1691490.375,\n", - " 0.0,\n", - " 0.0,\n", - " 2320883.5,\n", - " 286537.8125,\n", - " 420620.0625,\n", - " 405674.1875,\n", - " 467592.875,\n", - " 969646.0,\n", - " 605193.25,\n", - " 388289.09375,\n", - " 837757.125,\n", - " 722184.375,\n", - " 161666.5,\n", - " 1531876.375,\n", - " 115296.875,\n", - " 234864.0,\n", - " 4341282.0,\n", - " 6050610.0,\n", - " 216974.28125,\n", - " 0.0,\n", - " 96080.7265625,\n", - " 11203013.0,\n", - " 255399.65625,\n", - " 241596.03125,\n", - " 982369.5625,\n", - " 12168.7138671875,\n", - " 197499.28125,\n", - " 672193.25,\n", - " 0.0,\n", - " 1034562.875,\n", - " 361839.71875,\n", - " 1364177.625,\n", - " 1284279.125,\n", - " 5550926.0,\n", - " 0.0,\n", - " 0.0,\n", - " 65313.2578125,\n", - " 907429.125,\n", - " 597944.6875,\n", - " 106756.3671875,\n", - " 1085510.625,\n", - " 393783.9375,\n", - " 125476.3359375,\n", - " 1153726.375,\n", - " 200889.859375,\n", - " 213561.9375,\n", - " 81683.5078125,\n", - " 361300.15625,\n", - " 215412.203125,\n", - " 0.0,\n", - " 0.0,\n", - " 655246.25,\n", - " 249901.03125,\n", - " 0.0,\n", - " 80067.2734375,\n", - " 960807.25,\n", - " 483708.21875,\n", - " 864687.875,\n", - " 154796.734375,\n", - " 3548105.25,\n", - " 0.0,\n", - " 380891.75,\n", - " 0.0,\n", - " 2393477.75,\n", - " 687511.0,\n", - " 0.0,\n", - " 224623.4375,\n", - " 702848.75,\n", - " 731000.8125,\n", - " 47506.0859375,\n", - " 0.0,\n", - " 573081.4375,\n", - " 365687.46875,\n", - " 360302.75,\n", - " 101418.546875,\n", - " 2361350.0,\n", - " 1878.9119873046875,\n", - " 341252.0625,\n", - " 2650760.5,\n", - " 187500.5625,\n", - " 699934.25,\n", - " 223757.5625,\n", - " 0.0,\n", - " 33073.12109375,\n", - " 828322.625,\n", - " 138783.28125,\n", - " 0.0,\n", - " 782524.125,\n", - " 1442407.875,\n", - " 120407.3359375,\n", - " 10675.63671875,\n", - " 44783.2265625,\n", - " 114171.140625,\n", - " 112799.6015625,\n", - " 461350.9375,\n", - " 140651.5,\n", - " 778260.3125,\n", - " 0.0,\n", - " 512067.65625,\n", - " 628933.1875,\n", - " 354720.28125,\n", - " 823005.8125,\n", - " 11096257.0,\n", - " 2171884.0,\n", - " 117965.78125,\n", - " 777746.8125,\n", - " 743576.6875,\n", - " 238600.484375,\n", - " 639470.625,\n", - " 619186.9375,\n", - " 0.0,\n", - " 1360039.625,\n", - " 1605535.5,\n", - " 1328583.0,\n", - " 69690.734375,\n", - " 0.0,\n", - " 234158.71875,\n", - " 360302.71875,\n", - " 176447.09375,\n", - " 672560.375,\n", - " 811233.25,\n", - " 912455.625,\n", - " 0.0,\n", - " 1608489.875,\n", - " 1895736.0,\n", - " 0.0,\n", - " 870300.625,\n", - " 57602.81640625,\n", - " 0.0,\n", - " 146790.0,\n", - " 0.0,\n", - " 540319.75,\n", - " 0.0,\n", - " 267851.71875,\n", - " 316212.34375,\n", - " 870857.3125,\n", - " 791450.0,\n", - " 0.0,\n", - " 211377.609375,\n", - " 2572220.5,\n", - " 591978.8125,\n", - " 0.0,\n", - " 200701.96875,\n", - " 0.0,\n", - " 374601.5,\n", - " 1433826.0,\n", - " 65540.9375,\n", - " 0.0,\n", - " 1210119.75,\n", - " 279536.40625,\n", - " 0.0,\n", - " 104044.796875,\n", - " 1380494.0,\n", - " 12276.982421875,\n", - " 0.0,\n", - " 1068.6312255859375,\n", - " 91362.4140625,\n", - " 420299.8125,\n", - " 351735.53125,\n", - " 426335.4375,\n", - " 109745.546875,\n", - " 238358.4375,\n", - " 2651943.75,\n", - " 138783.28125,\n", - " 19237.49609375,\n", - " 626846.3125,\n", - " 0.0,\n", - " 784982.75,\n", - " 865351.3125,\n", - " 255334.453125,\n", - " 484022.0,\n", - " 123612.0625,\n", - " 206039.78125,\n", - " 8540.5087890625,\n", - " 894286.75,\n", - " 0.0,\n", - " 602958.875,\n", - " 254782.859375,\n", - " 1857510.5,\n", - " 253784.890625,\n", - " 0.0,\n", - " 416300.90625,\n", - " 618466.9375,\n", - " 2282319.5,\n", - " 0.0,\n", - " 189617.453125,\n", - " 1525494.25,\n", - " 1182061.125,\n", - " 1067.5635986328125,\n", - " 510922.1875,\n", - " 301203.375,\n", - " 562606.0625,\n", - " 0.0,\n", - " 815618.625,\n", - " 160134.546875,\n", - " 0.0,\n", - " 1772445.25,\n", - " 221536.53125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 4323633.0,\n", - " 1726028.375,\n", - " 224465.9375,\n", - " 113171.03125,\n", - " 639104.0,\n", - " 373647.28125,\n", - " 0.0,\n", - " 1271569.5,\n", - " 528530.625,\n", - " 0.0,\n", - " 104044.796875,\n", - " 675384.4375,\n", - " 166539.921875,\n", - " 1254758.5,\n", - " 411864.84375,\n", - " 1872726.375,\n", - " 653648.9375,\n", - " 82560.2421875,\n", - " 45950.07421875,\n", - " 176148.0,\n", - " 0.0,\n", - " 123837.3828125,\n", - " 2135.127197265625,\n", - " 163434.96875,\n", - " 0.0,\n", - " 418116.65625,\n", - " 443255.25,\n", - " 618563.1875,\n", - " 0.0,\n", - " 0.0,\n", - " 163337.25,\n", - " 587070.5,\n", - " 0.0,\n", - " 77697.7421875,\n", - " 10904282.0,\n", - " 5310385.0,\n", - " 351229.5625,\n", - " 250258.8125,\n", - " 857734.0,\n", - " 4849014.0,\n", - " 0.0,\n", - " 32026.91015625,\n", - " 517768.375,\n", - " 491079.28125,\n", - " 154796.734375,\n", - " 220985.6875,\n", - " 0.0,\n", - " 1047966.25,\n", - " 1062120.625,\n", - " 0.0,\n", - " 0.0,\n", - " 750438.0,\n", - " 0.0,\n", - " 136019.484375,\n", - " 1099278.75,\n", - " 204607.734375,\n", - " 138783.28125,\n", - " 700778.1875,\n", - " 1067.5635986328125,\n", - " 1262422.75,\n", - " 1067.5635986328125,\n", - " 1456262.75,\n", - " 122769.8203125,\n", - " 769820.125,\n", - " 437701.09375,\n", - " 0.0,\n", - " 1118174.0,\n", - " 695714.9375,\n", - " 130509.65625,\n", - " 0.0,\n", - " 2755893.0,\n", - " 895.6859130859375,\n", - " 18575.607421875,\n", - " 3040.727294921875,\n", - " 561615.5625,\n", - " 1082509.5,\n", - " 0.0,\n", - " 240060.765625,\n", - " 538052.0625,\n", - " 4377.0107421875,\n", - " 626705.6875,\n", - " 1067.5635986328125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1044561.75,\n", - " 1201009.125,\n", - " 85999.90625,\n", - " 10675.63671875,\n", - " 332695.5625,\n", - " 602403.0625,\n", - " 176002.6875,\n", - " 845737.25,\n", - " 431946.03125,\n", - " 0.0,\n", - " 187176.65625,\n", - " 612781.5625,\n", - " 267908.5625,\n", - " 0.0,\n", - " 571642.0625,\n", - " 463044.40625,\n", - " 57377.43359375,\n", - " 0.0,\n", - " 168675.0625,\n", - " 1201906.625,\n", - " 388780.8125,\n", - " 11363148.0,\n", - " 261625.84375,\n", - " 0.0,\n", - " 2241.8837890625,\n", - " 144121.09375,\n", - " 0.0,\n", - " 0.0,\n", - " 218747.8125,\n", - " 278207.09375,\n", - " 747.2945556640625,\n", - " 345443.75,\n", - " 0.0,\n", - " 146790.0,\n", - " 0.0,\n", - " 401715.375,\n", - " 37364.7265625,\n", - " 867228.125,\n", - " 599923.875,\n", - " 2174702.0,\n", - " 4364728.0,\n", - " 0.0,\n", - " 0.0,\n", - " 568339.0625,\n", - " 0.0,\n", - " 202837.09375,\n", - " 437701.09375,\n", - " 157239.265625,\n", - " 0.0,\n", - " 0.0,\n", - " 69761.015625,\n", - " 1000200.375,\n", - " 2674366.0,\n", - " 9783340.0,\n", - " 2709460.0,\n", - " 0.0,\n", - " 112799.6015625,\n", - " 1761479.5,\n", - " 0.0,\n", - " 558588.375,\n", - " 0.0,\n", - " 94621.3671875,\n", - " 245539.640625,\n", - " 1708.101806640625,\n", - " 401537.375,\n", - " 551369.875,\n", - " 0.0,\n", - " 809234.5,\n", - " 1515940.375,\n", - " 0.0,\n", - " 299131.34375,\n", - " 454782.125,\n", - " 0.0,\n", - " 396117.375,\n", - " 133445.453125,\n", - " 0.0,\n", - " 611.7139892578125,\n", - " 733528.0,\n", - " 0.0,\n", - " 0.0,\n", - " 945911.125,\n", - " 0.0,\n", - " 229664.171875,\n", - " 812766.875,\n", - " 0.0,\n", - " 1996.343994140625,\n", - " 90597.6015625,\n", - " 1357006.875,\n", - " 1305630.375,\n", - " 0.0,\n", - " 922372.625,\n", - " 600184.25,\n", - " 286107.0625,\n", - " 347532.5625,\n", - " 1229477.875,\n", - " 722080.6875,\n", - " 123610.0078125,\n", - " 0.0,\n", - " 1044381.5625,\n", - " 373647.28125,\n", - " 1152968.75,\n", - " 365036.3125,\n", - " 0.0,\n", - " 371305.4375,\n", - " 349995.09375,\n", - " 6031.73486328125,\n", - " 279274.65625,\n", - " 0.0,\n", - " 0.0,\n", - " 563436.625,\n", - " 0.0,\n", - " 30959.345703125,\n", - " 1680861.5,\n", - " 25621.52734375,\n", - " 389024.71875,\n", - " 264538.9375,\n", - " 528321.5,\n", - " 297465.03125,\n", - " 49310.765625,\n", - " 668460.625,\n", - " 0.0,\n", - " 4270.25439453125,\n", - " 480403.65625,\n", - " 103623.34375,\n", - " 87633.1171875,\n", - " 0.0,\n", - " 1344598.25,\n", - " 880873.75,\n", - " 74954.875,\n", - " 26689.091796875,\n", - " 486815.5,\n", - " 2053774.5,\n", - " 309809.8125,\n", - " 992282.0625,\n", - " 241269.375,\n", - " 512430.5625,\n", - " 3384459.5,\n", - " 0.0,\n", - " 3565732.0,\n", - " 1270852.25,\n", - " 2651828.0,\n", - " 0.0,\n", - " 640.5382080078125,\n", - " 21992.201171875,\n", - " 0.0,\n", - " 455849.6875,\n", - " 341620.375,\n", - " 18699.4453125,\n", - " 4655.64501953125,\n", - " 102059.4765625,\n", - " 947192.875,\n", - " 2668.9091796875,\n", - " 471935.0625,\n", - " 49992.6640625,\n", - " 0.0,\n", - " 800.6727294921875,\n", - " 389024.71875,\n", - " 719361.625,\n", - " 98429.3671875,\n", - " 744776.0625,\n", - " 293580.0,\n", - " 0.0,\n", - " 0.0,\n", - " 29487.880859375,\n", - " 775404.125,\n", - " 92878.0390625,\n", - " 0.0,\n", - " 0.0,\n", - " 236225.703125,\n", - " 619226.5,\n", - " 639834.8125,\n", - " 202143.8125,\n", - " 680656.9375,\n", - " 1459632.5,\n", - " 601194.1875,\n", - " 441779.5625,\n", - " 92878.0390625,\n", - " 441469.25,\n", - " 3736.472900390625,\n", - " 107060.6171875,\n", - " 271743.09375,\n", - " 1150086.375,\n", - " 112799.6015625,\n", - " 34083.0390625,\n", - " 318667.75,\n", - " 2215096.0,\n", - " 501314.8125,\n", - " 106756.3671875,\n", - " 2150325.0,\n", - " 838684.8125,\n", - " 49107.9296875,\n", - " 375615.625,\n", - " 0.0,\n", - " 0.0,\n", - " 216086.890625,\n", - " 117432.0,\n", - " 0.0,\n", - " 0.0,\n", - " 383866.8125,\n", - " 1096381.375,\n", - " 367798.4375,\n", - " 61863.8828125,\n", - " 0.0,\n", - " 183620.953125,\n", - " 320269.09375,\n", - " 145188.65625,\n", - " 981339.125,\n", - " 345522.3125,\n", - " 1310912.125,\n", - " 1400643.25,\n", - " 2522832.5,\n", - " 0.0,\n", - " 108243.484375,\n", - " 0.0,\n", - " 234324.0,\n", - " 575492.125,\n", - " 0.0,\n", - " 0.0,\n", - " 809791.625,\n", - " 1125291.75,\n", - " 336287.65625,\n", - " 855107.0,\n", - " 69391.640625,\n", - " 183300.6875,\n", - " 744314.125,\n", - " 20283.708984375,\n", - " 816266.625,\n", - " 302120.5,\n", - " 1218761.625,\n", - " 478432.875,\n", - " 2060763.25,\n", - " 0.0,\n", - " 1884897.25,\n", - " 0.0,\n", - " 747497.0,\n", - " 0.0,\n", - " 800557.625,\n", - " 197660.40625,\n", - " 1775358.375,\n", - " 0.0,\n", - " 160134.546875,\n", - " 332290.90625,\n", - " 0.0,\n", - " 303897.6875,\n", - " 4655.64501953125,\n", - " 1490871.25,\n", - " 812121.625,\n", - " 0.0,\n", - " 0.0,\n", - " 509824.25,\n", - " 0.0,\n", - " 3210802.0,\n", - " 256215.28125,\n", - " 7965.1640625,\n", - " 250993.109375,\n", - " 350722.28125,\n", - " 0.0,\n", - " 1131995.375,\n", - " 0.0,\n", - " 546592.5625,\n", - " 1140392.5,\n", - " 1248230.25,\n", - " 8540.5087890625,\n", - " 147323.78125,\n", - " 577273.9375,\n", - " 1260030.625,\n", - " 369377.03125,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 447224.5625,\n", - " 0.0,\n", - " 120898.3828125,\n", - " 281836.8125,\n", - " 0.0,\n", - " 0.0,\n", - " 151594.046875,\n", - " 319201.53125,\n", - " 18110.25,\n", - " 0.0,\n", - " 106756.3671875,\n", - " 0.0,\n", - " 2610416.5,\n", - " 372280.3125,\n", - " 1293597.25,\n", - " 363398.65625,\n", - " 2361640.25,\n", - " 2731340.0,\n", - " 1266474.25,\n", - " 368371.75,\n", - " 1625985.25,\n", - " 572397.4375,\n", - " 1067.5635986328125,\n", - " 405674.1875,\n", - " 106.75636291503906,\n", - " 0.0,\n", - " 1390957.25,\n", - " 213512.734375,\n", - " 334487.5625,\n", - " 521504.84375,\n", - " 764555.75,\n", - " 4493188.0,\n", - " 0.0,\n", - " 624848.25,\n", - " 273296.28125,\n", - " 675927.9375,\n", - " 1327808.25,\n", - " 0.0,\n", - " 2.135127305984497,\n", - " 0.0,\n", - " 875297.0,\n", - " 237341.953125,\n", - " 170810.1875,\n", - " 709159.375,\n", - " 787353.0,\n", - " 0.0,\n", - " 346020.625,\n", - " 161735.890625,\n", - " 269559.8125,\n", - " 0.0,\n", - " 114400.5859375,\n", - " 289623.40625,\n", - " 676351.0,\n", - " 0.0,\n", - " 128107.640625,\n", - " 454938.5,\n", - " 511780.03125,\n", - " 0.0,\n", - " 866263.0625,\n", - " 236417.3125,\n", - " 0.0,\n", - " 108037.4453125,\n", - " 394998.5625,\n", - " 68441.3828125,\n", - " 666992.875,\n", - " 1780669.25,\n", - " 706966.75,\n", - " 524138.875,\n", - " 192161.453125,\n", - " 0.0,\n", - " 6405.3818359375,\n", - " 520125.8125,\n", - " 90464.03125,\n", - " 7657293.0,\n", - " 552046.75,\n", - " 0.0,\n", - " 195297.953125,\n", - " 0.0,\n", - " 743028.875,\n", - " 1068.6312255859375,\n", - " 1399576.0,\n", - " 0.0,\n", - " 3202.69091796875,\n", - " 364679.75,\n", - " 6287790.5,\n", - " 1381104.25,\n", - " 75691.828125,\n", - " 305323.1875,\n", - " 0.0,\n", - " 160134.546875,\n", - " 117432.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1504161.5,\n", - " 259496.6875,\n", - " 2139926.0,\n", - " 5543517.0,\n", - " 499861.125,\n", - " 1866738.25,\n", - " 0.0,\n", - " 475102.53125,\n", - " 661253.4375,\n", - " 1237351.125,\n", - " 387674.9375,\n", - " 1562918.625,\n", - " 160145.21875,\n", - " 864929.0,\n", - " 437914.59375,\n", - " 0.0,\n", - " 1601.345458984375,\n", - " 6252720.5,\n", - " 202837.09375,\n", - " 79912.171875,\n", - " 0.0,\n", - " 9608.0732421875,\n", - " 2633129.0,\n", - " 1549600.0,\n", - " 53187.84765625,\n", - " 213512.734375,\n", - " 1382672.5,\n", - " 494443.0,\n", - " 0.0,\n", - " 43267.06640625,\n", - " 225206.0,\n", - " 306390.75,\n", - " 1772155.75,\n", - " 0.0,\n", - " 559983.0,\n", - " 4845735.0,\n", - " 0.0,\n", - " 0.0,\n", - " 27.756654739379883,\n", - " 0.0,\n", - " 1878.9119873046875,\n", - " 337883.875,\n", - " 0.0,\n", - " 344081.8125,\n", - " 585745.5,\n", - " 182660.140625,\n", - " 0.0,\n", - " 187891.203125,\n", - " 0.0,\n", - " 192161.46875,\n", - " 394278.5625,\n", - " 585187.5,\n", - " 7342.24658203125,\n", - " 92465.9609375,\n", - " 595700.5,\n", - " 490311.3125,\n", - " 211252.6875,\n", - " 288242.1875,\n", - " 640126.75,\n", - " 97682.0703125,\n", - " 322730.53125,\n", - " 0.0,\n", - " 166017.609375,\n", - " 356165.5625,\n", - " 6677597.0,\n", - " 0.0,\n", - " 0.0,\n", - " 1180581.0,\n", - " 1026397.625,\n", - " 248735.0625,\n", - " 320523.96875,\n", - " 5934129.5,\n", - " 501912.25,\n", - " 1517408.0,\n", - " 517768.375,\n", - " 125065.078125,\n", - " 16753.146484375,\n", - " 0.0,\n", - " 618794.0625,\n", - " 18191.28515625,\n", - " 1100554.75,\n", - " 2929579.0,\n", - " 546756.0,\n", - " 0.0,\n", - " 1072856.25,\n", - " 255981.390625,\n", - " 497356.5625,\n", - " 390869.65625,\n", - " 339953.21875,\n", - " 3202.69091796875,\n", - " 1103408.875,\n", - " 1696551.25,\n", - " 620504.6875,\n", - " 337563.625,\n", - " 827564.25,\n", - " 1750743.75,\n", - " 1543906.75,\n", - " 1907432.0,\n", - " 747294.5625,\n", - " 2888960.25,\n", - " 2135.127197265625,\n", - " 2005883.25,\n", - " 0.0,\n", - " 1758220.25,\n", - " 122769.8203125,\n", - " 0.0,\n", - " 266.8908996582031,\n", - " 90742.9140625,\n", - " 986749.125,\n", - " 0.0,\n", - " 60824.84765625,\n", - " 245655.28125,\n", - " 0.0,\n", - " 587160.0,\n", - " 0.0,\n", - " 113161.75,\n", - " 68193.9609375,\n", - " 295274.375,\n", - " 78610.3203125,\n", - " 1310890.0,\n", - " 309377.0625,\n", - " 108338.7421875,\n", - " 2229072.0,\n", - " 320269.09375,\n", - " 0.0,\n", - " 335387.25,\n", - " 1708.101806640625,\n", - " 939412.1875,\n", - " 533.7817993164062,\n", - " 0.0,\n", - " 3581676.0,\n", - " 82560.2421875,\n", - " 848713.125,\n", - " 3177471.5,\n", - " 16013.455078125,\n", - " 10046951.0,\n", - " 4729.30712890625,\n", - " 0.0,\n", - " 309630.15625,\n", - " 325606.90625,\n", - " 793508.75,\n", - " 4804.03662109375,\n", - " 183514.203125,\n", - " 498994.25,\n", - " 479985.9375,\n", - " ...],\n", - " 'wealth_decile': [7,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 7,\n", - " 5,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 8,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 8,\n", - " 10,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 3,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 3,\n", - " 10,\n", - " 4,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 3,\n", - " 2,\n", - " 8,\n", - " 6,\n", - " 3,\n", - " 5,\n", - " 10,\n", - " 9,\n", - " 3,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 6,\n", - " 5,\n", - " 2,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 6,\n", - " 5,\n", - " 5,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 9,\n", - " 9,\n", - " 9,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 7,\n", - " 3,\n", - " 8,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 3,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 6,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 6,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 4,\n", - " 9,\n", - " 4,\n", - " 5,\n", - " 10,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 5,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 4,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 9,\n", - " 5,\n", - " 5,\n", - " 4,\n", - " 6,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 10,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 6,\n", - " 10,\n", - " 5,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 7,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 4,\n", - " 8,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 6,\n", - " 6,\n", - " 4,\n", - " 5,\n", - " 10,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 7,\n", - " 5,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 5,\n", - " 4,\n", - " 7,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 5,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 10,\n", - " 6,\n", - " 5,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 7,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 5,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 9,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 7,\n", - " 9,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 3,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 7,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 7,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 9,\n", - " 9,\n", - " 2,\n", - " 8,\n", - " 7,\n", - " 5,\n", - " 6,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 5,\n", - " 7,\n", - " 5,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 7,\n", - " 10,\n", - " 6,\n", - " 8,\n", - " 5,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 8,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 8,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 4,\n", - " 5,\n", - " 9,\n", - " 4,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 4,\n", - " 10,\n", - " 8,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 9,\n", - " 6,\n", - " 8,\n", - " 4,\n", - " 5,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 9,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 10,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 9,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 9,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 10,\n", - " 6,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 7,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 5,\n", - " 8,\n", - " 9,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 5,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 6,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 7,\n", - " 7,\n", - " 2,\n", - " 8,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 6,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 3,\n", - " 7,\n", - " 4,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 9,\n", - " 2,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 10,\n", - " 10,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 8,\n", - " 9,\n", - " 6,\n", - " 9,\n", - " 4,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 10,\n", - " 9,\n", - " 4,\n", - " 5,\n", - " 9,\n", - " 7,\n", - " 2,\n", - " 3,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 7,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 7,\n", - " 3,\n", - " 4,\n", - " 7,\n", - " 7,\n", - " 5,\n", - " 5,\n", - " 7,\n", - " 4,\n", - " 6,\n", - " 2,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 2,\n", - " 2,\n", - " 9,\n", - " 9,\n", - " 5,\n", - " 6,\n", - " 10,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 7,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 2,\n", - " 9,\n", - " 5,\n", - " 7,\n", - " 6,\n", - " 6,\n", - " 3,\n", - " 9,\n", - " 10,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 8,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 8,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 5,\n", - " 4,\n", - " 9,\n", - " 6,\n", - " 4,\n", - " 10,\n", - " 6,\n", - " 2,\n", - " 6,\n", - " 2,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 4,\n", - " 8,\n", - " 10,\n", - " 3,\n", - " 10,\n", - " 3,\n", - " 2,\n", - " 6,\n", - " 6,\n", - " 8,\n", - " 3,\n", - " 5,\n", - " 7,\n", - " 7,\n", - " ...],\n", - " 'in_poverty': [False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " ...],\n", - " 'person_in_poverty': [False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " ...],\n", - " 'person_in_deep_poverty': [False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " ...],\n", - " 'poverty_gap': 8683469610.154083,\n", - " 'deep_poverty_gap': 601727280.8075405,\n", - " 'poverty_rate': 0.07729838532173021,\n", - " 'deep_poverty_rate': 0.004887588140030611},\n", - " 'demographics': {'household_count_people': [3,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 6,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 9,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 5,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 6,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 7,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 3,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 3,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 5,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 5,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 5,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 4,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 5,\n", - " 4,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 5,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 3,\n", - " 3,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 3,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 1,\n", - " 4,\n", - " 4,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 1,\n", - " 2,\n", - " 2,\n", - " 4,\n", - " 2,\n", - " 3,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " 2,\n", - " 1,\n", - " 1,\n", - " 2,\n", - " 3,\n", - " ...],\n", - " 'person_weight': [28.242149353027344,\n", - " 28.242149353027344,\n", - " 28.242149353027344,\n", - " 46.80501937866211,\n", - " 46.80501937866211,\n", - " 46.80501937866211,\n", - " 23.999473571777344,\n", - " 23.999473571777344,\n", - " 23.999473571777344,\n", - " 40.036590576171875,\n", - " 40.036590576171875,\n", - " 319.1246032714844,\n", - " 319.1246032714844,\n", - " 58.23358154296875,\n", - " 58.23358154296875,\n", - " 58.23358154296875,\n", - " 290.2938537597656,\n", - " 290.2938537597656,\n", - " 10.826322555541992,\n", - " 10.826322555541992,\n", - " 18.18562889099121,\n", - " 32.117332458496094,\n", - " 32.117332458496094,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 43.09082794189453,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 31.772851943969727,\n", - " 20.178485870361328,\n", - " 20.178485870361328,\n", - " 18.06965446472168,\n", - " 18.06965446472168,\n", - " 18.671987533569336,\n", - " 209.88294982910156,\n", - " 209.88294982910156,\n", - " 21.307418823242188,\n", - " 21.307418823242188,\n", - " 114.24542236328125,\n", - " 114.24542236328125,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 33.831478118896484,\n", - " 44.90141677856445,\n", - " 44.90141677856445,\n", - " 44.90141677856445,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 45.325626373291016,\n", - " 24.144590377807617,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 79.82612609863281,\n", - " 14.016646385192871,\n", - " 282.30853271484375,\n", - " 282.30853271484375,\n", - " 34.989463806152344,\n", - " 34.989463806152344,\n", - " 21.942724227905273,\n", - " 21.942724227905273,\n", - " 205.44015502929688,\n", - " 205.44015502929688,\n", - " 39.89904022216797,\n", - " 39.89904022216797,\n", - " 19.02444076538086,\n", - " 29.60257911682129,\n", - " 29.60257911682129,\n", - " 104.54341125488281,\n", - " 104.54341125488281,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 94.42530822753906,\n", - " 63.71830368041992,\n", - " 63.71830368041992,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 30.37379264831543,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 746.3109741210938,\n", - " 262.5146179199219,\n", - " 262.5146179199219,\n", - " 301.7978210449219,\n", - " 301.7978210449219,\n", - " 301.7978210449219,\n", - " 59.51349639892578,\n", - " 59.51349639892578,\n", - " 39.839420318603516,\n", - " 25.185821533203125,\n", - " 25.185821533203125,\n", - " 36.8460807800293,\n", - " 36.8460807800293,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 47.40287399291992,\n", - " 28.797687530517578,\n", - " 38.371482849121094,\n", - " 38.371482849121094,\n", - " 7.789304256439209,\n", - " 6.997937202453613,\n", - " 111.38818359375,\n", - " 111.38818359375,\n", - " 40.009578704833984,\n", - " 40.009578704833984,\n", - " 212.98501586914062,\n", - " 212.98501586914062,\n", - " 23.419477462768555,\n", - " 73.20986938476562,\n", - " 73.20986938476562,\n", - " 110.51835632324219,\n", - " 110.51835632324219,\n", - " 92.79043579101562,\n", - " 92.79043579101562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 184.57461547851562,\n", - " 9.06320858001709,\n", - " 7.600617408752441,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 29.39621925354004,\n", - " 36.01832962036133,\n", - " 27.438125610351562,\n", - " 27.438125610351562,\n", - " 56.51862335205078,\n", - " 56.51862335205078,\n", - " 34.7610969543457,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 28.407873153686523,\n", - " 46.22690200805664,\n", - " 46.22690200805664,\n", - " 184.8269500732422,\n", - " 28.927675247192383,\n", - " 28.927675247192383,\n", - " 81.71466827392578,\n", - " 81.71466827392578,\n", - " 80.8134765625,\n", - " 80.8134765625,\n", - " 94.04654693603516,\n", - " 94.04654693603516,\n", - " 9.590133666992188,\n", - " 9.590133666992188,\n", - " 9.590133666992188,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 1194.1971435546875,\n", - " 76.40959167480469,\n", - " 76.40959167480469,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 20.353389739990234,\n", - " 33.174442291259766,\n", - " 33.174442291259766,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 45.14307403564453,\n", - " 53.31949996948242,\n", - " 53.31949996948242,\n", - " 30.570446014404297,\n", - " 26.836687088012695,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 74.53304290771484,\n", - " 134.6366729736328,\n", - " 28.297229766845703,\n", - " 38.551185607910156,\n", - " 19.281497955322266,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 30.92945671081543,\n", - " 90.17884063720703,\n", - " 90.17884063720703,\n", - " 90.17884063720703,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 154.83297729492188,\n", - " 41.390586853027344,\n", - " 41.390586853027344,\n", - " 25.554105758666992,\n", - " 19.096031188964844,\n", - " 23.780738830566406,\n", - " 23.780738830566406,\n", - " 71.38541412353516,\n", - " 71.38541412353516,\n", - " 69.7490005493164,\n", - " 490.34344482421875,\n", - " 490.34344482421875,\n", - " 1640.6968994140625,\n", - " 1640.6968994140625,\n", - " 26.102113723754883,\n", - " 8.504029273986816,\n", - " 8.504029273986816,\n", - " 8.9138822555542,\n", - " 8.9138822555542,\n", - " 30.532691955566406,\n", - " 26.963403701782227,\n", - " 123.43195343017578,\n", - " 123.43195343017578,\n", - " 19.758426666259766,\n", - " 23.556047439575195,\n", - " 23.556047439575195,\n", - " 21.44287109375,\n", - " 47.156822204589844,\n", - " 47.156822204589844,\n", - " 83.73397064208984,\n", - " 83.73397064208984,\n", - " 116.41424560546875,\n", - " 116.41424560546875,\n", - " 53.18351364135742,\n", - " 53.18351364135742,\n", - " 16.176658630371094,\n", - " 43.51107406616211,\n", - " 43.51107406616211,\n", - " 7.990398406982422,\n", - " 39.139984130859375,\n", - " 39.139984130859375,\n", - " 39.13148498535156,\n", - " 77.44499206542969,\n", - " 244.87086486816406,\n", - " 244.87086486816406,\n", - " 32.5803108215332,\n", - " 32.5803108215332,\n", - " 32.5803108215332,\n", - " 8.641592979431152,\n", - " 34.258522033691406,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 8736.19140625,\n", - " 44.93291091918945,\n", - " 44.93291091918945,\n", - " 63.7723503112793,\n", - " 61.97844696044922,\n", - " 61.97844696044922,\n", - " 32.464134216308594,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 23.566247940063477,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 16645.962890625,\n", - " 8.623653411865234,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 127.91293334960938,\n", - " 37.4765510559082,\n", - " 111.99394989013672,\n", - " 111.99394989013672,\n", - " 111.99394989013672,\n", - " 125.22480010986328,\n", - " 125.22480010986328,\n", - " 114.73353576660156,\n", - " 114.73353576660156,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 1555.2490234375,\n", - " 24.17667007446289,\n", - " 24.17667007446289,\n", - " 24.17667007446289,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 244.0413818359375,\n", - " 74.58797454833984,\n", - " 74.58797454833984,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 16150.6162109375,\n", - " 24.592029571533203,\n", - " 100.23110961914062,\n", - " 8.019574165344238,\n", - " 22.024221420288086,\n", - " 196.55812072753906,\n", - " 196.55812072753906,\n", - " 10.0629301071167,\n", - " 26.633651733398438,\n", - " 9.341270446777344,\n", - " 9.341270446777344,\n", - " 9.341270446777344,\n", - " 160.00205993652344,\n", - " 25.090591430664062,\n", - " 25.090591430664062,\n", - " 27.958616256713867,\n", - " 27.958616256713867,\n", - " 33.413421630859375,\n", - " 56.58835983276367,\n", - " 75.11299133300781,\n", - " 75.11299133300781,\n", - " 90.420654296875,\n", - " 32.67418670654297,\n", - " 54.854827880859375,\n", - " 65.36970520019531,\n", - " 65.36970520019531,\n", - " 15.61748218536377,\n", - " 15.61748218536377,\n", - " 15.61748218536377,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 34.05690383911133,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 767.959716796875,\n", - " 39.399654388427734,\n", - " 39.399654388427734,\n", - " 39.399654388427734,\n", - " 29.0726375579834,\n", - " 29.0726375579834,\n", - " 29.0726375579834,\n", - " 82.9017333984375,\n", - " 82.9017333984375,\n", - " 51.59709930419922,\n", - " 51.59709930419922,\n", - " 36.804237365722656,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 28.704092025756836,\n", - " 142.19129943847656,\n", - " 142.19129943847656,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 29.95490264892578,\n", - " 50.495479583740234,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 160.04151916503906,\n", - " 95.4728775024414,\n", - " 13.032922744750977,\n", - " 13.032922744750977,\n", - " 438.0936584472656,\n", - " 25.435516357421875,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 62.001888275146484,\n", - " 18.926958084106445,\n", - " 79.778564453125,\n", - " 24.411231994628906,\n", - " 30.95073890686035,\n", - " 23.880308151245117,\n", - " 98.3361587524414,\n", - " 98.3361587524414,\n", - " 53.99956512451172,\n", - " 31.282690048217773,\n", - " 31.282690048217773,\n", - " 24.828489303588867,\n", - " 95.39952087402344,\n", - " 95.39952087402344,\n", - " 29.91636848449707,\n", - " 29.91636848449707,\n", - " 29.91636848449707,\n", - " 29.046144485473633,\n", - " 29.046144485473633,\n", - " 280.32794189453125,\n", - " 280.32794189453125,\n", - " 52.531494140625,\n", - " 52.531494140625,\n", - " 32.828460693359375,\n", - " 32.828460693359375,\n", - " 21.872875213623047,\n", - " 31.914512634277344,\n", - " 60.90550231933594,\n", - " 60.90550231933594,\n", - " 24.419986724853516,\n", - " 26.44912338256836,\n", - " 26.44912338256836,\n", - " 57.484676361083984,\n", - " 57.484676361083984,\n", - " 7.871554374694824,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 179.61581420898438,\n", - " 8.477884292602539,\n", - " 72.51541900634766,\n", - " 72.51541900634766,\n", - " 20.13242530822754,\n", - " 23.228296279907227,\n", - " 28.653247833251953,\n", - " 12.58013916015625,\n", - " 12.58013916015625,\n", - " 12.58013916015625,\n", - " 23.084768295288086,\n", - " 68.72532653808594,\n", - " 68.72532653808594,\n", - " 30.086450576782227,\n", - " 30.086450576782227,\n", - " 52.67949295043945,\n", - " 52.67949295043945,\n", - " 38.49380111694336,\n", - " 38.49380111694336,\n", - " 37.2798957824707,\n", - " 37.2798957824707,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 48.809207916259766,\n", - " 59.176551818847656,\n", - " 59.176551818847656,\n", - " 59.176551818847656,\n", - " 44.63967514038086,\n", - " 42.50554275512695,\n", - " 29.16765022277832,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 134.17138671875,\n", - " 33.469566345214844,\n", - " 33.469566345214844,\n", - " 26.317380905151367,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 85.4616470336914,\n", - " 13.612092971801758,\n", - " 21.696300506591797,\n", - " 25.094533920288086,\n", - " 25.094533920288086,\n", - " 83.97547912597656,\n", - " 83.97547912597656,\n", - " 35.32173156738281,\n", - " 35.32173156738281,\n", - " 26.05023956298828,\n", - " 26.05023956298828,\n", - " 26.05023956298828,\n", - " 20.915502548217773,\n", - " 23.04576873779297,\n", - " 28.619813919067383,\n", - " 28.619813919067383,\n", - " 28.61835289001465,\n", - " 33.329410552978516,\n", - " 17.94207763671875,\n", - " 17.94207763671875,\n", - " 17.94207763671875,\n", - " 9.63046646118164,\n", - " 9.63046646118164,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 95.58506774902344,\n", - " 52.847835540771484,\n", - " 41.31187057495117,\n", - " 41.31187057495117,\n", - " 31.275516510009766,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 26494.5234375,\n", - " 30.938993453979492,\n", - " 30.938993453979492,\n", - " 59.856266021728516,\n", - " 43.062042236328125,\n", - " 43.062042236328125,\n", - " 44.59657287597656,\n", - " 51.06792068481445,\n", - " 102.48807525634766,\n", - " 102.48807525634766,\n", - " 3726.961669921875,\n", - " 3726.961669921875,\n", - " 26.917036056518555,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 18.76892852783203,\n", - " 25.2055606842041,\n", - " 84.37887573242188,\n", - " 44.74599838256836,\n", - " 44.74599838256836,\n", - " 17.199106216430664,\n", - " 36.21172332763672,\n", - " 36.21172332763672,\n", - " 35.43221664428711,\n", - " 24.235986709594727,\n", - " 1349.5811767578125,\n", - " 1349.5811767578125,\n", - " 140.4710693359375,\n", - " 140.4710693359375,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 31.35894012451172,\n", - " 23.45647621154785,\n", - " 25.17761993408203,\n", - " 25.17761993408203,\n", - " 37.43434524536133,\n", - " 37.43434524536133,\n", - " 37.43434524536133,\n", - " 53.80603790283203,\n", - " 31.383758544921875,\n", - " 53.90730667114258,\n", - " 53.90730667114258,\n", - " 343.1087646484375,\n", - " 343.1087646484375,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 38.38011169433594,\n", - " 39.77899169921875,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 112.42691802978516,\n", - " 122.82071685791016,\n", - " 122.82071685791016,\n", - " 20.101877212524414,\n", - " 18.68659019470215,\n", - " 204.53883361816406,\n", - " 204.53883361816406,\n", - " 57.286155700683594,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 14.508488655090332,\n", - " 39.236366271972656,\n", - " 39.236366271972656,\n", - " 39.236366271972656,\n", - " 23.45498275756836,\n", - " 23.45498275756836,\n", - " 25.313365936279297,\n", - " 25.313365936279297,\n", - " 25.313365936279297,\n", - " 7.640000343322754,\n", - " 55.74361801147461,\n", - " 55.74361801147461,\n", - " 55.74361801147461,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 118.56034851074219,\n", - " 46.266693115234375,\n", - " 46.266693115234375,\n", - " 46.266693115234375,\n", - " 101.79549407958984,\n", - " 26.219223022460938,\n", - " 26.219223022460938,\n", - " 26.59097671508789,\n", - " 73.16544342041016,\n", - " 73.16544342041016,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 4.6649675369262695,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 102.63156127929688,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.901548385620117,\n", - " 25.42319679260254,\n", - " 35.7122688293457,\n", - " 35.7122688293457,\n", - " 35.7122688293457,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 123.4432601928711,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 12773.021484375,\n", - " 35.29640197753906,\n", - " 41.34097671508789,\n", - " 41.34097671508789,\n", - " 17.646257400512695,\n", - " 54.104286193847656,\n", - " 54.104286193847656,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 227.4977264404297,\n", - " 254.66741943359375,\n", - " 254.66741943359375,\n", - " 254.66741943359375,\n", - " 35.556182861328125,\n", - " 20.405641555786133,\n", - " 20.405641555786133,\n", - " 20.405641555786133,\n", - " 35.32471466064453,\n", - " 35.32471466064453,\n", - " 35.729862213134766,\n", - " 35.729862213134766,\n", - " 36.06106185913086,\n", - " 664.3406372070312,\n", - " 664.3406372070312,\n", - " 664.3406372070312,\n", - " 8.032919883728027,\n", - " 31.60088348388672,\n", - " 31.60088348388672,\n", - " 31.60088348388672,\n", - " 24.500505447387695,\n", - " 30.368999481201172,\n", - " 30.368999481201172,\n", - " 30.368999481201172,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 49.92478942871094,\n", - " 41.470497131347656,\n", - " 198.9549560546875,\n", - " 198.9549560546875,\n", - " 22.570316314697266,\n", - " 22.570316314697266,\n", - " 61.06841278076172,\n", - " 61.06841278076172,\n", - " 19.733320236206055,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 18.51359748840332,\n", - " 26.698163986206055,\n", - " 132.5131072998047,\n", - " 132.5131072998047,\n", - " 132.5131072998047,\n", - " 87.39599609375,\n", - " 87.39599609375,\n", - " 15.069024085998535,\n", - " 15.069024085998535,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 27.100372314453125,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 63.87034225463867,\n", - " 30.030494689941406,\n", - " 30.030494689941406,\n", - " 46.02188491821289,\n", - " 12.42951774597168,\n", - " 12.42951774597168,\n", - " 12.42951774597168,\n", - " 31.426227569580078,\n", - " 31.426227569580078,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 11399.9130859375,\n", - " 8.660289764404297,\n", - " 38.9617919921875,\n", - " 56.292938232421875,\n", - " 56.292938232421875,\n", - " 26.372861862182617,\n", - " 26.372861862182617,\n", - " 22.04472541809082,\n", - " 68.2925796508789,\n", - " 68.2925796508789,\n", - " 320.4150085449219,\n", - " 320.4150085449219,\n", - " 320.4150085449219,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 118.28704071044922,\n", - " 443.4452819824219,\n", - " 443.4452819824219,\n", - " 443.4452819824219,\n", - " 10.389924049377441,\n", - " 19.26616859436035,\n", - " 44.08513259887695,\n", - " 22.871849060058594,\n", - " 22.871849060058594,\n", - " 124.8387680053711,\n", - " 124.8387680053711,\n", - " 38.5760383605957,\n", - " 38.5760383605957,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 11681.0107421875,\n", - " 209.7700958251953,\n", - " 209.7700958251953,\n", - " 209.7700958251953,\n", - " 25.145465850830078,\n", - " 46.553932189941406,\n", - " 46.553932189941406,\n", - " 1077.1380615234375,\n", - " 1077.1380615234375,\n", - " 36.829097747802734,\n", - " 36.829097747802734,\n", - " 36.829097747802734,\n", - " 28.240446090698242,\n", - " 19.669275283813477,\n", - " 31.054983139038086,\n", - " 31.054983139038086,\n", - " 20.774761199951172,\n", - " 48.37118911743164,\n", - " 48.37118911743164,\n", - " 17.527498245239258,\n", - " 17.527498245239258,\n", - " 31.0816650390625,\n", - " 20.67710304260254,\n", - " 30.72968292236328,\n", - " 20.236570358276367,\n", - " 65.9017333984375,\n", - " 65.9017333984375,\n", - " 23.537521362304688,\n", - " 37.6465950012207,\n", - " 36.654090881347656,\n", - " 36.654090881347656,\n", - " 87.95944213867188,\n", - " 87.95944213867188,\n", - " 30.14996337890625,\n", - " 58.37077713012695,\n", - " 58.37077713012695,\n", - " 30.13671112060547,\n", - " 24.07550621032715,\n", - " 40.146114349365234,\n", - " 40.146114349365234,\n", - " 40.146114349365234,\n", - " 115.78044128417969,\n", - " 115.78044128417969,\n", - " 14.15937614440918,\n", - " 14.15937614440918,\n", - " 20.89550018310547,\n", - " 3.9720547199249268,\n", - " 33.40971755981445,\n", - " 33.40971755981445,\n", - " 52.2775993347168,\n", - " 52.2775993347168,\n", - " 52.2775993347168,\n", - " 25.43512725830078,\n", - " 25.43512725830078,\n", - " 64.60677337646484,\n", - " 64.60677337646484,\n", - " 7.628475189208984,\n", - " 75422.34375,\n", - " 75422.34375,\n", - " 110.41958618164062,\n", - " 110.41958618164062,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 194.68777465820312,\n", - " 35.505279541015625,\n", - " 35.505279541015625,\n", - " 42.56560134887695,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 39.07632827758789,\n", - " 29.779067993164062,\n", - " 29.779067993164062,\n", - " 19.369304656982422,\n", - " 24.996742248535156,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 11720.8369140625,\n", - " 61.66079330444336,\n", - " 61.66079330444336,\n", - " 21.175073623657227,\n", - " 98.76887512207031,\n", - " 98.76887512207031,\n", - " 20.606599807739258,\n", - " 20.606599807739258,\n", - " 33.786659240722656,\n", - " 18.662525177001953,\n", - " 28.453044891357422,\n", - " 19.431034088134766,\n", - " 19.431034088134766,\n", - " 120.7717514038086,\n", - " 120.7717514038086,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 151.54269409179688,\n", - " 22.18948745727539,\n", - " 16.650720596313477,\n", - " 54.773746490478516,\n", - " 54.773746490478516,\n", - " 54.773746490478516,\n", - " 99.66673278808594,\n", - " 99.66673278808594,\n", - " 99.66673278808594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 32.324241638183594,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 4308.68994140625,\n", - " 26.252056121826172,\n", - " 57.84855270385742,\n", - " 57.84855270385742,\n", - " 57.84855270385742,\n", - " 20.360336303710938,\n", - " 20.360336303710938,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 57646.9921875,\n", - " 228742.90625,\n", - " 228742.90625,\n", - " 31.200725555419922,\n", - " 31.200725555419922,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 40.30677795410156,\n", - " 42.9063606262207,\n", - " 42.9063606262207,\n", - " 42.9063606262207,\n", - " 35.15571594238281,\n", - " 35.15571594238281,\n", - " 35.15571594238281,\n", - " 38.43263244628906,\n", - " 38.43263244628906,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 91.56676483154297,\n", - " 7.553915977478027,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 15.160603523254395,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 20.811511993408203,\n", - " 6.828880786895752,\n", - " 6.828880786895752,\n", - " 6.828880786895752,\n", - " 1789.230712890625,\n", - " 1789.230712890625,\n", - " 20.204023361206055,\n", - " 24.286148071289062,\n", - " 346.27386474609375,\n", - " 346.27386474609375,\n", - " 19.6539363861084,\n", - " 227.10731506347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 186.01747131347656,\n", - " 26.937658309936523,\n", - " 26.937658309936523,\n", - " 26.937658309936523,\n", - " 41.5850715637207,\n", - " 41.5850715637207,\n", - " 74.98391723632812,\n", - " 74.98391723632812,\n", - " 24.90932273864746,\n", - " 24.90932273864746,\n", - " 23.569917678833008,\n", - " 23.569917678833008,\n", - " 74.51676940917969,\n", - " 23.479656219482422,\n", - " 7.8914408683776855,\n", - " 32.133968353271484,\n", - " 32.133968353271484,\n", - " 101.44974517822266,\n", - " 101.44974517822266,\n", - " 478.8811950683594,\n", - " 478.8811950683594,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 481.9111022949219,\n", - " 32.73618698120117,\n", - " 32.73618698120117,\n", - " 48.27867126464844,\n", - " 48.27867126464844,\n", - " 98.82022094726562,\n", - " 98.82022094726562,\n", - " 49.547908782958984,\n", - " 49.547908782958984,\n", - " 41.0729866027832,\n", - " 41.0729866027832,\n", - " 19.117454528808594,\n", - " 27.5860538482666,\n", - " 27.5860538482666,\n", - " 41.13151931762695,\n", - " 28.08635139465332,\n", - " 28.08635139465332,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 37.49348449707031,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 49.498023986816406,\n", - " 233.0972137451172,\n", - " 233.0972137451172,\n", - " 50.8763427734375,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 124.87788391113281,\n", - " 44.79485321044922,\n", - " 44.79485321044922,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 15.80577278137207,\n", - " 38.82398986816406,\n", - " 38.82398986816406,\n", - " 29.37957191467285,\n", - " 22.65690803527832,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 45.49738311767578,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 3500.255126953125,\n", - " 8.021744728088379,\n", - " 36.637908935546875,\n", - " 20.358747482299805,\n", - " 24.077688217163086,\n", - " 24.077688217163086,\n", - " 317.02789306640625,\n", - " 317.02789306640625,\n", - " 25.808713912963867,\n", - " 43.17150115966797,\n", - " 43.17150115966797,\n", - " 43.17150115966797,\n", - " 32.133785247802734,\n", - " 32.133785247802734,\n", - " 32.133785247802734,\n", - " 10.273715019226074,\n", - " 10.273715019226074,\n", - " 27.704740524291992,\n", - " 27.704740524291992,\n", - " 45.786766052246094,\n", - " 45.786766052246094,\n", - " 28.401771545410156,\n", - " 31.565929412841797,\n", - " 31.565929412841797,\n", - " 31.565929412841797,\n", - " 33.33272933959961,\n", - " 33.33272933959961,\n", - " 68.33909606933594,\n", - " ...],\n", - " 'household_weight': [28.242149353027344,\n", - " 46.80501937866211,\n", - " 23.999473571777344,\n", - " 40.036590576171875,\n", - " 319.1246032714844,\n", - " 58.23358154296875,\n", - " 290.2938537597656,\n", - " 10.826322555541992,\n", - " 18.18562889099121,\n", - " 32.117332458496094,\n", - " 43.09082794189453,\n", - " 31.772851943969727,\n", - " 20.178485870361328,\n", - " 18.06965446472168,\n", - " 18.671987533569336,\n", - " 209.88294982910156,\n", - " 21.307418823242188,\n", - " 114.24542236328125,\n", - " 33.831478118896484,\n", - " 44.90141677856445,\n", - " 45.325626373291016,\n", - " 24.144590377807617,\n", - " 79.82612609863281,\n", - " 14.016646385192871,\n", - " 282.30853271484375,\n", - " 34.989463806152344,\n", - " 21.942724227905273,\n", - " 205.44015502929688,\n", - " 39.89904022216797,\n", - " 19.02444076538086,\n", - " 29.60257911682129,\n", - " 104.54341125488281,\n", - " 94.42530822753906,\n", - " 63.71830368041992,\n", - " 30.37379264831543,\n", - " 746.3109741210938,\n", - " 262.5146179199219,\n", - " 301.7978210449219,\n", - " 59.51349639892578,\n", - " 39.839420318603516,\n", - " 25.185821533203125,\n", - " 36.8460807800293,\n", - " 47.40287399291992,\n", - " 28.797687530517578,\n", - " 38.371482849121094,\n", - " 7.789304256439209,\n", - " 6.997937202453613,\n", - " 111.38818359375,\n", - " 40.009578704833984,\n", - " 212.98501586914062,\n", - " 23.419477462768555,\n", - " 73.20986938476562,\n", - " 110.51835632324219,\n", - " 92.79043579101562,\n", - " 184.57461547851562,\n", - " 9.06320858001709,\n", - " 7.600617408752441,\n", - " 29.39621925354004,\n", - " 36.01832962036133,\n", - " 27.438125610351562,\n", - " 56.51862335205078,\n", - " 34.7610969543457,\n", - " 28.407873153686523,\n", - " 46.22690200805664,\n", - " 184.8269500732422,\n", - " 28.927675247192383,\n", - " 81.71466827392578,\n", - " 80.8134765625,\n", - " 94.04654693603516,\n", - " 9.590133666992188,\n", - " 1194.1971435546875,\n", - " 76.40959167480469,\n", - " 20.353389739990234,\n", - " 33.174442291259766,\n", - " 45.14307403564453,\n", - " 53.31949996948242,\n", - " 30.570446014404297,\n", - " 26.836687088012695,\n", - " 74.53304290771484,\n", - " 134.6366729736328,\n", - " 28.297229766845703,\n", - " 38.551185607910156,\n", - " 19.281497955322266,\n", - " 30.92945671081543,\n", - " 90.17884063720703,\n", - " 154.83297729492188,\n", - " 41.390586853027344,\n", - " 25.554105758666992,\n", - " 19.096031188964844,\n", - " 23.780738830566406,\n", - " 71.38541412353516,\n", - " 69.7490005493164,\n", - " 490.34344482421875,\n", - " 1640.6968994140625,\n", - " 26.102113723754883,\n", - " 8.504029273986816,\n", - " 8.9138822555542,\n", - " 30.532691955566406,\n", - " 26.963403701782227,\n", - " 123.43195343017578,\n", - " 19.758426666259766,\n", - " 23.556047439575195,\n", - " 21.44287109375,\n", - " 47.156822204589844,\n", - " 83.73397064208984,\n", - " 116.41424560546875,\n", - " 53.18351364135742,\n", - " 16.176658630371094,\n", - " 43.51107406616211,\n", - " 7.990398406982422,\n", - " 39.139984130859375,\n", - " 39.13148498535156,\n", - " 77.44499206542969,\n", - " 244.87086486816406,\n", - " 32.5803108215332,\n", - " 8.641592979431152,\n", - " 34.258522033691406,\n", - " 8736.19140625,\n", - " 44.93291091918945,\n", - " 63.7723503112793,\n", - " 61.97844696044922,\n", - " 32.464134216308594,\n", - " 23.566247940063477,\n", - " 16645.962890625,\n", - " 8.623653411865234,\n", - " 127.91293334960938,\n", - " 37.4765510559082,\n", - " 111.99394989013672,\n", - " 125.22480010986328,\n", - " 114.73353576660156,\n", - " 1555.2490234375,\n", - " 24.17667007446289,\n", - " 244.0413818359375,\n", - " 74.58797454833984,\n", - " 16150.6162109375,\n", - " 24.592029571533203,\n", - " 100.23110961914062,\n", - " 8.019574165344238,\n", - " 22.024221420288086,\n", - " 196.55812072753906,\n", - " 10.0629301071167,\n", - " 26.633651733398438,\n", - " 9.341270446777344,\n", - " 160.00205993652344,\n", - " 25.090591430664062,\n", - " 27.958616256713867,\n", - " 33.413421630859375,\n", - " 56.58835983276367,\n", - " 75.11299133300781,\n", - " 90.420654296875,\n", - " 32.67418670654297,\n", - " 54.854827880859375,\n", - " 65.36970520019531,\n", - " 15.61748218536377,\n", - " 34.05690383911133,\n", - " 767.959716796875,\n", - " 39.399654388427734,\n", - " 29.0726375579834,\n", - " 82.9017333984375,\n", - " 51.59709930419922,\n", - " 36.804237365722656,\n", - " 28.704092025756836,\n", - " 142.19129943847656,\n", - " 29.95490264892578,\n", - " 50.495479583740234,\n", - " 160.04151916503906,\n", - " 95.4728775024414,\n", - " 13.032922744750977,\n", - " 438.0936584472656,\n", - " 25.435516357421875,\n", - " 62.001888275146484,\n", - " 18.926958084106445,\n", - " 79.778564453125,\n", - " 24.411231994628906,\n", - " 30.95073890686035,\n", - " 23.880308151245117,\n", - " 98.3361587524414,\n", - " 53.99956512451172,\n", - " 31.282690048217773,\n", - " 24.828489303588867,\n", - " 95.39952087402344,\n", - " 29.91636848449707,\n", - " 29.046144485473633,\n", - " 280.32794189453125,\n", - " 52.531494140625,\n", - " 32.828460693359375,\n", - " 21.872875213623047,\n", - " 31.914512634277344,\n", - " 60.90550231933594,\n", - " 24.419986724853516,\n", - " 26.44912338256836,\n", - " 57.484676361083984,\n", - " 7.871554374694824,\n", - " 179.61581420898438,\n", - " 8.477884292602539,\n", - " 72.51541900634766,\n", - " 20.13242530822754,\n", - " 23.228296279907227,\n", - " 28.653247833251953,\n", - " 12.58013916015625,\n", - " 23.084768295288086,\n", - " 68.72532653808594,\n", - " 30.086450576782227,\n", - " 52.67949295043945,\n", - " 38.49380111694336,\n", - " 37.2798957824707,\n", - " 48.809207916259766,\n", - " 59.176551818847656,\n", - " 44.63967514038086,\n", - " 42.50554275512695,\n", - " 29.16765022277832,\n", - " 134.17138671875,\n", - " 33.469566345214844,\n", - " 26.317380905151367,\n", - " 85.4616470336914,\n", - " 13.612092971801758,\n", - " 21.696300506591797,\n", - " 25.094533920288086,\n", - " 83.97547912597656,\n", - " 35.32173156738281,\n", - " 26.05023956298828,\n", - " 20.915502548217773,\n", - " 23.04576873779297,\n", - " 28.619813919067383,\n", - " 28.61835289001465,\n", - " 33.329410552978516,\n", - " 17.94207763671875,\n", - " 9.63046646118164,\n", - " 95.58506774902344,\n", - " 52.847835540771484,\n", - " 41.31187057495117,\n", - " 31.275516510009766,\n", - " 26494.5234375,\n", - " 30.938993453979492,\n", - " 59.856266021728516,\n", - " 43.062042236328125,\n", - " 44.59657287597656,\n", - " 51.06792068481445,\n", - " 102.48807525634766,\n", - " 3726.961669921875,\n", - " 26.917036056518555,\n", - " 18.76892852783203,\n", - " 25.2055606842041,\n", - " 84.37887573242188,\n", - " 44.74599838256836,\n", - " 17.199106216430664,\n", - " 36.21172332763672,\n", - " 35.43221664428711,\n", - " 24.235986709594727,\n", - " 1349.5811767578125,\n", - " 140.4710693359375,\n", - " 31.35894012451172,\n", - " 23.45647621154785,\n", - " 25.17761993408203,\n", - " 37.43434524536133,\n", - " 53.80603790283203,\n", - " 31.383758544921875,\n", - " 53.90730667114258,\n", - " 343.1087646484375,\n", - " 38.38011169433594,\n", - " 39.77899169921875,\n", - " 112.42691802978516,\n", - " 122.82071685791016,\n", - " 20.101877212524414,\n", - " 18.68659019470215,\n", - " 204.53883361816406,\n", - " 57.286155700683594,\n", - " 14.508488655090332,\n", - " 39.236366271972656,\n", - " 23.45498275756836,\n", - " 25.313365936279297,\n", - " 7.640000343322754,\n", - " 55.74361801147461,\n", - " 118.56034851074219,\n", - " 46.266693115234375,\n", - " 101.79549407958984,\n", - " 26.219223022460938,\n", - " 26.59097671508789,\n", - " 73.16544342041016,\n", - " 4.6649675369262695,\n", - " 102.63156127929688,\n", - " 25.901548385620117,\n", - " 25.42319679260254,\n", - " 35.7122688293457,\n", - " 123.4432601928711,\n", - " 12773.021484375,\n", - " 35.29640197753906,\n", - " 41.34097671508789,\n", - " 17.646257400512695,\n", - " 54.104286193847656,\n", - " 227.4977264404297,\n", - " 254.66741943359375,\n", - " 35.556182861328125,\n", - " 20.405641555786133,\n", - " 35.32471466064453,\n", - " 35.729862213134766,\n", - " 36.06106185913086,\n", - " 664.3406372070312,\n", - " 8.032919883728027,\n", - " 31.60088348388672,\n", - " 24.500505447387695,\n", - " 30.368999481201172,\n", - " 49.92478942871094,\n", - " 41.470497131347656,\n", - " 198.9549560546875,\n", - " 22.570316314697266,\n", - " 61.06841278076172,\n", - " 19.733320236206055,\n", - " 18.51359748840332,\n", - " 26.698163986206055,\n", - " 132.5131072998047,\n", - " 87.39599609375,\n", - " 15.069024085998535,\n", - " 27.100372314453125,\n", - " 63.87034225463867,\n", - " 30.030494689941406,\n", - " 46.02188491821289,\n", - " 12.42951774597168,\n", - " 31.426227569580078,\n", - " 11399.9130859375,\n", - " 8.660289764404297,\n", - " 38.9617919921875,\n", - " 56.292938232421875,\n", - " 26.372861862182617,\n", - " 22.04472541809082,\n", - " 68.2925796508789,\n", - " 320.4150085449219,\n", - " 118.28704071044922,\n", - " 443.4452819824219,\n", - " 10.389924049377441,\n", - " 19.26616859436035,\n", - " 44.08513259887695,\n", - " 22.871849060058594,\n", - " 124.8387680053711,\n", - " 38.5760383605957,\n", - " 11681.0107421875,\n", - " 209.7700958251953,\n", - " 25.145465850830078,\n", - " 46.553932189941406,\n", - " 1077.1380615234375,\n", - " 36.829097747802734,\n", - " 28.240446090698242,\n", - " 19.669275283813477,\n", - " 31.054983139038086,\n", - " 20.774761199951172,\n", - " 48.37118911743164,\n", - " 17.527498245239258,\n", - " 31.0816650390625,\n", - " 20.67710304260254,\n", - " 30.72968292236328,\n", - " 20.236570358276367,\n", - " 65.9017333984375,\n", - " 23.537521362304688,\n", - " 37.6465950012207,\n", - " 36.654090881347656,\n", - " 87.95944213867188,\n", - " 30.14996337890625,\n", - " 58.37077713012695,\n", - " 30.13671112060547,\n", - " 24.07550621032715,\n", - " 40.146114349365234,\n", - " 115.78044128417969,\n", - " 14.15937614440918,\n", - " 20.89550018310547,\n", - " 3.9720547199249268,\n", - " 33.40971755981445,\n", - " 52.2775993347168,\n", - " 25.43512725830078,\n", - " 64.60677337646484,\n", - " 7.628475189208984,\n", - " 75422.34375,\n", - " 110.41958618164062,\n", - " 194.68777465820312,\n", - " 35.505279541015625,\n", - " 42.56560134887695,\n", - " 39.07632827758789,\n", - " 29.779067993164062,\n", - " 19.369304656982422,\n", - " 24.996742248535156,\n", - " 11720.8369140625,\n", - " 61.66079330444336,\n", - " 21.175073623657227,\n", - " 98.76887512207031,\n", - " 20.606599807739258,\n", - " 33.786659240722656,\n", - " 18.662525177001953,\n", - " 28.453044891357422,\n", - " 19.431034088134766,\n", - " 120.7717514038086,\n", - " 151.54269409179688,\n", - " 22.18948745727539,\n", - " 16.650720596313477,\n", - " 54.773746490478516,\n", - " 99.66673278808594,\n", - " 32.324241638183594,\n", - " 4308.68994140625,\n", - " 26.252056121826172,\n", - " 57.84855270385742,\n", - " 20.360336303710938,\n", - " 57646.9921875,\n", - " 228742.90625,\n", - " 31.200725555419922,\n", - " 40.30677795410156,\n", - " 42.9063606262207,\n", - " 35.15571594238281,\n", - " 38.43263244628906,\n", - " 91.56676483154297,\n", - " 7.553915977478027,\n", - " 15.160603523254395,\n", - " 20.811511993408203,\n", - " 6.828880786895752,\n", - " 1789.230712890625,\n", - " 20.204023361206055,\n", - " 24.286148071289062,\n", - " 346.27386474609375,\n", - " 19.6539363861084,\n", - " 227.10731506347656,\n", - " 186.01747131347656,\n", - " 26.937658309936523,\n", - " 41.5850715637207,\n", - " 74.98391723632812,\n", - " 24.90932273864746,\n", - " 23.569917678833008,\n", - " 74.51676940917969,\n", - " 23.479656219482422,\n", - " 7.8914408683776855,\n", - " 32.133968353271484,\n", - " 101.44974517822266,\n", - " 478.8811950683594,\n", - " 481.9111022949219,\n", - " 32.73618698120117,\n", - " 48.27867126464844,\n", - " 98.82022094726562,\n", - " 49.547908782958984,\n", - " 41.0729866027832,\n", - " 19.117454528808594,\n", - " 27.5860538482666,\n", - " 41.13151931762695,\n", - " 28.08635139465332,\n", - " 37.49348449707031,\n", - " 49.498023986816406,\n", - " 233.0972137451172,\n", - " 50.8763427734375,\n", - " 124.87788391113281,\n", - " 44.79485321044922,\n", - " 15.80577278137207,\n", - " 38.82398986816406,\n", - " 29.37957191467285,\n", - " 22.65690803527832,\n", - " 45.49738311767578,\n", - " 3500.255126953125,\n", - " 8.021744728088379,\n", - " 36.637908935546875,\n", - " 20.358747482299805,\n", - " 24.077688217163086,\n", - " 317.02789306640625,\n", - " 25.808713912963867,\n", - " 43.17150115966797,\n", - " 32.133785247802734,\n", - " 10.273715019226074,\n", - " 27.704740524291992,\n", - " 45.786766052246094,\n", - " 28.401771545410156,\n", - " 31.565929412841797,\n", - " 33.33272933959961,\n", - " 68.33909606933594,\n", - " 78.24613952636719,\n", - " 12.20848274230957,\n", - " 43.32186508178711,\n", - " 27.522151947021484,\n", - " 93.13650512695312,\n", - " 24.294950485229492,\n", - " 189.66326904296875,\n", - " 146.65618896484375,\n", - " 25.84233856201172,\n", - " 50.18196105957031,\n", - " 28.27105140686035,\n", - " 40.21383285522461,\n", - " 26.37224578857422,\n", - " 116.51704406738281,\n", - " 180.51116943359375,\n", - " 38.27302551269531,\n", - " 29.138916015625,\n", - " 81209.3515625,\n", - " 26.80150604248047,\n", - " 48.34397888183594,\n", - " 77.17735290527344,\n", - " 36.51317596435547,\n", - " 8.339164733886719,\n", - " 31.767253875732422,\n", - " 55.910152435302734,\n", - " 25.986488342285156,\n", - " 12671.03515625,\n", - " 27.51320457458496,\n", - " 56.45180130004883,\n", - " 76.10295104980469,\n", - " 44.57008361816406,\n", - " 36.456851959228516,\n", - " 68.07799530029297,\n", - " 29.730253219604492,\n", - " 32.43329620361328,\n", - " 18.978092193603516,\n", - " 9.371033668518066,\n", - " 80.16841125488281,\n", - " 30.737377166748047,\n", - " 44.296260833740234,\n", - " 24.082406997680664,\n", - " 42.62151336669922,\n", - " 9.543537139892578,\n", - " 27.178924560546875,\n", - " 122.48465728759766,\n", - " 211.5702362060547,\n", - " 29.55289077758789,\n", - " 90.36311340332031,\n", - " 32.936710357666016,\n", - " 48.66644287109375,\n", - " 28.885408401489258,\n", - " 100.52787017822266,\n", - " 49.253517150878906,\n", - " 50.8596076965332,\n", - " 33.19301223754883,\n", - " 123.25515747070312,\n", - " 17.03289031982422,\n", - " 21.81167984008789,\n", - " 42.217891693115234,\n", - " 107.16097259521484,\n", - " 75.89432525634766,\n", - " 23.667015075683594,\n", - " 56.91862487792969,\n", - " 54.842350006103516,\n", - " 27.949846267700195,\n", - " 42.967987060546875,\n", - " 22.591413497924805,\n", - " 475.7314758300781,\n", - " 27.852066040039062,\n", - " 26.91028594970703,\n", - " 28.905298233032227,\n", - " 22.205158233642578,\n", - " 495.7840881347656,\n", - " 139.74560546875,\n", - " 41.20463180541992,\n", - " 20.8092098236084,\n", - " 64.87281036376953,\n", - " 25509.48828125,\n", - " 742.6254272460938,\n", - " 88.88448333740234,\n", - " 37.8209342956543,\n", - " 45.28633117675781,\n", - " 49.422019958496094,\n", - " 33.699546813964844,\n", - " 7.88087797164917,\n", - " 35.27408981323242,\n", - " 24.21812629699707,\n", - " 27.140623092651367,\n", - " 27.43670082092285,\n", - " 35.01750564575195,\n", - " 88.72260284423828,\n", - " 69.74231719970703,\n", - " 48.520477294921875,\n", - " 81.13410186767578,\n", - " 31.859851837158203,\n", - " 9.064040184020996,\n", - " 23.752965927124023,\n", - " 180.64532470703125,\n", - " 521.6224975585938,\n", - " 19.425310134887695,\n", - " 30.754941940307617,\n", - " 11.20598316192627,\n", - " 20.52555274963379,\n", - " 16.73333168029785,\n", - " 142.5982208251953,\n", - " 8.130870819091797,\n", - " 57.091121673583984,\n", - " 45.064292907714844,\n", - " 21.070842742919922,\n", - " 110.8116455078125,\n", - " 26.09881591796875,\n", - " 36.49736022949219,\n", - " 40.8791618347168,\n", - " 69.22997283935547,\n", - " 92.81848907470703,\n", - " 11.977202415466309,\n", - " 120.67728424072266,\n", - " 13.511035919189453,\n", - " 47.45903396606445,\n", - " 57.43730545043945,\n", - " 97.10781860351562,\n", - " 128.81521606445312,\n", - " 54.1357421875,\n", - " 559.6054077148438,\n", - " 201.12103271484375,\n", - " 53.43246841430664,\n", - " 66.09152221679688,\n", - " 36.68221664428711,\n", - " 370.2716979980469,\n", - " 60.584129333496094,\n", - " 124.5239028930664,\n", - " 82.646240234375,\n", - " 35.10287857055664,\n", - " 40.58534622192383,\n", - " 21.88373565673828,\n", - " 22.397127151489258,\n", - " 23.788694381713867,\n", - " 8998.4521484375,\n", - " 32.30588912963867,\n", - " 26.71613311767578,\n", - " 25.443115234375,\n", - " 26.071346282958984,\n", - " 37.27550506591797,\n", - " 25.599700927734375,\n", - " 49.656471252441406,\n", - " 116.1102294921875,\n", - " 93.41844940185547,\n", - " 23.849533081054688,\n", - " 25.36341667175293,\n", - " 35.1338996887207,\n", - " 52.95706558227539,\n", - " 36.73451614379883,\n", - " 6.117847442626953,\n", - " 524.9666748046875,\n", - " 9.699667930603027,\n", - " 39.9635009765625,\n", - " 42.189476013183594,\n", - " 63.87661361694336,\n", - " 68.07786560058594,\n", - " 47.901031494140625,\n", - " 17.65812110900879,\n", - " 664.2684326171875,\n", - " 321.7586669921875,\n", - " 31.622394561767578,\n", - " 26.346460342407227,\n", - " 30.11229133605957,\n", - " 67.34693908691406,\n", - " 162.7297821044922,\n", - " 130.43927001953125,\n", - " 33.19267272949219,\n", - " 27.963655471801758,\n", - " 22398.759765625,\n", - " 51.41410446166992,\n", - " 111.35924530029297,\n", - " 44.99341583251953,\n", - " 25.26917839050293,\n", - " 23.641569137573242,\n", - " 21.86798858642578,\n", - " 23.061235427856445,\n", - " 22.17639923095703,\n", - " 114.16553497314453,\n", - " 309.32916259765625,\n", - " 53.26786422729492,\n", - " 53.183563232421875,\n", - " 10.897358894348145,\n", - " 60.68538284301758,\n", - " 71.96173095703125,\n", - " 70.36080169677734,\n", - " 31.388673782348633,\n", - " 20145.208984375,\n", - " 25.005765914916992,\n", - " 878.1486206054688,\n", - " 36.71416091918945,\n", - " 40.28757095336914,\n", - " 23.292160034179688,\n", - " 1416.2142333984375,\n", - " 35.93791198730469,\n", - " 149.52703857421875,\n", - " 50.79178237915039,\n", - " 55.27119445800781,\n", - " 36.429298400878906,\n", - " 47.621307373046875,\n", - " 34.303409576416016,\n", - " 15.042612075805664,\n", - " 17.039262771606445,\n", - " 23.58864974975586,\n", - " 210.0742950439453,\n", - " 36.1551399230957,\n", - " 45.853240966796875,\n", - " 12030.251953125,\n", - " 31.810583114624023,\n", - " 33.43047332763672,\n", - " 33.70047378540039,\n", - " 43.46784973144531,\n", - " 20.2988224029541,\n", - " 21.06975746154785,\n", - " 67.80582427978516,\n", - " 82.29581451416016,\n", - " 8.1028413772583,\n", - " 47.00740051269531,\n", - " 28.639923095703125,\n", - " 21.906150817871094,\n", - " 46.424827575683594,\n", - " 36.915645599365234,\n", - " 26.711196899414062,\n", - " 32.44154739379883,\n", - " 59.117042541503906,\n", - " 74.95713806152344,\n", - " 148.52203369140625,\n", - " 8.828947067260742,\n", - " 560.364013671875,\n", - " 62.23111343383789,\n", - " 288.2350769042969,\n", - " 81.37005615234375,\n", - " 144.430908203125,\n", - " 63.74538040161133,\n", - " 26.690271377563477,\n", - " 28.667530059814453,\n", - " 30.918338775634766,\n", - " 34.81563949584961,\n", - " 35.908424377441406,\n", - " 192.0653839111328,\n", - " 648.81103515625,\n", - " 26.497249603271484,\n", - " 26.941646575927734,\n", - " 22.58795166015625,\n", - " 57.01644515991211,\n", - " 252.75946044921875,\n", - " 17.341148376464844,\n", - " 144.19741821289062,\n", - " 29.277118682861328,\n", - " 41.46324157714844,\n", - " 169.3571014404297,\n", - " 27.72432518005371,\n", - " 101.27507019042969,\n", - " 19.45806121826172,\n", - " 53.42601013183594,\n", - " 19.13066864013672,\n", - " 42.555809020996094,\n", - " 68.21251678466797,\n", - " 48.53764724731445,\n", - " 27.182392120361328,\n", - " 1236.9078369140625,\n", - " 16.671600341796875,\n", - " 87.8784408569336,\n", - " 12.048067092895508,\n", - " 41.45891189575195,\n", - " 123.57081604003906,\n", - " 27.613815307617188,\n", - " 20.524578094482422,\n", - " 14.835566520690918,\n", - " 37.99099349975586,\n", - " 65.80184936523438,\n", - " 52.391544342041016,\n", - " 27.784547805786133,\n", - " 25.413583755493164,\n", - " 24.290721893310547,\n", - " 29.84189796447754,\n", - " 93.54571533203125,\n", - " 12.833515167236328,\n", - " 31.93730926513672,\n", - " 21.837779998779297,\n", - " 40.02711486816406,\n", - " 30.645097732543945,\n", - " 34.03675842285156,\n", - " 28.055727005004883,\n", - " 4114.03173828125,\n", - " 312.41644287109375,\n", - " 38.029319763183594,\n", - " 20.067974090576172,\n", - " 27.55293846130371,\n", - " 130.69515991210938,\n", - " 270.5059509277344,\n", - " 28.26038932800293,\n", - " 79.09233093261719,\n", - " 22.47134780883789,\n", - " 39.074195861816406,\n", - " 20.090557098388672,\n", - " 39.33311080932617,\n", - " 25.52715492248535,\n", - " 32.4786491394043,\n", - " 37.721580505371094,\n", - " 37.12297821044922,\n", - " 19.233322143554688,\n", - " 25.292463302612305,\n", - " 27.200090408325195,\n", - " 20.994054794311523,\n", - " 73.67050170898438,\n", - " 32.33354568481445,\n", - " 32.11463165283203,\n", - " 41.62809371948242,\n", - " 126795.9921875,\n", - " 39.350181579589844,\n", - " 87.79580688476562,\n", - " 26.401588439941406,\n", - " 362.6590576171875,\n", - " 101.25609588623047,\n", - " 23.456106185913086,\n", - " 21.45635223388672,\n", - " 74.17300415039062,\n", - " 95.09648895263672,\n", - " 26.410736083984375,\n", - " 20095.244140625,\n", - " 230.7347869873047,\n", - " 28.685497283935547,\n", - " 63.63335037231445,\n", - " 77.13699340820312,\n", - " 26.481613159179688,\n", - " 47.524681091308594,\n", - " 70.77971649169922,\n", - " 1843.601806640625,\n", - " 25.848678588867188,\n", - " 10.336939811706543,\n", - " 705.9268798828125,\n", - " 75.44247436523438,\n", - " 39.02870178222656,\n", - " 302.1763916015625,\n", - " 8.006257057189941,\n", - " 73.46619415283203,\n", - " 33.51382064819336,\n", - " 10439.8505859375,\n", - " 13.362417221069336,\n", - " 162.15960693359375,\n", - " 22.18136978149414,\n", - " 17.125961303710938,\n", - " 7.7348737716674805,\n", - " 4586.9482421875,\n", - " 20.210079193115234,\n", - " 28.537137985229492,\n", - " 36466.9921875,\n", - " 22.20534324645996,\n", - " 80.39472961425781,\n", - " 87.31310272216797,\n", - " 19.035451889038086,\n", - " 26.727052688598633,\n", - " 82.311279296875,\n", - " 30.64400291442871,\n", - " 37.439701080322266,\n", - " 66.1491928100586,\n", - " 35.504981994628906,\n", - " 28.596227645874023,\n", - " 28.70524787902832,\n", - " 18.56167984008789,\n", - " 94.56891632080078,\n", - " 199.69964599609375,\n", - " 93.15608978271484,\n", - " 46.64133071899414,\n", - " 26.3082275390625,\n", - " 26.84583282470703,\n", - " 85.1803970336914,\n", - " 126.94952392578125,\n", - " 7.7427873611450195,\n", - " 53.60639953613281,\n", - " 42.93661117553711,\n", - " 30.18895721435547,\n", - " 20.523786544799805,\n", - " 15.289114952087402,\n", - " 39.26758575439453,\n", - " 2192.096435546875,\n", - " 28.176273345947266,\n", - " 25.65544891357422,\n", - " 171.06246948242188,\n", - " 29.983619689941406,\n", - " 30.42803192138672,\n", - " 31.714704513549805,\n", - " 15044.09765625,\n", - " 22.15239143371582,\n", - " 67.68681335449219,\n", - " 100.11336517333984,\n", - " 40.42636489868164,\n", - " 29.605331420898438,\n", - " 48.155216217041016,\n", - " 14.396186828613281,\n", - " 29.013254165649414,\n", - " 26.361364364624023,\n", - " 19.960866928100586,\n", - " 68.8355941772461,\n", - " 29.29583740234375,\n", - " 32.82291793823242,\n", - " 31.780738830566406,\n", - " 16.08697509765625,\n", - " 34.93206787109375,\n", - " 27.36103630065918,\n", - " 50.44474792480469,\n", - " 59.522010803222656,\n", - " 312.6104736328125,\n", - " 29.054109573364258,\n", - " 34.75701904296875,\n", - " 8.09687614440918,\n", - " 54.09621047973633,\n", - " 61.44231414794922,\n", - " 271.42462158203125,\n", - " 35.14213180541992,\n", - " 111.99459075927734,\n", - " 8.44454288482666,\n", - " 123.31929779052734,\n", - " 126.59722137451172,\n", - " 36.5045166015625,\n", - " 35.1024169921875,\n", - " 30.776689529418945,\n", - " 42.19173049926758,\n", - " 23.56074333190918,\n", - " 16.27764320373535,\n", - " 21.946983337402344,\n", - " 2847.523681640625,\n", - " 6.010672092437744,\n", - " 7.208390712738037,\n", - " 57.01736831665039,\n", - " 143.33522033691406,\n", - " 18.823171615600586,\n", - " 75.49005126953125,\n", - " 28.074281692504883,\n", - " 50.36292266845703,\n", - " 22.38804054260254,\n", - " 10922.8642578125,\n", - " 77.86014556884766,\n", - " 206.0198211669922,\n", - " 26.313854217529297,\n", - " 28.7144832611084,\n", - " 683.16259765625,\n", - " 14.72204875946045,\n", - " 22.581785202026367,\n", - " 12.513693809509277,\n", - " 7.676373481750488,\n", - " 167.21697998046875,\n", - " 59.42802429199219,\n", - " 79.70228576660156,\n", - " 28.858816146850586,\n", - " 34.82012176513672,\n", - " 29.310733795166016,\n", - " 7.445798397064209,\n", - " 107.870361328125,\n", - " 24.9678897857666,\n", - " 8972.31640625,\n", - " 75.58406066894531,\n", - " 33.64850997924805,\n", - " 26.492366790771484,\n", - " 105.02246856689453,\n", - " 33.26601028442383,\n", - " 28.82748031616211,\n", - " 107.10002899169922,\n", - " 22.544139862060547,\n", - " 34.292964935302734,\n", - " 140.15126037597656,\n", - " 42.346309661865234,\n", - " 53.06807327270508,\n", - " 49.23423767089844,\n", - " 95.54383087158203,\n", - " 75.17684936523438,\n", - " 37.09901809692383,\n", - " 37.3985481262207,\n", - " 239.65248107910156,\n", - " 19.611927032470703,\n", - " 50.67652130126953,\n", - " 29.766639709472656,\n", - " 79.36975860595703,\n", - " 576.424560546875,\n", - " 49.84981155395508,\n", - " 157.46791076660156,\n", - " 23.33124351501465,\n", - " 48.718997955322266,\n", - " 16.699039459228516,\n", - " 53.90824508666992,\n", - " 30.789085388183594,\n", - " 157.50238037109375,\n", - " 33.97496795654297,\n", - " 42.18190383911133,\n", - " 9.393257141113281,\n", - " 20.298938751220703,\n", - " 59.12922286987305,\n", - " 28.1489315032959,\n", - " 41.633888244628906,\n", - " 43.42710876464844,\n", - " 24.689950942993164,\n", - " 27.106510162353516,\n", - " 24.369211196899414,\n", - " 30.363527297973633,\n", - " 25.330059051513672,\n", - " 12.639852523803711,\n", - " 25.034690856933594,\n", - " 42.8533821105957,\n", - " 180.43011474609375,\n", - " 60.7864875793457,\n", - " 69.09495544433594,\n", - " 32.384464263916016,\n", - " 32.742679595947266,\n", - " 254.2848358154297,\n", - " 25.241365432739258,\n", - " 102.80842590332031,\n", - " 111.0848388671875,\n", - " 235.91416931152344,\n", - " 45.50685501098633,\n", - " 23.011512756347656,\n", - " 687.4073486328125,\n", - " 43.0496940612793,\n", - " 25.37106704711914,\n", - " 86.02627563476562,\n", - " 22.015275955200195,\n", - " 44.18194580078125,\n", - " 44.794288635253906,\n", - " 46.876468658447266,\n", - " 25.577377319335938,\n", - " 81.19080352783203,\n", - " 36.699668884277344,\n", - " 1552.510498046875,\n", - " 309.1971740722656,\n", - " 29.970518112182617,\n", - " 57.91835403442383,\n", - " 62.551612854003906,\n", - " 25.855674743652344,\n", - " 29.283212661743164,\n", - " 28.56865692138672,\n", - " 38.86330032348633,\n", - " 48.388038635253906,\n", - " ...],\n", - " 'total_households': 23140266.80052776,\n", - " 'is_male': [True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " ...],\n", - " 'age': [34,\n", - " 33,\n", - " 2,\n", - " 20,\n", - " 19,\n", - " 19,\n", - " 48,\n", - " 42,\n", - " 18,\n", - " 80,\n", - " 80,\n", - " 58,\n", - " 27,\n", - " 48,\n", - " 14,\n", - " 9,\n", - " 30,\n", - " 26,\n", - " 78,\n", - " 80,\n", - " 77,\n", - " 56,\n", - " 62,\n", - " 39,\n", - " 46,\n", - " 13,\n", - " 11,\n", - " 49,\n", - " 55,\n", - " 16,\n", - " 13,\n", - " 18,\n", - " 66,\n", - " 34,\n", - " 67,\n", - " 54,\n", - " 71,\n", - " 68,\n", - " 71,\n", - " 71,\n", - " 80,\n", - " 63,\n", - " 61,\n", - " 45,\n", - " 51,\n", - " 10,\n", - " 7,\n", - " 55,\n", - " 61,\n", - " 17,\n", - " 39,\n", - " 40,\n", - " 8,\n", - " 6,\n", - " 2,\n", - " 50,\n", - " 74,\n", - " 76,\n", - " 45,\n", - " 38,\n", - " 16,\n", - " 13,\n", - " 80,\n", - " 39,\n", - " 37,\n", - " 60,\n", - " 60,\n", - " 43,\n", - " 15,\n", - " 69,\n", - " 65,\n", - " 48,\n", - " 56,\n", - " 44,\n", - " 56,\n", - " 60,\n", - " 69,\n", - " 67,\n", - " 40,\n", - " 40,\n", - " 11,\n", - " 5,\n", - " 75,\n", - " 74,\n", - " 40,\n", - " 45,\n", - " 11,\n", - " 8,\n", - " 44,\n", - " 46,\n", - " 14,\n", - " 8,\n", - " 62,\n", - " 61,\n", - " 75,\n", - " 78,\n", - " 42,\n", - " 35,\n", - " 5,\n", - " 51,\n", - " 68,\n", - " 64,\n", - " 23,\n", - " 23,\n", - " 47,\n", - " 47,\n", - " 11,\n", - " 8,\n", - " 80,\n", - " 58,\n", - " 54,\n", - " 60,\n", - " 35,\n", - " 80,\n", - " 77,\n", - " 70,\n", - " 74,\n", - " 80,\n", - " 80,\n", - " 48,\n", - " 35,\n", - " 41,\n", - " 71,\n", - " 43,\n", - " 75,\n", - " 74,\n", - " 43,\n", - " 45,\n", - " 19,\n", - " 13,\n", - " 11,\n", - " 6,\n", - " 80,\n", - " 27,\n", - " 43,\n", - " 53,\n", - " 18,\n", - " 12,\n", - " 79,\n", - " 48,\n", - " 1,\n", - " 61,\n", - " 57,\n", - " 74,\n", - " 35,\n", - " 10,\n", - " 9,\n", - " 2,\n", - " 30,\n", - " 34,\n", - " 80,\n", - " 70,\n", - " 63,\n", - " 34,\n", - " 40,\n", - " 45,\n", - " 19,\n", - " 48,\n", - " 18,\n", - " 40,\n", - " 15,\n", - " 2,\n", - " 48,\n", - " 50,\n", - " 21,\n", - " 19,\n", - " 80,\n", - " 80,\n", - " 46,\n", - " 45,\n", - " 11,\n", - " 8,\n", - " 7,\n", - " 63,\n", - " 59,\n", - " 55,\n", - " 50,\n", - " 15,\n", - " 15,\n", - " 17,\n", - " 70,\n", - " 70,\n", - " 52,\n", - " 71,\n", - " 34,\n", - " 42,\n", - " 8,\n", - " 7,\n", - " 2,\n", - " 78,\n", - " 73,\n", - " 39,\n", - " 73,\n", - " 35,\n", - " 13,\n", - " 9,\n", - " 3,\n", - " 79,\n", - " 17,\n", - " 16,\n", - " 38,\n", - " 42,\n", - " 7,\n", - " 5,\n", - " 59,\n", - " 57,\n", - " 80,\n", - " 78,\n", - " 70,\n", - " 69,\n", - " 44,\n", - " 40,\n", - " 27,\n", - " 31,\n", - " 32,\n", - " 41,\n", - " 43,\n", - " 32,\n", - " 61,\n", - " 59,\n", - " 58,\n", - " 56,\n", - " 80,\n", - " 26,\n", - " 69,\n", - " 72,\n", - " 34,\n", - " 60,\n", - " 61,\n", - " 68,\n", - " 32,\n", - " 35,\n", - " 64,\n", - " 28,\n", - " 32,\n", - " 30,\n", - " 80,\n", - " 80,\n", - " 68,\n", - " 59,\n", - " 57,\n", - " 69,\n", - " 62,\n", - " 56,\n", - " 80,\n", - " 50,\n", - " 80,\n", - " 66,\n", - " 53,\n", - " 17,\n", - " 21,\n", - " 78,\n", - " 75,\n", - " 43,\n", - " 47,\n", - " 7,\n", - " 9,\n", - " 65,\n", - " 53,\n", - " 62,\n", - " 55,\n", - " 33,\n", - " 34,\n", - " 42,\n", - " 46,\n", - " 12,\n", - " 9,\n", - " 45,\n", - " 40,\n", - " 5,\n", - " 8,\n", - " 55,\n", - " 40,\n", - " 40,\n", - " 6,\n", - " 0,\n", - " 50,\n", - " 29,\n", - " 6,\n", - " 3,\n", - " 57,\n", - " 27,\n", - " 69,\n", - " 65,\n", - " 51,\n", - " 45,\n", - " 15,\n", - " 12,\n", - " 42,\n", - " 43,\n", - " 4,\n", - " 52,\n", - " 28,\n", - " 29,\n", - " 25,\n", - " 63,\n", - " 80,\n", - " 34,\n", - " 28,\n", - " 5,\n", - " 30,\n", - " 32,\n", - " 2,\n", - " 0,\n", - " 53,\n", - " 54,\n", - " 78,\n", - " 79,\n", - " 58,\n", - " 72,\n", - " 74,\n", - " 74,\n", - " 80,\n", - " 71,\n", - " 50,\n", - " 15,\n", - " 11,\n", - " 80,\n", - " 71,\n", - " 70,\n", - " 80,\n", - " 75,\n", - " 72,\n", - " 52,\n", - " 63,\n", - " 53,\n", - " 80,\n", - " 21,\n", - " 75,\n", - " 75,\n", - " 69,\n", - " 76,\n", - " 15,\n", - " 13,\n", - " 41,\n", - " 42,\n", - " 14,\n", - " 12,\n", - " 38,\n", - " 52,\n", - " 5,\n", - " 21,\n", - " 17,\n", - " 35,\n", - " 35,\n", - " 1,\n", - " 36,\n", - " 29,\n", - " 0,\n", - " 50,\n", - " 50,\n", - " 31,\n", - " 33,\n", - " 22,\n", - " 39,\n", - " 43,\n", - " 10,\n", - " 8,\n", - " 13,\n", - " 27,\n", - " 30,\n", - " 50,\n", - " 53,\n", - " 15,\n", - " 16,\n", - " 49,\n", - " 44,\n", - " 43,\n", - " 12,\n", - " 8,\n", - " 80,\n", - " 78,\n", - " 77,\n", - " 65,\n", - " 54,\n", - " 37,\n", - " 43,\n", - " 7,\n", - " 5,\n", - " 2,\n", - " 80,\n", - " 62,\n", - " 69,\n", - " 53,\n", - " 65,\n", - " 32,\n", - " 23,\n", - " 58,\n", - " 57,\n", - " 18,\n", - " 47,\n", - " 78,\n", - " 76,\n", - " 39,\n", - " 14,\n", - " 12,\n", - " 36,\n", - " 4,\n", - " 48,\n", - " 56,\n", - " 58,\n", - " 61,\n", - " 32,\n", - " 3,\n", - " 70,\n", - " 60,\n", - " 60,\n", - " 33,\n", - " 72,\n", - " 74,\n", - " 67,\n", - " 60,\n", - " 56,\n", - " 38,\n", - " 41,\n", - " 47,\n", - " 15,\n", - " 12,\n", - " 2,\n", - " 51,\n", - " 80,\n", - " 80,\n", - " 72,\n", - " 25,\n", - " 76,\n", - " 51,\n", - " 15,\n", - " 19,\n", - " 54,\n", - " 68,\n", - " 39,\n", - " 40,\n", - " 12,\n", - " 63,\n", - " 57,\n", - " 76,\n", - " 69,\n", - " 74,\n", - " 76,\n", - " 46,\n", - " 43,\n", - " 11,\n", - " 9,\n", - " 33,\n", - " 27,\n", - " 1,\n", - " 41,\n", - " 70,\n", - " 40,\n", - " 51,\n", - " 49,\n", - " 16,\n", - " 13,\n", - " 9,\n", - " 66,\n", - " 61,\n", - " 52,\n", - " 68,\n", - " 67,\n", - " 37,\n", - " 34,\n", - " 13,\n", - " 77,\n", - " 74,\n", - " 56,\n", - " 56,\n", - " 23,\n", - " 23,\n", - " 72,\n", - " 73,\n", - " 30,\n", - " 30,\n", - " 0,\n", - " 65,\n", - " 76,\n", - " 72,\n", - " 69,\n", - " 77,\n", - " 39,\n", - " 48,\n", - " 14,\n", - " 11,\n", - " 27,\n", - " 33,\n", - " 43,\n", - " 40,\n", - " 7,\n", - " 12,\n", - " 43,\n", - " 77,\n", - " 75,\n", - " 77,\n", - " 59,\n", - " 62,\n", - " 27,\n", - " 0,\n", - " 69,\n", - " 74,\n", - " 56,\n", - " 77,\n", - " 78,\n", - " 74,\n", - " 80,\n", - " 58,\n", - " 58,\n", - " 80,\n", - " 80,\n", - " 51,\n", - " 46,\n", - " 38,\n", - " 7,\n", - " 67,\n", - " 79,\n", - " 61,\n", - " 30,\n", - " 31,\n", - " 53,\n", - " 62,\n", - " 62,\n", - " 62,\n", - " 61,\n", - " 80,\n", - " 80,\n", - " 63,\n", - " 71,\n", - " 49,\n", - " 44,\n", - " 8,\n", - " 1,\n", - " 68,\n", - " 65,\n", - " 62,\n", - " 47,\n", - " 12,\n", - " 9,\n", - " 66,\n", - " 57,\n", - " 60,\n", - " 31,\n", - " 71,\n", - " 71,\n", - " 38,\n", - " 40,\n", - " 13,\n", - " 10,\n", - " 51,\n", - " 37,\n", - " 32,\n", - " 7,\n", - " 5,\n", - " 25,\n", - " 19,\n", - " 67,\n", - " 69,\n", - " 74,\n", - " 69,\n", - " 22,\n", - " 37,\n", - " 45,\n", - " 4,\n", - " 4,\n", - " 53,\n", - " 56,\n", - " 17,\n", - " 52,\n", - " 56,\n", - " 40,\n", - " 42,\n", - " 14,\n", - " 37,\n", - " 72,\n", - " 80,\n", - " 73,\n", - " 34,\n", - " 37,\n", - " 4,\n", - " 2,\n", - " 37,\n", - " 16,\n", - " 12,\n", - " 66,\n", - " 62,\n", - " 65,\n", - " 76,\n", - " 25,\n", - " 25,\n", - " 26,\n", - " 7,\n", - " 6,\n", - " 4,\n", - " 32,\n", - " 34,\n", - " 4,\n", - " 0,\n", - " 37,\n", - " 38,\n", - " 10,\n", - " 5,\n", - " 46,\n", - " 54,\n", - " 14,\n", - " 21,\n", - " 41,\n", - " 35,\n", - " 13,\n", - " 4,\n", - " 11,\n", - " 77,\n", - " 70,\n", - " 50,\n", - " 12,\n", - " 42,\n", - " 72,\n", - " 74,\n", - " 58,\n", - " 25,\n", - " 27,\n", - " 30,\n", - " 30,\n", - " 35,\n", - " 32,\n", - " 1,\n", - " 55,\n", - " 32,\n", - " 7,\n", - " 4,\n", - " 76,\n", - " 47,\n", - " 50,\n", - " 17,\n", - " 69,\n", - " 69,\n", - " 65,\n", - " 28,\n", - " 50,\n", - " 29,\n", - " 27,\n", - " 9,\n", - " 66,\n", - " 50,\n", - " 41,\n", - " 14,\n", - " 39,\n", - " 30,\n", - " 6,\n", - " 2,\n", - " 41,\n", - " 40,\n", - " 6,\n", - " 2,\n", - " 46,\n", - " 48,\n", - " 47,\n", - " 47,\n", - " 20,\n", - " 56,\n", - " 54,\n", - " 43,\n", - " 42,\n", - " 39,\n", - " 12,\n", - " 10,\n", - " 51,\n", - " 56,\n", - " 57,\n", - " 21,\n", - " 69,\n", - " 79,\n", - " 72,\n", - " 67,\n", - " 45,\n", - " 17,\n", - " 14,\n", - " 18,\n", - " 34,\n", - " 38,\n", - " 9,\n", - " 6,\n", - " 62,\n", - " 58,\n", - " 55,\n", - " 40,\n", - " 8,\n", - " 73,\n", - " 67,\n", - " 70,\n", - " 50,\n", - " 40,\n", - " 14,\n", - " 11,\n", - " 7,\n", - " 20,\n", - " 80,\n", - " 45,\n", - " 78,\n", - " 79,\n", - " 51,\n", - " 35,\n", - " 79,\n", - " 51,\n", - " 47,\n", - " 32,\n", - " 32,\n", - " 0,\n", - " 39,\n", - " 38,\n", - " 4,\n", - " 4,\n", - " 56,\n", - " 57,\n", - " 25,\n", - " 70,\n", - " 80,\n", - " 27,\n", - " 73,\n", - " 74,\n", - " 21,\n", - " 20,\n", - " 62,\n", - " 63,\n", - " 56,\n", - " 60,\n", - " 20,\n", - " 18,\n", - " 49,\n", - " 64,\n", - " 24,\n", - " 75,\n", - " 34,\n", - " 6,\n", - " 30,\n", - " 29,\n", - " 26,\n", - " 26,\n", - " 1,\n", - " 73,\n", - " 64,\n", - " 70,\n", - " 69,\n", - " 29,\n", - " 31,\n", - " 31,\n", - " 52,\n", - " 54,\n", - " 69,\n", - " 34,\n", - " 61,\n", - " 73,\n", - " 69,\n", - " 73,\n", - " 62,\n", - " 58,\n", - " 74,\n", - " 75,\n", - " 54,\n", - " 55,\n", - " 54,\n", - " 24,\n", - " 1,\n", - " 71,\n", - " 69,\n", - " 57,\n", - " 63,\n", - " 18,\n", - " 33,\n", - " 34,\n", - " 64,\n", - " 63,\n", - " 69,\n", - " 71,\n", - " 74,\n", - " 74,\n", - " 73,\n", - " 74,\n", - " 45,\n", - " 67,\n", - " 63,\n", - " 68,\n", - " 80,\n", - " 65,\n", - " 42,\n", - " 28,\n", - " 75,\n", - " 77,\n", - " 31,\n", - " 37,\n", - " 8,\n", - " 4,\n", - " 1,\n", - " 54,\n", - " 54,\n", - " 80,\n", - " 45,\n", - " 44,\n", - " 15,\n", - " 9,\n", - " 75,\n", - " 76,\n", - " 74,\n", - " 57,\n", - " 46,\n", - " 57,\n", - " 17,\n", - " 16,\n", - " 11,\n", - " 80,\n", - " 80,\n", - " 65,\n", - " 80,\n", - " 80,\n", - " 80,\n", - " 71,\n", - " 65,\n", - " 68,\n", - " 25,\n", - " 78,\n", - " 78,\n", - " 60,\n", - " 72,\n", - " 53,\n", - " 57,\n", - " 21,\n", - " 19,\n", - " 68,\n", - " 63,\n", - " 58,\n", - " 50,\n", - " 16,\n", - " 59,\n", - " 64,\n", - " 20,\n", - " 40,\n", - " 38,\n", - " 7,\n", - " 5,\n", - " 45,\n", - " 46,\n", - " 17,\n", - " 20,\n", - " 73,\n", - " 45,\n", - " 57,\n", - " 9,\n", - " 29,\n", - " 28,\n", - " 46,\n", - " 46,\n", - " 14,\n", - " 10,\n", - " 25,\n", - " 61,\n", - " 29,\n", - " 29,\n", - " 6,\n", - " 47,\n", - " 43,\n", - " 11,\n", - " 9,\n", - " 8,\n", - " 5,\n", - " 40,\n", - " 36,\n", - " 9,\n", - " 38,\n", - " 9,\n", - " 7,\n", - " 64,\n", - " 63,\n", - " 23,\n", - " 23,\n", - " 4,\n", - " 3,\n", - " 58,\n", - " 57,\n", - " 52,\n", - " 17,\n", - " 14,\n", - " 42,\n", - " 45,\n", - " 14,\n", - " 13,\n", - " 11,\n", - " 10,\n", - " 42,\n", - " 7,\n", - " 9,\n", - " 23,\n", - " 26,\n", - " 60,\n", - " 36,\n", - " 63,\n", - " 51,\n", - " 46,\n", - " 31,\n", - " 27,\n", - " 28,\n", - " 5,\n", - " 2,\n", - " 1,\n", - " 42,\n", - " 42,\n", - " 7,\n", - " 56,\n", - " 56,\n", - " 79,\n", - " 80,\n", - " 79,\n", - " 80,\n", - " 71,\n", - " 73,\n", - " 29,\n", - " 80,\n", - " 60,\n", - " 43,\n", - " 45,\n", - " 73,\n", - " 33,\n", - " 38,\n", - " 41,\n", - " 41,\n", - " 50,\n", - " 12,\n", - " 6,\n", - " 4,\n", - " 74,\n", - " 73,\n", - " 53,\n", - " 58,\n", - " 40,\n", - " 40,\n", - " 28,\n", - " 28,\n", - " 64,\n", - " 58,\n", - " 74,\n", - " 73,\n", - " 74,\n", - " 21,\n", - " 77,\n", - " 76,\n", - " 27,\n", - " 8,\n", - " 4,\n", - " 3,\n", - " 29,\n", - " 27,\n", - " 6,\n", - " 5,\n", - " 72,\n", - " 70,\n", - " 80,\n", - " 38,\n", - " 40,\n", - " 2,\n", - " 0,\n", - " 67,\n", - " 69,\n", - " 51,\n", - " 51,\n", - " 15,\n", - " 12,\n", - " 71,\n", - " 75,\n", - " 55,\n", - " 27,\n", - " 45,\n", - " 49,\n", - " 14,\n", - " 11,\n", - " 47,\n", - " 46,\n", - " 17,\n", - " 13,\n", - " 66,\n", - " 29,\n", - " 25,\n", - " 73,\n", - " 64,\n", - " 80,\n", - " 76,\n", - " 72,\n", - " 37,\n", - " 16,\n", - " 8,\n", - " 42,\n", - " 44,\n", - " 6,\n", - " 26,\n", - " 24,\n", - " 56,\n", - " 27,\n", - " 60,\n", - " 58,\n", - " 71,\n", - " 37,\n", - " 35,\n", - " 14,\n", - " 68,\n", - " 67,\n", - " 62,\n", - " ...],\n", - " 'race': None},\n", - " 'inequality': {'gini': 0.358379064086748,\n", - " 'top_10_percent_share': 0.29907741159640616,\n", - " 'top_1_percent_share': 0.1347626305894055},\n", - " 'labor_supply': {'substitution_lsr': 0,\n", - " 'income_lsr': 0,\n", - " 'income_lsr_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'substitution_lsr_hh': [0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " 0.0,\n", - " ...],\n", - " 'weekly_hours': 0,\n", - " 'weekly_hours_income_effect': 0,\n", - " 'weekly_hours_substitution_effect': 0,\n", - " 'total_earnings': 1340946114730.9246,\n", - " 'total_workers': 32697735.717292428},\n", - " 'income_distribution': {0: 28638.17159663886,\n", - " 5000: 334671.02372761816,\n", - " 10000: 892901.8871991932,\n", - " 15000: 1192876.201390043,\n", - " 20000: 1372329.1174580976,\n", - " 25000: 1579255.1622462124,\n", - " 30000: 1946388.5832830966,\n", - " 35000: 1401869.1041857302,\n", - " 40000: 1468807.3108290136,\n", - " 45000: 1215675.881689474,\n", - " 50000: 1354563.5807273462,\n", - " 55000: 964829.5402759314,\n", - " 60000: 922988.8669875562,\n", - " 65000: 957018.2603768259,\n", - " 70000: 1079843.9408770353,\n", - " 75000: 637419.0076136664,\n", - " 80000: 498186.0265044421,\n", - " 85000: 831455.4363349453,\n", - " 90000: 516631.74205611646,\n", - " 95000: 517338.60617863387,\n", - " 100000: 459757.5646894872,\n", - " 105000: 368505.1371051371,\n", - " 110000: 229580.181141451,\n", - " 115000: 460770.2185702473}},\n", - " 'gov': {'budget_window': {'total_tax': [780424314834.1508],\n", - " 'total_spending': [306280657459.9808],\n", - " 'total_state_tax': [0],\n", - " 'total_budget': [474143657374.17],\n", - " 'total_federal_budget': [474143657374.17]},\n", - " 'programs': {'income_tax': 459654340398.327,\n", - " 'national_insurance': 53168761056.25772,\n", - " 'vat': 214871983017.21628,\n", - " 'council_tax': 45077685919.83074,\n", - " 'fuel_duty': 25313698252.372284,\n", - " 'tax_credits': -81931249.11630942,\n", - " 'universal_credit': -74087374720.54732,\n", - " 'child_benefit': -14596018214.875364,\n", - " 'state_pension': -126747036451.91475,\n", - " 'pension_credit': -9598227786.405336,\n", - " 'ni_employer': 125551554850.68323},\n", - " 'balance': {'total_tax': 780424314834.1508,\n", - " 'total_spending': 306280657459.9808,\n", - " 'total_state_tax': 0},\n", - " 'local_areas': {'parliamentary_constituencies': {},\n", - " 'local_authorities': {}}}}}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from policyengine import Simulation\n", - "\n", - "sim = Simulation(\n", - " country=\"uk\",\n", - " scope=\"macro\",\n", - " data=\"enhanced_frs\",\n", - " time_period=2025,\n", - " reform={\n", - " \"gov.hmrc.income_tax.allowances.personal_allowance.amount\": {\n", - " \"2025\": 0,\n", - " }\n", - " }\n", - ")\n", - "sim.calculate(\"macro\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/reference/calculate.md b/docs/reference/calculate.md deleted file mode 100644 index bdb6c0c1..00000000 --- a/docs/reference/calculate.md +++ /dev/null @@ -1,608 +0,0 @@ -# Calculate - -The `Simulation.calculate` function is the most important function in the `Simulation` class. Think of initialising the `Simulation` class as setting up the world model (with assumptions and data specified), and `calculate` as asking it a question (we refer to this as an `endpoint`). - -Generally, you call `calculate('folder/structure/question')`, with the questions being organised in a folder structure that makes sense. For example, we might call `Simulation.calculate('macro/comparison/budget/general/tax_revenue_impact')` to ask the model to calculate the impact of a tax revenue change on the budget. - -The set of possible questions depends on the parameters of the `Simulation` you've defined. For example, if you set up a simulation with household data describing a person who earns £30,000 a year, you can't ask it for the budgetary impact of a reform, but you can ask it for the change to that person's net income. If you set up a simulation from PolicyEngine's survey data, you can ask it for the impact of a policy on the distribution of income, but you can't ask "how does this reform affect this person's net income?". - -This page contains a list of all the questions you can ask the model, organised by folder structure. Under each one, we add the description, output type, and conditions under which you can ask that question. - -To reduce duplication, we've organised them into four categories, by the type of simulation you're running: - -* Single macro: simulations of a single policy on a large survey dataset. e.g. "What is the poverty rate?" -* Comparison macro: simulations of two policies (and the effect of comparing them) on a large survey dataset. e.g. "How much revenue would this policy raise?" -* Single household: simulations of a single policy on a single household. e.g. "What is my net income?" -* Comparison household: simulations of two policies (and the effect of comparing them) on a single household. e.g. "How much better off would I be under this policy?" - - -## Single macro - - - -### `macro/gov/balance/total_spending` - -The total spending of the government. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/balance/total_state_tax` - -The total tax revenue collected at the state level. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/balance/total_tax` - -The total tax revenue collected across all levels of government. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/budget_window/total_budget` - -The total government budget over the specified budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/budget_window/total_federal_budget` - -The total federal government budget over the specified budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/budget_window/total_spending` - -The total government spending over the specified budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/budget_window/total_state_tax` - -The total state tax revenue over the specified budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/budget_window/total_tax` - -The total tax revenue over the specified budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/gov/programs/{program}` - -Total expenditure or revenue from a given program. Available programs in the UK are: child_benefit, council_tax, fuel_duty, income_tax, national_insurance, ni_employer, pension_credit, state_pension, tax_credits, universal_credit, vat. - -*Output type*: `float` - -*Conditions*: `country='uk'` - - - - -### `macro/household/demographics/total_households` - -Total number of households in the simulation. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/deep_poverty_gap` - -The aggregate gap between household incomes and the deep poverty line. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/deep_poverty_rate` - -The proportion of households in deep poverty. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/poverty_gap` - -The aggregate gap between household incomes and the poverty line. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/poverty_rate` - -The proportion of households in poverty. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/total_benefits` - -Total benefits received by all households. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/total_market_income` - -Total market income (before taxes and transfers) for all households. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/total_net_income` - -Total net income (after taxes and transfers) for all households. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/finance/total_tax` - -Total tax paid by all households. - -*Output type*: `float` - -*Conditions*: None - - - -### `macro/household/income_distribution/{lower_bound}` - -Total households with income above the lower bound. Request `household/income_distribution` for the full dictionary (this will be more helpful). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/inequality/gini` - -Gini coefficient measuring income inequality (0 = perfect equality, 1 = perfect inequality). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/inequality/top_10_percent_share` - -Share of total income held by the top 10% of households. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/household/inequality/top_1_percent_share` - -Share of total income held by the top 1% of households. - -*Output type*: `float` - -*Conditions*: None - -## Comparison macro - - - -### `macro/comparison/budget/general/baseline_net_income` - -Total household net income under the baseline policy. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/general/benefit_spending_impact` - -Change in total government benefit spending between reform and baseline. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/general/budgetary_impact` - -Overall budgetary impact of the reform (positive means the reform raises revenue). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/general/households` - -Number of households affected by the reform. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/general/state_tax_revenue_impact` - -Change in state tax revenue between reform and baseline. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/general/tax_revenue_impact` - -Change in total tax revenue between reform and baseline. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/programs/{program}/baseline` - -Program spending/revenue under baseline policy, where program is one of: child_benefit, council_tax, fuel_duty, income_tax, national_insurance, ni_employer, pension_credit, state_pension, tax_credits, universal_credit, vat. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/programs/{program}/reform` - -Program spending/revenue under reform policy. See baseline endpoint for available programs. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/programs/{program}/difference` - -Change in program spending/revenue (reform - baseline). See baseline endpoint for available programs. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/window/federal_budget` - -Impact on federal budget over the budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/budget/window/total_budget` - -Impact on total budget over the budget window. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/decile/income/average/{n}` - -Average change in household net income for income decile n (1-10). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/decile/income/relative/{n}` - -Percentage change in household net income for income decile n (1-10). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/decile/wealth/average/{n}` - -Average change in household net income for wealth decile n (1-10). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/decile/wealth/relative/{n}` - -Percentage change in household net income for wealth decile n (1-10). - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/gini/baseline` - -See baseline endpoint for `household/inequality/gini`. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/gini/reform` - -Gini coefficient under reform policy. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/top_10_pct_share/baseline` - -See baseline endpoint for `household/inequality/top_10_percent_share`. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/top_10_pct_share/reform` - -Share of income held by top 10% under reform policy. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/top_1_pct_share/baseline` - -See baseline endpoint for `household/inequality/top_1_percent_share`. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/inequality/top_1_pct_share/reform` - -Share of income held by top 1% under reform policy. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/poverty/age/{poverty_type}/{group}/{metric}` - -Poverty metrics by age group, where: -- poverty_type is 'poverty' or 'deep_poverty' -- group is 'all', 'child', 'adult', or 'senior' -- metric is 'baseline', 'reform', or 'change_count' (only available for poverty) - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/poverty/gender/{poverty_type}/{gender}/{metric}` - -Poverty metrics by gender, where: -- poverty_type is 'poverty' or 'deep_poverty' -- gender is 'male' or 'female' -- metric is 'baseline' or 'reform' - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/winners/income_decile/all/{outcome}` - -Count of households experiencing each outcome across all income deciles, where outcome is: -'Gain more than 5%', 'Gain less than 5%', 'No change', 'Lose less than 5%', 'Lose more than 5%' - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/winners/income_decile/deciles/{outcome}` - -Count of households experiencing each outcome by income decile. See all endpoint for outcome options. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/winners/wealth_decile/all/{outcome}` - -Count of households experiencing each outcome across all wealth deciles. See income_decile/all endpoint for outcome options. - -*Output type*: `float` - -*Conditions*: None - - - - -### `macro/comparison/winners/wealth_decile/deciles/{outcome}` - -Count of households experiencing each outcome by wealth decile. See income_decile/all endpoint for outcome options. - -*Output type*: `float` - -*Conditions*: None - -## Single household - - - -### `household/net_income` - -Net income of the household after taxes and benefits. - -*Output type*: `float` - -*Conditions*: None - -## Comparison household - - - -### `household/baseline/net_income` - -Net income of the household under the baseline policy. - -*Output type*: `float` - -*Conditions*: None - - - -### `household/comparison/net_income_change` - -Change in net income of the household between reform and baseline. - -*Output type*: `float` - -*Conditions*: None - - - -### `household/reform/net_income` - -Net income of the household under the reform policy. - -*Output type*: `float` - -*Conditions*: None diff --git a/policyengine/outputs/macro/comparison/__init__.py b/policyengine/outputs/macro/comparison/__init__.py new file mode 100644 index 00000000..197ba0a3 --- /dev/null +++ b/policyengine/outputs/macro/comparison/__init__.py @@ -0,0 +1 @@ +from .comparison import calculate_macro_comparison diff --git a/policyengine/outputs/macro/comparison/budget/breakdown.py b/policyengine/outputs/macro/comparison/budget/breakdown.py index 31c0db92..cf7fa942 100644 --- a/policyengine/outputs/macro/comparison/budget/breakdown.py +++ b/policyengine/outputs/macro/comparison/budget/breakdown.py @@ -1,7 +1,9 @@ from policyengine import Simulation from typing import List import pandas as pd -from policyengine.outputs.macro.comparison.budget.general import calculate_general_budget +from policyengine.outputs.macro.comparison.budget.general import ( + calculate_general_budget, +) def calculate_provision_breakdown_comparison( @@ -46,9 +48,7 @@ def calculate_provision_breakdown_comparison( options=options, data=simulation.data, ) - budget = calculate_general_budget(sim)[ - "budgetary_impact" - ] + budget = calculate_general_budget(sim)["budgetary_impact"] key_focus = provision_names[i] difference = budget - last_budgetary_impact last_budgetary_impact = budget diff --git a/policyengine/outputs/macro/comparison/budget/budget.py b/policyengine/outputs/macro/comparison/budget/budget.py index 1ef2f6f4..f9b5c87f 100644 --- a/policyengine/outputs/macro/comparison/budget/budget.py +++ b/policyengine/outputs/macro/comparison/budget/budget.py @@ -4,12 +4,13 @@ from .window import calculate_budget_window_comparison from .programs import calculate_program_comparison + def calculate_budget_comparison( simulation: Simulation, -) -> dict: +) -> dict: return { "breakdown": calculate_provision_breakdown_comparison(simulation), "general": calculate_general_budget_comparison(simulation), "window": calculate_budget_window_comparison(simulation), - "programs": calculate_program_comparison(simulation - } \ No newline at end of file + "programs": calculate_program_comparison(simulation), + } diff --git a/policyengine/outputs/macro/comparison/budget/general.py b/policyengine/outputs/macro/comparison/budget/general.py index b9bc7bd1..298f21bb 100644 --- a/policyengine/outputs/macro/comparison/budget/general.py +++ b/policyengine/outputs/macro/comparison/budget/general.py @@ -6,7 +6,9 @@ from policyengine.outputs.macro.single.gov.balance import calculate_balance -def calculate_general_budget_comparison(simulation: Simulation, chart: bool = False): +def calculate_general_budget_comparison( + simulation: Simulation, chart: bool = False +): """Calculate the budgetary impact of the given simulation. Args: diff --git a/policyengine/outputs/macro/comparison/budget/window.py b/policyengine/outputs/macro/comparison/budget/window.py index d9807eea..7f0b0451 100644 --- a/policyengine/outputs/macro/comparison/budget/window.py +++ b/policyengine/outputs/macro/comparison/budget/window.py @@ -3,7 +3,9 @@ import plotly.express as px import pandas as pd from policyengine.utils.charts import * -from policyengine.outputs.macro.single.gov.budget_window import calculate_budget_window +from policyengine.outputs.macro.single.gov.budget_window import ( + calculate_budget_window, +) def calculate_budget_window_comparison( diff --git a/policyengine/outputs/macro/comparison/comparison.py b/policyengine/outputs/macro/comparison/comparison.py index dc544a99..b7097142 100644 --- a/policyengine/outputs/macro/comparison/comparison.py +++ b/policyengine/outputs/macro/comparison/comparison.py @@ -2,10 +2,11 @@ from .budget import calculate_budget_comparison from .decile import calculate_decile_comparison -def calculate_budget_comparison( + +def calculate_macro_comparison( simulation: Simulation, -) -> dict: +) -> dict: return { "budget": calculate_budget_comparison(simulation), - "decile": calculate_decile_comparison(simulation) - } \ No newline at end of file + "decile": calculate_decile_comparison(simulation), + } diff --git a/policyengine/outputs/macro/comparison/decile/decile.py b/policyengine/outputs/macro/comparison/decile/decile.py index f0478e1c..80e2807c 100644 --- a/policyengine/outputs/macro/comparison/decile/decile.py +++ b/policyengine/outputs/macro/comparison/decile/decile.py @@ -2,10 +2,11 @@ from .income import calculate_income_decile_comparison from .wealth import calculate_wealth_decile_comparison + def calculate_decile_comparison( simulation: Simulation, -) -> dict: +) -> dict: return { "income": calculate_income_decile_comparison(simulation), "wealth": calculate_wealth_decile_comparison(simulation), - } \ No newline at end of file + } diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py index 7d688d07..43a4592e 100644 --- a/policyengine/outputs/macro/single/__init__.py +++ b/policyengine/outputs/macro/single/__init__.py @@ -1 +1 @@ -from .single import calculate_single_macro_scenario \ No newline at end of file +from .single import calculate_single_macro_scenario diff --git a/policyengine/outputs/macro/single/gov/budget_window.py b/policyengine/outputs/macro/single/gov/budget_window.py index 8d2f62b1..10a48426 100644 --- a/policyengine/outputs/macro/single/gov/budget_window.py +++ b/policyengine/outputs/macro/single/gov/budget_window.py @@ -3,7 +3,9 @@ DEFAULT_COUNT_YEARS = 1 -def calculate_budget_window(simulation: Simulation, count_years: int = None) -> dict: +def calculate_budget_window( + simulation: Simulation, count_years: int = None +) -> dict: sim = simulation.selected_sim current_year = simulation.time_period if count_years is not None: diff --git a/policyengine/outputs/macro/single/gov/gov.py b/policyengine/outputs/macro/single/gov/gov.py index 2b466eab..2919aa91 100644 --- a/policyengine/outputs/macro/single/gov/gov.py +++ b/policyengine/outputs/macro/single/gov/gov.py @@ -4,12 +4,13 @@ from .budget_window import calculate_budget_window from .programs import calculate_programs + def calculate_gov( simulation: Simulation, -) -> dict: +) -> dict: return { "balance": calculate_balance(simulation), "budget_window": calculate_budget_window(simulation), "programs": calculate_programs(simulation), "local_areas": calculate_local_areas(simulation), - } \ No newline at end of file + } diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py index 76f60321..f6029408 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py @@ -1,6 +1,10 @@ from policyengine import Simulation -from policyengine.outputs.macro.single.gov.local_areas.local_authorities import calculate_local_authorities -from policyengine.outputs.macro.single.gov.local_areas.parliamentary_constituencies import calculate_parliamentary_constituencies +from policyengine.outputs.macro.single.gov.local_areas.local_authorities import ( + calculate_local_authorities, +) +from policyengine.outputs.macro.single.gov.local_areas.parliamentary_constituencies import ( + calculate_parliamentary_constituencies, +) def calculate_local_areas( @@ -8,8 +12,10 @@ def calculate_local_areas( ) -> dict: if simulation.country != "uk": return None - + return { "local_authorities": calculate_local_authorities(simulation), - "parliamentary_constituencies": calculate_parliamentary_constituencies(simulation) - } \ No newline at end of file + "parliamentary_constituencies": calculate_parliamentary_constituencies( + simulation + ), + } diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index 48e12e09..4d564e90 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,7 +1,9 @@ from policyengine import Simulation -def calculate_demographics(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_demographics( + simulation: Simulation, include_arrays: bool = False +) -> dict: sim = simulation.selected_sim household_count_people = ( sim.calculate("household_count_people").astype(int).tolist() diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index 2ff1fe5a..bc4f826b 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -1,7 +1,9 @@ from policyengine import Simulation -def calculate_finance(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_finance( + simulation: Simulation, include_arrays: bool = False +) -> dict: sim = simulation.selected_sim total_net_income = sim.calculate("household_net_income").sum() diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py index 6e858a8c..9872f119 100644 --- a/policyengine/outputs/macro/single/household/household.py +++ b/policyengine/outputs/macro/single/household/household.py @@ -5,13 +5,14 @@ from .inequality import calculate_inequality from .labor_supply import calculate_labor_supply + def calculate_household( simulation: Simulation, -) -> dict: +) -> dict: return { "demographics": calculate_demographics(simulation), "finance": calculate_finance(simulation), "income_distribution": calculate_income_distribution(simulation), "inequality": calculate_inequality(simulation), - "labor_supply": calculate_labor_supply(simulation) - } \ No newline at end of file + "labor_supply": calculate_labor_supply(simulation), + } diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index da278ce4..e877c726 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -1,7 +1,9 @@ from policyengine import Simulation -def calculate_labor_supply(simulation: Simulation, include_arrays: bool = False) -> dict: +def calculate_labor_supply( + simulation: Simulation, include_arrays: bool = False +) -> dict: if not simulation.comparison: return {} sim = simulation.selected_sim diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py index 0d6e9904..ef48da00 100644 --- a/policyengine/outputs/macro/single/single.py +++ b/policyengine/outputs/macro/single/single.py @@ -2,10 +2,11 @@ from .gov import calculate_gov from .household import calculate_household + def calculate_single_macro_scenario( simulation: Simulation, -) -> dict: +) -> dict: return { "gov": calculate_gov(simulation), - "household": calculate_household(simulation) - } \ No newline at end of file + "household": calculate_household(simulation), + } diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 73befac2..ef06aba3 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -10,6 +10,9 @@ from pathlib import Path from typing import Literal +from .outputs.macro.single import calculate_single_macro_scenario +from .outputs.macro.comparison import calculate_macro_comparison + class Simulation: """The top-level class through which all PE usage is carried out.""" @@ -193,6 +196,7 @@ def _initialise_simulations(self): self.reformed_sim.get_branch("baseline").tax_benefit_system = ( self.baseline_sim.tax_benefit_system ) + self.selected_sim = self.reformed_sim else: self.selected_sim = self.baseline_sim @@ -306,3 +310,6 @@ def _apply_region_to_simulation( simulation.default_calculation_period = self.time_period return simulation + + calculate_macro_comparison = calculate_macro_comparison + calculate_single_macro_scenario = calculate_single_macro_scenario From 7c612ccceea59c534f60afe1e36e1654fc23c1db Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:51:26 +1100 Subject: [PATCH 06/32] Fix imports for type checking --- .../macro/comparison/budget/breakdown.py | 10 ++++++---- .../outputs/macro/comparison/budget/budget.py | 6 ++++-- .../outputs/macro/comparison/budget/general.py | 8 +++++--- .../macro/comparison/budget/programs.py | 6 ++++-- .../outputs/macro/comparison/budget/window.py | 6 ++++-- .../outputs/macro/comparison/comparison.py | 6 ++++-- .../outputs/macro/comparison/decile/decile.py | 6 ++++-- .../outputs/macro/comparison/decile/income.py | 6 ++++-- .../outputs/macro/comparison/decile/wealth.py | 6 ++++-- .../outputs/macro/comparison/inequality.py | 6 ++++-- .../outputs/macro/comparison/labor_supply.py | 6 ++++-- .../local_areas/local_authorities.py | 13 ++++++------- .../parliamentary_constituencies.py | 18 +++++++++--------- .../outputs/macro/comparison/poverty/age.py | 6 ++++-- .../outputs/macro/comparison/poverty/gender.py | 6 ++++-- .../outputs/macro/comparison/poverty/race.py | 6 ++++-- .../macro/comparison/winners/income_decile.py | 6 ++++-- .../macro/comparison/winners/wealth_decile.py | 6 ++++-- .../outputs/macro/single/gov/balance.py | 6 ++++-- .../outputs/macro/single/gov/budget_window.py | 6 ++++-- policyengine/outputs/macro/single/gov/gov.py | 6 ++++-- .../single/gov/local_areas/local_areas.py | 6 ++++-- .../gov/local_areas/local_authorities.py | 6 ++++-- .../parliamentary_constituencies.py | 6 ++++-- .../outputs/macro/single/gov/programs.py | 8 +++++--- .../macro/single/household/demographics.py | 6 ++++-- .../outputs/macro/single/household/finance.py | 6 ++++-- .../macro/single/household/household.py | 6 ++++-- .../single/household/income_distribution.py | 6 ++++-- .../macro/single/household/inequality.py | 6 ++++-- .../macro/single/household/labor_supply.py | 6 ++++-- policyengine/outputs/macro/single/single.py | 6 ++++-- policyengine/utils/budget.py | 2 +- policyengine/utils/maps.py | 1 - 34 files changed, 140 insertions(+), 82 deletions(-) diff --git a/policyengine/outputs/macro/comparison/budget/breakdown.py b/policyengine/outputs/macro/comparison/budget/breakdown.py index cf7fa942..08ef4c5a 100644 --- a/policyengine/outputs/macro/comparison/budget/breakdown.py +++ b/policyengine/outputs/macro/comparison/budget/breakdown.py @@ -1,13 +1,15 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from typing import List import pandas as pd from policyengine.outputs.macro.comparison.budget.general import ( - calculate_general_budget, + calculate_general_budget_comparison, ) def calculate_provision_breakdown_comparison( - simulation: Simulation, + simulation: "Simulation", provisions: List[dict] | None = None, provision_names: List[str] | None = None, count_years: int = 5, @@ -48,7 +50,7 @@ def calculate_provision_breakdown_comparison( options=options, data=simulation.data, ) - budget = calculate_general_budget(sim)["budgetary_impact"] + budget = calculate_general_budget_comparison(sim)["budgetary_impact"] key_focus = provision_names[i] difference = budget - last_budgetary_impact last_budgetary_impact = budget diff --git a/policyengine/outputs/macro/comparison/budget/budget.py b/policyengine/outputs/macro/comparison/budget/budget.py index f9b5c87f..73782ada 100644 --- a/policyengine/outputs/macro/comparison/budget/budget.py +++ b/policyengine/outputs/macro/comparison/budget/budget.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .breakdown import calculate_provision_breakdown_comparison from .general import calculate_general_budget_comparison from .window import calculate_budget_window_comparison @@ -6,7 +8,7 @@ def calculate_budget_comparison( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "breakdown": calculate_provision_breakdown_comparison(simulation), diff --git a/policyengine/outputs/macro/comparison/budget/general.py b/policyengine/outputs/macro/comparison/budget/general.py index 298f21bb..d0131c9b 100644 --- a/policyengine/outputs/macro/comparison/budget/general.py +++ b/policyengine/outputs/macro/comparison/budget/general.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation import plotly.graph_objects as go import plotly.express as px import pandas as pd @@ -7,7 +9,7 @@ def calculate_general_budget_comparison( - simulation: Simulation, chart: bool = False + simulation: "Simulation", chart: bool = False ): """Calculate the budgetary impact of the given simulation. @@ -57,7 +59,7 @@ def calculate_general_budget_comparison( return result -def budget_chart(simulation: Simulation, data: dict) -> go.Figure: +def budget_chart(simulation: "Simulation", data: dict) -> go.Figure: if simulation.country == "uk": x = ["Tax revenues", "Benefit spending", "Budgetary impact"] y = [ diff --git a/policyengine/outputs/macro/comparison/budget/programs.py b/policyengine/outputs/macro/comparison/budget/programs.py index a7941602..8f714631 100644 --- a/policyengine/outputs/macro/comparison/budget/programs.py +++ b/policyengine/outputs/macro/comparison/budget/programs.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from policyengine.outputs.macro.single import calculate_single_macro_scenario -def calculate_program_comparison(simulation: Simulation): +def calculate_program_comparison(simulation: "Simulation"): """Calculate the detailed budgetary impact of the given simulation. Args: diff --git a/policyengine/outputs/macro/comparison/budget/window.py b/policyengine/outputs/macro/comparison/budget/window.py index 7f0b0451..d8af1b18 100644 --- a/policyengine/outputs/macro/comparison/budget/window.py +++ b/policyengine/outputs/macro/comparison/budget/window.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation import plotly.graph_objects as go import plotly.express as px import pandas as pd @@ -9,7 +11,7 @@ def calculate_budget_window_comparison( - simulation: Simulation, + simulation: "Simulation", chart: bool = False, federal_only: bool = False, count_years: int = 1, diff --git a/policyengine/outputs/macro/comparison/comparison.py b/policyengine/outputs/macro/comparison/comparison.py index b7097142..cc81bc9b 100644 --- a/policyengine/outputs/macro/comparison/comparison.py +++ b/policyengine/outputs/macro/comparison/comparison.py @@ -1,10 +1,12 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .budget import calculate_budget_comparison from .decile import calculate_decile_comparison def calculate_macro_comparison( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "budget": calculate_budget_comparison(simulation), diff --git a/policyengine/outputs/macro/comparison/decile/decile.py b/policyengine/outputs/macro/comparison/decile/decile.py index 80e2807c..773f0722 100644 --- a/policyengine/outputs/macro/comparison/decile/decile.py +++ b/policyengine/outputs/macro/comparison/decile/decile.py @@ -1,10 +1,12 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .income import calculate_income_decile_comparison from .wealth import calculate_wealth_decile_comparison def calculate_decile_comparison( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "income": calculate_income_decile_comparison(simulation), diff --git a/policyengine/outputs/macro/comparison/decile/income.py b/policyengine/outputs/macro/comparison/decile/income.py index bb265049..fdb5c3d5 100644 --- a/policyengine/outputs/macro/comparison/decile/income.py +++ b/policyengine/outputs/macro/comparison/decile/income.py @@ -1,9 +1,11 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries from ...single import calculate_single_macro_scenario -def calculate_income_decile_comparison(simulation: Simulation): +def calculate_income_decile_comparison(simulation: "Simulation"): """Calculate the impact of the reform on income deciles. Args: diff --git a/policyengine/outputs/macro/comparison/decile/wealth.py b/policyengine/outputs/macro/comparison/decile/wealth.py index 5c412e0d..383d4223 100644 --- a/policyengine/outputs/macro/comparison/decile/wealth.py +++ b/policyengine/outputs/macro/comparison/decile/wealth.py @@ -1,9 +1,11 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries from ...single import calculate_single_macro_scenario -def calculate_wealth_decile_comparison(simulation: Simulation): +def calculate_wealth_decile_comparison(simulation: "Simulation"): """Calculate the impact of the reform on wealth deciles. Args: diff --git a/policyengine/outputs/macro/comparison/inequality.py b/policyengine/outputs/macro/comparison/inequality.py index 6e624246..22b78fb6 100644 --- a/policyengine/outputs/macro/comparison/inequality.py +++ b/policyengine/outputs/macro/comparison/inequality.py @@ -1,7 +1,9 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation -def inequality(simulation: Simulation): +def inequality(simulation: "Simulation"): """Calculate the impact of the reform on inequality. Args: diff --git a/policyengine/outputs/macro/comparison/labor_supply.py b/policyengine/outputs/macro/comparison/labor_supply.py index 587c3af2..9203d12e 100644 --- a/policyengine/outputs/macro/comparison/labor_supply.py +++ b/policyengine/outputs/macro/comparison/labor_supply.py @@ -1,9 +1,11 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries import numpy as np -def labor_supply(simulation: Simulation) -> dict: +def labor_supply(simulation: "Simulation") -> dict: baseline_labor_supply = simulation.calculate( "macro/baseline/household/labor_supply", include_arrays=True ) diff --git a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py b/policyengine/outputs/macro/comparison/local_areas/local_authorities.py index 8834ad26..0953e593 100644 --- a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py +++ b/policyengine/outputs/macro/comparison/local_areas/local_authorities.py @@ -7,10 +7,11 @@ from typing import Callable from policyengine_core import Microsimulation from microdf import MicroSeries +from ...single.gov.local_areas.local_authorities import calculate_local_authorities def local_authorities( - simulation: Simulation, + simulation: "Simulation", chart: bool = False, metric: Callable[[Microsimulation], MicroSeries] = None, comparator: bool = None, @@ -25,12 +26,10 @@ def local_authorities( if comparator is None: comparator = lambda x, y: (y / x) - 1 - constituency_baseline = simulation.calculate( - "macro/baseline/gov/local_areas/local_authorities", **kwargs - ) - constituency_reform = simulation.calculate( - "macro/reform/gov/local_areas/local_authorities", **kwargs - ) + simulation.selected_sim = simulation.baseline_sim + constituency_baseline = calculate_local_authorities(simulation, **kwargs) + simulation.selected_sim = simulation.reformed_sim + constituency_reform = calculate_local_authorities(simulation, **kwargs) result = {} diff --git a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py index 6a352860..f94de67f 100644 --- a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py +++ b/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation import pandas as pd from policyengine.utils.huggingface import download import plotly.express as px @@ -7,10 +9,11 @@ from typing import Callable from policyengine_core import Microsimulation from microdf import MicroSeries +from ...single.gov.local_areas.parliamentary_constituencies import calculate_parliamentary_constituencies def parliamentary_constituencies( - simulation: Simulation, + simulation: "Simulation", chart: bool = False, metric: Callable[[Microsimulation], MicroSeries] = None, comparator: bool = None, @@ -24,13 +27,10 @@ def parliamentary_constituencies( if comparator is None: comparator = lambda x, y: (y / x) - 1 - - constituency_baseline = simulation.calculate( - "macro/baseline/gov/local_areas/parliamentary_constituencies", **kwargs - ) - constituency_reform = simulation.calculate( - "macro/reform/gov/local_areas/parliamentary_constituencies", **kwargs - ) + simulation.selected_sim = simulation.baseline_sim + constituency_baseline = calculate_parliamentary_constituencies(simulation, **kwargs) + simulation.selected_sim = simulation.reformed_sim + constituency_reform = calculate_parliamentary_constituencies(simulation, **kwargs) result = {} diff --git a/policyengine/outputs/macro/comparison/poverty/age.py b/policyengine/outputs/macro/comparison/poverty/age.py index 262067a2..2bea0408 100644 --- a/policyengine/outputs/macro/comparison/poverty/age.py +++ b/policyengine/outputs/macro/comparison/poverty/age.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries -def age(simulation: Simulation): +def age(simulation: "Simulation"): """Calculate the impact of the reform on poverty by age. Args: diff --git a/policyengine/outputs/macro/comparison/poverty/gender.py b/policyengine/outputs/macro/comparison/poverty/gender.py index 482d4302..0d42f029 100644 --- a/policyengine/outputs/macro/comparison/poverty/gender.py +++ b/policyengine/outputs/macro/comparison/poverty/gender.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries -def gender(simulation: Simulation): +def gender(simulation: "Simulation"): """Calculate the impact of the reform on poverty by gender. Args: diff --git a/policyengine/outputs/macro/comparison/poverty/race.py b/policyengine/outputs/macro/comparison/poverty/race.py index bf897fc5..53c788c3 100644 --- a/policyengine/outputs/macro/comparison/poverty/race.py +++ b/policyengine/outputs/macro/comparison/poverty/race.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries -def race(simulation: Simulation): +def race(simulation: "Simulation"): """Calculate the impact of the reform on poverty by race. Args: diff --git a/policyengine/outputs/macro/comparison/winners/income_decile.py b/policyengine/outputs/macro/comparison/winners/income_decile.py index 8de5bc3d..6aa29d88 100644 --- a/policyengine/outputs/macro/comparison/winners/income_decile.py +++ b/policyengine/outputs/macro/comparison/winners/income_decile.py @@ -1,9 +1,11 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries import numpy as np -def income_decile(simulation: Simulation): +def income_decile(simulation: "Simulation"): """Calculate the impact of the reform on income deciles. Args: diff --git a/policyengine/outputs/macro/comparison/winners/wealth_decile.py b/policyengine/outputs/macro/comparison/winners/wealth_decile.py index 0eafed0f..1569a4db 100644 --- a/policyengine/outputs/macro/comparison/winners/wealth_decile.py +++ b/policyengine/outputs/macro/comparison/winners/wealth_decile.py @@ -1,9 +1,11 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from microdf import MicroSeries import numpy as np -def wealth_decile(simulation: Simulation): +def wealth_decile(simulation: "Simulation"): """Calculate the impact of the reform on wealth deciles. Args: diff --git a/policyengine/outputs/macro/single/gov/balance.py b/policyengine/outputs/macro/single/gov/balance.py index fb276ff6..39b926ab 100644 --- a/policyengine/outputs/macro/single/gov/balance.py +++ b/policyengine/outputs/macro/single/gov/balance.py @@ -1,7 +1,9 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation -def calculate_balance(simulation: Simulation) -> dict: +def calculate_balance(simulation: "Simulation") -> dict: sim = simulation.selected_sim if simulation.country == "uk": total_tax = sim.calculate("gov_tax").sum() diff --git a/policyengine/outputs/macro/single/gov/budget_window.py b/policyengine/outputs/macro/single/gov/budget_window.py index 10a48426..eea207cc 100644 --- a/policyengine/outputs/macro/single/gov/budget_window.py +++ b/policyengine/outputs/macro/single/gov/budget_window.py @@ -1,10 +1,12 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation DEFAULT_COUNT_YEARS = 1 def calculate_budget_window( - simulation: Simulation, count_years: int = None + simulation: "Simulation", count_years: int = None ) -> dict: sim = simulation.selected_sim current_year = simulation.time_period diff --git a/policyengine/outputs/macro/single/gov/gov.py b/policyengine/outputs/macro/single/gov/gov.py index 2919aa91..6dfaec81 100644 --- a/policyengine/outputs/macro/single/gov/gov.py +++ b/policyengine/outputs/macro/single/gov/gov.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .local_areas import calculate_local_areas from .balance import calculate_balance from .budget_window import calculate_budget_window @@ -6,7 +8,7 @@ def calculate_gov( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "balance": calculate_balance(simulation), diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py index f6029408..10d7a2b7 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from policyengine.outputs.macro.single.gov.local_areas.local_authorities import ( calculate_local_authorities, ) @@ -8,7 +10,7 @@ def calculate_local_areas( - simulation: Simulation, + simulation: "Simulation", ) -> dict: if simulation.country != "uk": return None diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py index ed364609..0c3a3e35 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from policyengine.utils.huggingface import download import h5py from microdf import MicroSeries @@ -9,7 +11,7 @@ def calculate_local_authorities( - simulation: Simulation, + simulation, metric: Callable[[Microsimulation], MicroSeries] = None, chart: bool = False, code_index: bool = False, diff --git a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py index e0260dc7..a15436db 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py +++ b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from policyengine.utils.huggingface import download import h5py from microdf import MicroSeries @@ -9,7 +11,7 @@ def calculate_parliamentary_constituencies( - simulation: Simulation, + simulation: "Simulation", metric: Callable[[Microsimulation], MicroSeries] = None, chart: bool = False, code_index: bool = False, diff --git a/policyengine/outputs/macro/single/gov/programs.py b/policyengine/outputs/macro/single/gov/programs.py index dc211ab2..2dcbf86b 100644 --- a/policyengine/outputs/macro/single/gov/programs.py +++ b/policyengine/outputs/macro/single/gov/programs.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from dataclasses import dataclass @@ -24,10 +26,10 @@ class UKPrograms: ] -def calculate_programs(simulation: Simulation) -> dict: +def calculate_programs(simulation: "Simulation") -> dict: if simulation.country == "uk": return { - program.name: simulation.selected_sim.calculate( + program.name: "Simulation".selected_sim.calculate( program.name, map_to="household" ).sum() * (1 if program.is_positive else -1) diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index 4d564e90..e63862cd 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation def calculate_demographics( - simulation: Simulation, include_arrays: bool = False + simulation: "Simulation", include_arrays: bool = False ) -> dict: sim = simulation.selected_sim household_count_people = ( diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index bc4f826b..e20cb67f 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation def calculate_finance( - simulation: Simulation, include_arrays: bool = False + simulation: "Simulation", include_arrays: bool = False ) -> dict: sim = simulation.selected_sim diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py index 9872f119..ed064690 100644 --- a/policyengine/outputs/macro/single/household/household.py +++ b/policyengine/outputs/macro/single/household/household.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .demographics import calculate_demographics from .finance import calculate_finance from .income_distribution import calculate_income_distribution @@ -7,7 +9,7 @@ def calculate_household( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "demographics": calculate_demographics(simulation), diff --git a/policyengine/outputs/macro/single/household/income_distribution.py b/policyengine/outputs/macro/single/household/income_distribution.py index 39c92e80..0a270b43 100644 --- a/policyengine/outputs/macro/single/household/income_distribution.py +++ b/policyengine/outputs/macro/single/household/income_distribution.py @@ -1,4 +1,6 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation import plotly.express as px from policyengine.utils.charts import * import plotly.graph_objects as go @@ -6,7 +8,7 @@ def calculate_income_distribution( - simulation: Simulation, + simulation: "Simulation", chart: bool = False, variable: str = "household_net_income", ) -> dict: diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py index 0da4f8f0..412abdff 100644 --- a/policyengine/outputs/macro/single/household/inequality.py +++ b/policyengine/outputs/macro/single/household/inequality.py @@ -1,7 +1,9 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation -def calculate_inequality(simulation: Simulation) -> dict: +def calculate_inequality(simulation: "Simulation") -> dict: personal_hh_equiv_income = simulation.selected_sim.calculate( "equiv_household_net_income" ) diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index e877c726..28dd315e 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -1,8 +1,10 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation def calculate_labor_supply( - simulation: Simulation, include_arrays: bool = False + simulation: "Simulation", include_arrays: bool = False ) -> dict: if not simulation.comparison: return {} diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py index ef48da00..7bfc8f64 100644 --- a/policyengine/outputs/macro/single/single.py +++ b/policyengine/outputs/macro/single/single.py @@ -1,10 +1,12 @@ -from policyengine import Simulation +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation from .gov import calculate_gov from .household import calculate_household def calculate_single_macro_scenario( - simulation: Simulation, + simulation: "Simulation", ) -> dict: return { "gov": calculate_gov(simulation), diff --git a/policyengine/utils/budget.py b/policyengine/utils/budget.py index 57597448..3a303468 100644 --- a/policyengine/utils/budget.py +++ b/policyengine/utils/budget.py @@ -1,5 +1,4 @@ import pandas as pd -from policyengine import Simulation def budget_breakdown( @@ -23,6 +22,7 @@ def budget_breakdown( Returns: pd.DataFrame: A DataFrame containing the budgetary impact of the reform by provision. """ + from policyengine import Simulation subreform_items = [] year_items = [] budget_items = [] diff --git a/policyengine/utils/maps.py b/policyengine/utils/maps.py index 562767d5..ad148a25 100644 --- a/policyengine/utils/maps.py +++ b/policyengine/utils/maps.py @@ -1,6 +1,5 @@ import pandas as pd import plotly.express as px -from policyengine import Simulation import pandas as pd from policyengine.utils.huggingface import download import plotly.express as px From 1162315b06588731f40ee6793e0ab260373e2cab Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 11:57:36 +1100 Subject: [PATCH 07/32] Update bug fix --- policyengine/outputs/macro/single/gov/programs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine/outputs/macro/single/gov/programs.py b/policyengine/outputs/macro/single/gov/programs.py index 2dcbf86b..13d5f318 100644 --- a/policyengine/outputs/macro/single/gov/programs.py +++ b/policyengine/outputs/macro/single/gov/programs.py @@ -29,7 +29,7 @@ class UKPrograms: def calculate_programs(simulation: "Simulation") -> dict: if simulation.country == "uk": return { - program.name: "Simulation".selected_sim.calculate( + program.name: simulation.selected_sim.calculate( program.name, map_to="household" ).sum() * (1 if program.is_positive else -1) From 97f72b8967b0936bbdd227538eaacf80092f9369 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 12:04:13 +1100 Subject: [PATCH 08/32] Update actions --- .../{pull_request.yaml => code_changes.yaml} | 10 +++++----- docs/index.ipynb | 17 +++++++++-------- policyengine/simulation.py | 3 +++ 3 files changed, 17 insertions(+), 13 deletions(-) rename .github/workflows/{pull_request.yaml => code_changes.yaml} (88%) diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/code_changes.yaml similarity index 88% rename from .github/workflows/pull_request.yaml rename to .github/workflows/code_changes.yaml index 880ebfeb..8a540a4d 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/code_changes.yaml @@ -3,12 +3,12 @@ name: Code changes on: pull_request: - branches: - - main + branches: + - main - paths: - - policyengine/ - - tests/ + paths: + - policyengine/** + - tests/** jobs: Lint: diff --git a/docs/index.ipynb b/docs/index.ipynb index e350d676..7ad6373a 100644 --- a/docs/index.ipynb +++ b/docs/index.ipynb @@ -31,14 +31,15 @@ "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "-2514.0" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" + "ename": "AttributeError", + "evalue": "'Simulation' object has no attribute 'calculate_macro_comparison'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 18\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpolicyengine\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Simulation\n\u001b[1;32m 3\u001b[0m sim \u001b[38;5;241m=\u001b[39m Simulation(\n\u001b[1;32m 4\u001b[0m country\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muk\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m scope\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhousehold\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 16\u001b[0m }\n\u001b[1;32m 17\u001b[0m )\n\u001b[0;32m---> 18\u001b[0m \u001b[43msim\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_macro_comparison\u001b[49m()\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Simulation' object has no attribute 'calculate_macro_comparison'" + ] } ], "source": [ diff --git a/policyengine/simulation.py b/policyengine/simulation.py index ef06aba3..548064af 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -313,3 +313,6 @@ def _apply_region_to_simulation( calculate_macro_comparison = calculate_macro_comparison calculate_single_macro_scenario = calculate_single_macro_scenario + + def calculate_macro(self): + return calculate_single_macro_scenario(self) From b82c817a0389ec7d2760b0e73c00f5e23490ee7b Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 14:29:14 +1100 Subject: [PATCH 09/32] Update actions --- .github/workflows/code_changes.yaml | 58 ++++++++++++++--------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml index 8a540a4d..cd4b45a0 100644 --- a/.github/workflows/code_changes.yaml +++ b/.github/workflows/code_changes.yaml @@ -2,36 +2,36 @@ name: Code changes on: - pull_request: - branches: - - main + pull_request: + branches: + - main - paths: - - policyengine/** - - tests/** + paths: + - policyengine/** + - tests/** jobs: - Lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Check formatting - uses: "lgeiger/black-action@master" - with: - args: ". -l 79 --check" - Test: - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v2 + Lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check formatting + uses: "lgeiger/black-action@master" + with: + args: ". -l 79 --check" + Test: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.10' - - - name: Install package - run: make install - - - name: Run tests - run: make test \ No newline at end of file + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.10' + + - name: Install package + run: make install + + - name: Run tests + run: make test \ No newline at end of file From efecd9eab6b52fe55e03ee52ecd3af246c93405e Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 14:29:55 +1100 Subject: [PATCH 10/32] Format --- .../outputs/macro/comparison/budget/breakdown.py | 5 ++++- .../outputs/macro/comparison/budget/budget.py | 1 + .../outputs/macro/comparison/budget/general.py | 1 + .../outputs/macro/comparison/budget/programs.py | 1 + .../outputs/macro/comparison/budget/window.py | 1 + policyengine/outputs/macro/comparison/comparison.py | 1 + .../outputs/macro/comparison/decile/decile.py | 1 + .../outputs/macro/comparison/decile/income.py | 1 + .../outputs/macro/comparison/decile/wealth.py | 1 + policyengine/outputs/macro/comparison/inequality.py | 1 + .../outputs/macro/comparison/labor_supply.py | 1 + .../comparison/local_areas/local_authorities.py | 4 +++- .../local_areas/parliamentary_constituencies.py | 13 ++++++++++--- .../outputs/macro/comparison/poverty/age.py | 1 + .../outputs/macro/comparison/poverty/gender.py | 1 + .../outputs/macro/comparison/poverty/race.py | 1 + .../macro/comparison/winners/income_decile.py | 1 + .../macro/comparison/winners/wealth_decile.py | 1 + policyengine/outputs/macro/single/gov/balance.py | 1 + .../outputs/macro/single/gov/budget_window.py | 1 + policyengine/outputs/macro/single/gov/gov.py | 1 + .../macro/single/gov/local_areas/local_areas.py | 1 + .../single/gov/local_areas/local_authorities.py | 1 + .../gov/local_areas/parliamentary_constituencies.py | 1 + policyengine/outputs/macro/single/gov/programs.py | 1 + .../outputs/macro/single/household/demographics.py | 1 + .../outputs/macro/single/household/finance.py | 1 + .../outputs/macro/single/household/household.py | 1 + .../macro/single/household/income_distribution.py | 1 + .../outputs/macro/single/household/inequality.py | 1 + .../outputs/macro/single/household/labor_supply.py | 1 + policyengine/outputs/macro/single/single.py | 1 + policyengine/utils/budget.py | 1 + 33 files changed, 47 insertions(+), 5 deletions(-) diff --git a/policyengine/outputs/macro/comparison/budget/breakdown.py b/policyengine/outputs/macro/comparison/budget/breakdown.py index 08ef4c5a..13ce3fe2 100644 --- a/policyengine/outputs/macro/comparison/budget/breakdown.py +++ b/policyengine/outputs/macro/comparison/budget/breakdown.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from typing import List @@ -50,7 +51,9 @@ def calculate_provision_breakdown_comparison( options=options, data=simulation.data, ) - budget = calculate_general_budget_comparison(sim)["budgetary_impact"] + budget = calculate_general_budget_comparison(sim)[ + "budgetary_impact" + ] key_focus = provision_names[i] difference = budget - last_budgetary_impact last_budgetary_impact = budget diff --git a/policyengine/outputs/macro/comparison/budget/budget.py b/policyengine/outputs/macro/comparison/budget/budget.py index 73782ada..f1c92ed1 100644 --- a/policyengine/outputs/macro/comparison/budget/budget.py +++ b/policyengine/outputs/macro/comparison/budget/budget.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .breakdown import calculate_provision_breakdown_comparison diff --git a/policyengine/outputs/macro/comparison/budget/general.py b/policyengine/outputs/macro/comparison/budget/general.py index d0131c9b..7994e432 100644 --- a/policyengine/outputs/macro/comparison/budget/general.py +++ b/policyengine/outputs/macro/comparison/budget/general.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation import plotly.graph_objects as go diff --git a/policyengine/outputs/macro/comparison/budget/programs.py b/policyengine/outputs/macro/comparison/budget/programs.py index 8f714631..5d2c8d5f 100644 --- a/policyengine/outputs/macro/comparison/budget/programs.py +++ b/policyengine/outputs/macro/comparison/budget/programs.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from policyengine.outputs.macro.single import calculate_single_macro_scenario diff --git a/policyengine/outputs/macro/comparison/budget/window.py b/policyengine/outputs/macro/comparison/budget/window.py index d8af1b18..80d7968c 100644 --- a/policyengine/outputs/macro/comparison/budget/window.py +++ b/policyengine/outputs/macro/comparison/budget/window.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation import plotly.graph_objects as go diff --git a/policyengine/outputs/macro/comparison/comparison.py b/policyengine/outputs/macro/comparison/comparison.py index cc81bc9b..b99c930c 100644 --- a/policyengine/outputs/macro/comparison/comparison.py +++ b/policyengine/outputs/macro/comparison/comparison.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .budget import calculate_budget_comparison diff --git a/policyengine/outputs/macro/comparison/decile/decile.py b/policyengine/outputs/macro/comparison/decile/decile.py index 773f0722..95cebcb8 100644 --- a/policyengine/outputs/macro/comparison/decile/decile.py +++ b/policyengine/outputs/macro/comparison/decile/decile.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .income import calculate_income_decile_comparison diff --git a/policyengine/outputs/macro/comparison/decile/income.py b/policyengine/outputs/macro/comparison/decile/income.py index fdb5c3d5..d3824ea1 100644 --- a/policyengine/outputs/macro/comparison/decile/income.py +++ b/policyengine/outputs/macro/comparison/decile/income.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/decile/wealth.py b/policyengine/outputs/macro/comparison/decile/wealth.py index 383d4223..d9c94266 100644 --- a/policyengine/outputs/macro/comparison/decile/wealth.py +++ b/policyengine/outputs/macro/comparison/decile/wealth.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/inequality.py b/policyengine/outputs/macro/comparison/inequality.py index 22b78fb6..a509381b 100644 --- a/policyengine/outputs/macro/comparison/inequality.py +++ b/policyengine/outputs/macro/comparison/inequality.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/comparison/labor_supply.py b/policyengine/outputs/macro/comparison/labor_supply.py index 9203d12e..257272e8 100644 --- a/policyengine/outputs/macro/comparison/labor_supply.py +++ b/policyengine/outputs/macro/comparison/labor_supply.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py b/policyengine/outputs/macro/comparison/local_areas/local_authorities.py index 0953e593..d578b667 100644 --- a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py +++ b/policyengine/outputs/macro/comparison/local_areas/local_authorities.py @@ -7,7 +7,9 @@ from typing import Callable from policyengine_core import Microsimulation from microdf import MicroSeries -from ...single.gov.local_areas.local_authorities import calculate_local_authorities +from ...single.gov.local_areas.local_authorities import ( + calculate_local_authorities, +) def local_authorities( diff --git a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py index f94de67f..0fd99a95 100644 --- a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py +++ b/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation import pandas as pd @@ -9,7 +10,9 @@ from typing import Callable from policyengine_core import Microsimulation from microdf import MicroSeries -from ...single.gov.local_areas.parliamentary_constituencies import calculate_parliamentary_constituencies +from ...single.gov.local_areas.parliamentary_constituencies import ( + calculate_parliamentary_constituencies, +) def parliamentary_constituencies( @@ -28,9 +31,13 @@ def parliamentary_constituencies( if comparator is None: comparator = lambda x, y: (y / x) - 1 simulation.selected_sim = simulation.baseline_sim - constituency_baseline = calculate_parliamentary_constituencies(simulation, **kwargs) + constituency_baseline = calculate_parliamentary_constituencies( + simulation, **kwargs + ) simulation.selected_sim = simulation.reformed_sim - constituency_reform = calculate_parliamentary_constituencies(simulation, **kwargs) + constituency_reform = calculate_parliamentary_constituencies( + simulation, **kwargs + ) result = {} diff --git a/policyengine/outputs/macro/comparison/poverty/age.py b/policyengine/outputs/macro/comparison/poverty/age.py index 2bea0408..9a187060 100644 --- a/policyengine/outputs/macro/comparison/poverty/age.py +++ b/policyengine/outputs/macro/comparison/poverty/age.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/poverty/gender.py b/policyengine/outputs/macro/comparison/poverty/gender.py index 0d42f029..ac1d0bc2 100644 --- a/policyengine/outputs/macro/comparison/poverty/gender.py +++ b/policyengine/outputs/macro/comparison/poverty/gender.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/poverty/race.py b/policyengine/outputs/macro/comparison/poverty/race.py index 53c788c3..c7181010 100644 --- a/policyengine/outputs/macro/comparison/poverty/race.py +++ b/policyengine/outputs/macro/comparison/poverty/race.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/winners/income_decile.py b/policyengine/outputs/macro/comparison/winners/income_decile.py index 6aa29d88..bd492691 100644 --- a/policyengine/outputs/macro/comparison/winners/income_decile.py +++ b/policyengine/outputs/macro/comparison/winners/income_decile.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/comparison/winners/wealth_decile.py b/policyengine/outputs/macro/comparison/winners/wealth_decile.py index 1569a4db..900d7b60 100644 --- a/policyengine/outputs/macro/comparison/winners/wealth_decile.py +++ b/policyengine/outputs/macro/comparison/winners/wealth_decile.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries diff --git a/policyengine/outputs/macro/single/gov/balance.py b/policyengine/outputs/macro/single/gov/balance.py index 39b926ab..f59246ad 100644 --- a/policyengine/outputs/macro/single/gov/balance.py +++ b/policyengine/outputs/macro/single/gov/balance.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/gov/budget_window.py b/policyengine/outputs/macro/single/gov/budget_window.py index eea207cc..d1871f8a 100644 --- a/policyengine/outputs/macro/single/gov/budget_window.py +++ b/policyengine/outputs/macro/single/gov/budget_window.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/gov/gov.py b/policyengine/outputs/macro/single/gov/gov.py index 6dfaec81..492dd964 100644 --- a/policyengine/outputs/macro/single/gov/gov.py +++ b/policyengine/outputs/macro/single/gov/gov.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .local_areas import calculate_local_areas diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py index 10d7a2b7..2c29d394 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from policyengine.outputs.macro.single.gov.local_areas.local_authorities import ( diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py index 0c3a3e35..9bd6bfc3 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py +++ b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from policyengine.utils.huggingface import download diff --git a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py index a15436db..1fc63e3f 100644 --- a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py +++ b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from policyengine.utils.huggingface import download diff --git a/policyengine/outputs/macro/single/gov/programs.py b/policyengine/outputs/macro/single/gov/programs.py index 13d5f318..9eed4075 100644 --- a/policyengine/outputs/macro/single/gov/programs.py +++ b/policyengine/outputs/macro/single/gov/programs.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from dataclasses import dataclass diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index e63862cd..5e5e40f4 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index e20cb67f..7604cdc9 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py index ed064690..704e9aa8 100644 --- a/policyengine/outputs/macro/single/household/household.py +++ b/policyengine/outputs/macro/single/household/household.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .demographics import calculate_demographics diff --git a/policyengine/outputs/macro/single/household/income_distribution.py b/policyengine/outputs/macro/single/household/income_distribution.py index 0a270b43..959244f4 100644 --- a/policyengine/outputs/macro/single/household/income_distribution.py +++ b/policyengine/outputs/macro/single/household/income_distribution.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation import plotly.express as px diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py index 412abdff..4b81ded4 100644 --- a/policyengine/outputs/macro/single/household/inequality.py +++ b/policyengine/outputs/macro/single/household/inequality.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index 28dd315e..0fec1876 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py index 7bfc8f64..87bf5330 100644 --- a/policyengine/outputs/macro/single/single.py +++ b/policyengine/outputs/macro/single/single.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from .gov import calculate_gov diff --git a/policyengine/utils/budget.py b/policyengine/utils/budget.py index 3a303468..e2d0e12f 100644 --- a/policyengine/utils/budget.py +++ b/policyengine/utils/budget.py @@ -23,6 +23,7 @@ def budget_breakdown( pd.DataFrame: A DataFrame containing the budgetary impact of the reform by provision. """ from policyengine import Simulation + subreform_items = [] year_items = [] budget_items = [] From 366c2989eec6341d11aae1854556f2db84c076c4 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 14:33:11 +1100 Subject: [PATCH 11/32] Update versioning action --- .github/workflows/code_changes.yaml | 14 +++++++------- .github/workflows/versioning.yaml | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml index cd4b45a0..608b74ae 100644 --- a/.github/workflows/code_changes.yaml +++ b/.github/workflows/code_changes.yaml @@ -12,13 +12,13 @@ on: jobs: Lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Check formatting - uses: "lgeiger/black-action@master" - with: - args: ". -l 79 --check" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check formatting + uses: "lgeiger/black-action@master" + with: + args: ". -l 79 --check" Test: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/versioning.yaml b/.github/workflows/versioning.yaml index 4d83a166..53709c4e 100644 --- a/.github/workflows/versioning.yaml +++ b/.github/workflows/versioning.yaml @@ -2,12 +2,12 @@ name: Versioning updates on: - pull_request: - branches: - - main + push: + branches: + - main - paths: - - changelog_entry.yaml + paths: + - changelog_entry.yaml jobs: Versioning: From 410d9c3def7f586584bae2639b34cca2e574ac5c Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Fri, 24 Jan 2025 17:49:36 +1100 Subject: [PATCH 12/32] Add typed functions --- .gitignore | 2 + docs/_config.yml | 2 + docs/_static/style.css | 8 +- docs/_toc.yml | 5 +- docs/index.ipynb | 126 ---------------- docs/index.md | 2 + docs/reference/simulation.md | 7 - .../comparison/axes/variation_chart.py | 96 ------------- .../household/comparison/net_income_change.py | 4 - .../outputs/household/single/net_income.py | 2 - .../outputs/macro/comparison/__init__.py | 1 - .../macro/comparison/budget/__init__.py | 1 - .../macro/comparison/budget/breakdown.py | 76 ---------- .../outputs/macro/comparison/budget/budget.py | 19 --- .../macro/comparison/budget/general.py | 119 ---------------- .../macro/comparison/budget/programs.py | 34 ----- .../outputs/macro/comparison/budget/window.py | 74 ---------- .../outputs/macro/comparison/comparison.py | 15 -- .../macro/comparison/decile/__init__.py | 1 - .../outputs/macro/comparison/decile/decile.py | 15 -- .../outputs/macro/comparison/decile/income.py | 69 --------- .../outputs/macro/comparison/decile/wealth.py | 70 --------- .../outputs/macro/comparison/inequality.py | 35 ----- .../outputs/macro/comparison/labor_supply.py | 132 ----------------- .../local_areas/local_authorities.py | 47 ------ .../parliamentary_constituencies.py | 53 ------- .../outputs/macro/comparison/poverty/age.py | 108 -------------- .../macro/comparison/poverty/gender.py | 72 ---------- .../outputs/macro/comparison/poverty/race.py | 62 -------- .../macro/comparison/winners/income_decile.py | 86 ----------- .../macro/comparison/winners/wealth_decile.py | 88 ------------ policyengine/outputs/macro/single/__init__.py | 2 +- .../outputs/macro/single/gov/__init__.py | 1 - .../outputs/macro/single/gov/balance.py | 21 --- .../outputs/macro/single/gov/budget_window.py | 52 ------- policyengine/outputs/macro/single/gov/gov.py | 19 --- .../macro/single/gov/local_areas/__init__.py | 1 - .../single/gov/local_areas/local_areas.py | 24 ---- .../gov/local_areas/local_authorities.py | 92 ------------ .../parliamentary_constituencies.py | 95 ------------- .../outputs/macro/single/gov/programs.py | 40 ------ .../macro/single/household/__init__.py | 2 +- .../macro/single/household/demographics.py | 51 ++++--- .../outputs/macro/single/household/finance.py | 96 ++++++++----- .../macro/single/household/household.py | 41 ++++-- .../single/household/income_distribution.py | 61 -------- .../macro/single/household/inequality.py | 30 +++- .../macro/single/household/labor_supply.py | 134 +++++++++--------- policyengine/outputs/macro/single/single.py | 22 +-- policyengine/simulation.py | 26 ++-- policyengine/utils/typing.py | 27 ++++ pyproject.toml | 1 + 52 files changed, 275 insertions(+), 1994 deletions(-) delete mode 100644 docs/index.ipynb create mode 100644 docs/index.md delete mode 100644 policyengine/outputs/household/comparison/axes/variation_chart.py delete mode 100644 policyengine/outputs/household/comparison/net_income_change.py delete mode 100644 policyengine/outputs/household/single/net_income.py delete mode 100644 policyengine/outputs/macro/comparison/__init__.py delete mode 100644 policyengine/outputs/macro/comparison/budget/__init__.py delete mode 100644 policyengine/outputs/macro/comparison/budget/breakdown.py delete mode 100644 policyengine/outputs/macro/comparison/budget/budget.py delete mode 100644 policyengine/outputs/macro/comparison/budget/general.py delete mode 100644 policyengine/outputs/macro/comparison/budget/programs.py delete mode 100644 policyengine/outputs/macro/comparison/budget/window.py delete mode 100644 policyengine/outputs/macro/comparison/comparison.py delete mode 100644 policyengine/outputs/macro/comparison/decile/__init__.py delete mode 100644 policyengine/outputs/macro/comparison/decile/decile.py delete mode 100644 policyengine/outputs/macro/comparison/decile/income.py delete mode 100644 policyengine/outputs/macro/comparison/decile/wealth.py delete mode 100644 policyengine/outputs/macro/comparison/inequality.py delete mode 100644 policyengine/outputs/macro/comparison/labor_supply.py delete mode 100644 policyengine/outputs/macro/comparison/local_areas/local_authorities.py delete mode 100644 policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py delete mode 100644 policyengine/outputs/macro/comparison/poverty/age.py delete mode 100644 policyengine/outputs/macro/comparison/poverty/gender.py delete mode 100644 policyengine/outputs/macro/comparison/poverty/race.py delete mode 100644 policyengine/outputs/macro/comparison/winners/income_decile.py delete mode 100644 policyengine/outputs/macro/comparison/winners/wealth_decile.py delete mode 100644 policyengine/outputs/macro/single/gov/__init__.py delete mode 100644 policyengine/outputs/macro/single/gov/balance.py delete mode 100644 policyengine/outputs/macro/single/gov/budget_window.py delete mode 100644 policyengine/outputs/macro/single/gov/gov.py delete mode 100644 policyengine/outputs/macro/single/gov/local_areas/__init__.py delete mode 100644 policyengine/outputs/macro/single/gov/local_areas/local_areas.py delete mode 100644 policyengine/outputs/macro/single/gov/local_areas/local_authorities.py delete mode 100644 policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py delete mode 100644 policyengine/outputs/macro/single/gov/programs.py delete mode 100644 policyengine/outputs/macro/single/household/income_distribution.py create mode 100644 policyengine/utils/typing.py diff --git a/.gitignore b/.gitignore index b149da0c..f844ae2d 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,5 @@ cython_debug/ #.idea/ *.ipynb + +old/ diff --git a/docs/_config.yml b/docs/_config.yml index 709a2a4a..a4d7bf82 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -14,6 +14,8 @@ repository: branch: master path_to_book: docs +title: Python documentation + sphinx: config: html_js_files: diff --git a/docs/_static/style.css b/docs/_static/style.css index 2a7a0ae4..acb4f2e0 100644 --- a/docs/_static/style.css +++ b/docs/_static/style.css @@ -1,9 +1,15 @@ @import url('https://fonts.googleapis.com/css2?family=Roboto+Serif:opsz@8..144&family=Roboto:wght@300&display=swap'); -h1, h2, h3, h4, h5, h6 { + +h1, h2, h3 { font-family: "Roboto"; + font-weight: 200; } body { font-family: "Roboto Serif"; +} + +.sidebar-brand-text { + text-align: left; } \ No newline at end of file diff --git a/docs/_toc.yml b/docs/_toc.yml index 65bcb573..9c9fe382 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -1,10 +1,7 @@ format: jb-book root: index parts: - - caption: Maintenance - chapters: - - file: maintaining - caption: Reference chapters: - file: reference/simulation - - file: reference/calculate \ No newline at end of file + - file: reference/calculate/calculate_macro_scenario.md diff --git a/docs/index.ipynb b/docs/index.ipynb deleted file mode 100644 index 7ad6373a..00000000 --- a/docs/index.ipynb +++ /dev/null @@ -1,126 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction\n", - "\n", - "The PolicyEngine Python package serves as a package unifying all PolicyEngine tax-benefit models and outputs, providing the highest-level interface outside of the web app. It's aimed to provide a clear, simple interface to specify model inputs and pull out model outputs, both at the household and macro level.\n", - "\n", - "Generally, PolicyEngine's models' usage falls into a 2x2 of categories:\n", - "\n", - "1. Simulating over a specific household\n", - "\n", - " a. Simulating a particular policy (scenario) over a household (e.g. what benefits am I entitled to now?)\n", - "\n", - " b. Comparing two policies over a household (how would this tax reform affect my net income?)\n", - "2. Simulating over the entire population\n", - "\n", - " a. Simulating a particular policy over the population (what's the poverty rate right now?)\n", - "\n", - " b. Comparing two policies over the population (how would this tax reform affect the poverty rate?)\n", - "\n", - "\n", - "Here's an example of how to use it to calculate how abolishing the Personal Allowance in the UK (US- standard deduction) would affect an earner on £30,000." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'Simulation' object has no attribute 'calculate_macro_comparison'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[1], line 18\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpolicyengine\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Simulation\n\u001b[1;32m 3\u001b[0m sim \u001b[38;5;241m=\u001b[39m Simulation(\n\u001b[1;32m 4\u001b[0m country\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muk\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m scope\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhousehold\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 16\u001b[0m }\n\u001b[1;32m 17\u001b[0m )\n\u001b[0;32m---> 18\u001b[0m \u001b[43msim\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcalculate_macro_comparison\u001b[49m()\n", - "\u001b[0;31mAttributeError\u001b[0m: 'Simulation' object has no attribute 'calculate_macro_comparison'" - ] - } - ], - "source": [ - "from policyengine import Simulation\n", - "\n", - "sim = Simulation(\n", - " country=\"uk\",\n", - " scope=\"household\",\n", - " data={\n", - " \"employment_income\": {\n", - " 2025: 30_000\n", - " },\n", - " },\n", - " time_period=2025,\n", - " reform={\n", - " \"gov.hmrc.income_tax.allowances.personal_allowance.amount\": {\n", - " \"2025\": 0,\n", - " }\n", - " }\n", - ")\n", - "sim.calculate_macro_comparison()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And here's an example of how to calculate how the same policy would affect the UK government's tax revenue." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "130.69994101206225" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = Simulation(\n", - " country=\"uk\",\n", - " scope=\"macro\",\n", - " data=\"enhanced_frs\",\n", - " time_period=2025,\n", - " reform={\n", - " \"gov.hmrc.income_tax.allowances.personal_allowance.amount\": {\n", - " \"2025\": 0,\n", - " }\n", - " }\n", - ")\n", - "sim.calculate_macro_comparison()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..080864a1 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,2 @@ +# PolicyEngine Python interface + diff --git a/docs/reference/simulation.md b/docs/reference/simulation.md index 9b273839..03c8890a 100644 --- a/docs/reference/simulation.md +++ b/docs/reference/simulation.md @@ -1,13 +1,6 @@ # Simulation -The `Simulation` class is the main interface under `policyengine`. It lets you define a simulation (either of a single policy or a factual-counterfactual pair) and run it. - ```{eval-rst} .. autoclass:: policyengine.Simulation :members: - :undoc-members: - :show-inheritance: - :inherited-members: - :exclude-members: __init__ - :special-members: __init__ ``` \ No newline at end of file diff --git a/policyengine/outputs/household/comparison/axes/variation_chart.py b/policyengine/outputs/household/comparison/axes/variation_chart.py deleted file mode 100644 index ec9bb364..00000000 --- a/policyengine/outputs/household/comparison/axes/variation_chart.py +++ /dev/null @@ -1,96 +0,0 @@ -from policyengine import Simulation -import plotly.graph_objects as go -from policyengine.utils.charts import * - - -def variation_chart( - simulation: Simulation, - target_variable: str = None, - variable: str = "employment_income", - variable_min: float = 0, - variable_max: float = 200_000, - variable_count: int = 1001, - show_baseline: bool = False, -) -> go.Figure: - if target_variable is None: - return {} - - sim = Simulation( - country=simulation.country, - scope="household", - baseline=simulation.baseline.reform, - reform=simulation.reformed.reform, - time_period=simulation.time_period, - options=simulation.options, - data={ - **simulation.data, - "axes": [ - [ - { - "name": variable, - "min": variable_min, - "max": variable_max, - "count": variable_count, - "period": simulation.time_period, - } - ] - ], - }, - ) - - baseline_values = sim.baseline.calculate( - target_variable, map_to="household" - ) - reform_values = sim.reformed.calculate(target_variable, map_to="household") - axis_values = sim.baseline.calculate(variable, map_to="household") - - if show_baseline: - fig = go.Figure() - fig.add_trace( - go.Line( - x=axis_values, - y=baseline_values, - mode="lines", - name="Baseline", - line=dict(color=DARK_GRAY, dash="solid"), - ) - ) - fig.add_trace( - go.Line( - x=axis_values, - y=reform_values, - mode="lines", - name="Reform", - line=dict(color=BLUE, dash="dash"), - ) - ) - fig.update_layout( - title="Impact by " + variable, - xaxis_title=variable, - yaxis_title=target_variable, - xaxis_tickformat=",.0f", - yaxis_tickformat=",.0f", - showlegend=True, - ) - else: - fig = go.Figure( - data=[ - go.Line( - x=axis_values, - y=reform_values - baseline_values, - mode="lines", - name="Reform", - line=dict(color=BLUE, dash="solid"), - ) - ] - ) - fig.update_layout( - title="Impact by " + variable, - xaxis_title=variable, - yaxis_title=target_variable, - xaxis_tickformat=",.0f", - yaxis_tickformat=",.0f", - showlegend=False, - ) - - return format_fig(fig, simulation.country) diff --git a/policyengine/outputs/household/comparison/net_income_change.py b/policyengine/outputs/household/comparison/net_income_change.py deleted file mode 100644 index 47fb9e1b..00000000 --- a/policyengine/outputs/household/comparison/net_income_change.py +++ /dev/null @@ -1,4 +0,0 @@ -def net_income_change(simulation): - baseline_net_income = simulation.calculate("household/baseline/net_income") - reform_net_income = simulation.calculate("household/reform/net_income") - return reform_net_income - baseline_net_income diff --git a/policyengine/outputs/household/single/net_income.py b/policyengine/outputs/household/single/net_income.py deleted file mode 100644 index 01a97f07..00000000 --- a/policyengine/outputs/household/single/net_income.py +++ /dev/null @@ -1,2 +0,0 @@ -def net_income(simulation): - return simulation.selected_sim.calculate("household_net_income").sum() diff --git a/policyengine/outputs/macro/comparison/__init__.py b/policyengine/outputs/macro/comparison/__init__.py deleted file mode 100644 index 197ba0a3..00000000 --- a/policyengine/outputs/macro/comparison/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .comparison import calculate_macro_comparison diff --git a/policyengine/outputs/macro/comparison/budget/__init__.py b/policyengine/outputs/macro/comparison/budget/__init__.py deleted file mode 100644 index d598215b..00000000 --- a/policyengine/outputs/macro/comparison/budget/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .budget import calculate_budget_comparison diff --git a/policyengine/outputs/macro/comparison/budget/breakdown.py b/policyengine/outputs/macro/comparison/budget/breakdown.py deleted file mode 100644 index 13ce3fe2..00000000 --- a/policyengine/outputs/macro/comparison/budget/breakdown.py +++ /dev/null @@ -1,76 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from typing import List -import pandas as pd -from policyengine.outputs.macro.comparison.budget.general import ( - calculate_general_budget_comparison, -) - - -def calculate_provision_breakdown_comparison( - simulation: "Simulation", - provisions: List[dict] | None = None, - provision_names: List[str] | None = None, - count_years: int = 5, - verbose: bool = False, -) -> pd.DataFrame: - """Calculate the budgetary impact of the reform by provision. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - provisions (List[dict], optional): The provisions to include in the breakdown. Defaults to None. - provision_names (List[str], optional): The names of the provisions to include in the breakdown. Defaults to None. - count_years (int, optional): The number of years to include in the breakdown. Defaults to 5. - verbose (bool, optional): Whether to print the budgetary impacts. Defaults to False. - - Returns: - pd.DataFrame: A DataFrame (long) containing the budgetary impact of the reform by provision. - """ - if provision_names is None: - return {} - years = list( - range(simulation.time_period, simulation.time_period + count_years) - ) - baseline = simulation.baseline.reform - options = simulation.options - subreform_items = [] - year_items = [] - budget_items = [] - for year in years: - last_budgetary_impact = 0 - for i in range(len(provisions)): - reform_subset = provisions[: i + 1] - sim = Simulation( - country="uk", - scope="macro", - baseline=baseline, - reform=reform_subset, - time_period=year, - options=options, - data=simulation.data, - ) - budget = calculate_general_budget_comparison(sim)[ - "budgetary_impact" - ] - key_focus = provision_names[i] - difference = budget - last_budgetary_impact - last_budgetary_impact = budget - - subreform_items.append(key_focus) - year_items.append(year) - budget_items.append(difference) - - if verbose: - print( - f"Year: {year}, Provision: {key_focus}, Budgetary impact: {round(difference/1e9)}" - ) - - return pd.DataFrame( - { - "Provision": subreform_items, - "Year": year_items, - "Budgetary impact": budget_items, - } - ) diff --git a/policyengine/outputs/macro/comparison/budget/budget.py b/policyengine/outputs/macro/comparison/budget/budget.py deleted file mode 100644 index f1c92ed1..00000000 --- a/policyengine/outputs/macro/comparison/budget/budget.py +++ /dev/null @@ -1,19 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from .breakdown import calculate_provision_breakdown_comparison -from .general import calculate_general_budget_comparison -from .window import calculate_budget_window_comparison -from .programs import calculate_program_comparison - - -def calculate_budget_comparison( - simulation: "Simulation", -) -> dict: - return { - "breakdown": calculate_provision_breakdown_comparison(simulation), - "general": calculate_general_budget_comparison(simulation), - "window": calculate_budget_window_comparison(simulation), - "programs": calculate_program_comparison(simulation), - } diff --git a/policyengine/outputs/macro/comparison/budget/general.py b/policyengine/outputs/macro/comparison/budget/general.py deleted file mode 100644 index 7994e432..00000000 --- a/policyengine/outputs/macro/comparison/budget/general.py +++ /dev/null @@ -1,119 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -import plotly.graph_objects as go -import plotly.express as px -import pandas as pd -from policyengine.utils.charts import * -from policyengine.outputs.macro.single.gov.balance import calculate_balance - - -def calculate_general_budget_comparison( - simulation: "Simulation", chart: bool = False -): - """Calculate the budgetary impact of the given simulation. - - Args: - simulation (Simulation): The simulation for which the revenue impact is to be calculated. - - Returns: - dict: A dictionary containing the budgetary impact details with the following keys: - - budgetary_impact (float): The overall budgetary impact. - - tax_revenue_impact (float): The impact on tax revenue. - - state_tax_revenue_impact (float): The impact on state tax revenue. - - benefit_spending_impact (float): The impact on benefit spending. - - households (int): The number of households. - - baseline_net_income (float): The total net income in the baseline scenario. - """ - simulation.selected_sim = simulation.baseline_sim - baseline = calculate_balance(simulation) - simulation.selected_sim = simulation.reformed_sim - reform = calculate_balance(simulation) - - tax_revenue_impact = ( - reform["gov"]["balance"]["total_tax"] - - baseline["gov"]["balance"]["total_tax"] - ) - state_tax_revenue_impact = ( - reform["gov"]["balance"]["total_state_tax"] - - baseline["gov"]["balance"]["total_state_tax"] - ) - benefit_spending_impact = ( - reform["gov"]["balance"]["total_spending"] - - baseline["gov"]["balance"]["total_spending"] - ) - budgetary_impact = tax_revenue_impact - benefit_spending_impact - households = baseline["household"]["demographics"]["total_households"] - baseline_net_income = baseline["household"]["finance"]["total_net_income"] - result = dict( - budgetary_impact=budgetary_impact, - tax_revenue_impact=tax_revenue_impact, - state_tax_revenue_impact=state_tax_revenue_impact, - benefit_spending_impact=benefit_spending_impact, - households=households, - baseline_net_income=baseline_net_income, - ) - if chart: - return budget_chart(simulation, result) - else: - return result - - -def budget_chart(simulation: "Simulation", data: dict) -> go.Figure: - if simulation.country == "uk": - x = ["Tax revenues", "Benefit spending", "Budgetary impact"] - y = [ - data["tax_revenue_impact"], - -data["benefit_spending_impact"], - data["budgetary_impact"], - ] - else: - x = [ - "Federal tax revenues", - "State tax revenues", - "Benefit spending", - "Budgetary impact", - ] - y = [ - data["tax_revenue_impact"] - data["state_tax_revenue_impact"], - data["state_tax_revenue_impact"], - -data["benefit_spending_impact"], - data["budgetary_impact"], - ] - fig = go.Figure( - data=[ - go.Waterfall( - x=x, - y=[i / 1e9 for i in y], - orientation="v", - measure=["relative"] * (len(x) - 1) + ["total"], - text=[ - ( - "+" + str(round(val / 1e9, 1)) - if val > 0 - else str(round(val / 1e9, 1)) - ) - for val in y - ], - textposition="inside", - increasing={"marker": {"color": BLUE}}, - decreasing={"marker": {"color": DARK_GRAY}}, - totals={"marker": {"color": BLUE if y[-1] > 0 else DARK_GRAY}}, - connector={ - "line": {"color": DARK_GRAY, "width": 2, "dash": "dot"} - }, - ) - ] - ) - - fig.update_layout( - title="Budgetary impact by government revenue and spending", - xaxis_title="", - yaxis_title="Budgetary impact (£ billions)", - yaxis_tickformat=",.0f", - uniformtext_minsize=12, - uniformtext_mode="hide", - ) - - return format_fig(fig, simulation.country) diff --git a/policyengine/outputs/macro/comparison/budget/programs.py b/policyengine/outputs/macro/comparison/budget/programs.py deleted file mode 100644 index 5d2c8d5f..00000000 --- a/policyengine/outputs/macro/comparison/budget/programs.py +++ /dev/null @@ -1,34 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from policyengine.outputs.macro.single import calculate_single_macro_scenario - - -def calculate_program_comparison(simulation: "Simulation"): - """Calculate the detailed budgetary impact of the given simulation. - - Args: - simulation (Simulation): The simulation for which the budgetary impact is to be calculated. - - Returns: - dict: A dictionary containing the detailed budgetary impact for each program with the following keys: - - baseline (float): The baseline budgetary impact of the program. - - reform (float): The reform budgetary impact of the program. - - difference (float): The difference between the reform and baseline budgetary impacts. - """ - simulation.selected_sim = simulation.baseline_sim - baseline = calculate_single_macro_scenario(simulation) - simulation.selected_sim = simulation.reformed_sim - reform = calculate_single_macro_scenario(simulation) - result = {} - if simulation.country == "uk": - for program in baseline["gov"]["programs"]: - # baseline[programs][program] = total budgetary impact of program - result[program] = dict( - baseline=baseline["gov"]["programs"][program], - reform=reform["gov"]["programs"][program], - difference=reform["gov"]["programs"][program] - - baseline["gov"]["programs"][program], - ) - return result diff --git a/policyengine/outputs/macro/comparison/budget/window.py b/policyengine/outputs/macro/comparison/budget/window.py deleted file mode 100644 index 80d7968c..00000000 --- a/policyengine/outputs/macro/comparison/budget/window.py +++ /dev/null @@ -1,74 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -import plotly.graph_objects as go -import plotly.express as px -import pandas as pd -from policyengine.utils.charts import * -from policyengine.outputs.macro.single.gov.budget_window import ( - calculate_budget_window, -) - - -def calculate_budget_window_comparison( - simulation: "Simulation", - chart: bool = False, - federal_only: bool = False, - count_years: int = 1, -): - if count_years == 1: - kwargs = {} - else: - kwargs = {"count_years": count_years} - simulation.selected_sim = simulation.baseline_sim - baseline = calculate_budget_window(simulation, **kwargs) - simulation.selected_sim = simulation.reformed_sim - reform = calculate_budget_window(simulation, **kwargs) - total_budget_effect = [ - (y - x) - for x, y in zip(baseline["total_budget"], reform["total_budget"]) - ] - federal_budget_effect = [ - (y - x) - for x, y in zip( - baseline["total_federal_budget"], reform["total_federal_budget"] - ) - ] - - result = dict( - total_budget=total_budget_effect, - federal_budget=federal_budget_effect, - ) - - if chart: - return budget_window_chart( - result["federal_budget"] - if federal_only - else result["total_budget"] - ) - else: - return result - - -def budget_window_chart(budget_effect) -> go.Figure: - fig = go.Figure( - data=[ - go.Bar( - y=budget_effect, - x=list(map(str, range(2025, 2025 + 10))), - marker=dict( - color=[BLUE if y > 0 else DARK_GRAY for y in budget_effect] - ), - text=[ - f"{'+' if y >= 0 else ''}{y:.1f}" for y in budget_effect - ], - ) - ] - ).update_layout( - title="Budgetary impact by year", - xaxis_title="Year", - yaxis_title="Budgetary impact (£ billions)", - ) - - return format_fig(fig) diff --git a/policyengine/outputs/macro/comparison/comparison.py b/policyengine/outputs/macro/comparison/comparison.py deleted file mode 100644 index b99c930c..00000000 --- a/policyengine/outputs/macro/comparison/comparison.py +++ /dev/null @@ -1,15 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from .budget import calculate_budget_comparison -from .decile import calculate_decile_comparison - - -def calculate_macro_comparison( - simulation: "Simulation", -) -> dict: - return { - "budget": calculate_budget_comparison(simulation), - "decile": calculate_decile_comparison(simulation), - } diff --git a/policyengine/outputs/macro/comparison/decile/__init__.py b/policyengine/outputs/macro/comparison/decile/__init__.py deleted file mode 100644 index 48be4ab1..00000000 --- a/policyengine/outputs/macro/comparison/decile/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .decile import calculate_decile_comparison diff --git a/policyengine/outputs/macro/comparison/decile/decile.py b/policyengine/outputs/macro/comparison/decile/decile.py deleted file mode 100644 index 95cebcb8..00000000 --- a/policyengine/outputs/macro/comparison/decile/decile.py +++ /dev/null @@ -1,15 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from .income import calculate_income_decile_comparison -from .wealth import calculate_wealth_decile_comparison - - -def calculate_decile_comparison( - simulation: "Simulation", -) -> dict: - return { - "income": calculate_income_decile_comparison(simulation), - "wealth": calculate_wealth_decile_comparison(simulation), - } diff --git a/policyengine/outputs/macro/comparison/decile/income.py b/policyengine/outputs/macro/comparison/decile/income.py deleted file mode 100644 index d3824ea1..00000000 --- a/policyengine/outputs/macro/comparison/decile/income.py +++ /dev/null @@ -1,69 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries -from ...single import calculate_single_macro_scenario - - -def calculate_income_decile_comparison(simulation: "Simulation"): - """Calculate the impact of the reform on income deciles. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the impact details with the following keys: - - relative (dict): A dictionary with keys representing deciles and values as relative income changes. - - average (dict): A dictionary with keys representing deciles and values as average income changes. - """ - simulation.selected_sim = simulation.baseline_sim - baseline = calculate_single_macro_scenario(simulation) - simulation.selected_sim = simulation.reformed_sim - reform = calculate_single_macro_scenario(simulation) - baseline["household"]["finance"] = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - baseline["household"]["demographics"] = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - reform["household"]["finance"] = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - reform["household"]["demographics"] = simulation.calculate( - "macro/reform/household/demographics", include_arrays=True - ) - - baseline_income = MicroSeries( - baseline["household"]["finance"]["household_net_income"], - weights=baseline["household"]["demographics"]["household_weight"], - ) - reform_income = MicroSeries( - reform["household"]["finance"]["household_net_income"], - weights=baseline_income.weights, - ) - - # Filter out negative decile values - decile = MicroSeries( - baseline["household"]["finance"]["household_income_decile"] - ) - baseline_income_filtered = baseline_income[decile >= 0] - reform_income_filtered = reform_income[decile >= 0] - - income_change = reform_income_filtered - baseline_income_filtered - rel_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).sum() - ) - - avg_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).count() - ) - rel_decile_dict = rel_income_change_by_decile.to_dict() - avg_decile_dict = avg_income_change_by_decile.to_dict() - result = dict( - relative={int(k): v for k, v in rel_decile_dict.items()}, - average={int(k): v for k, v in avg_decile_dict.items()}, - ) - return result diff --git a/policyengine/outputs/macro/comparison/decile/wealth.py b/policyengine/outputs/macro/comparison/decile/wealth.py deleted file mode 100644 index d9c94266..00000000 --- a/policyengine/outputs/macro/comparison/decile/wealth.py +++ /dev/null @@ -1,70 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries -from ...single import calculate_single_macro_scenario - - -def calculate_wealth_decile_comparison(simulation: "Simulation"): - """Calculate the impact of the reform on wealth deciles. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the impact details with the following keys: - - relative (dict): A dictionary with keys representing deciles and values as relative income changes. - - average (dict): A dictionary with keys representing deciles and values as average income changes. - """ - if simulation.country != "uk": - return {} - - simulation.selected_sim = simulation.baseline_sim - baseline = calculate_single_macro_scenario(simulation) - simulation.selected_sim = simulation.reformed_sim - reform = calculate_single_macro_scenario(simulation) - baseline["household"]["finance"] = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - baseline["household"]["demographics"] = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - reform["household"]["finance"] = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - reform["household"]["demographics"] = simulation.calculate( - "macro/reform/household/demographics", include_arrays=True - ) - - baseline_income = MicroSeries( - baseline["household"]["finance"]["household_net_income"], - weights=baseline["household"]["demographics"]["household_weight"], - ) - reform_income = MicroSeries( - reform["household"]["finance"]["household_net_income"], - weights=baseline_income.weights, - ) - - # Filter out negative decile values - decile = MicroSeries(baseline["household"]["finance"]["wealth_decile"]) - baseline_income_filtered = baseline_income[decile >= 0] - reform_income_filtered = reform_income[decile >= 0] - - income_change = reform_income_filtered - baseline_income_filtered - rel_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).sum() - ) - - avg_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).count() - ) - rel_decile_dict = rel_income_change_by_decile.to_dict() - avg_decile_dict = avg_income_change_by_decile.to_dict() - result = dict( - relative={int(k): v for k, v in rel_decile_dict.items()}, - average={int(k): v for k, v in avg_decile_dict.items()}, - ) - return result diff --git a/policyengine/outputs/macro/comparison/inequality.py b/policyengine/outputs/macro/comparison/inequality.py deleted file mode 100644 index a509381b..00000000 --- a/policyengine/outputs/macro/comparison/inequality.py +++ /dev/null @@ -1,35 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation - - -def inequality(simulation: "Simulation"): - """Calculate the impact of the reform on inequality. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the inequality impact details with the following keys: - - gini (dict): A dictionary with baseline and reform Gini coefficients. - - top_10_pct_share (dict): A dictionary with baseline and reform top 10% income share. - - top_1_pct_share (dict): A dictionary with baseline and reform top 1% income share. - """ - baseline = simulation.calculate("macro/baseline/household/inequality") - reform = simulation.calculate("macro/reform/household/inequality") - - return dict( - gini=dict( - baseline=baseline["gini"], - reform=reform["gini"], - ), - top_10_pct_share=dict( - baseline=baseline["top_10_percent_share"], - reform=reform["top_10_percent_share"], - ), - top_1_pct_share=dict( - baseline=baseline["top_1_percent_share"], - reform=reform["top_1_percent_share"], - ), - ) diff --git a/policyengine/outputs/macro/comparison/labor_supply.py b/policyengine/outputs/macro/comparison/labor_supply.py deleted file mode 100644 index 257272e8..00000000 --- a/policyengine/outputs/macro/comparison/labor_supply.py +++ /dev/null @@ -1,132 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries -import numpy as np - - -def labor_supply(simulation: "Simulation") -> dict: - baseline_labor_supply = simulation.calculate( - "macro/baseline/household/labor_supply", include_arrays=True - ) - reform_labor_supply = simulation.calculate( - "macro/reform/household/labor_supply", include_arrays=True - ) - baseline_finance = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - baseline_demographics = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - - substitution_lsr = ( - reform_labor_supply["substitution_lsr"] - - baseline_labor_supply["substitution_lsr"] - ) - income_lsr = ( - reform_labor_supply["income_lsr"] - baseline_labor_supply["income_lsr"] - ) - total_change = substitution_lsr + income_lsr - - substitution_lsr_hh = np.array( - reform_labor_supply["substitution_lsr_hh"] - ) - np.array(baseline_labor_supply["substitution_lsr_hh"]) - income_lsr_hh = np.array(reform_labor_supply["income_lsr_hh"]) - np.array( - baseline_labor_supply["income_lsr_hh"] - ) - decile = np.array(baseline_finance["household_income_decile"]) - household_weight = baseline_demographics["household_weight"] - - total_lsr_hh = substitution_lsr_hh + income_lsr_hh - - emp_income = MicroSeries( - baseline_finance["employment_income_hh"], - weights=household_weight, - ) - self_emp_income = MicroSeries( - baseline_finance["self_employment_income_hh"], - weights=household_weight, - ) - earnings = emp_income + self_emp_income - original_earnings = earnings - total_lsr_hh - substitution_lsr_hh = MicroSeries( - substitution_lsr_hh, weights=household_weight - ) - income_lsr_hh = MicroSeries(income_lsr_hh, weights=household_weight) - - decile_avg = dict( - income=income_lsr_hh.groupby(decile).mean().to_dict(), - substitution=substitution_lsr_hh.groupby(decile).mean().to_dict(), - ) - decile_rel = dict( - income=( - income_lsr_hh.groupby(decile).sum() - / original_earnings.groupby(decile).sum() - ).to_dict(), - substitution=( - substitution_lsr_hh.groupby(decile).sum() - / original_earnings.groupby(decile).sum() - ).to_dict(), - ) - - relative_lsr = dict( - income=(income_lsr_hh.sum() / original_earnings.sum()), - substitution=(substitution_lsr_hh.sum() / original_earnings.sum()), - ) - - decile_rel["income"] = { - int(k): v for k, v in decile_rel["income"].items() if k > 0 - } - decile_rel["substitution"] = { - int(k): v for k, v in decile_rel["substitution"].items() if k > 0 - } - - hours = dict( - baseline=baseline_labor_supply["weekly_hours"], - reform=reform_labor_supply["weekly_hours"], - change=reform_labor_supply["weekly_hours"] - - baseline_labor_supply["weekly_hours"], - income_effect=reform_labor_supply["weekly_hours_income_effect"] - - baseline_labor_supply["weekly_hours_income_effect"], - substitution_effect=reform_labor_supply[ - "weekly_hours_substitution_effect" - ] - - baseline_labor_supply["weekly_hours_substitution_effect"], - ) - - rel_labor_supply_change = ( - total_change / baseline_labor_supply["total_earnings"] - ) - ftes_baseline = baseline_labor_supply["total_workers"] - ftes_reform = baseline_labor_supply["total_workers"] * ( - 1 + rel_labor_supply_change - ) - earnings_change = ( - reform_labor_supply["total_earnings"] - - baseline_labor_supply["total_earnings"] - ) - - return dict( - earnings=dict( - baseline=baseline_labor_supply["total_earnings"], - reform=reform_labor_supply["total_earnings"], - change=earnings_change, - rel_change=earnings_change - / baseline_labor_supply["total_earnings"], - ), - fte=dict( - baseline=ftes_baseline, - reform=ftes_reform, - change=ftes_reform - ftes_baseline, - rel_change=ftes_reform / ftes_baseline - 1, - ), - substitution_lsr=substitution_lsr, - income_lsr=income_lsr, - relative_lsr=relative_lsr, - decile=dict( - average=decile_avg, - relative=decile_rel, - ), - hours=hours, - ) diff --git a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py b/policyengine/outputs/macro/comparison/local_areas/local_authorities.py deleted file mode 100644 index d578b667..00000000 --- a/policyengine/outputs/macro/comparison/local_areas/local_authorities.py +++ /dev/null @@ -1,47 +0,0 @@ -from policyengine import Simulation -import pandas as pd -from policyengine.utils.huggingface import download -import plotly.express as px -from policyengine.utils.charts import * -from policyengine.utils.maps import plot_hex_map -from typing import Callable -from policyengine_core import Microsimulation -from microdf import MicroSeries -from ...single.gov.local_areas.local_authorities import ( - calculate_local_authorities, -) - - -def local_authorities( - simulation: "Simulation", - chart: bool = False, - metric: Callable[[Microsimulation], MicroSeries] = None, - comparator: bool = None, -) -> dict: - if not simulation.options.get("include_local_authorities"): - return {} - - kwargs = {} - if metric is not None: - kwargs["metric"] = metric - - if comparator is None: - comparator = lambda x, y: (y / x) - 1 - - simulation.selected_sim = simulation.baseline_sim - constituency_baseline = calculate_local_authorities(simulation, **kwargs) - simulation.selected_sim = simulation.reformed_sim - constituency_reform = calculate_local_authorities(simulation, **kwargs) - - result = {} - - for constituency in constituency_baseline: - result[constituency] = comparator( - constituency_baseline[constituency], - constituency_reform[constituency], - ) - - if chart: - return plot_hex_map(result, "local_authorities") - - return result diff --git a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py deleted file mode 100644 index 0fd99a95..00000000 --- a/policyengine/outputs/macro/comparison/local_areas/parliamentary_constituencies.py +++ /dev/null @@ -1,53 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -import pandas as pd -from policyengine.utils.huggingface import download -import plotly.express as px -from policyengine.utils.charts import * -from policyengine.utils.maps import plot_hex_map -from typing import Callable -from policyengine_core import Microsimulation -from microdf import MicroSeries -from ...single.gov.local_areas.parliamentary_constituencies import ( - calculate_parliamentary_constituencies, -) - - -def parliamentary_constituencies( - simulation: "Simulation", - chart: bool = False, - metric: Callable[[Microsimulation], MicroSeries] = None, - comparator: bool = None, -) -> dict: - if not simulation.options.get("include_constituencies"): - return {} - - kwargs = {} - if metric is not None: - kwargs["metric"] = metric - - if comparator is None: - comparator = lambda x, y: (y / x) - 1 - simulation.selected_sim = simulation.baseline_sim - constituency_baseline = calculate_parliamentary_constituencies( - simulation, **kwargs - ) - simulation.selected_sim = simulation.reformed_sim - constituency_reform = calculate_parliamentary_constituencies( - simulation, **kwargs - ) - - result = {} - - for constituency in constituency_baseline: - result[constituency] = comparator( - constituency_baseline[constituency], - constituency_reform[constituency], - ) - - if chart: - return plot_hex_map(result, "parliamentary_constituencies") - - return result diff --git a/policyengine/outputs/macro/comparison/poverty/age.py b/policyengine/outputs/macro/comparison/poverty/age.py deleted file mode 100644 index 9a187060..00000000 --- a/policyengine/outputs/macro/comparison/poverty/age.py +++ /dev/null @@ -1,108 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries - - -def age(simulation: "Simulation"): - """Calculate the impact of the reform on poverty by age. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the poverty and deep poverty impact details with the following keys: - - poverty (dict): A dictionary with keys representing age groups and values as dictionaries with baseline and reform poverty rates. - - deep_poverty (dict): A dictionary with keys representing age groups and values as dictionaries with baseline and reform deep poverty rates. - """ - baseline = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - reform = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - baseline_demographics = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], - weights=baseline_demographics["person_weight"], - ) - baseline_deep_poverty = MicroSeries( - baseline["person_in_deep_poverty"], - weights=baseline_demographics["person_weight"], - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - reform_deep_poverty = MicroSeries( - reform["person_in_deep_poverty"], weights=baseline_poverty.weights - ) - age = MicroSeries(baseline_demographics["age"]) - - poverty = dict( - child=dict( - baseline=float(baseline_poverty[age < 18].mean()), - reform=float(reform_poverty[age < 18].mean()), - change_count=float( - ( - reform_poverty[age < 18].sum() - baseline_poverty[age < 18] - ).sum() - ), - ), - adult=dict( - baseline=float(baseline_poverty[(age >= 18) & (age < 65)].mean()), - reform=float(reform_poverty[(age >= 18) & (age < 65)].mean()), - change_count=float( - ( - reform_poverty[(age >= 18) & (age < 65)].sum() - - baseline_poverty[(age >= 18) & (age < 65)].sum() - ) - ), - ), - senior=dict( - baseline=float(baseline_poverty[age >= 65].mean()), - reform=float(reform_poverty[age >= 65].mean()), - change_count=float( - ( - reform_poverty[age >= 65].sum() - - baseline_poverty[age >= 65].sum() - ) - ), - ), - all=dict( - baseline=float(baseline_poverty.mean()), - reform=float(reform_poverty.mean()), - change_count=float( - (reform_poverty.sum() - baseline_poverty.sum()) - ), - ), - ) - - deep_poverty = dict( - child=dict( - baseline=float(baseline_deep_poverty[age < 18].mean()), - reform=float(reform_deep_poverty[age < 18].mean()), - ), - adult=dict( - baseline=float( - baseline_deep_poverty[(age >= 18) & (age < 65)].mean(), - ), - reform=float(reform_deep_poverty[(age >= 18) & (age < 65)].mean()), - ), - senior=dict( - baseline=float(baseline_deep_poverty[age >= 65].mean()), - reform=float(reform_deep_poverty[age >= 65].mean()), - ), - all=dict( - baseline=float(baseline_deep_poverty.mean()), - reform=float(reform_deep_poverty.mean()), - ), - ) - - return dict( - poverty=poverty, - deep_poverty=deep_poverty, - ) diff --git a/policyengine/outputs/macro/comparison/poverty/gender.py b/policyengine/outputs/macro/comparison/poverty/gender.py deleted file mode 100644 index ac1d0bc2..00000000 --- a/policyengine/outputs/macro/comparison/poverty/gender.py +++ /dev/null @@ -1,72 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries - - -def gender(simulation: "Simulation"): - """Calculate the impact of the reform on poverty by gender. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the poverty and deep poverty impact details with the following keys: - - poverty (dict): A dictionary with keys representing genders and values as dictionaries with baseline and reform poverty rates. - - deep_poverty (dict): A dictionary with keys representing genders and values as dictionaries with baseline and reform deep poverty rates. - """ - baseline = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - reform = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - baseline_demographics = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - - if baseline_demographics["is_male"] is None: - return {} - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], - weights=baseline_demographics["person_weight"], - ) - baseline_deep_poverty = MicroSeries( - baseline["person_in_deep_poverty"], - weights=baseline_demographics["person_weight"], - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - reform_deep_poverty = MicroSeries( - reform["person_in_deep_poverty"], weights=baseline_poverty.weights - ) - is_male = MicroSeries(baseline_demographics["is_male"]) - - poverty = dict( - male=dict( - baseline=float(baseline_poverty[is_male].mean()), - reform=float(reform_poverty[is_male].mean()), - ), - female=dict( - baseline=float(baseline_poverty[~is_male].mean()), - reform=float(reform_poverty[~is_male].mean()), - ), - ) - - deep_poverty = dict( - male=dict( - baseline=float(baseline_deep_poverty[is_male].mean()), - reform=float(reform_deep_poverty[is_male].mean()), - ), - female=dict( - baseline=float(baseline_deep_poverty[~is_male].mean()), - reform=float(reform_deep_poverty[~is_male].mean()), - ), - ) - - return dict( - poverty=poverty, - deep_poverty=deep_poverty, - ) diff --git a/policyengine/outputs/macro/comparison/poverty/race.py b/policyengine/outputs/macro/comparison/poverty/race.py deleted file mode 100644 index c7181010..00000000 --- a/policyengine/outputs/macro/comparison/poverty/race.py +++ /dev/null @@ -1,62 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries - - -def race(simulation: "Simulation"): - """Calculate the impact of the reform on poverty by race. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the poverty impact details with the following keys: - - poverty (dict): A dictionary with keys representing races and values as dictionaries with baseline and reform poverty rates. - """ - baseline = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - reform = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - baseline_demographics = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - - if baseline_demographics["race"] is None: - return {} - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], - weights=baseline_demographics["person_weight"], - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - race = MicroSeries( - baseline_demographics["race"] - ) # Can be WHITE, BLACK, HISPANIC, or OTHER. - - poverty = dict( - white=dict( - baseline=float(baseline_poverty[race == "WHITE"].mean()), - reform=float(reform_poverty[race == "WHITE"].mean()), - ), - black=dict( - baseline=float(baseline_poverty[race == "BLACK"].mean()), - reform=float(reform_poverty[race == "BLACK"].mean()), - ), - hispanic=dict( - baseline=float(baseline_poverty[race == "HISPANIC"].mean()), - reform=float(reform_poverty[race == "HISPANIC"].mean()), - ), - other=dict( - baseline=float(baseline_poverty[race == "OTHER"].mean()), - reform=float(reform_poverty[race == "OTHER"].mean()), - ), - ) - - return dict( - poverty=poverty, - ) diff --git a/policyengine/outputs/macro/comparison/winners/income_decile.py b/policyengine/outputs/macro/comparison/winners/income_decile.py deleted file mode 100644 index bd492691..00000000 --- a/policyengine/outputs/macro/comparison/winners/income_decile.py +++ /dev/null @@ -1,86 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries -import numpy as np - - -def income_decile(simulation: "Simulation"): - """Calculate the impact of the reform on income deciles. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the impact details with the following keys: - - deciles (dict): A dictionary with keys representing outcome labels and values as lists of percentages for each decile. - - all (dict): A dictionary with keys representing outcome labels and values as overall percentages. - """ - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") - baseline["household"]["finance"] = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - baseline["household"]["demographics"] = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - reform["household"]["finance"] = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - reform["household"]["demographics"] = simulation.calculate( - "macro/reform/household/demographics", include_arrays=True - ) - - baseline_income = MicroSeries( - baseline["household"]["finance"]["household_net_income"], - weights=baseline["household"]["demographics"]["household_weight"], - ) - reform_income = MicroSeries( - reform["household"]["finance"]["household_net_income"], - weights=baseline_income.weights, - ) - people = MicroSeries( - baseline["household"]["demographics"]["household_count_people"], - weights=baseline_income.weights, - ) - decile = MicroSeries( - baseline["household"]["finance"]["household_income_decile"] - ).values - absolute_change = (reform_income - baseline_income).values - capped_baseline_income = np.maximum(baseline_income.values, 1) - capped_reform_income = ( - np.maximum(reform_income.values, 1) + absolute_change - ) - income_change = ( - capped_reform_income - capped_baseline_income - ) / capped_baseline_income - - # Within each decile, calculate the percentage of people who: - # 1. Gained more than 5% of their income - # 2. Gained between 0% and 5% of their income - # 3. Had no change in income - # 3. Lost between 0% and 5% of their income - # 4. Lost more than 5% of their income - - outcome_groups = {} - all_outcomes = {} - BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] - LABELS = [ - "Lose more than 5%", - "Lose less than 5%", - "No change", - "Gain less than 5%", - "Gain more than 5%", - ] - for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): - outcome_groups[label] = [] - for i in range(1, 11): - in_decile = decile == i - in_group = (income_change > lower) & (income_change <= upper) - in_both = in_decile & in_group - outcome_groups[label].append( - float(people[in_both].sum() / people[in_decile].sum()) - ) - all_outcomes[label] = sum(outcome_groups[label]) / 10 - return dict(deciles=outcome_groups, all=all_outcomes) diff --git a/policyengine/outputs/macro/comparison/winners/wealth_decile.py b/policyengine/outputs/macro/comparison/winners/wealth_decile.py deleted file mode 100644 index 900d7b60..00000000 --- a/policyengine/outputs/macro/comparison/winners/wealth_decile.py +++ /dev/null @@ -1,88 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries -import numpy as np - - -def wealth_decile(simulation: "Simulation"): - """Calculate the impact of the reform on wealth deciles. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - - Returns: - dict: A dictionary containing the impact details with the following keys: - - deciles (dict): A dictionary with keys representing outcome labels and values as lists of percentages for each decile. - - all (dict): A dictionary with keys representing outcome labels and values as overall percentages. - """ - if simulation.country == "us": - return {} - baseline = simulation.calculate("macro/baseline") - reform = simulation.calculate("macro/reform") - baseline["household"]["finance"] = simulation.calculate( - "macro/baseline/household/finance", include_arrays=True - ) - baseline["household"]["demographics"] = simulation.calculate( - "macro/baseline/household/demographics", include_arrays=True - ) - reform["household"]["finance"] = simulation.calculate( - "macro/reform/household/finance", include_arrays=True - ) - reform["household"]["demographics"] = simulation.calculate( - "macro/reform/household/demographics", include_arrays=True - ) - - baseline_income = MicroSeries( - baseline["household"]["finance"]["household_net_income"], - weights=baseline["household"]["demographics"]["household_weight"], - ) - reform_income = MicroSeries( - reform["household"]["finance"]["household_net_income"], - weights=baseline_income.weights, - ) - people = MicroSeries( - baseline["household"]["demographics"]["household_count_people"], - weights=baseline_income.weights, - ) - decile = MicroSeries( - baseline["household"]["finance"]["wealth_decile"] - ).values - absolute_change = (reform_income - baseline_income).values - capped_baseline_income = np.maximum(baseline_income.values, 1) - capped_reform_income = ( - np.maximum(reform_income.values, 1) + absolute_change - ) - income_change = ( - capped_reform_income - capped_baseline_income - ) / capped_baseline_income - - # Within each decile, calculate the percentage of people who: - # 1. Gained more than 5% of their income - # 2. Gained between 0% and 5% of their income - # 3. Had no change in income - # 3. Lost between 0% and 5% of their income - # 4. Lost more than 5% of their income - - outcome_groups = {} - all_outcomes = {} - BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] - LABELS = [ - "Lose more than 5%", - "Lose less than 5%", - "No change", - "Gain less than 5%", - "Gain more than 5%", - ] - for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): - outcome_groups[label] = [] - for i in range(1, 11): - in_decile = decile == i - in_group = (income_change > lower) & (income_change <= upper) - in_both = in_decile & in_group - outcome_groups[label].append( - float(people[in_both].sum() / people[in_decile].sum()) - ) - all_outcomes[label] = sum(outcome_groups[label]) / 10 - return dict(deciles=outcome_groups, all=all_outcomes) diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py index 43a4592e..7964a71a 100644 --- a/policyengine/outputs/macro/single/__init__.py +++ b/policyengine/outputs/macro/single/__init__.py @@ -1 +1 @@ -from .single import calculate_single_macro_scenario +from .single import calculate_single_economy \ No newline at end of file diff --git a/policyengine/outputs/macro/single/gov/__init__.py b/policyengine/outputs/macro/single/gov/__init__.py deleted file mode 100644 index ce6cd002..00000000 --- a/policyengine/outputs/macro/single/gov/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .gov import calculate_gov diff --git a/policyengine/outputs/macro/single/gov/balance.py b/policyengine/outputs/macro/single/gov/balance.py deleted file mode 100644 index f59246ad..00000000 --- a/policyengine/outputs/macro/single/gov/balance.py +++ /dev/null @@ -1,21 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation - - -def calculate_balance(simulation: "Simulation") -> dict: - sim = simulation.selected_sim - if simulation.country == "uk": - total_tax = sim.calculate("gov_tax").sum() - total_spending = sim.calculate("gov_spending").sum() - total_state_tax = 0 - elif simulation.country == "us": - total_tax = sim.calculate("household_tax").sum() - total_spending = sim.calculate("household_benefits").sum() - total_state_tax = sim.calculate("household_state_income_tax").sum() - return { - "total_tax": total_tax, - "total_spending": total_spending, - "total_state_tax": total_state_tax, - } diff --git a/policyengine/outputs/macro/single/gov/budget_window.py b/policyengine/outputs/macro/single/gov/budget_window.py deleted file mode 100644 index d1871f8a..00000000 --- a/policyengine/outputs/macro/single/gov/budget_window.py +++ /dev/null @@ -1,52 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation - -DEFAULT_COUNT_YEARS = 1 - - -def calculate_budget_window( - simulation: "Simulation", count_years: int = None -) -> dict: - sim = simulation.selected_sim - current_year = simulation.time_period - if count_years is not None: - years = list(range(current_year, current_year + count_years)) - else: - years = [current_year] - if simulation.country == "uk": - total_tax = [sim.calculate("gov_tax", year).sum() for year in years] - total_spending = [ - sim.calculate("gov_spending", year).sum() for year in years - ] - total_state_tax = [0 for year in years] - total_budget = [ - total_tax[i] - total_spending[i] for i in range(len(years)) - ] - total_federal_budget = total_budget - elif simulation.country == "us": - total_tax = [ - sim.calculate("household_tax", year).sum() for year in years - ] - total_spending = [ - sim.calculate("household_benefits", year).sum() for year in years - ] - total_state_tax = [ - sim.calculate("household_state_income_tax", year).sum() - for year in years - ] - total_budget = [ - total_tax[i] - total_spending[i] for i in range(len(years)) - ] - total_federal_budget = [ - total_tax[i] - total_spending[i] - total_state_tax - for i in range(len(years)) - ] - return { - "total_tax": total_tax, - "total_spending": total_spending, - "total_state_tax": total_state_tax, - "total_budget": total_budget, - "total_federal_budget": total_federal_budget, - } diff --git a/policyengine/outputs/macro/single/gov/gov.py b/policyengine/outputs/macro/single/gov/gov.py deleted file mode 100644 index 492dd964..00000000 --- a/policyengine/outputs/macro/single/gov/gov.py +++ /dev/null @@ -1,19 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from .local_areas import calculate_local_areas -from .balance import calculate_balance -from .budget_window import calculate_budget_window -from .programs import calculate_programs - - -def calculate_gov( - simulation: "Simulation", -) -> dict: - return { - "balance": calculate_balance(simulation), - "budget_window": calculate_budget_window(simulation), - "programs": calculate_programs(simulation), - "local_areas": calculate_local_areas(simulation), - } diff --git a/policyengine/outputs/macro/single/gov/local_areas/__init__.py b/policyengine/outputs/macro/single/gov/local_areas/__init__.py deleted file mode 100644 index 2a793b8e..00000000 --- a/policyengine/outputs/macro/single/gov/local_areas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .local_areas import calculate_local_areas diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py b/policyengine/outputs/macro/single/gov/local_areas/local_areas.py deleted file mode 100644 index 2c29d394..00000000 --- a/policyengine/outputs/macro/single/gov/local_areas/local_areas.py +++ /dev/null @@ -1,24 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from policyengine.outputs.macro.single.gov.local_areas.local_authorities import ( - calculate_local_authorities, -) -from policyengine.outputs.macro.single.gov.local_areas.parliamentary_constituencies import ( - calculate_parliamentary_constituencies, -) - - -def calculate_local_areas( - simulation: "Simulation", -) -> dict: - if simulation.country != "uk": - return None - - return { - "local_authorities": calculate_local_authorities(simulation), - "parliamentary_constituencies": calculate_parliamentary_constituencies( - simulation - ), - } diff --git a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py b/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py deleted file mode 100644 index 9bd6bfc3..00000000 --- a/policyengine/outputs/macro/single/gov/local_areas/local_authorities.py +++ /dev/null @@ -1,92 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from policyengine.utils.huggingface import download -import h5py -from microdf import MicroSeries -import pandas as pd -from typing import Callable -from policyengine_core import Microsimulation -from policyengine.utils.maps import plot_hex_map - - -def calculate_local_authorities( - simulation, - metric: Callable[[Microsimulation], MicroSeries] = None, - chart: bool = False, - code_index: bool = False, -) -> dict: - """Calculate the impact of the reform on parliamentary constituencies. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - metric (Callable[[Microsimulation], [float]]): A custom function to calculate the impact. This must be called on a Microsimulation and return a float (we will call it for each constituency weight set). - chart (bool): Whether to return a chart or data. - code_index (bool): Whether to use the constituency code as the index. - - Returns: - dict: A dictionary with the impact of the reform on parliamentary constituencies (keys=constituency names, values=metric values). - """ - if metric is None: - metric = lambda sim: sim.calculate("household_net_income").median() - weights_file_path = download( - repo="policyengine/policyengine-uk-data", - repo_filename="local_authority_weights.h5", - local_folder=None, - version=None, - ) - constituency_names_file_path = download( - repo="policyengine/policyengine-uk-data", - repo_filename="local_authorities_2021.csv", - local_folder=None, - version=None, - ) - constituency_names = pd.read_csv(constituency_names_file_path) - - with h5py.File(weights_file_path, "r") as f: - weights = f[str(simulation.time_period)][...] - - result = {} - - sim = simulation.selected_sim - original_hh_weight = sim.calculate("household_weight").values - - for constituency_id in range(weights.shape[0]): - sim.set_input( - "household_weight", - sim.default_calculation_period, - weights[constituency_id], - ) - sim.get_holder("person_weight").delete_arrays( - sim.default_calculation_period - ) - sim.get_holder("benunit_weight").delete_arrays( - sim.default_calculation_period - ) - calculation_result = metric(sim) - code = constituency_names.code.iloc[constituency_id] - result[constituency_names.set_index("code").loc[code]["name"]] = ( - calculation_result - ) - - sim.get_holder("person_weight").delete_arrays( - sim.default_calculation_period - ) - sim.get_holder("benunit_weight").delete_arrays( - sim.default_calculation_period - ) - sim.set_input( - "household_weight", sim.default_calculation_period, original_hh_weight - ) - - if chart: - return plot_hex_map(result, "local_authorities") - - if code_index: - return { - constituency_names.set_index("name").loc[name]["code"]: value - for name, value in result.items() - } - - return result diff --git a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py b/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py deleted file mode 100644 index 1fc63e3f..00000000 --- a/policyengine/outputs/macro/single/gov/local_areas/parliamentary_constituencies.py +++ /dev/null @@ -1,95 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from policyengine.utils.huggingface import download -import h5py -from microdf import MicroSeries -import pandas as pd -from typing import Callable -from policyengine_core import Microsimulation -from policyengine.utils.maps import plot_hex_map - - -def calculate_parliamentary_constituencies( - simulation: "Simulation", - metric: Callable[[Microsimulation], MicroSeries] = None, - chart: bool = False, - code_index: bool = False, -) -> dict: - """Calculate the impact of the reform on parliamentary constituencies. - - Args: - simulation (Simulation): The simulation for which the impact is to be calculated. - metric (Callable[[Microsimulation], [float]]): A custom function to calculate the impact. This must be called on a Microsimulation and return a float (we will call it for each constituency weight set). - chart (bool): Whether to return a chart or data. - code_index (bool): Whether to use the constituency code as the index. - - Returns: - dict: A dictionary with the impact of the reform on parliamentary constituencies (keys=constituency names, values=metric values). - """ - if not simulation.options.get("include_constituencies"): - return {} - - if metric is None: - metric = lambda sim: sim.calculate("household_net_income").median() - weights_file_path = download( - repo="policyengine/policyengine-uk-data", - repo_filename="parliamentary_constituency_weights.h5", - local_folder=None, - version=None, - ) - constituency_names_file_path = download( - repo="policyengine/policyengine-uk-data", - repo_filename="constituencies_2024.csv", - local_folder=None, - version=None, - ) - constituency_names = pd.read_csv(constituency_names_file_path) - - with h5py.File(weights_file_path, "r") as f: - weights = f[str(simulation.time_period)][...] - - result = {} - - sim = simulation.selected_sim - original_hh_weight = sim.calculate("household_weight").values - - for constituency_id in range(weights.shape[0]): - sim.set_input( - "household_weight", - sim.default_calculation_period, - weights[constituency_id], - ) - sim.get_holder("person_weight").delete_arrays( - sim.default_calculation_period - ) - sim.get_holder("benunit_weight").delete_arrays( - sim.default_calculation_period - ) - calculation_result = metric(sim) - code = constituency_names.code.iloc[constituency_id] - result[constituency_names.set_index("code").loc[code]["name"]] = ( - calculation_result - ) - - sim.get_holder("person_weight").delete_arrays( - sim.default_calculation_period - ) - sim.get_holder("benunit_weight").delete_arrays( - sim.default_calculation_period - ) - sim.set_input( - "household_weight", sim.default_calculation_period, original_hh_weight - ) - - if chart: - return plot_hex_map(result, "parliamentary_constituencies") - - if code_index: - return { - constituency_names.set_index("name").loc[name]["code"]: value - for name, value in result.items() - } - - return result diff --git a/policyengine/outputs/macro/single/gov/programs.py b/policyengine/outputs/macro/single/gov/programs.py deleted file mode 100644 index 9eed4075..00000000 --- a/policyengine/outputs/macro/single/gov/programs.py +++ /dev/null @@ -1,40 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from dataclasses import dataclass - - -@dataclass -class UKProgram: - name: str - is_positive: bool - - -class UKPrograms: - PROGRAMS = [ - UKProgram("income_tax", True), - UKProgram("national_insurance", True), - UKProgram("vat", True), - UKProgram("council_tax", True), - UKProgram("fuel_duty", True), - UKProgram("tax_credits", False), - UKProgram("universal_credit", False), - UKProgram("child_benefit", False), - UKProgram("state_pension", False), - UKProgram("pension_credit", False), - UKProgram("ni_employer", True), - ] - - -def calculate_programs(simulation: "Simulation") -> dict: - if simulation.country == "uk": - return { - program.name: simulation.selected_sim.calculate( - program.name, map_to="household" - ).sum() - * (1 if program.is_positive else -1) - for program in UKPrograms.PROGRAMS - } - else: - return {} diff --git a/policyengine/outputs/macro/single/household/__init__.py b/policyengine/outputs/macro/single/household/__init__.py index 4e4ad369..db0309f9 100644 --- a/policyengine/outputs/macro/single/household/__init__.py +++ b/policyengine/outputs/macro/single/household/__init__.py @@ -1 +1 @@ -from .household import calculate_household +from .household import calculate_single_economy_household_sector, SingleEconomyHouseholdSector diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index 5e5e40f4..51f64544 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,12 +1,32 @@ import typing - +from typing import List +from pydantic import BaseModel, Field if typing.TYPE_CHECKING: from policyengine import Simulation +from microdf import MicroSeries + +class SingleEconomyDemographics(BaseModel): + household_count_people: List[int] = Field(..., description="Number of people in each household") + person_weight: List[float] = Field(..., description="Weight of each person") + household_weight: List[float] = Field(..., description="Weight of each household") + total_households: int = Field(..., description="Total number of households") + is_male: List[bool] = Field(..., description="Gender indicator for each person") + age: List[int] = Field(..., description="Age of each person") + race: typing.Optional[List[str]] = Field(None, description="Race of each person, if available") def calculate_demographics( - simulation: "Simulation", include_arrays: bool = False -) -> dict: + simulation: "Simulation", +) -> SingleEconomyDemographics: + """ + Calculate and return demographic information for a given simulation. + + Args: + simulation (Simulation): The simulation object containing the selected simulation data. + + Returns: + SingleEconomyDemographics: An object containing demographic information. + """ sim = simulation.selected_sim household_count_people = ( sim.calculate("household_count_people").astype(int).tolist() @@ -19,18 +39,13 @@ def calculate_demographics( else: race = None age = sim.calculate("age").astype(int).tolist() - result = { - "household_count_people": household_count_people, - "person_weight": person_weight, - "household_weight": household_weight, - "total_households": sum(household_weight), - "is_male": is_male, - "age": age, - "race": race, - } - if not include_arrays: - return { - "total_households": result["total_households"], - } - else: - return result + total_households = int(sum(household_weight)) + return SingleEconomyDemographics( + household_count_people=household_count_people, + person_weight=person_weight, + household_weight=household_weight, + total_households=total_households, + is_male=is_male, + age=age, + race=race, + ) diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index 7604cdc9..4918b4d9 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -3,10 +3,43 @@ if typing.TYPE_CHECKING: from policyengine import Simulation +from pydantic import BaseModel, Field + +class SingleEconomyFinanceOutput(BaseModel): + total_net_income: float = Field(..., description="Total net income of the household") + total_market_income: float = Field(..., description="Total market income of the household") + total_tax: float = Field(..., description="Total tax paid by the household") + total_benefits: float = Field(..., description="Total benefits received by the household") + employment_income_hh: typing.List[float] = Field(..., description="Employment income of the household") + self_employment_income_hh: typing.List[float] = Field(..., description="Self-employment income of the household") + household_net_income: typing.List[float] = Field(..., description="Net income of the household") + equiv_household_net_income: typing.List[float] = Field(..., description="Equivalized net income of the household") + household_income_decile: typing.List[int] = Field(..., description="Income decile of the household") + household_market_income: typing.List[float] = Field(..., description="Market income of the household") + wealth: typing.Optional[typing.List[float]] = Field(None, description="Wealth of the household") + wealth_decile: typing.Optional[typing.List[int]] = Field(None, description="Wealth decile of the household") + in_poverty: typing.List[bool] = Field(..., description="Poverty status of the household") + person_in_poverty: typing.List[bool] = Field(..., description="Poverty status of individuals in the household") + person_in_deep_poverty: typing.List[bool] = Field(..., description="Deep poverty status of individuals in the household") + poverty_gap: float = Field(..., description="Poverty gap of the household") + deep_poverty_gap: float = Field(..., description="Deep poverty gap of the household") + poverty_rate: float = Field(..., description="Poverty rate of the household") + deep_poverty_rate: float = Field(..., description="Deep poverty rate of the household") + def calculate_finance( - simulation: "Simulation", include_arrays: bool = False -) -> dict: + simulation: "Simulation", +) -> SingleEconomyFinanceOutput: + """ + Calculate various financial metrics for a given simulation. + + Args: + simulation (Simulation): The simulation object containing the data. + + Returns: + FinanceOutput: An object containing various financial metrics. + + """ sim = simulation.selected_sim total_net_income = sim.calculate("household_net_income").sum() @@ -15,13 +48,11 @@ def calculate_finance( total_benefits = sim.calculate("household_benefits").sum() employment_income_hh = ( sim.calculate("employment_income", map_to="household") - .astype(float) - .tolist() + .astype(float).tolist() ) self_employment_income_hh = ( sim.calculate("self_employment_income", map_to="household") - .astype(float) - .tolist() + .astype(float).tolist() ) household_net_income = ( sim.calculate("household_net_income").astype(float).tolist() @@ -39,7 +70,7 @@ def calculate_finance( wealth = sim.calculate("total_wealth") household_count_people = sim.calculate("household_count_people").values wealth.weights *= household_count_people - wealth_decile = wealth.decile_rank().clip(1, 10).astype(int).tolist() + wealth_decile = wealth.decile_rank().clip(1, 10).astype(int) wealth = wealth.astype(float).tolist() else: wealth = None @@ -60,33 +91,24 @@ def calculate_finance( "in_deep_poverty", map_to="person" ).mean() - result = { - "total_net_income": total_net_income, - "total_market_income": total_market_income, - "total_tax": total_tax, - "total_benefits": total_benefits, - "employment_income_hh": employment_income_hh, - "self_employment_income_hh": self_employment_income_hh, - "household_net_income": household_net_income, - "equiv_household_net_income": equiv_household_net_income, - "household_income_decile": household_income_decile, - "household_market_income": household_market_income, - "wealth": wealth, - "wealth_decile": wealth_decile, - "in_poverty": in_poverty, - "person_in_poverty": person_in_poverty, - "person_in_deep_poverty": person_in_deep_poverty, - "poverty_gap": poverty_gap, - "deep_poverty_gap": deep_poverty_gap, - "poverty_rate": poverty_rate, - "deep_poverty_rate": deep_poverty_rate, - } - - if not include_arrays: - return { - key: value - for key, value in result.items() - if not isinstance(value, list) - } - else: - return result + return SingleEconomyFinanceOutput( + total_net_income=total_net_income, + total_market_income=total_market_income, + total_tax=total_tax, + total_benefits=total_benefits, + employment_income_hh=employment_income_hh, + self_employment_income_hh=self_employment_income_hh, + household_net_income=household_net_income, + equiv_household_net_income=equiv_household_net_income, + household_income_decile=household_income_decile, + household_market_income=household_market_income, + wealth=wealth, + wealth_decile=wealth_decile, + in_poverty=in_poverty, + person_in_poverty=person_in_poverty, + person_in_deep_poverty=person_in_deep_poverty, + poverty_gap=poverty_gap, + deep_poverty_gap=deep_poverty_gap, + poverty_rate=poverty_rate, + deep_poverty_rate=deep_poverty_rate, + ) diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py index 704e9aa8..6aa4224f 100644 --- a/policyengine/outputs/macro/single/household/household.py +++ b/policyengine/outputs/macro/single/household/household.py @@ -2,20 +2,33 @@ if typing.TYPE_CHECKING: from policyengine import Simulation -from .demographics import calculate_demographics -from .finance import calculate_finance -from .income_distribution import calculate_income_distribution -from .inequality import calculate_inequality -from .labor_supply import calculate_labor_supply +from .demographics import calculate_demographics, SingleEconomyDemographics +from .finance import calculate_finance, SingleEconomyFinanceOutput +from .inequality import calculate_inequality, SingleEconomyInequality +from .labor_supply import calculate_labor_supply, SingleEconomyLaborSupply +from pydantic import BaseModel, Field +class SingleEconomyHouseholdSector(BaseModel): + demographics: SingleEconomyDemographics = Field(..., description="Demographics of the household sector") + finance: SingleEconomyFinanceOutput = Field(..., description="Finance variables of the household sector") + inequality: SingleEconomyInequality = Field(..., description="Inequality of the household sector") + labor_supply: SingleEconomyLaborSupply = Field(..., description="Labor supply variables of the household sector") -def calculate_household( +def calculate_single_economy_household_sector( simulation: "Simulation", -) -> dict: - return { - "demographics": calculate_demographics(simulation), - "finance": calculate_finance(simulation), - "income_distribution": calculate_income_distribution(simulation), - "inequality": calculate_inequality(simulation), - "labor_supply": calculate_labor_supply(simulation), - } +) -> SingleEconomyHouseholdSector: + """ + Calculate and return household sector variables for a given simulation. + + Args: + simulation (Simulation): The simulation object containing the selected simulation data. + + Returns: + SingleEconomyHouseholdSector: An object containing demographic, finance, inequality, and labor supply variables for the household sector. + """ + return SingleEconomyHouseholdSector( + demographics=calculate_demographics(simulation), + finance=calculate_finance(simulation), + inequality=calculate_inequality(simulation), + labor_supply=calculate_labor_supply(simulation), + ) diff --git a/policyengine/outputs/macro/single/household/income_distribution.py b/policyengine/outputs/macro/single/household/income_distribution.py deleted file mode 100644 index 959244f4..00000000 --- a/policyengine/outputs/macro/single/household/income_distribution.py +++ /dev/null @@ -1,61 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -import plotly.express as px -from policyengine.utils.charts import * -import plotly.graph_objects as go -import pandas as pd - - -def calculate_income_distribution( - simulation: "Simulation", - chart: bool = False, - variable: str = "household_net_income", -) -> dict: - income = simulation.baseline_sim.calculate(variable) - income_upper = income.quantile(0.9) - BAND_SIZE = 5_000 - lower_income_bands = [] - counts = [] - for i in range(0, int(income_upper), BAND_SIZE): - income_in_band = (income >= i) * (income < i + BAND_SIZE) - lower_income_bands.append(i) - counts.append(income_in_band.sum()) - - data = pd.Series(counts, index=lower_income_bands) - - if chart: - return income_distribution_chart(data) - else: - return data.to_dict() - - -def income_distribution_chart(data: pd.Series) -> go.Figure: - fig = px.bar( - x=data.index, - y=data.values, - labels={"x": "Income", "y": "Number of Households"}, - color_discrete_sequence=[BLUE], - ) - fig.update_layout( - title="Number of households by net income band", - xaxis_title="Household net income", - yaxis_title="Number of households", - ) - - # Add arrow pointing off the right and small note that 10% of households are excluded - - fig.add_annotation( - xref="paper", - yref="paper", - x=1, - y=0.8, - text="Top 10% of households
not shown", - showarrow=True, - arrowhead=2, - # arrow pointing left - ax=-110, - ay=0, - ) - return format_fig(fig) diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py index 4b81ded4..c2714873 100644 --- a/policyengine/outputs/macro/single/household/inequality.py +++ b/policyengine/outputs/macro/single/household/inequality.py @@ -3,8 +3,26 @@ if typing.TYPE_CHECKING: from policyengine import Simulation +from pydantic import BaseModel, Field + +class SingleEconomyInequality(BaseModel): + gini: float = Field(..., description="Gini coefficient of income inequality") + top_10_percent_share: float = Field(..., description="Income share of the top 10 percent") + top_1_percent_share: float = Field(..., description="Income share of the top 1 percent") + + +def calculate_inequality(simulation: "Simulation") -> SingleEconomyInequality: + """ + Calculate inequality metrics for a given simulation. + Args: + simulation (Simulation): The simulation object containing the data + and methods to perform the calculations. + Returns: + SingleEconomyInequality: An object containing the calculated Gini + coefficient, top 10 percent income share, + and top 1 percent income share. + """ -def calculate_inequality(simulation: "Simulation") -> dict: personal_hh_equiv_income = simulation.selected_sim.calculate( "equiv_household_net_income" ) @@ -28,8 +46,8 @@ def calculate_inequality(simulation: "Simulation") -> dict: / personal_hh_equiv_income.sum() ) - return { - "gini": gini, - "top_10_percent_share": top_10_share, - "top_1_percent_share": top_1_share, - } + return SingleEconomyInequality( + gini=gini, + top_10_percent_share=top_10_share, + top_1_percent_share=top_1_share, + ) diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index 0fec1876..9615997a 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -1,79 +1,79 @@ -import typing +from typing import Optional, List +from pydantic import BaseModel, Field +import numpy as np +from typing import TYPE_CHECKING -if typing.TYPE_CHECKING: +if TYPE_CHECKING: from policyengine import Simulation +class SingleEconomyLaborSupply(BaseModel): + substitution_lsr: float = Field(default=0, description="Substitution labor supply response") + income_lsr: float = Field(default=0, description="Income labor supply response") + income_lsr_hh: List[float] = Field(default_factory=list, description="Household income labor supply response") + substitution_lsr_hh: List[float] = Field(default_factory=list, description="Household substitution labor supply response") + weekly_hours: float = Field(default=0, description="Weekly hours worked") + weekly_hours_income_effect: float = Field(default=0, description="Weekly hours worked income effect") + weekly_hours_substitution_effect: float = Field(default=0, description="Weekly hours substitution effect") + total_earnings: float = Field(..., description="Total employment and self-employment earnings") + total_workers: int = Field(..., description="Total number of workers") + + +def has_behavioral_response(simulation: "Simulation") -> bool: + """Check if simulation has behavioral responses.""" + sim = simulation.selected_sim + return ( + "employment_income_behavioral_response" in sim.tax_benefit_system.variables + and any(sim.calculate("employment_income_behavioral_response") != 0) + ) def calculate_labor_supply( - simulation: "Simulation", include_arrays: bool = False -) -> dict: - if not simulation.comparison: - return {} + simulation: "Simulation", +) -> SingleEconomyLaborSupply: + """ + Calculate labor supply response metrics. + + Args: + simulation (Simulation): Policy simulation object. + + Returns: + SingleEconomyLaborSupply: Labor supply response metrics. + """ sim = simulation.selected_sim household_count_people = sim.calculate("household_count_people").values - result = { - "substitution_lsr": 0, - "income_lsr": 0, - "income_lsr_hh": (household_count_people * 0).astype(float).tolist(), - "substitution_lsr_hh": (household_count_people * 0) - .astype(float) - .tolist(), - "weekly_hours": 0, - "weekly_hours_income_effect": 0, - "weekly_hours_substitution_effect": 0, - "total_earnings": sim.calculate("employment_income").sum() - + sim.calculate("self_employment_income").sum(), - "total_workers": (sim.calculate("employment_income") > 0).sum() - + (sim.calculate("self_employment_income") > 0).sum(), - } + # Initialize base metrics + labor_supply = SingleEconomyLaborSupply( + income_lsr_hh=(household_count_people * 0).astype(float).tolist(), + substitution_lsr_hh=(household_count_people * 0).astype(float).tolist(), + total_earnings=sim.calculate("employment_income").sum() + + sim.calculate("self_employment_income").sum(), + total_workers=int((sim.calculate("employment_income") > 0).sum() + + (sim.calculate("self_employment_income") > 0).sum()), + ) + + # Update behavioral response metrics if available if has_behavioral_response(simulation): - result.update( - { - "substitution_lsr": sim.calculate( - "substitution_elasticity_lsr" - ).sum(), - "income_lsr": sim.calculate("income_elasticity_lsr").sum(), - "income_lsr_hh": sim.calculate( - "income_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - "substitution_lsr_hh": sim.calculate( - "substitution_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - } + labor_supply.substitution_lsr = sim.calculate("substitution_elasticity_lsr").sum() + labor_supply.income_lsr = sim.calculate("income_elasticity_lsr").sum() + labor_supply.income_lsr_hh = ( + sim.calculate("income_elasticity_lsr", map_to="household") + .astype(float) + ) + labor_supply.substitution_lsr_hh = ( + sim.calculate("substitution_elasticity_lsr", map_to="household") + .astype(float) ) - if simulation.country == "us": - result.update( - { - "weekly_hours": sim.calculate("weekly_hours_worked").sum(), - "weekly_hours_income_effect": sim.calculate( - "weekly_hours_worked_behavioural_response_income_elasticity" - ).sum(), - "weekly_hours_substitution_effect": sim.calculate( - "weekly_hours_worked_behavioural_response_substitution_elasticity" - ).sum(), - } - ) - - if not include_arrays: - return { - key: value - for key, value in result.items() - if not isinstance(value, list) - } - else: - return result - + # Update US-specific metrics + if simulation.country == "us": + labor_supply.weekly_hours = sim.calculate("weekly_hours_worked").sum() + labor_supply.weekly_hours_income_effect = ( + sim.calculate("weekly_hours_worked_behavioural_response_income_elasticity") + .sum() + ) + labor_supply.weekly_hours_substitution_effect = ( + sim.calculate("weekly_hours_worked_behavioural_response_substitution_elasticity") + .sum() + ) -def has_behavioral_response(simulation): - sim = simulation.selected_sim - return ( - "employment_income_behavioral_response" - in sim.tax_benefit_system.variables - and any(sim.calculate("employment_income_behavioral_response") != 0) - ) + return labor_supply \ No newline at end of file diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py index 87bf5330..6cb60699 100644 --- a/policyengine/outputs/macro/single/single.py +++ b/policyengine/outputs/macro/single/single.py @@ -1,15 +1,15 @@ -import typing +from typing import TYPE_CHECKING +from pydantic import BaseModel -if typing.TYPE_CHECKING: +if TYPE_CHECKING: from policyengine import Simulation -from .gov import calculate_gov -from .household import calculate_household +from .household import calculate_single_economy_household_sector, SingleEconomyHouseholdSector -def calculate_single_macro_scenario( - simulation: "Simulation", -) -> dict: - return { - "gov": calculate_gov(simulation), - "household": calculate_household(simulation), - } +class SingleEconomy(BaseModel): + household: SingleEconomyHouseholdSector + +def calculate_single_economy(sim: "Simulation") -> SingleEconomy: + return SingleEconomy( + household=calculate_single_economy_household_sector(sim), + ) \ No newline at end of file diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 548064af..82179e10 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -9,11 +9,15 @@ import h5py from pathlib import Path from typing import Literal +from policyengine.utils.typing import add_methods +from policyengine.outputs.macro.single import calculate_single_economy -from .outputs.macro.single import calculate_single_macro_scenario -from .outputs.macro.comparison import calculate_macro_comparison +methods_to_add = [ + calculate_single_economy, +] +@add_methods(methods_to_add) class Simulation: """The top-level class through which all PE usage is carried out.""" @@ -23,7 +27,7 @@ class Simulation: """The type of simulation being run (macro or household).""" data: dict | str | Dataset """The dataset being used for the simulation.""" - time_period: str | None + time_period: str | int """The time period for the simulation. Years are applicable.""" baseline: dict | None """The baseline simulation inputs.""" @@ -38,8 +42,8 @@ class Simulation: """The tax-benefit simulation for the baseline scenario.""" reformed_sim: CountrySimulation | None = None """The tax-benefit simulation for the reformed scenario. None if no reform has been configured""" - selected_sim: CountrySimulation | None = None - """The selected simulation for the current calculation. None if not a reform.""" + selected_sim: CountrySimulation + """The selected simulation for the current calculation.""" verbose: bool = False """Whether to print out progress messages.""" @@ -48,7 +52,7 @@ def __init__( country: Literal["uk", "us"], scope: Literal["macro", "household"], data: str | dict | None = None, - time_period: str | None = Literal[ + time_period: str | int = Literal[ 2024, 2025, 2026, 2027, 2028, 2029, 2030 ], reform: dict | None = None, @@ -264,8 +268,6 @@ def _apply_region_to_simulation( with h5py.File(weights_file_path, "r") as f: weights = f[str(self.time_period)][...] - simulation.calculate("household_net_income") - simulation.set_input( "household_weight", simulation.default_calculation_period, @@ -299,8 +301,6 @@ def _apply_region_to_simulation( with h5py.File(weights_file_path, "r") as f: weights = f[str(self.time_period)][...] - simulation.calculate("household_net_income") - simulation.set_input( "household_weight", simulation.default_calculation_period, @@ -310,9 +310,3 @@ def _apply_region_to_simulation( simulation.default_calculation_period = self.time_period return simulation - - calculate_macro_comparison = calculate_macro_comparison - calculate_single_macro_scenario = calculate_single_macro_scenario - - def calculate_macro(self): - return calculate_single_macro_scenario(self) diff --git a/policyengine/utils/typing.py b/policyengine/utils/typing.py new file mode 100644 index 00000000..1c3749d0 --- /dev/null +++ b/policyengine/utils/typing.py @@ -0,0 +1,27 @@ +from typing import Callable, Type, TypeVar, ParamSpec +from functools import wraps + +T = TypeVar("T") +P = ParamSpec("P") +R = TypeVar("R") + + +def add_methods(methods: list[Callable]) -> Callable[[Type[T]], Type[T]]: + """ + Class decorator that adds methods to a class while preserving their metadata. + + Args: + methods: List of functions to add as methods + """ + + def decorator(cls: Type[T]) -> Type[T]: + for method in methods: + + @wraps(method) + def wrapped(self: T, *args: P.args, **kwargs: P.kwargs) -> R: + return method(self, *args, **kwargs) + + setattr(cls, method.__name__, wrapped) + return cls + + return decorator diff --git a/pyproject.toml b/pyproject.toml index 59483379..8bf5a0e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ dev = [ "black", "pytest", "furo", + "sphinx-autoapi", "jupyter-book", "yaml-changelog>=0.1.7", "itables", From 17c765fea21baa0b2d7908db63bf0826623a3d0e Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Sat, 25 Jan 2025 10:41:55 +1100 Subject: [PATCH 13/32] Format --- .github/workflows/any_changes.yaml | 33 +++++++ policyengine/outputs/macro/single/__init__.py | 2 +- .../macro/single/household/__init__.py | 5 +- .../macro/single/household/demographics.py | 26 ++++-- .../outputs/macro/single/household/finance.py | 79 +++++++++++----- .../macro/single/household/household.py | 18 +++- .../macro/single/household/inequality.py | 19 ++-- .../macro/single/household/labor_supply.py | 89 ++++++++++++------- policyengine/outputs/macro/single/single.py | 9 +- 9 files changed, 206 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/any_changes.yaml diff --git a/.github/workflows/any_changes.yaml b/.github/workflows/any_changes.yaml new file mode 100644 index 00000000..347cf93c --- /dev/null +++ b/.github/workflows/any_changes.yaml @@ -0,0 +1,33 @@ +# Workflow that runs on code changes to a pull request. + +name: Any changes +on: + pull_request: + branches: + - main + +jobs: + Lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check formatting + uses: "lgeiger/black-action@master" + with: + args: ". -l 79 --check" + Test: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.10' + + - name: Install package + run: make install + + - name: Test documentation builds + run: make documentation \ No newline at end of file diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py index 7964a71a..6b7c1a34 100644 --- a/policyengine/outputs/macro/single/__init__.py +++ b/policyengine/outputs/macro/single/__init__.py @@ -1 +1 @@ -from .single import calculate_single_economy \ No newline at end of file +from .single import calculate_single_economy diff --git a/policyengine/outputs/macro/single/household/__init__.py b/policyengine/outputs/macro/single/household/__init__.py index db0309f9..a38080a1 100644 --- a/policyengine/outputs/macro/single/household/__init__.py +++ b/policyengine/outputs/macro/single/household/__init__.py @@ -1 +1,4 @@ -from .household import calculate_single_economy_household_sector, SingleEconomyHouseholdSector +from .household import ( + calculate_single_economy_household_sector, + SingleEconomyHouseholdSector, +) diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py index 51f64544..101086a2 100644 --- a/policyengine/outputs/macro/single/household/demographics.py +++ b/policyengine/outputs/macro/single/household/demographics.py @@ -1,18 +1,32 @@ import typing from typing import List from pydantic import BaseModel, Field + if typing.TYPE_CHECKING: from policyengine import Simulation from microdf import MicroSeries + class SingleEconomyDemographics(BaseModel): - household_count_people: List[int] = Field(..., description="Number of people in each household") - person_weight: List[float] = Field(..., description="Weight of each person") - household_weight: List[float] = Field(..., description="Weight of each household") - total_households: int = Field(..., description="Total number of households") - is_male: List[bool] = Field(..., description="Gender indicator for each person") + household_count_people: List[int] = Field( + ..., description="Number of people in each household" + ) + person_weight: List[float] = Field( + ..., description="Weight of each person" + ) + household_weight: List[float] = Field( + ..., description="Weight of each household" + ) + total_households: int = Field( + ..., description="Total number of households" + ) + is_male: List[bool] = Field( + ..., description="Gender indicator for each person" + ) age: List[int] = Field(..., description="Age of each person") - race: typing.Optional[List[str]] = Field(None, description="Race of each person, if available") + race: typing.Optional[List[str]] = Field( + None, description="Race of each person, if available" + ) def calculate_demographics( diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py index 4918b4d9..c3d519a5 100644 --- a/policyengine/outputs/macro/single/household/finance.py +++ b/policyengine/outputs/macro/single/household/finance.py @@ -5,26 +5,63 @@ from pydantic import BaseModel, Field + class SingleEconomyFinanceOutput(BaseModel): - total_net_income: float = Field(..., description="Total net income of the household") - total_market_income: float = Field(..., description="Total market income of the household") - total_tax: float = Field(..., description="Total tax paid by the household") - total_benefits: float = Field(..., description="Total benefits received by the household") - employment_income_hh: typing.List[float] = Field(..., description="Employment income of the household") - self_employment_income_hh: typing.List[float] = Field(..., description="Self-employment income of the household") - household_net_income: typing.List[float] = Field(..., description="Net income of the household") - equiv_household_net_income: typing.List[float] = Field(..., description="Equivalized net income of the household") - household_income_decile: typing.List[int] = Field(..., description="Income decile of the household") - household_market_income: typing.List[float] = Field(..., description="Market income of the household") - wealth: typing.Optional[typing.List[float]] = Field(None, description="Wealth of the household") - wealth_decile: typing.Optional[typing.List[int]] = Field(None, description="Wealth decile of the household") - in_poverty: typing.List[bool] = Field(..., description="Poverty status of the household") - person_in_poverty: typing.List[bool] = Field(..., description="Poverty status of individuals in the household") - person_in_deep_poverty: typing.List[bool] = Field(..., description="Deep poverty status of individuals in the household") + total_net_income: float = Field( + ..., description="Total net income of the household" + ) + total_market_income: float = Field( + ..., description="Total market income of the household" + ) + total_tax: float = Field( + ..., description="Total tax paid by the household" + ) + total_benefits: float = Field( + ..., description="Total benefits received by the household" + ) + employment_income_hh: typing.List[float] = Field( + ..., description="Employment income of the household" + ) + self_employment_income_hh: typing.List[float] = Field( + ..., description="Self-employment income of the household" + ) + household_net_income: typing.List[float] = Field( + ..., description="Net income of the household" + ) + equiv_household_net_income: typing.List[float] = Field( + ..., description="Equivalized net income of the household" + ) + household_income_decile: typing.List[int] = Field( + ..., description="Income decile of the household" + ) + household_market_income: typing.List[float] = Field( + ..., description="Market income of the household" + ) + wealth: typing.Optional[typing.List[float]] = Field( + None, description="Wealth of the household" + ) + wealth_decile: typing.Optional[typing.List[int]] = Field( + None, description="Wealth decile of the household" + ) + in_poverty: typing.List[bool] = Field( + ..., description="Poverty status of the household" + ) + person_in_poverty: typing.List[bool] = Field( + ..., description="Poverty status of individuals in the household" + ) + person_in_deep_poverty: typing.List[bool] = Field( + ..., description="Deep poverty status of individuals in the household" + ) poverty_gap: float = Field(..., description="Poverty gap of the household") - deep_poverty_gap: float = Field(..., description="Deep poverty gap of the household") - poverty_rate: float = Field(..., description="Poverty rate of the household") - deep_poverty_rate: float = Field(..., description="Deep poverty rate of the household") + deep_poverty_gap: float = Field( + ..., description="Deep poverty gap of the household" + ) + poverty_rate: float = Field( + ..., description="Poverty rate of the household" + ) + deep_poverty_rate: float = Field( + ..., description="Deep poverty rate of the household" + ) def calculate_finance( @@ -48,11 +85,13 @@ def calculate_finance( total_benefits = sim.calculate("household_benefits").sum() employment_income_hh = ( sim.calculate("employment_income", map_to="household") - .astype(float).tolist() + .astype(float) + .tolist() ) self_employment_income_hh = ( sim.calculate("self_employment_income", map_to="household") - .astype(float).tolist() + .astype(float) + .tolist() ) household_net_income = ( sim.calculate("household_net_income").astype(float).tolist() diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py index 6aa4224f..4ccd515d 100644 --- a/policyengine/outputs/macro/single/household/household.py +++ b/policyengine/outputs/macro/single/household/household.py @@ -8,11 +8,21 @@ from .labor_supply import calculate_labor_supply, SingleEconomyLaborSupply from pydantic import BaseModel, Field + class SingleEconomyHouseholdSector(BaseModel): - demographics: SingleEconomyDemographics = Field(..., description="Demographics of the household sector") - finance: SingleEconomyFinanceOutput = Field(..., description="Finance variables of the household sector") - inequality: SingleEconomyInequality = Field(..., description="Inequality of the household sector") - labor_supply: SingleEconomyLaborSupply = Field(..., description="Labor supply variables of the household sector") + demographics: SingleEconomyDemographics = Field( + ..., description="Demographics of the household sector" + ) + finance: SingleEconomyFinanceOutput = Field( + ..., description="Finance variables of the household sector" + ) + inequality: SingleEconomyInequality = Field( + ..., description="Inequality of the household sector" + ) + labor_supply: SingleEconomyLaborSupply = Field( + ..., description="Labor supply variables of the household sector" + ) + def calculate_single_economy_household_sector( simulation: "Simulation", diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py index c2714873..1a0f8f1e 100644 --- a/policyengine/outputs/macro/single/household/inequality.py +++ b/policyengine/outputs/macro/single/household/inequality.py @@ -5,21 +5,28 @@ from pydantic import BaseModel, Field + class SingleEconomyInequality(BaseModel): - gini: float = Field(..., description="Gini coefficient of income inequality") - top_10_percent_share: float = Field(..., description="Income share of the top 10 percent") - top_1_percent_share: float = Field(..., description="Income share of the top 1 percent") + gini: float = Field( + ..., description="Gini coefficient of income inequality" + ) + top_10_percent_share: float = Field( + ..., description="Income share of the top 10 percent" + ) + top_1_percent_share: float = Field( + ..., description="Income share of the top 1 percent" + ) def calculate_inequality(simulation: "Simulation") -> SingleEconomyInequality: """ Calculate inequality metrics for a given simulation. Args: - simulation (Simulation): The simulation object containing the data + simulation (Simulation): The simulation object containing the data and methods to perform the calculations. Returns: - SingleEconomyInequality: An object containing the calculated Gini - coefficient, top 10 percent income share, + SingleEconomyInequality: An object containing the calculated Gini + coefficient, top 10 percent income share, and top 1 percent income share. """ diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py index 9615997a..c2361330 100644 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ b/policyengine/outputs/macro/single/household/labor_supply.py @@ -6,15 +6,32 @@ if TYPE_CHECKING: from policyengine import Simulation + class SingleEconomyLaborSupply(BaseModel): - substitution_lsr: float = Field(default=0, description="Substitution labor supply response") - income_lsr: float = Field(default=0, description="Income labor supply response") - income_lsr_hh: List[float] = Field(default_factory=list, description="Household income labor supply response") - substitution_lsr_hh: List[float] = Field(default_factory=list, description="Household substitution labor supply response") + substitution_lsr: float = Field( + default=0, description="Substitution labor supply response" + ) + income_lsr: float = Field( + default=0, description="Income labor supply response" + ) + income_lsr_hh: List[float] = Field( + default_factory=list, + description="Household income labor supply response", + ) + substitution_lsr_hh: List[float] = Field( + default_factory=list, + description="Household substitution labor supply response", + ) weekly_hours: float = Field(default=0, description="Weekly hours worked") - weekly_hours_income_effect: float = Field(default=0, description="Weekly hours worked income effect") - weekly_hours_substitution_effect: float = Field(default=0, description="Weekly hours substitution effect") - total_earnings: float = Field(..., description="Total employment and self-employment earnings") + weekly_hours_income_effect: float = Field( + default=0, description="Weekly hours worked income effect" + ) + weekly_hours_substitution_effect: float = Field( + default=0, description="Weekly hours substitution effect" + ) + total_earnings: float = Field( + ..., description="Total employment and self-employment earnings" + ) total_workers: int = Field(..., description="Total number of workers") @@ -22,19 +39,21 @@ def has_behavioral_response(simulation: "Simulation") -> bool: """Check if simulation has behavioral responses.""" sim = simulation.selected_sim return ( - "employment_income_behavioral_response" in sim.tax_benefit_system.variables + "employment_income_behavioral_response" + in sim.tax_benefit_system.variables and any(sim.calculate("employment_income_behavioral_response") != 0) ) + def calculate_labor_supply( - simulation: "Simulation", + simulation: "Simulation", ) -> SingleEconomyLaborSupply: """ Calculate labor supply response metrics. - + Args: simulation (Simulation): Policy simulation object. - + Returns: SingleEconomyLaborSupply: Labor supply response metrics. """ @@ -44,36 +63,38 @@ def calculate_labor_supply( # Initialize base metrics labor_supply = SingleEconomyLaborSupply( income_lsr_hh=(household_count_people * 0).astype(float).tolist(), - substitution_lsr_hh=(household_count_people * 0).astype(float).tolist(), - total_earnings=sim.calculate("employment_income").sum() + - sim.calculate("self_employment_income").sum(), - total_workers=int((sim.calculate("employment_income") > 0).sum() + - (sim.calculate("self_employment_income") > 0).sum()), + substitution_lsr_hh=(household_count_people * 0) + .astype(float) + .tolist(), + total_earnings=sim.calculate("employment_income").sum() + + sim.calculate("self_employment_income").sum(), + total_workers=int( + (sim.calculate("employment_income") > 0).sum() + + (sim.calculate("self_employment_income") > 0).sum() + ), ) # Update behavioral response metrics if available if has_behavioral_response(simulation): - labor_supply.substitution_lsr = sim.calculate("substitution_elasticity_lsr").sum() + labor_supply.substitution_lsr = sim.calculate( + "substitution_elasticity_lsr" + ).sum() labor_supply.income_lsr = sim.calculate("income_elasticity_lsr").sum() - labor_supply.income_lsr_hh = ( - sim.calculate("income_elasticity_lsr", map_to="household") - .astype(float) - ) - labor_supply.substitution_lsr_hh = ( - sim.calculate("substitution_elasticity_lsr", map_to="household") - .astype(float) - ) + labor_supply.income_lsr_hh = sim.calculate( + "income_elasticity_lsr", map_to="household" + ).astype(float) + labor_supply.substitution_lsr_hh = sim.calculate( + "substitution_elasticity_lsr", map_to="household" + ).astype(float) # Update US-specific metrics if simulation.country == "us": labor_supply.weekly_hours = sim.calculate("weekly_hours_worked").sum() - labor_supply.weekly_hours_income_effect = ( - sim.calculate("weekly_hours_worked_behavioural_response_income_elasticity") - .sum() - ) - labor_supply.weekly_hours_substitution_effect = ( - sim.calculate("weekly_hours_worked_behavioural_response_substitution_elasticity") - .sum() - ) + labor_supply.weekly_hours_income_effect = sim.calculate( + "weekly_hours_worked_behavioural_response_income_elasticity" + ).sum() + labor_supply.weekly_hours_substitution_effect = sim.calculate( + "weekly_hours_worked_behavioural_response_substitution_elasticity" + ).sum() - return labor_supply \ No newline at end of file + return labor_supply diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py index 6cb60699..a5138b5c 100644 --- a/policyengine/outputs/macro/single/single.py +++ b/policyengine/outputs/macro/single/single.py @@ -4,12 +4,17 @@ if TYPE_CHECKING: from policyengine import Simulation -from .household import calculate_single_economy_household_sector, SingleEconomyHouseholdSector +from .household import ( + calculate_single_economy_household_sector, + SingleEconomyHouseholdSector, +) + class SingleEconomy(BaseModel): household: SingleEconomyHouseholdSector + def calculate_single_economy(sim: "Simulation") -> SingleEconomy: return SingleEconomy( household=calculate_single_economy_household_sector(sim), - ) \ No newline at end of file + ) From 4a3ead3ff628388f058fd477dd2c8d8e34d648c4 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Sat, 25 Jan 2025 10:43:17 +1100 Subject: [PATCH 14/32] Adjust name of action --- .github/workflows/any_changes.yaml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/any_changes.yaml b/.github/workflows/any_changes.yaml index 347cf93c..f45934f3 100644 --- a/.github/workflows/any_changes.yaml +++ b/.github/workflows/any_changes.yaml @@ -7,15 +7,8 @@ on: - main jobs: - Lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Check formatting - uses: "lgeiger/black-action@master" - with: - args: ". -l 79 --check" - Test: + docs: + name: Test documentation builds runs-on: ubuntu-latest steps: - name: Checkout repo From 29f2c1a2eaca56b3cb4f56276e5fdddb8ba25e08 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 07:04:00 +1100 Subject: [PATCH 15/32] Add type hints --- docs/_config.yml | 28 - docs/_static/style.css | 15 - docs/_toc.yml | 7 - docs/index.md | 2 - docs/logo.png | Bin 10188 -> 0 bytes docs/reference/simulation.md | 6 - policyengine/__init__.py | 2 +- policyengine/constants.py | 8 +- .../outputs/calculate_economy_comparison.py | 8 + .../outputs/calculate_full_single_economy.py | 365 +++++++++++ policyengine/outputs/compare.py | 567 ++++++++++++++++++ policyengine/outputs/macro/single/__init__.py | 1 - .../macro/single/household/__init__.py | 4 - .../macro/single/household/demographics.py | 65 -- .../outputs/macro/single/household/finance.py | 153 ----- .../macro/single/household/household.py | 44 -- .../macro/single/household/inequality.py | 60 -- .../macro/single/household/labor_supply.py | 100 --- policyengine/outputs/macro/single/single.py | 20 - policyengine/outputs/single.py | 365 +++++++++++ policyengine/reforms.py | 29 + policyengine/simulation.py | 326 +++++----- policyengine/utils/typing.py | 7 + 23 files changed, 1486 insertions(+), 696 deletions(-) delete mode 100644 docs/_config.yml delete mode 100644 docs/_static/style.css delete mode 100644 docs/_toc.yml delete mode 100644 docs/index.md delete mode 100644 docs/logo.png delete mode 100644 docs/reference/simulation.md create mode 100644 policyengine/outputs/calculate_economy_comparison.py create mode 100644 policyengine/outputs/calculate_full_single_economy.py create mode 100644 policyengine/outputs/compare.py delete mode 100644 policyengine/outputs/macro/single/__init__.py delete mode 100644 policyengine/outputs/macro/single/household/__init__.py delete mode 100644 policyengine/outputs/macro/single/household/demographics.py delete mode 100644 policyengine/outputs/macro/single/household/finance.py delete mode 100644 policyengine/outputs/macro/single/household/household.py delete mode 100644 policyengine/outputs/macro/single/household/inequality.py delete mode 100644 policyengine/outputs/macro/single/household/labor_supply.py delete mode 100644 policyengine/outputs/macro/single/single.py create mode 100644 policyengine/outputs/single.py create mode 100644 policyengine/reforms.py diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index a4d7bf82..00000000 --- a/docs/_config.yml +++ /dev/null @@ -1,28 +0,0 @@ -# _config.yml -author: PolicyEngine -title: PolicyEngine -copyright: "2025" -logo: logo.png - -execute: - execute_notebooks: force - stderr_output: error - timeout: 600 - -repository: - url: https://github.com/policyengine/policyengine.py - branch: master - path_to_book: docs - -title: Python documentation - -sphinx: - config: - html_js_files: - - https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.js - html_theme: furo - pygments_style: default - html_css_files: - - style.css - extra_extensions: - - "sphinx.ext.autodoc" diff --git a/docs/_static/style.css b/docs/_static/style.css deleted file mode 100644 index acb4f2e0..00000000 --- a/docs/_static/style.css +++ /dev/null @@ -1,15 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Roboto+Serif:opsz@8..144&family=Roboto:wght@300&display=swap'); - - -h1, h2, h3 { - font-family: "Roboto"; - font-weight: 200; -} - -body { - font-family: "Roboto Serif"; -} - -.sidebar-brand-text { - text-align: left; -} \ No newline at end of file diff --git a/docs/_toc.yml b/docs/_toc.yml deleted file mode 100644 index 9c9fe382..00000000 --- a/docs/_toc.yml +++ /dev/null @@ -1,7 +0,0 @@ -format: jb-book -root: index -parts: - - caption: Reference - chapters: - - file: reference/simulation - - file: reference/calculate/calculate_macro_scenario.md diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 080864a1..00000000 --- a/docs/index.md +++ /dev/null @@ -1,2 +0,0 @@ -# PolicyEngine Python interface - diff --git a/docs/logo.png b/docs/logo.png deleted file mode 100644 index 12736e4dce8158bb6ed2557a2bf9d0856811758e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10188 zcmd5?_divC{J+^Fgp@KXD=Sg4M+(7Dak3Ok3EL!r2nD3~2_tiu%TSLinlj4$ou(w#vd2fn8 zv={V2=i{s%T15&QsS|e;rdUcLdcSPf_49o@HO);#va{3}qa%=N+>UbYYlM3-!6fQ-CVxAd+QXv zdrLCQR{zB*F+$;Vb_(#ljwr;k7H?#jG7dwV5ULBD$ge1JRqGNgZ10Tfx~{ufiaeYJ z@r_XH6QMc!arP%te79p{QmUrwRW41yUktcap(fU_;QmF0+cnNbQj%GV`RU-A3|Zc* z;Tv%y@!hA-EUz~5Brv2aHxwn5CM&Fb>*ibN=j1_~_v%2yLOND9KQc``t+Nh?EZgw- zV5u=TL#W92TaLYLgxxt?n^kN~vBF!8UIn|ol3BjH8gMn%_H!VbIL%{kYtZLjzMAE# zV5Y?nBQS3}k1dHW(y3FRgV+)H1k6~RQgUnNXlX0xg&OFnmD+=N)jMc!`$dDY*)yNw z+IXl~Nhg|xy)vh7f!i*{!vevP#21M3~X z9yfdTv{K_WJG>s^<>S9Q;gI zYTmiHDSI@d{dVL}_nh>WJP7278l&Ev;y`+$zwXVC=+Z>j;}$~qMozwFt?-^u3t*cX zVV@2ISMxw(bGFX{K|ZE9OMA)<70Id2lN_eEMxo6w{VmD%M=)v!TTv#z_SP<0CaKoT zpFE%46gvk3l@5PZg|(OOOUmTl-YcpuL)XMC*P0~Tm;WgynsoIE5O|$ovhCb#L6EsU zS7Zq!g%MVFmz(a2R@vhXh`sE4A$ZyI1e*&W(64}>=jR$W()xF_P|Ee4d%R7iKSYcn z&bE9d;L~o8UF*ucE`y&)0@ePUu^TNKd=-=K ztL(Skw+P1wQ92WXWvFV-fr6{A^0e3GXc;D{@6Wtnh{&56`sg_-oW-eo2Q|0IKe+u> zl*65k%Qa1UI!4VM1ma~XrJ0+wv)mamb+hGB9-k^91Pvx$f1hLi&`#&ef|=wB{`&Yx z+MR#Ww@PW}BGApgyCRn_2F;h^n#c8e9@iMZ6DY7uJK)d}loZ;gy{LO-y_Hu61d97u zMY*|Qvfeu^%nD00^oJsw73P)BITv99^T*>Pl#RUe4OppaZ?`jmKy!tVkO`?It%*mj zV-BaLMV_auvNvtxxuRfVKaCyp4UVb*$>k@7SOp?;R}>;e(gql?E2ljL*JXCJbGfZ4 zI3vKu?{2pgM+N2^#LrYA$S2w70K(lI9#$34QHbP!>>i;{jQ+hs#4_$y9bUH`=$?4} zUoX$``YCk#@H$cBv_a8a+BVmPtZ}@>*%-!kcl7R1=}4(A%F%tVsQe+#x3VA}y7MRq z=U?*-UYUfNA4x0f=IPGqyGzN7&HhSldp?~bykB&&8@x?L-sNOmI3D?1rek!#^4K!E zZL&Ld%qybb%eL2wk&dy9)|H65*~3&p-|8Cdriv#WD3>c3BzPNhG;dnr`tbTDd7bF(0e= zP!KuXMYL&)S_;p)G^UbJe9FY%-4~47N=Qr&o8Xo@3sJ3_n8on1z%W?Lmtb?!i1O1C z6~JakQ0&K~w;=Y?CVkS5y%Jw-wl!^s~0^;H3UyE0Z0GQ9n6uowv;M(aXk`b_W<0RF{5TU=-q>!c?-L zN8u@D$!o4wHg5v??c^VG2*pvG`PZ=*lPS?X7hcSGD>7lY2ie~v%+ucI_e1Y=&VGJt}8isubbg1%+jSPb`~&1AJ(-Gy1{cE8oU`ppl-ubCT3 zul%wmP$8S_cTAG#{pndkm@xIJSf0AaKQ5Px$An~XPOIo#VNrx zKp@q)F+Fo0l=4HGD8Mab+2)>x+21&Bi-5r_3hzH2x64hNKIKkMQIP1y$m2$G$2Q86 z_TrYxj^4Ai*v?Vc?h`daf7DSmpCyh#rG?6FHyHP{QkijTbnQ_OqsT3#$fj){=H_i1 z@BW{sX-S8`c|%XF1;258Tac^OeX$pT@%E5>+@bF0`!tc}9}c$~b4+alO>Z9O8y6dqHSEV44<#&zdBfF$ zqt?m4KQ(DPJ`mdc+TB2vS7_t6)AWTWJ#P^^)42Z``tccKXmobKza)z?!>cN1KiYd} zyz{KX`U}oaV5GC?<%1IENG%UvVhGAZO}G=1AZd{l?Yhgki9C4htzymF;$4;-?mOzbPTina8{<%OHd{b_Ui%d}0=&e@E9 z9Jrr}NA%}C$w44{m;1cF97X;4R1JE*`^E0>eIW5g$a@b95-iPv%L`%GLnda7UXDZ3 z9$@HZ8O`+mk!_~c&w{w($GhU2Aq)X5j*2xk7DFiS^;#Y~_5trt%k7QN87)7BF};?j z&KH*XQR^PX{f}uVe^#p_Ix_fzBj+C5>EEG6)SKr`Y5r&lnEPbNuMzp0dS(iqgXgoH zR~g3;qBz$Vn4X%Hv(dJkf$2igHFa$HS6!r&dzw>)oj#d)|7e16)JD5pUpk2Y8_gCM z3tQ1_{KdP|KbbtesBboXHYM4Z1;pbxPo#SF*PKE}lbteswYQr3X{Z(qFvy+uAb;j(-q@|QdJcP7tqk|}RQW#f8}@t-L>A_b(CfX@Aq zgA!|6BwGs{dU$=GVd09;#DWL!wZZa?FH{qY8w&IVsx@UIu}bQzj?-!v-?j0i_K0IQ z$S1FNpHF#P_D-d~iv&R1m%OO^GW>!IXhFK0AFXOLNTq#4F>FF~lnqov6GV5<`n9-pB+vSS z@>V#6abL|nh;#-gQasMLMSRdcEI0KhP4FiQDuqN9dOFD7Sdb;%G!r<(Rf5!~6x)YP zxNoo7-27sSt-MP_@3`7rXD)E-TSF4+HjI9_2m?I_&}o^lY^b{7_&g^IWP%64_vHxM+|?oxO?|}QZ^d|q0Baj zoa)6gglEfIO0ViNT0x5M8_OHCGnpFx%V2&lu=}sW%)Toecc`ZL`HtM8<=`Rek~Wh+ zbDpf(iMtO#h3o3%iE9)>$&ssCnS~|N5e_jIz5Z!<1t64I;Xlix1MtZjsM9wi-_ry> zN3TW8rx^OQB*yt>SBV>0cXIB%`|fnf#{8$`*l^dSXaBA>H!94pA6E;)YgsY*NQ;BD zADBxYb*ydQJKw)pPlgg>n=g7>XDFr;ETCmd7moMNJ0R!Kyf73?nQL4zp4Xp9Yo9l@ zN($h6-g~^gi+xh=5y%(WP;uNbmVaEy_GhPje}??lq&wSKU#z78QS#~jpEI&H~ zogpl@gTlP@3b=4B?j@Mjew`Q#%)8aR`K-3|a_GnXQ$=mpt^s3kQSL_XwOdJLjg-ZN zUj=rH*mR1n!e%nr4}5zPj~9}U-4XKCA={IlC-rqayGMSq*| zRXB+@9bfMin=+@VfkMADzk<9kkUFxr{I1LM<&Yi#C+O3K5XBd|*!8q!)3X{l=r!9X ze_|17vA5OE6mjcJLJ)A|=pMJfUy`CBEmLDW=cE%8kMu_;KLwQw?Jf23Plk(EN~i%r zlS?7Bpxe?%CmUL`(i>XU;QugR0$~1twfuvn9ycxnMQkTa6|~ z@zO^Dbt{;;*`KhziZ)Yw;znz(+c~WdjOj!y(fifnn~!GvzNc9H$uB+8G?@Wio*rPr zl~J)cDJqZEr2x(esl6}@?VoYO!1vvUC%^YRQ)uVE@e6e8^bljnDNE{X4 z;Cwwk^tHQ`HJ7Pmy)v^?P}GFzpI_a+CFdh{*Y8I>udD=m3lqAKTHaYFyr<>$b&i(} z%(rmL`x+UitJ&l2Qwf?T&ydvQh7Zg$Y?vb)nqM5ICHj=q{_a=CRPJg5`Wn!Y`G@p3 zm7$)R&OFQtbUrnlOoQ>X-sNzA#0N_r@4;$Yl9}ji?<_O@^t8zE$|yaQP`<@n;B5Q9 z*FJsRQCBN-4D}zCVJ5134iPzjnI1 zc`6Y1vC(YiwegzG+Z~#3H)c^X0k!cNQ763Lnoz(>YI)T7_@wlQ3Pl?e_8}bCh|W9s zc9@|=qzVvV_C2~~FjU%V+BSrE=iqEMRW$v3(%+9&GMGeQtd`S~j9-y?iM|eN`Ss z?8njEyB~S%i71uFml>^Iq72i!1z+)8G5b@U9~ICJ4SE+=BUW9(sWLxN+S}w9bmAak z6Fa)}keT{95Hj6XuFZtE=}^~8Zoz{ddlz8a>U0nI8FwTtGK87Fgvjy&cq(8d^N;MG zDJzC~iRwB8q-k;Dgp~H|zs2K?6-NF_PyrHwF0R1T_Dm0gVBvA-hsz^{RT=hoQX;J# zhYu<_6l{-?@kwwXc=FfdK6aZG>EwE31x{QlUbMZd!&ne~Hc*)+y7YtGb(Np|Q3fax zd7)h-^HCaX4JDyxDSGuu;QV)7(4s}|l$=+9;ThU)Qfx-8r@`(P20=ybfb|4IbmY!^ zj6{06oGuDjoT^eXw~IVqoSdhw52{0ieW96kl;r8e(mT}2o72n!2P8e@En}amC#bt& z@6{9&rq({m1-+AaCvXS@mORD^W)VBfBYbw80940l=Gf-cS9`EsJcC&e9{4+ zyB7oBZ?Zxi^ZA{^s$)*8KX55q4W_%(#8lZp zrgk)wqB+bu6f0<+k)!_Y{=uK&FDmTXz3Diq5@77lyh1a_urqTRFSV@dFz7nwHkXfm z4O{r3qJN(#%7Geo;96!<=-{5=5Nho^*ltj^$Z0svLL--9=Z!{{Ah=^qQ)phtp#~iB;dladMd^T$HINwpDqv%)sbY-7wz>K3U>c{)$lz2Rk;uls87VtI~3#5g+>)ozYX zdxS1=fVv-~{MBARL+p9~{$NmPKteURR5a1R0mkJZB_O}1JR*sy95zFaLl_pD^AAx* z@zIi5GZh(^vHF%qU*nJpfmIFoVM2{SDYj`~ah#C9WfXd6`WSIV7hpAz>20OtgCEqP z^r4;WY7^m!#m)IDWz||$#hIydB`$es%~`8GVr5`odCwez=~muWgfOr=EW_B^uufC3 zoFNqQpR@{bbgVYhTlo#p+SvN4O_<_chfKc;x;Ll4V)A#WnhxDpKZVf<|CBWMu+2{g z399k}HKc&ucyvYF_0rXob*S=x3>m8`!Z+SDxK8xD7khQNsQ6fVqN)%kG014vYjI~a zwbu|YPq$F~2dH?M-Z~{t>KWYnT5JQW4zd<)<7iF&E?kunh~8brw$U18s7O6xV=9m&ZsMF#s(MjeIoT~41S*;dbbb#ZuUCq zZkJ2(lrc%7DIGG$^c2XZYy?7(Y)iNnnzSd0dFo5#x zVqVh4oTd2v0w_CN%{NZ@)WSfn5;5yWGY2?(NCO}6+$-Y{5%%!ahWfA<&w#F4?l1H^ z6v@QFbEWvcw*;#f!`0-BQ`e8r9*|@j0eYvA^mcwai0%QEJ%L@Yz*1FneTBnON-;YNmM>_PbA& zral~0ijAhWeGy?;4Uw|vabn7epy?7`{I`*s@|_+^SA55H9s zqmyxJMXcdiu^(>&9u;&bJi6R5*Ptb`ysw5U4i-v{vhvL$sGW9cV?v*8mEu@Fmj!mk z01Kz8*h4TU3|n;+Ybfg*K_Q_0N#p)r@t0;n0n#RQ?Y(1#S`m+??ic-G#1Rj0G;4}= z?TrtWQgMe8C*&btMKwzCig5 z|JqAG+c|z(Xv~Z9drD^W7pH~I!#h`+I2forZ(BgD&Z^&m754~b`b1s-n)h~~fsjlc zR_<_;I#vczQoqct&aHVrqNxX@*0pCF;$7V-Am-0{+k1o1aut4)OTGOrTTsh`i{s!>t_XpZcJ5UK`s=L>Ng74v2-8DYq8B z!w>hE!NmeC_Lt)A9Z;w1)Dx^=7K;(fcV}|HXetq>YS|fDnI6UHiMRyCdSCnbb@RpV zN*k}UA$3C}6f>yd4^;Mg!_4<2faMK=s13{WNbS5%Y)Ok5-r3bUgO{$yAbRp(QJ*Qo z9PE9c+2NLMqS(#RnUF?AX2&~=ky|tt;dEya$@zs=9*+ElKrnS8-sLqLZDjyu;pQC|i zLF#L+zi9o##5+L9{KZGOspW%*-*eR3tBj@9&!3#)x@TKJlywH|5JwqULr(d97`d#}E~v zc?g+{q#*tY#LFk9#dbOHy}G%Idy@yur{TzGnZJY%u%saKLA%sG1{D9*XG5Cgv#Xhq zI$q(^YpVB4tZQkFhXD$34h3>(K_ntf?e|*@#<|lZ zlu^*?>kOkD-OLDKrT;Sr0YgB)Dn1^Ic_bC>qkjs~Q&QoY=Y4;srhw$qZyA+|x^fXA zERo|Q_@{U&9A|09|GWBlClZ=wq+Zm4Fdt5$P3h3_wevzZAldCJ7-}OMe1K+RVHlxv zq;$x%V}rT9dNiISR!D1c7Ky98y5Yl+w(=Q$mZc}SCl7-|-4(|tt{;|yxvu{qsThu|K1+mF4W<%2a14_o+^Jeyc z?b}=}3ky;59N*0RSq(p*{I1AV7!q&3TM7k--E(!o@jPG?i_{EA4B`q?zEttt z%z(pi1TpNgTE#4e2Xda_V#V1=sx=n1bB z%Mx{-+lbLzA-+K9uWR;S7Uf0vOXgg2o&o2Y?QVU-wlVMOcqgs5HD+D($VcQ9{XOz5 zf5WPf2z>_FXo9R(&?Ts2(xeWYW$;od{-?%S&*pe;3XK>`$F$5=?Xau02JncLmTJ-- zz1mrCvmLF<9PV%0qOU~ATqebrGEfz{i$rKR5lzkbc_L_7KvXF=H(bCdE4<7yU#WFMF^rmxCH&`ph`WjtU+ewZ!z2O92@QqnD6x~M$o=I*qb zXTCSv!y;T1)8FqR81vVn6lo+PHUjggC3fiXR>}L=@70>`uX%nBGp5*l?KF-|lqR)w zl?G`RBhMapDB0f3u(Ub6y^tw$T4l9!Y*!+ID6%{*eIVc^V?bZ_`Oa06>EUC8Cs!M^ z2pMZ)Qeh#-OP0UYL;Zd2y~Y}1W_Y0&Pu^6(m%RVzBx~#dg+TQG6av$;C{Tx*0XVD3 zz}BpG7MkVG1SSQ_?ht;k`&PhvA4iaTv2E>86Wpd$2qs%h)^GHwJw1R=e3&thIBhYR zML##;I^FC?WPTf~^bwpnaX&D0Zah7{f94t1+c8|O22@igxKLdFMwl~luPD3tKBnmD z-uC9l8VMz_S&jE%-QxS|!dM^tGc&Qnj?)?k!bqg<3uQl-O<00?FO{^{-kO%HN!xgq zn2Rq9CJhW6>dNK)%a4SA%^G>OsjN=cD*bu^#Kx4`o zE8Xl-30WN`l_F5t(D1Gqk0Y>dzxAaMX5b)UHY9ecyjLVEhLfeW7{P~}IXhU!+3OJB z)l~bY2`qnLH6F9QvaGTOG&oCB)aL|L@c}!zz;G?FOE5WDYv4RD04KO;Fn&=Sxl`e! zX7brLVRfc#v?Z1s=UqhPwBw<{XyY%xHkZC3m^=1H;w5|3<)g9}ABUmhcYC8d+Qe73 z`N-~$BJVeNfVV;vK)*j+#lLZ{Sxa(DiL+HVA{!=Xn`l{L2y1!6iuI)Vw6P^n)vUtF z7@sPzhIy$p8+uTAxX(mwv!MR2xIAsirfmhIQ<;&jG?dT9<(Pj;G27Or_=b?%27mzc N=z-pS#Jwk>{{sb>U7r8| diff --git a/docs/reference/simulation.md b/docs/reference/simulation.md deleted file mode 100644 index 03c8890a..00000000 --- a/docs/reference/simulation.md +++ /dev/null @@ -1,6 +0,0 @@ -# Simulation - -```{eval-rst} -.. autoclass:: policyengine.Simulation - :members: -``` \ No newline at end of file diff --git a/policyengine/__init__.py b/policyengine/__init__.py index 120af898..7311e3e3 100644 --- a/policyengine/__init__.py +++ b/policyengine/__init__.py @@ -1 +1 @@ -from .simulation import Simulation +from .simulation import Simulation \ No newline at end of file diff --git a/policyengine/constants.py b/policyengine/constants.py index e8c2b4a5..651de219 100644 --- a/policyengine/constants.py +++ b/policyengine/constants.py @@ -4,17 +4,11 @@ ENHANCED_FRS = "hf://policyengine/policyengine-uk-data/enhanced_frs_2022_23.h5" FRS = "hf://policyengine/policyengine-uk-data/frs_2022_23.h5" - ENHANCED_CPS = "hf://policyengine/policyengine-us-data/enhanced_cps_2024.h5" CPS = "hf://policyengine/policyengine-us-data/cps_2023.h5" POOLED_CPS = "hf://policyengine/policyengine-us-data/pooled_3_year_cps_2023.h5" -DATASETS = { - "uk": {"frs": FRS, "enhanced_frs": ENHANCED_FRS}, - "us": {"cps": CPS, "enhanced_cps": ENHANCED_CPS, "pooled_cps": POOLED_CPS}, -} - -DEFAULT_DATASETS = { +DEFAULT_DATASETS_BY_COUNTRY = { "uk": ENHANCED_FRS, "us": CPS, } diff --git a/policyengine/outputs/calculate_economy_comparison.py b/policyengine/outputs/calculate_economy_comparison.py new file mode 100644 index 00000000..9de41801 --- /dev/null +++ b/policyengine/outputs/calculate_economy_comparison.py @@ -0,0 +1,8 @@ +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation + +from pydantic import BaseModel + +def calculate_economy_comparison(simulation: "Simulation"): + \ No newline at end of file diff --git a/policyengine/outputs/calculate_full_single_economy.py b/policyengine/outputs/calculate_full_single_economy.py new file mode 100644 index 00000000..1ef4e7a9 --- /dev/null +++ b/policyengine/outputs/calculate_full_single_economy.py @@ -0,0 +1,365 @@ +from policyengine_core.simulations import Microsimulation +from typing import Dict + +from policyengine_us import Microsimulation +from policyengine_uk import Microsimulation +from dataclasses import dataclass + + +@dataclass +class UKProgram: + name: str + is_positive: bool + + +class UKPrograms: + PROGRAMS = [ + UKProgram("income_tax", True), + UKProgram("national_insurance", True), + UKProgram("vat", True), + UKProgram("council_tax", True), + UKProgram("fuel_duty", True), + UKProgram("tax_credits", False), + UKProgram("universal_credit", False), + UKProgram("child_benefit", False), + UKProgram("state_pension", False), + UKProgram("pension_credit", False), + UKProgram("ni_employer", True), + ] + + +class GeneralEconomyTask: + def __init__(self, simulation: Microsimulation, country_id: str): + self.simulation = simulation + self.country_id = country_id + self.household_count_people = self.simulation.calculate( + "household_count_people" + ) + + def calculate_tax_and_spending(self): + if self.country_id == "uk": + total_tax = self.simulation.calculate("gov_tax").sum() + total_spending = self.simulation.calculate("gov_spending").sum() + else: + total_tax = self.simulation.calculate("household_tax").sum() + total_spending = self.simulation.calculate( + "household_benefits" + ).sum() + return total_tax, total_spending + + def calculate_inequality_metrics(self): + personal_hh_equiv_income = self._get_weighted_household_income() + + try: + gini = personal_hh_equiv_income.gini() + except Exception as e: + print( + "WARNING: Gini index calculations resulted in an error: returning no change, but this is inaccurate." + ) + print("Error: ", e) + gini = 0.4 + + in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 + in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 + + personal_hh_equiv_income.weights /= self.household_count_people + + top_10_share = ( + personal_hh_equiv_income[in_top_10_pct].sum() + / personal_hh_equiv_income.sum() + ) + top_1_share = ( + personal_hh_equiv_income[in_top_1_pct].sum() + / personal_hh_equiv_income.sum() + ) + + return gini, top_10_share, top_1_share + + def _get_weighted_household_income(self): + income = self.simulation.calculate("equiv_household_net_income") + income[income < 0] = 0 + income.weights *= self.household_count_people + return income + + def calculate_income_breakdown_metrics(self): + total_net_income = self.simulation.calculate( + "household_net_income" + ).sum() + employment_income_hh = ( + self.simulation.calculate("employment_income", map_to="household") + .astype(float) + .tolist() + ) + self_employment_income_hh = ( + self.simulation.calculate( + "self_employment_income", map_to="household" + ) + .astype(float) + .tolist() + ) + + return ( + total_net_income, + employment_income_hh, + self_employment_income_hh, + ) + + def calculate_household_income_metrics(self): + household_net_income = ( + self.simulation.calculate("household_net_income") + .astype(float) + .tolist() + ) + equiv_household_net_income = ( + self.simulation.calculate("equiv_household_net_income") + .astype(float) + .tolist() + ) + household_income_decile = ( + self.simulation.calculate("household_income_decile") + .astype(int) + .tolist() + ) + household_market_income = ( + self.simulation.calculate("household_market_income") + .astype(float) + .tolist() + ) + + return ( + household_net_income, + equiv_household_net_income, + household_income_decile, + household_market_income, + ) + + def calculate_wealth_metrics(self): + try: + wealth = self.simulation.calculate("total_wealth") + wealth.weights *= self.household_count_people + wealth_decile = ( + wealth.decile_rank().clip(1, 10).astype(int).tolist() + ) + wealth = wealth.astype(float).tolist() + except Exception as e: + wealth = None + wealth_decile = None + return wealth, wealth_decile + + def calculate_demographic_metrics(self): + try: + is_male = ( + self.simulation.calculate("is_male").astype(bool).tolist() + ) + except Exception: + is_male = None + + try: + race = self.simulation.calculate("race").astype(str).tolist() + except Exception: + race = None + + age = self.simulation.calculate("age").astype(int).tolist() + + return is_male, race, age + + def calculate_poverty_metrics(self): + in_poverty = ( + self.simulation.calculate("in_poverty").astype(bool).tolist() + ) + person_in_poverty = ( + self.simulation.calculate("in_poverty", map_to="person") + .astype(bool) + .tolist() + ) + person_in_deep_poverty = ( + self.simulation.calculate("in_deep_poverty", map_to="person") + .astype(bool) + .tolist() + ) + poverty_gap = self.simulation.calculate("poverty_gap").sum() + deep_poverty_gap = self.simulation.calculate("deep_poverty_gap").sum() + return ( + in_poverty, + person_in_poverty, + person_in_deep_poverty, + poverty_gap, + deep_poverty_gap, + ) + + def calculate_weights(self): + person_weight = ( + self.simulation.calculate("person_weight").astype(float).tolist() + ) + household_weight = ( + self.simulation.calculate("household_weight") + .astype(float) + .tolist() + ) + + return person_weight, household_weight + + def calculate_labor_supply_responses(self): + result = { + "substitution_lsr": 0, + "income_lsr": 0, + "budgetary_impact_lsr": 0, + "income_lsr_hh": (self.household_count_people * 0) + .astype(float) + .tolist(), + "substitution_lsr_hh": (self.household_count_people * 0) + .astype(float) + .tolist(), + } + + if not self._has_behavioral_response(): + return result + + result.update( + { + "substitution_lsr": self.simulation.calculate( + "substitution_elasticity_lsr" + ).sum(), + "income_lsr": self.simulation.calculate( + "income_elasticity_lsr" + ).sum(), + "income_lsr_hh": self.simulation.calculate( + "income_elasticity_lsr", map_to="household" + ) + .astype(float) + .tolist(), + "substitution_lsr_hh": self.simulation.calculate( + "substitution_elasticity_lsr", map_to="household" + ) + .astype(float) + .tolist(), + } + ) + + return result + + def _has_behavioral_response(self) -> bool: + return ( + "employment_income_behavioral_response" + in self.simulation.tax_benefit_system.variables + and any( + self.simulation.calculate( + "employment_income_behavioral_response" + ) + != 0 + ) + ) + + def calculate_lsr_working_hours(self): + if self.country_id != "us": + return { + "weekly_hours": 0, + "weekly_hours_income_effect": 0, + "weekly_hours_substitution_effect": 0, + } + + return { + "weekly_hours": self.simulation.calculate( + "weekly_hours_worked" + ).sum(), + "weekly_hours_income_effect": self.simulation.calculate( + "weekly_hours_worked_behavioural_response_income_elasticity" + ).sum(), + "weekly_hours_substitution_effect": self.simulation.calculate( + "weekly_hours_worked_behavioural_response_substitution_elasticity" + ).sum(), + } + + def calculate_uk_programs(self) -> Dict[str, float]: + if self.country_id != "uk": + return {} + + return { + program.name: self.simulation.calculate( + program.name, map_to="household" + ).sum() + * (1 if program.is_positive else -1) + for program in UKPrograms.PROGRAMS + } + + +def compute_general_economy(simulation, country_id: str) -> Dict: + task_manager = GeneralEconomyTask(simulation, country_id) + + total_tax, total_spending = task_manager.calculate_tax_and_spending() + gini, top_10_share, top_1_share = ( + task_manager.calculate_inequality_metrics() + ) + wealth, wealth_decile = task_manager.calculate_wealth_metrics() + is_male, race, age = task_manager.calculate_demographic_metrics() + labor_supply_responses = task_manager.calculate_labor_supply_responses() + lsr_working_hours = task_manager.calculate_lsr_working_hours() + ( + in_poverty, + person_in_poverty, + person_in_deep_poverty, + poverty_gap, + deep_poverty_gap, + ) = task_manager.calculate_poverty_metrics() + total_net_income, employment_income_hh, self_employment_income_hh = ( + task_manager.calculate_income_breakdown_metrics() + ) + ( + household_net_income, + equiv_household_net_income, + household_income_decile, + household_market_income, + ) = task_manager.calculate_household_income_metrics() + person_weight, household_weight = task_manager.calculate_weights() + + if country_id == "uk": + uk_programs = task_manager.calculate_uk_programs() + else: + uk_programs = {} + + total_state_tax = 0 + + if country_id == "us": + try: + total_state_tax = simulation.calculate( + "household_state_income_tax" + ).sum() + except: + total_state_tax = 0 + + result = { + "total_net_income": total_net_income, + "employment_income_hh": employment_income_hh, + "self_employment_income_hh": self_employment_income_hh, + "total_tax": total_tax, + "total_state_tax": total_state_tax, + "total_benefits": total_spending, + "household_net_income": household_net_income, + "equiv_household_net_income": equiv_household_net_income, + "household_income_decile": household_income_decile, + "household_market_income": household_market_income, + "household_wealth_decile": wealth_decile, + "household_wealth": wealth, + "in_poverty": in_poverty, + "person_in_poverty": person_in_poverty, + "person_in_deep_poverty": person_in_deep_poverty, + "poverty_gap": poverty_gap, + "deep_poverty_gap": deep_poverty_gap, + "person_weight": person_weight, + "household_weight": household_weight, + "household_count_people": task_manager.household_count_people.astype( + int + ).tolist(), + "gini": float(gini), + "top_10_percent_share": float(top_10_share), + "top_1_percent_share": float(top_1_share), + "is_male": is_male, + "race": race, + "age": age, + **labor_supply_responses, + **lsr_working_hours, + "type": "general", + "programs": uk_programs, + } + + return result diff --git a/policyengine/outputs/compare.py b/policyengine/outputs/compare.py new file mode 100644 index 00000000..0317e0e0 --- /dev/null +++ b/policyengine/outputs/compare.py @@ -0,0 +1,567 @@ +from microdf import MicroDataFrame, MicroSeries +import numpy as np +import sys + + +def budgetary_impact(baseline: dict, reform: dict) -> dict: + tax_revenue_impact = reform["total_tax"] - baseline["total_tax"] + state_tax_revenue_impact = ( + reform["total_state_tax"] - baseline["total_state_tax"] + ) + benefit_spending_impact = ( + reform["total_benefits"] - baseline["total_benefits"] + ) + budgetary_impact = tax_revenue_impact - benefit_spending_impact + return dict( + budgetary_impact=budgetary_impact, + tax_revenue_impact=tax_revenue_impact, + state_tax_revenue_impact=state_tax_revenue_impact, + benefit_spending_impact=benefit_spending_impact, + households=sum(baseline["household_weight"]), + baseline_net_income=baseline["total_net_income"], + ) + + +def labor_supply_response(baseline: dict, reform: dict) -> dict: + substitution_lsr = ( + reform["substitution_lsr"] - baseline["substitution_lsr"] + ) + income_lsr = reform["income_lsr"] - baseline["income_lsr"] + total_change = substitution_lsr + income_lsr + revenue_change = ( + reform["budgetary_impact_lsr"] - baseline["budgetary_impact_lsr"] + ) + + substitution_lsr_hh = np.array(reform["substitution_lsr_hh"]) - np.array( + baseline["substitution_lsr_hh"] + ) + income_lsr_hh = np.array(reform["income_lsr_hh"]) - np.array( + baseline["income_lsr_hh"] + ) + decile = np.array(baseline["household_income_decile"]) + household_weight = baseline["household_weight"] + + total_lsr_hh = substitution_lsr_hh + income_lsr_hh + + emp_income = MicroSeries( + baseline["employment_income_hh"], weights=household_weight + ) + self_emp_income = MicroSeries( + baseline["self_employment_income_hh"], weights=household_weight + ) + earnings = emp_income + self_emp_income + original_earnings = earnings - total_lsr_hh + substitution_lsr_hh = MicroSeries( + substitution_lsr_hh, weights=household_weight + ) + income_lsr_hh = MicroSeries(income_lsr_hh, weights=household_weight) + + decile_avg = dict( + income=income_lsr_hh.groupby(decile).mean().to_dict(), + substitution=substitution_lsr_hh.groupby(decile).mean().to_dict(), + ) + decile_rel = dict( + income=( + income_lsr_hh.groupby(decile).sum() + / original_earnings.groupby(decile).sum() + ).to_dict(), + substitution=( + substitution_lsr_hh.groupby(decile).sum() + / original_earnings.groupby(decile).sum() + ).to_dict(), + ) + + relative_lsr = dict( + income=(income_lsr_hh.sum() / original_earnings.sum()), + substitution=(substitution_lsr_hh.sum() / original_earnings.sum()), + ) + + decile_rel["income"] = { + int(k): v for k, v in decile_rel["income"].items() if k > 0 + } + decile_rel["substitution"] = { + int(k): v for k, v in decile_rel["substitution"].items() if k > 0 + } + + hours = dict( + baseline=baseline["weekly_hours"], + reform=reform["weekly_hours"], + change=reform["weekly_hours"] - baseline["weekly_hours"], + income_effect=reform["weekly_hours_income_effect"] + - baseline["weekly_hours_income_effect"], + substitution_effect=reform["weekly_hours_substitution_effect"] + - baseline["weekly_hours_substitution_effect"], + ) + + return dict( + substitution_lsr=substitution_lsr, + income_lsr=income_lsr, + relative_lsr=relative_lsr, + total_change=total_change, + revenue_change=revenue_change, + decile=dict( + average=decile_avg, + relative=decile_rel, + ), + hours=hours, + ) + + +def detailed_budgetary_impact( + baseline: dict, reform: dict, country_id: str +) -> dict: + result = {} + if country_id == "uk": + for program in baseline["programs"]: + # baseline[programs][program] = total budgetary impact of program + result[program] = dict( + baseline=baseline["programs"][program], + reform=reform["programs"][program], + difference=reform["programs"][program] + - baseline["programs"][program], + ) + return result + + +def decile_impact(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on the deciles of the population. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on the deciles of the population. + """ + baseline_income = MicroSeries( + baseline["household_net_income"], weights=baseline["household_weight"] + ) + reform_income = MicroSeries( + reform["household_net_income"], weights=baseline_income.weights + ) + + # Filter out negative decile values + decile = MicroSeries(baseline["household_income_decile"]) + baseline_income_filtered = baseline_income[decile >= 0] + reform_income_filtered = reform_income[decile >= 0] + + income_change = reform_income_filtered - baseline_income_filtered + rel_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).sum() + ) + + avg_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).count() + ) + rel_decile_dict = rel_income_change_by_decile.to_dict() + avg_decile_dict = avg_income_change_by_decile.to_dict() + result = dict( + relative={int(k): v for k, v in rel_decile_dict.items()}, + average={int(k): v for k, v in avg_decile_dict.items()}, + ) + return result + + +def wealth_decile_impact(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on the deciles of the population. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on the deciles of the population. + """ + baseline_income = MicroSeries( + baseline["household_net_income"], weights=baseline["household_weight"] + ) + reform_income = MicroSeries( + reform["household_net_income"], weights=baseline_income.weights + ) + + # Filter out negative decile values + decile = MicroSeries(baseline["household_wealth_decile"]) + baseline_income_filtered = baseline_income[decile >= 0] + reform_income_filtered = reform_income[decile >= 0] + + income_change = reform_income_filtered - baseline_income_filtered + rel_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).sum() + ) + avg_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).count() + ) + rel_decile_dict = rel_income_change_by_decile.to_dict() + avg_decile_dict = avg_income_change_by_decile.to_dict() + result = dict( + relative={int(k): v for k, v in rel_decile_dict.items()}, + average={int(k): v for k, v in avg_decile_dict.items()}, + ) + return result + + +def inequality_impact(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on inequality. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on inequality. + """ + + return dict( + gini=dict( + baseline=baseline["gini"], + reform=reform["gini"], + ), + top_10_pct_share=dict( + baseline=baseline["top_10_percent_share"], + reform=reform["top_10_percent_share"], + ), + top_1_pct_share=dict( + baseline=baseline["top_1_percent_share"], + reform=reform["top_1_percent_share"], + ), + ) + + +def poverty_impact(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on poverty. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on poverty. + """ + baseline_poverty = MicroSeries( + baseline["person_in_poverty"], weights=baseline["person_weight"] + ) + baseline_deep_poverty = MicroSeries( + baseline["person_in_deep_poverty"], weights=baseline["person_weight"] + ) + reform_poverty = MicroSeries( + reform["person_in_poverty"], weights=baseline_poverty.weights + ) + reform_deep_poverty = MicroSeries( + reform["person_in_deep_poverty"], weights=baseline_poverty.weights + ) + age = MicroSeries(baseline["age"]) + + poverty = dict( + child=dict( + baseline=float(baseline_poverty[age < 18].mean()), + reform=float(reform_poverty[age < 18].mean()), + ), + adult=dict( + baseline=float(baseline_poverty[(age >= 18) & (age < 65)].mean()), + reform=float(reform_poverty[(age >= 18) & (age < 65)].mean()), + ), + senior=dict( + baseline=float(baseline_poverty[age >= 65].mean()), + reform=float(reform_poverty[age >= 65].mean()), + ), + all=dict( + baseline=float(baseline_poverty.mean()), + reform=float(reform_poverty.mean()), + ), + ) + + deep_poverty = dict( + child=dict( + baseline=float(baseline_deep_poverty[age < 18].mean()), + reform=float(reform_deep_poverty[age < 18].mean()), + ), + adult=dict( + baseline=float( + baseline_deep_poverty[(age >= 18) & (age < 65)].mean() + ), + reform=float(reform_deep_poverty[(age >= 18) & (age < 65)].mean()), + ), + senior=dict( + baseline=float(baseline_deep_poverty[age >= 65].mean()), + reform=float(reform_deep_poverty[age >= 65].mean()), + ), + all=dict( + baseline=float(baseline_deep_poverty.mean()), + reform=float(reform_deep_poverty.mean()), + ), + ) + + return dict( + poverty=poverty, + deep_poverty=deep_poverty, + ) + + +def intra_decile_impact(baseline: dict, reform: dict) -> dict: + baseline_income = MicroSeries( + baseline["household_net_income"], weights=baseline["household_weight"] + ) + reform_income = MicroSeries( + reform["household_net_income"], weights=baseline_income.weights + ) + people = MicroSeries( + baseline["household_count_people"], weights=baseline_income.weights + ) + decile = MicroSeries(baseline["household_income_decile"]).values + absolute_change = (reform_income - baseline_income).values + capped_baseline_income = np.maximum(baseline_income.values, 1) + capped_reform_income = ( + np.maximum(reform_income.values, 1) + absolute_change + ) + income_change = ( + capped_reform_income - capped_baseline_income + ) / capped_baseline_income + + # Within each decile, calculate the percentage of people who: + # 1. Gained more than 5% of their income + # 2. Gained between 0% and 5% of their income + # 3. Had no change in income + # 3. Lost between 0% and 5% of their income + # 4. Lost more than 5% of their income + + outcome_groups = {} + all_outcomes = {} + BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] + LABELS = [ + "Lose more than 5%", + "Lose less than 5%", + "No change", + "Gain less than 5%", + "Gain more than 5%", + ] + for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): + outcome_groups[label] = [] + for i in range(1, 11): + in_decile = decile == i + in_group = (income_change > lower) & (income_change <= upper) + in_both = in_decile & in_group + outcome_groups[label].append( + float(people[in_both].sum() / people[in_decile].sum()) + ) + all_outcomes[label] = sum(outcome_groups[label]) / 10 + return dict(deciles=outcome_groups, all=all_outcomes) + + +def intra_wealth_decile_impact(baseline: dict, reform: dict) -> dict: + baseline_income = MicroSeries( + baseline["household_net_income"], weights=baseline["household_weight"] + ) + reform_income = MicroSeries( + reform["household_net_income"], weights=baseline_income.weights + ) + people = MicroSeries( + baseline["household_count_people"], weights=baseline_income.weights + ) + decile = MicroSeries(baseline["household_wealth_decile"]).values + absolute_change = (reform_income - baseline_income).values + capped_baseline_income = np.maximum(baseline_income.values, 1) + capped_reform_income = ( + np.maximum(reform_income.values, 1) + absolute_change + ) + income_change = ( + capped_reform_income - capped_baseline_income + ) / capped_baseline_income + + # Within each decile, calculate the percentage of people who: + # 1. Gained more than 5% of their income + # 2. Gained between 0% and 5% of their income + # 3. Had no change in income + # 3. Lost between 0% and 5% of their income + # 4. Lost more than 5% of their income + + outcome_groups = {} + all_outcomes = {} + BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] + LABELS = [ + "Lose more than 5%", + "Lose less than 5%", + "No change", + "Gain less than 5%", + "Gain more than 5%", + ] + for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): + outcome_groups[label] = [] + for i in range(1, 11): + in_decile = decile == i + in_group = (income_change > lower) & (income_change <= upper) + in_both = in_decile & in_group + outcome_groups[label].append( + float(people[in_both].sum() / people[in_decile].sum()) + ) + all_outcomes[label] = sum(outcome_groups[label]) / 10 + return dict(deciles=outcome_groups, all=all_outcomes) + + +def poverty_gender_breakdown(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on poverty. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on poverty. + """ + if baseline["is_male"] is None: + return {} + baseline_poverty = MicroSeries( + baseline["person_in_poverty"], weights=baseline["person_weight"] + ) + baseline_deep_poverty = MicroSeries( + baseline["person_in_deep_poverty"], weights=baseline["person_weight"] + ) + reform_poverty = MicroSeries( + reform["person_in_poverty"], weights=baseline_poverty.weights + ) + reform_deep_poverty = MicroSeries( + reform["person_in_deep_poverty"], weights=baseline_poverty.weights + ) + is_male = MicroSeries(baseline["is_male"]) + + poverty = dict( + male=dict( + baseline=float(baseline_poverty[is_male].mean()), + reform=float(reform_poverty[is_male].mean()), + ), + female=dict( + baseline=float(baseline_poverty[~is_male].mean()), + reform=float(reform_poverty[~is_male].mean()), + ), + ) + + deep_poverty = dict( + male=dict( + baseline=float(baseline_deep_poverty[is_male].mean()), + reform=float(reform_deep_poverty[is_male].mean()), + ), + female=dict( + baseline=float(baseline_deep_poverty[~is_male].mean()), + reform=float(reform_deep_poverty[~is_male].mean()), + ), + ) + + return dict( + poverty=poverty, + deep_poverty=deep_poverty, + ) + + +def poverty_racial_breakdown(baseline: dict, reform: dict) -> dict: + """ + Compare the impact of a reform on poverty. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The impact of the reform on poverty. + """ + if baseline["race"] is None: + return {} + baseline_poverty = MicroSeries( + baseline["person_in_poverty"], weights=baseline["person_weight"] + ) + reform_poverty = MicroSeries( + reform["person_in_poverty"], weights=baseline_poverty.weights + ) + race = MicroSeries( + baseline["race"] + ) # Can be WHITE, BLACK, HISPANIC, or OTHER. + + poverty = dict( + white=dict( + baseline=float(baseline_poverty[race == "WHITE"].mean()), + reform=float(reform_poverty[race == "WHITE"].mean()), + ), + black=dict( + baseline=float(baseline_poverty[race == "BLACK"].mean()), + reform=float(reform_poverty[race == "BLACK"].mean()), + ), + hispanic=dict( + baseline=float(baseline_poverty[race == "HISPANIC"].mean()), + reform=float(reform_poverty[race == "HISPANIC"].mean()), + ), + other=dict( + baseline=float(baseline_poverty[race == "OTHER"].mean()), + reform=float(reform_poverty[race == "OTHER"].mean()), + ), + ) + + return dict( + poverty=poverty, + ) + + +def compare_economic_outputs( + baseline: dict, reform: dict, country_id: str = None +) -> dict: + """ + Compare the economic outputs of two economies. + + Args: + baseline (dict): The baseline economy. + reform (dict): The reform economy. + + Returns: + dict: The comparison of the two economies. + """ + if baseline.get("type") == "general": + budgetary_impact_data = budgetary_impact(baseline, reform) + detailed_budgetary_impact_data = detailed_budgetary_impact( + baseline, reform, country_id + ) + decile_impact_data = decile_impact(baseline, reform) + inequality_impact_data = inequality_impact(baseline, reform) + poverty_impact_data = poverty_impact(baseline, reform) + poverty_by_gender_data = poverty_gender_breakdown(baseline, reform) + poverty_by_race_data = poverty_racial_breakdown(baseline, reform) + intra_decile_impact_data = intra_decile_impact(baseline, reform) + labor_supply_response_data = labor_supply_response(baseline, reform) + try: + wealth_decile_impact_data = wealth_decile_impact(baseline, reform) + intra_wealth_decile_impact_data = intra_wealth_decile_impact( + baseline, reform + ) + except: + wealth_decile_impact_data = {} + intra_wealth_decile_impact_data = {} + + return dict( + budget=budgetary_impact_data, + detailed_budget=detailed_budgetary_impact_data, + decile=decile_impact_data, + inequality=inequality_impact_data, + poverty=poverty_impact_data, + poverty_by_gender=poverty_by_gender_data, + poverty_by_race=poverty_by_race_data, + intra_decile=intra_decile_impact_data, + wealth_decile=wealth_decile_impact_data, + intra_wealth_decile=intra_wealth_decile_impact_data, + labor_supply_response=labor_supply_response_data, + ) + elif baseline.get("type") == "cliff": + return dict( + baseline=dict( + cliff_gap=baseline["cliff_gap"], + cliff_share=baseline["cliff_share"], + ), + reform=dict( + cliff_gap=reform["cliff_gap"], + cliff_share=reform["cliff_share"], + ), + ) diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py deleted file mode 100644 index 6b7c1a34..00000000 --- a/policyengine/outputs/macro/single/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .single import calculate_single_economy diff --git a/policyengine/outputs/macro/single/household/__init__.py b/policyengine/outputs/macro/single/household/__init__.py deleted file mode 100644 index a38080a1..00000000 --- a/policyengine/outputs/macro/single/household/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .household import ( - calculate_single_economy_household_sector, - SingleEconomyHouseholdSector, -) diff --git a/policyengine/outputs/macro/single/household/demographics.py b/policyengine/outputs/macro/single/household/demographics.py deleted file mode 100644 index 101086a2..00000000 --- a/policyengine/outputs/macro/single/household/demographics.py +++ /dev/null @@ -1,65 +0,0 @@ -import typing -from typing import List -from pydantic import BaseModel, Field - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from microdf import MicroSeries - - -class SingleEconomyDemographics(BaseModel): - household_count_people: List[int] = Field( - ..., description="Number of people in each household" - ) - person_weight: List[float] = Field( - ..., description="Weight of each person" - ) - household_weight: List[float] = Field( - ..., description="Weight of each household" - ) - total_households: int = Field( - ..., description="Total number of households" - ) - is_male: List[bool] = Field( - ..., description="Gender indicator for each person" - ) - age: List[int] = Field(..., description="Age of each person") - race: typing.Optional[List[str]] = Field( - None, description="Race of each person, if available" - ) - - -def calculate_demographics( - simulation: "Simulation", -) -> SingleEconomyDemographics: - """ - Calculate and return demographic information for a given simulation. - - Args: - simulation (Simulation): The simulation object containing the selected simulation data. - - Returns: - SingleEconomyDemographics: An object containing demographic information. - """ - sim = simulation.selected_sim - household_count_people = ( - sim.calculate("household_count_people").astype(int).tolist() - ) - person_weight = sim.calculate("person_weight").astype(float).tolist() - household_weight = sim.calculate("household_weight").astype(float).tolist() - is_male = sim.calculate("is_male").astype(bool).tolist() - if "race" in sim.tax_benefit_system.variables: - race = sim.calculate("race").astype(str).tolist() - else: - race = None - age = sim.calculate("age").astype(int).tolist() - total_households = int(sum(household_weight)) - return SingleEconomyDemographics( - household_count_people=household_count_people, - person_weight=person_weight, - household_weight=household_weight, - total_households=total_households, - is_male=is_male, - age=age, - race=race, - ) diff --git a/policyengine/outputs/macro/single/household/finance.py b/policyengine/outputs/macro/single/household/finance.py deleted file mode 100644 index c3d519a5..00000000 --- a/policyengine/outputs/macro/single/household/finance.py +++ /dev/null @@ -1,153 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation - -from pydantic import BaseModel, Field - - -class SingleEconomyFinanceOutput(BaseModel): - total_net_income: float = Field( - ..., description="Total net income of the household" - ) - total_market_income: float = Field( - ..., description="Total market income of the household" - ) - total_tax: float = Field( - ..., description="Total tax paid by the household" - ) - total_benefits: float = Field( - ..., description="Total benefits received by the household" - ) - employment_income_hh: typing.List[float] = Field( - ..., description="Employment income of the household" - ) - self_employment_income_hh: typing.List[float] = Field( - ..., description="Self-employment income of the household" - ) - household_net_income: typing.List[float] = Field( - ..., description="Net income of the household" - ) - equiv_household_net_income: typing.List[float] = Field( - ..., description="Equivalized net income of the household" - ) - household_income_decile: typing.List[int] = Field( - ..., description="Income decile of the household" - ) - household_market_income: typing.List[float] = Field( - ..., description="Market income of the household" - ) - wealth: typing.Optional[typing.List[float]] = Field( - None, description="Wealth of the household" - ) - wealth_decile: typing.Optional[typing.List[int]] = Field( - None, description="Wealth decile of the household" - ) - in_poverty: typing.List[bool] = Field( - ..., description="Poverty status of the household" - ) - person_in_poverty: typing.List[bool] = Field( - ..., description="Poverty status of individuals in the household" - ) - person_in_deep_poverty: typing.List[bool] = Field( - ..., description="Deep poverty status of individuals in the household" - ) - poverty_gap: float = Field(..., description="Poverty gap of the household") - deep_poverty_gap: float = Field( - ..., description="Deep poverty gap of the household" - ) - poverty_rate: float = Field( - ..., description="Poverty rate of the household" - ) - deep_poverty_rate: float = Field( - ..., description="Deep poverty rate of the household" - ) - - -def calculate_finance( - simulation: "Simulation", -) -> SingleEconomyFinanceOutput: - """ - Calculate various financial metrics for a given simulation. - - Args: - simulation (Simulation): The simulation object containing the data. - - Returns: - FinanceOutput: An object containing various financial metrics. - - """ - sim = simulation.selected_sim - - total_net_income = sim.calculate("household_net_income").sum() - total_market_income = sim.calculate("household_market_income").sum() - total_tax = sim.calculate("household_tax").sum() - total_benefits = sim.calculate("household_benefits").sum() - employment_income_hh = ( - sim.calculate("employment_income", map_to="household") - .astype(float) - .tolist() - ) - self_employment_income_hh = ( - sim.calculate("self_employment_income", map_to="household") - .astype(float) - .tolist() - ) - household_net_income = ( - sim.calculate("household_net_income").astype(float).tolist() - ) - equiv_household_net_income = ( - sim.calculate("equiv_household_net_income").astype(float).tolist() - ) - household_income_decile = ( - sim.calculate("household_income_decile").astype(int).tolist() - ) - household_market_income = ( - sim.calculate("household_market_income").astype(float).tolist() - ) - if "total_wealth" in sim.tax_benefit_system.variables: - wealth = sim.calculate("total_wealth") - household_count_people = sim.calculate("household_count_people").values - wealth.weights *= household_count_people - wealth_decile = wealth.decile_rank().clip(1, 10).astype(int) - wealth = wealth.astype(float).tolist() - else: - wealth = None - wealth_decile = None - - in_poverty = sim.calculate("in_poverty").astype(bool).tolist() - person_in_poverty = ( - sim.calculate("in_poverty", map_to="person").astype(bool).tolist() - ) - person_in_deep_poverty = ( - sim.calculate("in_deep_poverty", map_to="person").astype(bool).tolist() - ) - poverty_gap = sim.calculate("poverty_gap").sum() - deep_poverty_gap = sim.calculate("deep_poverty_gap").sum() - - poverty_rate = sim.calculate("in_poverty", map_to="person").mean() - deep_poverty_rate = sim.calculate( - "in_deep_poverty", map_to="person" - ).mean() - - return SingleEconomyFinanceOutput( - total_net_income=total_net_income, - total_market_income=total_market_income, - total_tax=total_tax, - total_benefits=total_benefits, - employment_income_hh=employment_income_hh, - self_employment_income_hh=self_employment_income_hh, - household_net_income=household_net_income, - equiv_household_net_income=equiv_household_net_income, - household_income_decile=household_income_decile, - household_market_income=household_market_income, - wealth=wealth, - wealth_decile=wealth_decile, - in_poverty=in_poverty, - person_in_poverty=person_in_poverty, - person_in_deep_poverty=person_in_deep_poverty, - poverty_gap=poverty_gap, - deep_poverty_gap=deep_poverty_gap, - poverty_rate=poverty_rate, - deep_poverty_rate=deep_poverty_rate, - ) diff --git a/policyengine/outputs/macro/single/household/household.py b/policyengine/outputs/macro/single/household/household.py deleted file mode 100644 index 4ccd515d..00000000 --- a/policyengine/outputs/macro/single/household/household.py +++ /dev/null @@ -1,44 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation -from .demographics import calculate_demographics, SingleEconomyDemographics -from .finance import calculate_finance, SingleEconomyFinanceOutput -from .inequality import calculate_inequality, SingleEconomyInequality -from .labor_supply import calculate_labor_supply, SingleEconomyLaborSupply -from pydantic import BaseModel, Field - - -class SingleEconomyHouseholdSector(BaseModel): - demographics: SingleEconomyDemographics = Field( - ..., description="Demographics of the household sector" - ) - finance: SingleEconomyFinanceOutput = Field( - ..., description="Finance variables of the household sector" - ) - inequality: SingleEconomyInequality = Field( - ..., description="Inequality of the household sector" - ) - labor_supply: SingleEconomyLaborSupply = Field( - ..., description="Labor supply variables of the household sector" - ) - - -def calculate_single_economy_household_sector( - simulation: "Simulation", -) -> SingleEconomyHouseholdSector: - """ - Calculate and return household sector variables for a given simulation. - - Args: - simulation (Simulation): The simulation object containing the selected simulation data. - - Returns: - SingleEconomyHouseholdSector: An object containing demographic, finance, inequality, and labor supply variables for the household sector. - """ - return SingleEconomyHouseholdSector( - demographics=calculate_demographics(simulation), - finance=calculate_finance(simulation), - inequality=calculate_inequality(simulation), - labor_supply=calculate_labor_supply(simulation), - ) diff --git a/policyengine/outputs/macro/single/household/inequality.py b/policyengine/outputs/macro/single/household/inequality.py deleted file mode 100644 index 1a0f8f1e..00000000 --- a/policyengine/outputs/macro/single/household/inequality.py +++ /dev/null @@ -1,60 +0,0 @@ -import typing - -if typing.TYPE_CHECKING: - from policyengine import Simulation - -from pydantic import BaseModel, Field - - -class SingleEconomyInequality(BaseModel): - gini: float = Field( - ..., description="Gini coefficient of income inequality" - ) - top_10_percent_share: float = Field( - ..., description="Income share of the top 10 percent" - ) - top_1_percent_share: float = Field( - ..., description="Income share of the top 1 percent" - ) - - -def calculate_inequality(simulation: "Simulation") -> SingleEconomyInequality: - """ - Calculate inequality metrics for a given simulation. - Args: - simulation (Simulation): The simulation object containing the data - and methods to perform the calculations. - Returns: - SingleEconomyInequality: An object containing the calculated Gini - coefficient, top 10 percent income share, - and top 1 percent income share. - """ - - personal_hh_equiv_income = simulation.selected_sim.calculate( - "equiv_household_net_income" - ) - personal_hh_equiv_income[personal_hh_equiv_income < 0] = 0 - household_count_people = simulation.selected_sim.calculate( - "household_count_people" - ).values - personal_hh_equiv_income.weights *= household_count_people - gini = personal_hh_equiv_income.gini() - in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 - in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 - - personal_hh_equiv_income.weights /= household_count_people - - top_10_share = ( - personal_hh_equiv_income[in_top_10_pct].sum() - / personal_hh_equiv_income.sum() - ) - top_1_share = ( - personal_hh_equiv_income[in_top_1_pct].sum() - / personal_hh_equiv_income.sum() - ) - - return SingleEconomyInequality( - gini=gini, - top_10_percent_share=top_10_share, - top_1_percent_share=top_1_share, - ) diff --git a/policyengine/outputs/macro/single/household/labor_supply.py b/policyengine/outputs/macro/single/household/labor_supply.py deleted file mode 100644 index c2361330..00000000 --- a/policyengine/outputs/macro/single/household/labor_supply.py +++ /dev/null @@ -1,100 +0,0 @@ -from typing import Optional, List -from pydantic import BaseModel, Field -import numpy as np -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from policyengine import Simulation - - -class SingleEconomyLaborSupply(BaseModel): - substitution_lsr: float = Field( - default=0, description="Substitution labor supply response" - ) - income_lsr: float = Field( - default=0, description="Income labor supply response" - ) - income_lsr_hh: List[float] = Field( - default_factory=list, - description="Household income labor supply response", - ) - substitution_lsr_hh: List[float] = Field( - default_factory=list, - description="Household substitution labor supply response", - ) - weekly_hours: float = Field(default=0, description="Weekly hours worked") - weekly_hours_income_effect: float = Field( - default=0, description="Weekly hours worked income effect" - ) - weekly_hours_substitution_effect: float = Field( - default=0, description="Weekly hours substitution effect" - ) - total_earnings: float = Field( - ..., description="Total employment and self-employment earnings" - ) - total_workers: int = Field(..., description="Total number of workers") - - -def has_behavioral_response(simulation: "Simulation") -> bool: - """Check if simulation has behavioral responses.""" - sim = simulation.selected_sim - return ( - "employment_income_behavioral_response" - in sim.tax_benefit_system.variables - and any(sim.calculate("employment_income_behavioral_response") != 0) - ) - - -def calculate_labor_supply( - simulation: "Simulation", -) -> SingleEconomyLaborSupply: - """ - Calculate labor supply response metrics. - - Args: - simulation (Simulation): Policy simulation object. - - Returns: - SingleEconomyLaborSupply: Labor supply response metrics. - """ - sim = simulation.selected_sim - household_count_people = sim.calculate("household_count_people").values - - # Initialize base metrics - labor_supply = SingleEconomyLaborSupply( - income_lsr_hh=(household_count_people * 0).astype(float).tolist(), - substitution_lsr_hh=(household_count_people * 0) - .astype(float) - .tolist(), - total_earnings=sim.calculate("employment_income").sum() - + sim.calculate("self_employment_income").sum(), - total_workers=int( - (sim.calculate("employment_income") > 0).sum() - + (sim.calculate("self_employment_income") > 0).sum() - ), - ) - - # Update behavioral response metrics if available - if has_behavioral_response(simulation): - labor_supply.substitution_lsr = sim.calculate( - "substitution_elasticity_lsr" - ).sum() - labor_supply.income_lsr = sim.calculate("income_elasticity_lsr").sum() - labor_supply.income_lsr_hh = sim.calculate( - "income_elasticity_lsr", map_to="household" - ).astype(float) - labor_supply.substitution_lsr_hh = sim.calculate( - "substitution_elasticity_lsr", map_to="household" - ).astype(float) - - # Update US-specific metrics - if simulation.country == "us": - labor_supply.weekly_hours = sim.calculate("weekly_hours_worked").sum() - labor_supply.weekly_hours_income_effect = sim.calculate( - "weekly_hours_worked_behavioural_response_income_elasticity" - ).sum() - labor_supply.weekly_hours_substitution_effect = sim.calculate( - "weekly_hours_worked_behavioural_response_substitution_elasticity" - ).sum() - - return labor_supply diff --git a/policyengine/outputs/macro/single/single.py b/policyengine/outputs/macro/single/single.py deleted file mode 100644 index a5138b5c..00000000 --- a/policyengine/outputs/macro/single/single.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import TYPE_CHECKING -from pydantic import BaseModel - -if TYPE_CHECKING: - from policyengine import Simulation - -from .household import ( - calculate_single_economy_household_sector, - SingleEconomyHouseholdSector, -) - - -class SingleEconomy(BaseModel): - household: SingleEconomyHouseholdSector - - -def calculate_single_economy(sim: "Simulation") -> SingleEconomy: - return SingleEconomy( - household=calculate_single_economy_household_sector(sim), - ) diff --git a/policyengine/outputs/single.py b/policyengine/outputs/single.py new file mode 100644 index 00000000..1ef4e7a9 --- /dev/null +++ b/policyengine/outputs/single.py @@ -0,0 +1,365 @@ +from policyengine_core.simulations import Microsimulation +from typing import Dict + +from policyengine_us import Microsimulation +from policyengine_uk import Microsimulation +from dataclasses import dataclass + + +@dataclass +class UKProgram: + name: str + is_positive: bool + + +class UKPrograms: + PROGRAMS = [ + UKProgram("income_tax", True), + UKProgram("national_insurance", True), + UKProgram("vat", True), + UKProgram("council_tax", True), + UKProgram("fuel_duty", True), + UKProgram("tax_credits", False), + UKProgram("universal_credit", False), + UKProgram("child_benefit", False), + UKProgram("state_pension", False), + UKProgram("pension_credit", False), + UKProgram("ni_employer", True), + ] + + +class GeneralEconomyTask: + def __init__(self, simulation: Microsimulation, country_id: str): + self.simulation = simulation + self.country_id = country_id + self.household_count_people = self.simulation.calculate( + "household_count_people" + ) + + def calculate_tax_and_spending(self): + if self.country_id == "uk": + total_tax = self.simulation.calculate("gov_tax").sum() + total_spending = self.simulation.calculate("gov_spending").sum() + else: + total_tax = self.simulation.calculate("household_tax").sum() + total_spending = self.simulation.calculate( + "household_benefits" + ).sum() + return total_tax, total_spending + + def calculate_inequality_metrics(self): + personal_hh_equiv_income = self._get_weighted_household_income() + + try: + gini = personal_hh_equiv_income.gini() + except Exception as e: + print( + "WARNING: Gini index calculations resulted in an error: returning no change, but this is inaccurate." + ) + print("Error: ", e) + gini = 0.4 + + in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 + in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 + + personal_hh_equiv_income.weights /= self.household_count_people + + top_10_share = ( + personal_hh_equiv_income[in_top_10_pct].sum() + / personal_hh_equiv_income.sum() + ) + top_1_share = ( + personal_hh_equiv_income[in_top_1_pct].sum() + / personal_hh_equiv_income.sum() + ) + + return gini, top_10_share, top_1_share + + def _get_weighted_household_income(self): + income = self.simulation.calculate("equiv_household_net_income") + income[income < 0] = 0 + income.weights *= self.household_count_people + return income + + def calculate_income_breakdown_metrics(self): + total_net_income = self.simulation.calculate( + "household_net_income" + ).sum() + employment_income_hh = ( + self.simulation.calculate("employment_income", map_to="household") + .astype(float) + .tolist() + ) + self_employment_income_hh = ( + self.simulation.calculate( + "self_employment_income", map_to="household" + ) + .astype(float) + .tolist() + ) + + return ( + total_net_income, + employment_income_hh, + self_employment_income_hh, + ) + + def calculate_household_income_metrics(self): + household_net_income = ( + self.simulation.calculate("household_net_income") + .astype(float) + .tolist() + ) + equiv_household_net_income = ( + self.simulation.calculate("equiv_household_net_income") + .astype(float) + .tolist() + ) + household_income_decile = ( + self.simulation.calculate("household_income_decile") + .astype(int) + .tolist() + ) + household_market_income = ( + self.simulation.calculate("household_market_income") + .astype(float) + .tolist() + ) + + return ( + household_net_income, + equiv_household_net_income, + household_income_decile, + household_market_income, + ) + + def calculate_wealth_metrics(self): + try: + wealth = self.simulation.calculate("total_wealth") + wealth.weights *= self.household_count_people + wealth_decile = ( + wealth.decile_rank().clip(1, 10).astype(int).tolist() + ) + wealth = wealth.astype(float).tolist() + except Exception as e: + wealth = None + wealth_decile = None + return wealth, wealth_decile + + def calculate_demographic_metrics(self): + try: + is_male = ( + self.simulation.calculate("is_male").astype(bool).tolist() + ) + except Exception: + is_male = None + + try: + race = self.simulation.calculate("race").astype(str).tolist() + except Exception: + race = None + + age = self.simulation.calculate("age").astype(int).tolist() + + return is_male, race, age + + def calculate_poverty_metrics(self): + in_poverty = ( + self.simulation.calculate("in_poverty").astype(bool).tolist() + ) + person_in_poverty = ( + self.simulation.calculate("in_poverty", map_to="person") + .astype(bool) + .tolist() + ) + person_in_deep_poverty = ( + self.simulation.calculate("in_deep_poverty", map_to="person") + .astype(bool) + .tolist() + ) + poverty_gap = self.simulation.calculate("poverty_gap").sum() + deep_poverty_gap = self.simulation.calculate("deep_poverty_gap").sum() + return ( + in_poverty, + person_in_poverty, + person_in_deep_poverty, + poverty_gap, + deep_poverty_gap, + ) + + def calculate_weights(self): + person_weight = ( + self.simulation.calculate("person_weight").astype(float).tolist() + ) + household_weight = ( + self.simulation.calculate("household_weight") + .astype(float) + .tolist() + ) + + return person_weight, household_weight + + def calculate_labor_supply_responses(self): + result = { + "substitution_lsr": 0, + "income_lsr": 0, + "budgetary_impact_lsr": 0, + "income_lsr_hh": (self.household_count_people * 0) + .astype(float) + .tolist(), + "substitution_lsr_hh": (self.household_count_people * 0) + .astype(float) + .tolist(), + } + + if not self._has_behavioral_response(): + return result + + result.update( + { + "substitution_lsr": self.simulation.calculate( + "substitution_elasticity_lsr" + ).sum(), + "income_lsr": self.simulation.calculate( + "income_elasticity_lsr" + ).sum(), + "income_lsr_hh": self.simulation.calculate( + "income_elasticity_lsr", map_to="household" + ) + .astype(float) + .tolist(), + "substitution_lsr_hh": self.simulation.calculate( + "substitution_elasticity_lsr", map_to="household" + ) + .astype(float) + .tolist(), + } + ) + + return result + + def _has_behavioral_response(self) -> bool: + return ( + "employment_income_behavioral_response" + in self.simulation.tax_benefit_system.variables + and any( + self.simulation.calculate( + "employment_income_behavioral_response" + ) + != 0 + ) + ) + + def calculate_lsr_working_hours(self): + if self.country_id != "us": + return { + "weekly_hours": 0, + "weekly_hours_income_effect": 0, + "weekly_hours_substitution_effect": 0, + } + + return { + "weekly_hours": self.simulation.calculate( + "weekly_hours_worked" + ).sum(), + "weekly_hours_income_effect": self.simulation.calculate( + "weekly_hours_worked_behavioural_response_income_elasticity" + ).sum(), + "weekly_hours_substitution_effect": self.simulation.calculate( + "weekly_hours_worked_behavioural_response_substitution_elasticity" + ).sum(), + } + + def calculate_uk_programs(self) -> Dict[str, float]: + if self.country_id != "uk": + return {} + + return { + program.name: self.simulation.calculate( + program.name, map_to="household" + ).sum() + * (1 if program.is_positive else -1) + for program in UKPrograms.PROGRAMS + } + + +def compute_general_economy(simulation, country_id: str) -> Dict: + task_manager = GeneralEconomyTask(simulation, country_id) + + total_tax, total_spending = task_manager.calculate_tax_and_spending() + gini, top_10_share, top_1_share = ( + task_manager.calculate_inequality_metrics() + ) + wealth, wealth_decile = task_manager.calculate_wealth_metrics() + is_male, race, age = task_manager.calculate_demographic_metrics() + labor_supply_responses = task_manager.calculate_labor_supply_responses() + lsr_working_hours = task_manager.calculate_lsr_working_hours() + ( + in_poverty, + person_in_poverty, + person_in_deep_poverty, + poverty_gap, + deep_poverty_gap, + ) = task_manager.calculate_poverty_metrics() + total_net_income, employment_income_hh, self_employment_income_hh = ( + task_manager.calculate_income_breakdown_metrics() + ) + ( + household_net_income, + equiv_household_net_income, + household_income_decile, + household_market_income, + ) = task_manager.calculate_household_income_metrics() + person_weight, household_weight = task_manager.calculate_weights() + + if country_id == "uk": + uk_programs = task_manager.calculate_uk_programs() + else: + uk_programs = {} + + total_state_tax = 0 + + if country_id == "us": + try: + total_state_tax = simulation.calculate( + "household_state_income_tax" + ).sum() + except: + total_state_tax = 0 + + result = { + "total_net_income": total_net_income, + "employment_income_hh": employment_income_hh, + "self_employment_income_hh": self_employment_income_hh, + "total_tax": total_tax, + "total_state_tax": total_state_tax, + "total_benefits": total_spending, + "household_net_income": household_net_income, + "equiv_household_net_income": equiv_household_net_income, + "household_income_decile": household_income_decile, + "household_market_income": household_market_income, + "household_wealth_decile": wealth_decile, + "household_wealth": wealth, + "in_poverty": in_poverty, + "person_in_poverty": person_in_poverty, + "person_in_deep_poverty": person_in_deep_poverty, + "poverty_gap": poverty_gap, + "deep_poverty_gap": deep_poverty_gap, + "person_weight": person_weight, + "household_weight": household_weight, + "household_count_people": task_manager.household_count_people.astype( + int + ).tolist(), + "gini": float(gini), + "top_10_percent_share": float(top_10_share), + "top_1_percent_share": float(top_1_share), + "is_male": is_male, + "race": race, + "age": age, + **labor_supply_responses, + **lsr_working_hours, + "type": "general", + "programs": uk_programs, + } + + return result diff --git a/policyengine/reforms.py b/policyengine/reforms.py new file mode 100644 index 00000000..8ab659ba --- /dev/null +++ b/policyengine/reforms.py @@ -0,0 +1,29 @@ +import re +from pydantic import RootModel, ValidationError, Field, model_validator +from typing import Dict +from annotated_types import Ge, Le +from typing_extensions import Annotated +from policyengine_core.reforms import Reform as StructuralReform + +# Define a constrained year type (1900-2100) +Year = Annotated[int, Field(..., ge=1900, le=2100)] + + +class YearlyValues(RootModel): + """Validates yearly values (e.g., {"2025": 0.25}).""" + + root: Dict[Year, float] # Keys auto-converted from strings to integers + + +class ParametricReform(RootModel): + """Validates parameter names and their yearly values.""" + + root: Dict[str, YearlyValues] + + @model_validator(mode="before") + def validate_parameter_names(cls, data: dict) -> dict: + """Ensure parameter names match the allowed format.""" + for param_name in data.keys(): + if not re.match(r"^[a-zA-Z0-9\.]+$", param_name): + raise ValueError(f"Invalid parameter name: {param_name!r}") + return data diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 82179e10..aec6dbfd 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -1,141 +1,120 @@ -from policyengine_core import Simulation as CountrySimulation -from policyengine_core import Microsimulation as CountryMicrosimulation +from pydantic import BaseModel, Field +from typing import Literal +from .constants import DEFAULT_DATASETS_BY_COUNTRY +from policyengine_core.simulations import Simulation as CountrySimulation +from policyengine_core.simulations import Microsimulation as CountryMicrosimulation +from .reforms import ParametricReform +from policyengine_core.reforms import Reform as StructuralReform from policyengine_core.data import Dataset -from policyengine.utils.huggingface import download -from policyengine_core.reforms import Reform -from typing import Tuple, Any -from policyengine.constants import * -import pandas as pd +from .utils.huggingface import download +from policyengine_us import ( + Simulation as USSimulation, + Microsimulation as USMicrosimulation, +) +from policyengine_uk import ( + Simulation as UKSimulation, + Microsimulation as UKMicrosimulation, +) import h5py from pathlib import Path -from typing import Literal -from policyengine.utils.typing import add_methods -from policyengine.outputs.macro.single import calculate_single_economy - -methods_to_add = [ - calculate_single_economy, -] - +import pandas as pd +from typing import Type -@add_methods(methods_to_add) -class Simulation: - """The top-level class through which all PE usage is carried out.""" +CountryType = Literal["uk", "us"] +ScopeType = Literal["household", "macro"] +DataType = str | None +TimePeriodType = int +ReformType = ParametricReform | None +RegionType = str | None +SubsampleType = int | None - country: Literal["uk", "us"] - """The country for which the simulation is being run.""" - scope: Literal["macro", "household"] - """The type of simulation being run (macro or household).""" - data: dict | str | Dataset - """The dataset being used for the simulation.""" - time_period: str | int - """The time period for the simulation. Years are applicable.""" - baseline: dict | None - """The baseline simulation inputs.""" - reform: dict | None - """The reform simulation inputs.""" - options: dict - """Dynamic options for the simulation type.""" +class SimulationOptions(BaseModel): + country: CountryType = Field( + ..., description="The country to simulate." + ) + scope: ScopeType = Field( + ..., description="The scope of the simulation." + ) + data: DataType = Field( + None, description="The data to simulate." + ) + time_period: TimePeriodType = Field( + ..., description="The time period to simulate.", ge=2024, le=2035 + ) + reform: ReformType = Field( + None, description="The reform to simulate." + ) + baseline: ReformType = Field( + None, description="The baseline to simulate." + ) + region: RegionType = Field( + None, description="The region to simulate within the country." + ) + subsample: SubsampleType = Field( + None, description="How many, if a subsample, households to randomly simulate." + ) - comparison: bool - """Whether we are comparing two simulations, or analysing a single one.""" - baseline_sim: CountrySimulation - """The tax-benefit simulation for the baseline scenario.""" - reformed_sim: CountrySimulation | None = None - """The tax-benefit simulation for the reformed scenario. None if no reform has been configured""" - selected_sim: CountrySimulation - """The selected simulation for the current calculation.""" - verbose: bool = False - """Whether to print out progress messages.""" - def __init__( - self, - country: Literal["uk", "us"], - scope: Literal["macro", "household"], - data: str | dict | None = None, - time_period: str | int = Literal[ - 2024, 2025, 2026, 2027, 2028, 2029, 2030 - ], - reform: dict | None = None, - baseline: dict | None = None, - verbose: bool = False, - options: dict | None = None, - ): - """Initialise the simulation with the given parameters. +class Simulation: + """Simulate tax-benefit policy.""" - Args: - country (str): The country for which the simulation is being run. - type (str): The type of simulation being run (macro or household). - data (str): The dataset being used for the simulation. - time_period (str): The time period for the simulation. Years are applicable. - reform (dict): The reform simulation inputs. - """ - self.country = country - self.scope = scope - self._set_dataset(data) - self.time_period = time_period - self.verbose = verbose - self.options = options or {} - self.baseline = baseline - self.reform = reform + is_comparison: bool + """Whether the simulation is a comparison between two scenarios.""" + baseline_simulation: CountrySimulation + """The baseline simulation.""" + reform_simulation: CountrySimulation = None + """The reform simulation.""" - self.comparison = reform is not None + def __init__(self, options: SimulationOptions): + self.options = SimulationOptions(**options) + if self.options.data is None: + self.options.data = DEFAULT_DATASETS_BY_COUNTRY[ + self.options.country + ] + self._initialise_simulations() - def _set_dataset(self, dataset: str | dict | None): - if isinstance(dataset, dict): - self.data = dataset - return - - self.data = DEFAULT_DATASETS[self.country] - if dataset in DATASETS[self.country]: - self.data = DATASETS[self.country][dataset] + def _set_data(self): + if self.options.data is None: + self.options.data = DEFAULT_DATASETS_BY_COUNTRY[ + self.options.country + ] - # Short-term hacky fix: handle legacy 'array' datasets that don't specify the year for each variable: we should transition these to variable/period/value format. - # But they're used frequently for now, and we need backwards compatibility. - - if self.data is not None and "cps_2023" in self.data: - if "hf://" in self.data: - owner, repo, filename = self.data.split("/")[-3:] - if "@" in filename: - version = filename.split("@")[-1] - filename = filename.split("@")[0] - else: - version = None - self.data = download( - repo=owner + "/" + repo, - repo_filename=filename, - local_folder=None, - version=version, - ) - self.data = Dataset.from_file(self.data, "2023") - - def _to_reform(self, value: int | dict): - if isinstance(value, dict): - return Reform.from_dict(value, country_id=self.country) - return Reform.from_api(f"{value}", country_id=self.country) + self._data_handle_cps_special_case() def _initialise_simulations(self): - from policyengine_us import ( - Simulation as USSimulation, - Microsimulation as USMicrosimulation, - ) - from policyengine_uk import ( - Simulation as UKSimulation, - Microsimulation as UKMicrosimulation, + self.baseline_simulation = self._initialise_simulation( + country=self.options.country, + reform=self.options.baseline, + data=self.options.data, + time_period=self.options.time_period, + region=self.options.region, + subsample=self.options.subsample, ) - self._parsed_reform = ( - self._to_reform(self.reform) if self.reform is not None else None - ) - self._parsed_baseline = ( - self._to_reform(self.baseline) - if self.baseline is not None - else None - ) + if self.options.reform is not None: + self.reform_simulation = self._initialise_simulation( + country=self.options.country, + reform=self.options.reform, + data=self.options.data, + time_period=self.options.time_period, + region=self.options.region, + subsample=self.options.subsample, + ) - macro = self.scope == "macro" - _simulation_type = { + def _initialise_simulation( + self, + country: CountryType, + scope: ScopeType, + reform: ReformType, + data: DataType, + time_period: TimePeriodType, + region: RegionType, + subsample: SubsampleType, + ): + macro = scope == "macro" + _simulation_type: Type[CountrySimulation] = { "uk": { True: UKMicrosimulation, False: UKSimulation, @@ -144,74 +123,39 @@ def _initialise_simulations(self): True: USMicrosimulation, False: USSimulation, }, - }[self.country][macro] - self.baseline_sim = _simulation_type( - dataset=self.data if macro else None, - situation=self.data if not macro else None, - reform=self._parsed_baseline, - ) - if self.time_period is not None: - self.baseline_sim.default_calculation_period = self.time_period - - if "region" in self.options and isinstance( - self.baseline_sim, CountryMicrosimulation - ): - self.baseline_sim = self._apply_region_to_simulation( - self.baseline_sim, - _simulation_type, - self.options["region"], - reform=self.baseline_sim.reform, - ) - - if "subsample" in self.options: - self.baseline_sim = self.baseline_sim.subsample( - self.options["subsample"] - ) - - if self.comparison: - if self._parsed_baseline is not None: - self._parsed_reform = (self._parsed_baseline, self.reform) - self.reformed_sim = _simulation_type( - dataset=self.data if macro else None, - situation=self.data if not macro else None, - reform=self._parsed_reform, - ) + }[country][macro] - if self.time_period is not None: - self.reformed_sim.default_calculation_period = self.time_period - if "region" in self.options and isinstance( - self.reformed_sim, CountryMicrosimulation - ): - self.reformed_sim = self._apply_region_to_simulation( - self.reformed_sim, - _simulation_type, - self.options["region"], - reform=self._parsed_reform, - ) + simulation: CountrySimulation = _simulation_type( + dataset=data if macro else None, + situation=data if not macro else None, + reform=reform, + ) - if "subsample" in self.options: - self.reformed_sim = self.reformed_sim.subsample( - self.options["subsample"] - ) + simulation = self._apply_region_to_simulation( + country=country, + simulation=simulation, + simulation_type=_simulation_type, + region=region, + ) - # Set the 'baseline tax-benefit system' to be the actual baseline. For example, when working out an individual's - # baseline MTR, it should use the actual policy baseline, not always current law. + simulation.default_calculation_period = time_period - self.reformed_sim.get_branch("baseline").tax_benefit_system = ( - self.baseline_sim.tax_benefit_system - ) - self.selected_sim = self.reformed_sim - else: - self.selected_sim = self.baseline_sim + if subsample is not None: + simulation = simulation.subsample(subsample) + + return simulation + def _apply_region_to_simulation( self, + country: CountryType, simulation: CountryMicrosimulation, simulation_type: type, - region: str, - reform: Reform = None, - ): - if self.country == "us": + region: RegionType, + reform: ReformType | None, + time_period: TimePeriodType, + ) -> CountrySimulation: + if country == "us": df = simulation.to_input_dataframe() state_code = simulation.calculate( "state_code_str", map_to="person" @@ -224,7 +168,7 @@ def _apply_region_to_simulation( simulation = simulation_type( dataset=df[state_code == state.upper()], reform=reform ) - elif self.country == "uk": + elif country == "uk": if "country/" in region: region = region.split("/")[1] df = simulation.to_input_dataframe() @@ -266,7 +210,7 @@ def _apply_region_to_simulation( ) with h5py.File(weights_file_path, "r") as f: - weights = f[str(self.time_period)][...] + weights = f[str(time_period)][...] simulation.set_input( "household_weight", @@ -307,6 +251,22 @@ def _apply_region_to_simulation( weights[la_id], ) - simulation.default_calculation_period = self.time_period - return simulation + + def _data_handle_cps_special_case(self): + """Handle special case for CPS data- this data doesn't specify time periods for each variable, but we still use it intensively.""" + if self.data is not None and "cps_2023" in self.data: + if "hf://" in self.data: + owner, repo, filename = self.data.split("/")[-3:] + if "@" in filename: + version = filename.split("@")[-1] + filename = filename.split("@")[0] + else: + version = None + self.data = download( + repo=owner + "/" + repo, + repo_filename=filename, + local_folder=None, + version=version, + ) + self.data = Dataset.from_file(self.data, "2023") diff --git a/policyengine/utils/typing.py b/policyengine/utils/typing.py index 1c3749d0..1ca521ff 100644 --- a/policyengine/utils/typing.py +++ b/policyengine/utils/typing.py @@ -21,6 +21,13 @@ def decorator(cls: Type[T]) -> Type[T]: def wrapped(self: T, *args: P.args, **kwargs: P.kwargs) -> R: return method(self, *args, **kwargs) + if getattr(method, "_example_simulation_parameters"): + setattr( + wrapped, + "_example_simulation_parameters", + method._example_simulation_parameters, + ) + setattr(cls, method.__name__, wrapped) return cls From ec2c9a7c4d3a7ddc77be66d220ffbe9cbbf5f9ba Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 11:54:54 +1100 Subject: [PATCH 16/32] Add fully-typed simulation starters --- policyengine/__init__.py | 2 +- .../outputs/calculate_economy_comparison.py | 28 +- .../outputs/calculate_full_single_economy.py | 365 ------------------ policyengine/outputs/macro/single.py | 77 ++++ policyengine/reforms.py | 29 +- policyengine/simulation.py | 45 ++- policyengine/utils/calculations.py | 25 ++ policyengine/utils/reforms.py | 35 -- policyengine/utils/typing.py | 34 -- 9 files changed, 170 insertions(+), 470 deletions(-) delete mode 100644 policyengine/outputs/calculate_full_single_economy.py create mode 100644 policyengine/outputs/macro/single.py create mode 100644 policyengine/utils/calculations.py delete mode 100644 policyengine/utils/reforms.py delete mode 100644 policyengine/utils/typing.py diff --git a/policyengine/__init__.py b/policyengine/__init__.py index 7311e3e3..7846d09b 100644 --- a/policyengine/__init__.py +++ b/policyengine/__init__.py @@ -1 +1 @@ -from .simulation import Simulation \ No newline at end of file +from .simulation import Simulation, SimulationOptions \ No newline at end of file diff --git a/policyengine/outputs/calculate_economy_comparison.py b/policyengine/outputs/calculate_economy_comparison.py index 9de41801..c41325d2 100644 --- a/policyengine/outputs/calculate_economy_comparison.py +++ b/policyengine/outputs/calculate_economy_comparison.py @@ -3,6 +3,32 @@ from policyengine import Simulation from pydantic import BaseModel +from policyengine.utils.calculations import get_change + +from .macro.single import calculate_government_balance, FiscalSummary + +class FiscalComparison(BaseModel): + baseline: FiscalSummary + reform: FiscalSummary + change: FiscalSummary + +class EconomyComparison(BaseModel): + fiscal: FiscalComparison def calculate_economy_comparison(simulation: "Simulation"): - \ No newline at end of file + if not simulation.is_comparison: + raise ValueError("Simulation must be a comparison simulation.") + + baseline = simulation.baseline_simulation + reform = simulation.reform_simulation + options = simulation.options + + baseline_balance = calculate_government_balance(baseline, options) + reform_balance = calculate_government_balance(reform, options) + change = get_change(baseline_balance, reform_balance) + fiscal_comparison = FiscalComparison(baseline=baseline_balance, reform=reform_balance, change=change) + + return EconomyComparison( + fiscal=fiscal_comparison, + ) + diff --git a/policyengine/outputs/calculate_full_single_economy.py b/policyengine/outputs/calculate_full_single_economy.py deleted file mode 100644 index 1ef4e7a9..00000000 --- a/policyengine/outputs/calculate_full_single_economy.py +++ /dev/null @@ -1,365 +0,0 @@ -from policyengine_core.simulations import Microsimulation -from typing import Dict - -from policyengine_us import Microsimulation -from policyengine_uk import Microsimulation -from dataclasses import dataclass - - -@dataclass -class UKProgram: - name: str - is_positive: bool - - -class UKPrograms: - PROGRAMS = [ - UKProgram("income_tax", True), - UKProgram("national_insurance", True), - UKProgram("vat", True), - UKProgram("council_tax", True), - UKProgram("fuel_duty", True), - UKProgram("tax_credits", False), - UKProgram("universal_credit", False), - UKProgram("child_benefit", False), - UKProgram("state_pension", False), - UKProgram("pension_credit", False), - UKProgram("ni_employer", True), - ] - - -class GeneralEconomyTask: - def __init__(self, simulation: Microsimulation, country_id: str): - self.simulation = simulation - self.country_id = country_id - self.household_count_people = self.simulation.calculate( - "household_count_people" - ) - - def calculate_tax_and_spending(self): - if self.country_id == "uk": - total_tax = self.simulation.calculate("gov_tax").sum() - total_spending = self.simulation.calculate("gov_spending").sum() - else: - total_tax = self.simulation.calculate("household_tax").sum() - total_spending = self.simulation.calculate( - "household_benefits" - ).sum() - return total_tax, total_spending - - def calculate_inequality_metrics(self): - personal_hh_equiv_income = self._get_weighted_household_income() - - try: - gini = personal_hh_equiv_income.gini() - except Exception as e: - print( - "WARNING: Gini index calculations resulted in an error: returning no change, but this is inaccurate." - ) - print("Error: ", e) - gini = 0.4 - - in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 - in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 - - personal_hh_equiv_income.weights /= self.household_count_people - - top_10_share = ( - personal_hh_equiv_income[in_top_10_pct].sum() - / personal_hh_equiv_income.sum() - ) - top_1_share = ( - personal_hh_equiv_income[in_top_1_pct].sum() - / personal_hh_equiv_income.sum() - ) - - return gini, top_10_share, top_1_share - - def _get_weighted_household_income(self): - income = self.simulation.calculate("equiv_household_net_income") - income[income < 0] = 0 - income.weights *= self.household_count_people - return income - - def calculate_income_breakdown_metrics(self): - total_net_income = self.simulation.calculate( - "household_net_income" - ).sum() - employment_income_hh = ( - self.simulation.calculate("employment_income", map_to="household") - .astype(float) - .tolist() - ) - self_employment_income_hh = ( - self.simulation.calculate( - "self_employment_income", map_to="household" - ) - .astype(float) - .tolist() - ) - - return ( - total_net_income, - employment_income_hh, - self_employment_income_hh, - ) - - def calculate_household_income_metrics(self): - household_net_income = ( - self.simulation.calculate("household_net_income") - .astype(float) - .tolist() - ) - equiv_household_net_income = ( - self.simulation.calculate("equiv_household_net_income") - .astype(float) - .tolist() - ) - household_income_decile = ( - self.simulation.calculate("household_income_decile") - .astype(int) - .tolist() - ) - household_market_income = ( - self.simulation.calculate("household_market_income") - .astype(float) - .tolist() - ) - - return ( - household_net_income, - equiv_household_net_income, - household_income_decile, - household_market_income, - ) - - def calculate_wealth_metrics(self): - try: - wealth = self.simulation.calculate("total_wealth") - wealth.weights *= self.household_count_people - wealth_decile = ( - wealth.decile_rank().clip(1, 10).astype(int).tolist() - ) - wealth = wealth.astype(float).tolist() - except Exception as e: - wealth = None - wealth_decile = None - return wealth, wealth_decile - - def calculate_demographic_metrics(self): - try: - is_male = ( - self.simulation.calculate("is_male").astype(bool).tolist() - ) - except Exception: - is_male = None - - try: - race = self.simulation.calculate("race").astype(str).tolist() - except Exception: - race = None - - age = self.simulation.calculate("age").astype(int).tolist() - - return is_male, race, age - - def calculate_poverty_metrics(self): - in_poverty = ( - self.simulation.calculate("in_poverty").astype(bool).tolist() - ) - person_in_poverty = ( - self.simulation.calculate("in_poverty", map_to="person") - .astype(bool) - .tolist() - ) - person_in_deep_poverty = ( - self.simulation.calculate("in_deep_poverty", map_to="person") - .astype(bool) - .tolist() - ) - poverty_gap = self.simulation.calculate("poverty_gap").sum() - deep_poverty_gap = self.simulation.calculate("deep_poverty_gap").sum() - return ( - in_poverty, - person_in_poverty, - person_in_deep_poverty, - poverty_gap, - deep_poverty_gap, - ) - - def calculate_weights(self): - person_weight = ( - self.simulation.calculate("person_weight").astype(float).tolist() - ) - household_weight = ( - self.simulation.calculate("household_weight") - .astype(float) - .tolist() - ) - - return person_weight, household_weight - - def calculate_labor_supply_responses(self): - result = { - "substitution_lsr": 0, - "income_lsr": 0, - "budgetary_impact_lsr": 0, - "income_lsr_hh": (self.household_count_people * 0) - .astype(float) - .tolist(), - "substitution_lsr_hh": (self.household_count_people * 0) - .astype(float) - .tolist(), - } - - if not self._has_behavioral_response(): - return result - - result.update( - { - "substitution_lsr": self.simulation.calculate( - "substitution_elasticity_lsr" - ).sum(), - "income_lsr": self.simulation.calculate( - "income_elasticity_lsr" - ).sum(), - "income_lsr_hh": self.simulation.calculate( - "income_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - "substitution_lsr_hh": self.simulation.calculate( - "substitution_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - } - ) - - return result - - def _has_behavioral_response(self) -> bool: - return ( - "employment_income_behavioral_response" - in self.simulation.tax_benefit_system.variables - and any( - self.simulation.calculate( - "employment_income_behavioral_response" - ) - != 0 - ) - ) - - def calculate_lsr_working_hours(self): - if self.country_id != "us": - return { - "weekly_hours": 0, - "weekly_hours_income_effect": 0, - "weekly_hours_substitution_effect": 0, - } - - return { - "weekly_hours": self.simulation.calculate( - "weekly_hours_worked" - ).sum(), - "weekly_hours_income_effect": self.simulation.calculate( - "weekly_hours_worked_behavioural_response_income_elasticity" - ).sum(), - "weekly_hours_substitution_effect": self.simulation.calculate( - "weekly_hours_worked_behavioural_response_substitution_elasticity" - ).sum(), - } - - def calculate_uk_programs(self) -> Dict[str, float]: - if self.country_id != "uk": - return {} - - return { - program.name: self.simulation.calculate( - program.name, map_to="household" - ).sum() - * (1 if program.is_positive else -1) - for program in UKPrograms.PROGRAMS - } - - -def compute_general_economy(simulation, country_id: str) -> Dict: - task_manager = GeneralEconomyTask(simulation, country_id) - - total_tax, total_spending = task_manager.calculate_tax_and_spending() - gini, top_10_share, top_1_share = ( - task_manager.calculate_inequality_metrics() - ) - wealth, wealth_decile = task_manager.calculate_wealth_metrics() - is_male, race, age = task_manager.calculate_demographic_metrics() - labor_supply_responses = task_manager.calculate_labor_supply_responses() - lsr_working_hours = task_manager.calculate_lsr_working_hours() - ( - in_poverty, - person_in_poverty, - person_in_deep_poverty, - poverty_gap, - deep_poverty_gap, - ) = task_manager.calculate_poverty_metrics() - total_net_income, employment_income_hh, self_employment_income_hh = ( - task_manager.calculate_income_breakdown_metrics() - ) - ( - household_net_income, - equiv_household_net_income, - household_income_decile, - household_market_income, - ) = task_manager.calculate_household_income_metrics() - person_weight, household_weight = task_manager.calculate_weights() - - if country_id == "uk": - uk_programs = task_manager.calculate_uk_programs() - else: - uk_programs = {} - - total_state_tax = 0 - - if country_id == "us": - try: - total_state_tax = simulation.calculate( - "household_state_income_tax" - ).sum() - except: - total_state_tax = 0 - - result = { - "total_net_income": total_net_income, - "employment_income_hh": employment_income_hh, - "self_employment_income_hh": self_employment_income_hh, - "total_tax": total_tax, - "total_state_tax": total_state_tax, - "total_benefits": total_spending, - "household_net_income": household_net_income, - "equiv_household_net_income": equiv_household_net_income, - "household_income_decile": household_income_decile, - "household_market_income": household_market_income, - "household_wealth_decile": wealth_decile, - "household_wealth": wealth, - "in_poverty": in_poverty, - "person_in_poverty": person_in_poverty, - "person_in_deep_poverty": person_in_deep_poverty, - "poverty_gap": poverty_gap, - "deep_poverty_gap": deep_poverty_gap, - "person_weight": person_weight, - "household_weight": household_weight, - "household_count_people": task_manager.household_count_people.astype( - int - ).tolist(), - "gini": float(gini), - "top_10_percent_share": float(top_10_share), - "top_1_percent_share": float(top_1_share), - "is_male": is_male, - "race": race, - "age": age, - **labor_supply_responses, - **lsr_working_hours, - "type": "general", - "programs": uk_programs, - } - - return result diff --git a/policyengine/outputs/macro/single.py b/policyengine/outputs/macro/single.py new file mode 100644 index 00000000..6c5e6ea7 --- /dev/null +++ b/policyengine/outputs/macro/single.py @@ -0,0 +1,77 @@ +import typing +if typing.TYPE_CHECKING: + from policyengine import Simulation, SimulationOptions + +from policyengine_core.simulations import Microsimulation + +from pydantic import BaseModel + +class TaxBenefitProgram(BaseModel): + name: str + """The name of the tax-benefit program.""" + is_positive: bool + """Whether the program is positive on the *government* balance sheet.""" + +UK_PROGRAMS = [ + TaxBenefitProgram(name="income_tax", is_positive=True), + TaxBenefitProgram(name="national_insurance", is_positive=True), + TaxBenefitProgram(name="ni_employer", is_positive=True), + TaxBenefitProgram(name="vat", is_positive=True), + TaxBenefitProgram(name="council_tax", is_positive=True), + TaxBenefitProgram(name="fuel_duty", is_positive=True), + TaxBenefitProgram(name="tax_credits", is_positive=False), + TaxBenefitProgram(name="universal_credit", is_positive=False), + TaxBenefitProgram(name="child_benefit", is_positive=False), + TaxBenefitProgram(name="state_pension", is_positive=False), + TaxBenefitProgram(name="pension_credit", is_positive=False), +] + +class FiscalSummary(BaseModel): + tax_revenue: float + """The total tax revenue collected by the government.""" + federal_tax: float + """The total tax revenue collected by the federal (or national) government.""" + state_tax: float + """The total tax revenue collected by the state government.""" + government_spending: float + """The total spending by the government on modeled programs.""" + tax_benefit_programs: dict[str, float] + """The total revenue change to the government from each tax-benefit program.""" + household_net_income: float + """The total net income of the households in the simulation.""" + +def calculate_government_balance( + simulation: Microsimulation, + options: "SimulationOptions", +) -> FiscalSummary: + # Calculate the total tax and spending for the government + if options.country == "uk": + total_tax = simulation.calculate("gov_tax").sum() + total_spending = simulation.calculate("gov_spending").sum() + tb_programs = {} + for program in UK_PROGRAMS: + tb_programs[program.name] = simulation.calculate(program.name).sum() * ( + 1 if program.is_positive else -1 + ) + total_state_tax = 0 + else: + total_tax = simulation.calculate("household_tax").sum() + total_spending = simulation.calculate( + "household_benefits" + ).sum() + total_state_tax = simulation.calculate( + "household_state_income_tax" + ).sum() + + national_tax = total_tax - total_state_tax + + total_net_income = simulation.calculate("household_net_income").sum() + + return FiscalSummary( + tax_revenue=total_tax, + federal_tax=national_tax, + state_tax=total_state_tax, + government_spending=total_spending, + tax_benefit_programs=tb_programs, + household_net_income=total_net_income, + ) \ No newline at end of file diff --git a/policyengine/reforms.py b/policyengine/reforms.py index 8ab659ba..d18448ba 100644 --- a/policyengine/reforms.py +++ b/policyengine/reforms.py @@ -1,29 +1,16 @@ import re from pydantic import RootModel, ValidationError, Field, model_validator -from typing import Dict +from typing import Dict, TYPE_CHECKING from annotated_types import Ge, Le from typing_extensions import Annotated -from policyengine_core.reforms import Reform as StructuralReform - -# Define a constrained year type (1900-2100) -Year = Annotated[int, Field(..., ge=1900, le=2100)] - - -class YearlyValues(RootModel): - """Validates yearly values (e.g., {"2025": 0.25}).""" - - root: Dict[Year, float] # Keys auto-converted from strings to integers +from typing import Callable +from policyengine_core.simulations import Simulation class ParametricReform(RootModel): - """Validates parameter names and their yearly values.""" - - root: Dict[str, YearlyValues] + """A reform that just changes parameter values.""" + root: Dict[str, Dict | float | bool] - @model_validator(mode="before") - def validate_parameter_names(cls, data: dict) -> dict: - """Ensure parameter names match the allowed format.""" - for param_name in data.keys(): - if not re.match(r"^[a-zA-Z0-9\.]+$", param_name): - raise ValueError(f"Invalid parameter name: {param_name!r}") - return data +class SimulationAdjustment(RootModel): + """A reform that changes the simulation in some way.""" + root: Callable[[Simulation], None] \ No newline at end of file diff --git a/policyengine/simulation.py b/policyengine/simulation.py index aec6dbfd..3f898ec6 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -3,7 +3,7 @@ from .constants import DEFAULT_DATASETS_BY_COUNTRY from policyengine_core.simulations import Simulation as CountrySimulation from policyengine_core.simulations import Microsimulation as CountryMicrosimulation -from .reforms import ParametricReform +from .reforms import ParametricReform, SimulationAdjustment from policyengine_core.reforms import Reform as StructuralReform from policyengine_core.data import Dataset from .utils.huggingface import download @@ -24,7 +24,7 @@ ScopeType = Literal["household", "macro"] DataType = str | None TimePeriodType = int -ReformType = ParametricReform | None +ReformType = ParametricReform | SimulationAdjustment | Type[StructuralReform] | None RegionType = str | None SubsampleType = int | None @@ -56,14 +56,13 @@ class SimulationOptions(BaseModel): class Simulation: - """Simulate tax-benefit policy.""" - + """Simulate tax-benefit policy and derive society-level output statistics.""" is_comparison: bool """Whether the simulation is a comparison between two scenarios.""" baseline_simulation: CountrySimulation - """The baseline simulation.""" - reform_simulation: CountrySimulation = None - """The reform simulation.""" + """The baseline tax-benefit simulation.""" + reform_simulation: CountrySimulation | None = None + """The reform tax-benefit simulation.""" def __init__(self, options: SimulationOptions): self.options = SimulationOptions(**options) @@ -85,6 +84,7 @@ def _set_data(self): def _initialise_simulations(self): self.baseline_simulation = self._initialise_simulation( + scope=self.options.scope, country=self.options.country, reform=self.options.baseline, data=self.options.data, @@ -95,6 +95,7 @@ def _initialise_simulations(self): if self.options.reform is not None: self.reform_simulation = self._initialise_simulation( + scope=self.options.scope, country=self.options.country, reform=self.options.reform, data=self.options.data, @@ -102,6 +103,9 @@ def _initialise_simulations(self): region=self.options.region, subsample=self.options.subsample, ) + self.is_comparison = True + else: + self.is_comparison = False def _initialise_simulation( self, @@ -125,24 +129,39 @@ def _initialise_simulation( }, }[country][macro] + if isinstance(reform, ParametricReform): + reform = reform.model_dump() + + simulation_editing_reform = None + + if isinstance(reform, SimulationAdjustment): + simulation_editing_reform = reform.root + reform = None + simulation: CountrySimulation = _simulation_type( dataset=data if macro else None, situation=data if not macro else None, reform=reform, ) - simulation = self._apply_region_to_simulation( - country=country, - simulation=simulation, - simulation_type=_simulation_type, - region=region, - ) + if region is not None: + simulation = self._apply_region_to_simulation( + country=country, + simulation=simulation, + simulation_type=_simulation_type, + region=region, + reform=reform, + time_period=time_period, + ) simulation.default_calculation_period = time_period if subsample is not None: simulation = simulation.subsample(subsample) + if simulation_editing_reform is not None: + simulation_editing_reform(simulation) + return simulation diff --git a/policyengine/utils/calculations.py b/policyengine/utils/calculations.py new file mode 100644 index 00000000..7f520b0b --- /dev/null +++ b/policyengine/utils/calculations.py @@ -0,0 +1,25 @@ +from typing import Dict +from pydantic import BaseModel + +Output = Dict[str, float] + +def get_change( + x: Output | Dict[str, Output], + y: Output | Dict[str, Output], +) -> Output | Dict[str, Output]: + """Take two objects of nested str-float relations and create a similarly-structured object with the differences.""" + if isinstance(x, BaseModel): + output_class = type(x) + x = x.model_dump() + else: + output_class = dict + if isinstance(y, BaseModel): + y = y.model_dump() + result = {} + for key in x: + if isinstance(x[key], dict): + result[key] = get_change(x[key], y[key]) + else: + result[key] = y[key] - x[key] + + return output_class(**result) \ No newline at end of file diff --git a/policyengine/utils/reforms.py b/policyengine/utils/reforms.py deleted file mode 100644 index 3e67e1ec..00000000 --- a/policyengine/utils/reforms.py +++ /dev/null @@ -1,35 +0,0 @@ -from policyengine_core.model_api import * -from policyengine_core.periods import instant -from typing import List - - -def index_parameters( - parameters: List[str], index: str, start_year: int, end_year: int -): - """Create a reform that indexes parameters to a given index (e.g. inflation). - - Args: - parameters (List[str]): The parameters to index. - index (str): The index to use. - start_year (int): The first year that will be added as an indexed entry. - end_year (int): The last year that will be added as an indexed entry. - - Returns: - Reform: A reform that indexes the given parameters to the index. - """ - - class reform(Reform): - def apply(self): - index_p = self.parameters.get_child(index) - for parameter in parameters: - param = self.parameters.get_child(parameter) - for year in range(start_year, end_year + 1): - param.update( - start=instant(year), - stop=instant(year + 1), - value=param(start_year - 1) - * index_p(year) - / index_p(start_year - 1), - ) - - return reform diff --git a/policyengine/utils/typing.py b/policyengine/utils/typing.py deleted file mode 100644 index 1ca521ff..00000000 --- a/policyengine/utils/typing.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Callable, Type, TypeVar, ParamSpec -from functools import wraps - -T = TypeVar("T") -P = ParamSpec("P") -R = TypeVar("R") - - -def add_methods(methods: list[Callable]) -> Callable[[Type[T]], Type[T]]: - """ - Class decorator that adds methods to a class while preserving their metadata. - - Args: - methods: List of functions to add as methods - """ - - def decorator(cls: Type[T]) -> Type[T]: - for method in methods: - - @wraps(method) - def wrapped(self: T, *args: P.args, **kwargs: P.kwargs) -> R: - return method(self, *args, **kwargs) - - if getattr(method, "_example_simulation_parameters"): - setattr( - wrapped, - "_example_simulation_parameters", - method._example_simulation_parameters, - ) - - setattr(cls, method.__name__, wrapped) - return cls - - return decorator From 374399e552572009d285f4e0c07f80568e33648b Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 13:00:00 +1100 Subject: [PATCH 17/32] Update docs --- docs/.DS_Store | Bin 0 -> 6148 bytes docs/_config.yml | 31 +++++++++ docs/_static/style.css | 15 +++++ docs/_toc.yml | 6 ++ docs/index.md | 2 + docs/logo.png | Bin 0 -> 10188 bytes policyengine/__init__.py | 2 +- policyengine/outputs/compare.py | 4 +- .../calculate_economy_comparison.py | 32 +++++++-- policyengine/outputs/macro/single.py | 62 +++++++++++++++--- policyengine/simulation.py | 57 +++++++++------- policyengine/utils/calculations.py | 5 +- policyengine/{ => utils}/reforms.py | 5 +- 13 files changed, 175 insertions(+), 46 deletions(-) create mode 100644 docs/.DS_Store create mode 100644 docs/_config.yml create mode 100644 docs/_static/style.css create mode 100644 docs/_toc.yml create mode 100644 docs/index.md create mode 100644 docs/logo.png rename policyengine/outputs/{ => macro}/calculate_economy_comparison.py (51%) rename policyengine/{ => utils}/reforms.py (78%) diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cbf579b9b41a59a34296108fa2bf86266d5b9020 GIT binary patch literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aOhVMFbH^|vYm-cL}Uavl$#A*vwic9^)jMBIL WHL(qJI^s?T@@K$wp;3WfEARkPw-tr} literal 0 HcmV?d00001 diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..8fa2c6b7 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,31 @@ +# _config.yml +author: PolicyEngine +title: PolicyEngine +copyright: "2025" +logo: logo.png + +execute: + execute_notebooks: cache + stderr_output: error + timeout: 600 + +repository: + url: https://github.com/policyengine/policyengine.py + branch: master + path_to_book: docs + +title: Python documentation + +sphinx: + config: + html_js_files: + - https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.js + html_theme: furo + pygments_style: default + html_css_files: + - style.css + extra_extensions: + - "sphinx.ext.autodoc" + - "sphinxcontrib.autodoc_pydantic" + +only_build_toc_files: true \ No newline at end of file diff --git a/docs/_static/style.css b/docs/_static/style.css new file mode 100644 index 00000000..80baddf8 --- /dev/null +++ b/docs/_static/style.css @@ -0,0 +1,15 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Serif:opsz@8..144&family=Roboto:wght@300&display=swap'); + + +h1, h2, h3, h4, h5, p.rubric { + font-family: "Roboto"; + font-weight: 200; +} + +body { + font-family: "Roboto Serif"; +} + +.sidebar-brand-text { + text-align: left; +} diff --git a/docs/_toc.yml b/docs/_toc.yml new file mode 100644 index 00000000..097c1d8e --- /dev/null +++ b/docs/_toc.yml @@ -0,0 +1,6 @@ +format: jb-book +root: index +parts: + - caption: Reference + chapters: + - file: reference/simulation diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..080864a1 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,2 @@ +# PolicyEngine Python interface + diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12736e4dce8158bb6ed2557a2bf9d0856811758e GIT binary patch literal 10188 zcmd5?_divC{J+^Fgp@KXD=Sg4M+(7Dak3Ok3EL!r2nD3~2_tiu%TSLinlj4$ou(w#vd2fn8 zv={V2=i{s%T15&QsS|e;rdUcLdcSPf_49o@HO);#va{3}qa%=N+>UbYYlM3-!6fQ-CVxAd+QXv zdrLCQR{zB*F+$;Vb_(#ljwr;k7H?#jG7dwV5ULBD$ge1JRqGNgZ10Tfx~{ufiaeYJ z@r_XH6QMc!arP%te79p{QmUrwRW41yUktcap(fU_;QmF0+cnNbQj%GV`RU-A3|Zc* z;Tv%y@!hA-EUz~5Brv2aHxwn5CM&Fb>*ibN=j1_~_v%2yLOND9KQc``t+Nh?EZgw- zV5u=TL#W92TaLYLgxxt?n^kN~vBF!8UIn|ol3BjH8gMn%_H!VbIL%{kYtZLjzMAE# zV5Y?nBQS3}k1dHW(y3FRgV+)H1k6~RQgUnNXlX0xg&OFnmD+=N)jMc!`$dDY*)yNw z+IXl~Nhg|xy)vh7f!i*{!vevP#21M3~X z9yfdTv{K_WJG>s^<>S9Q;gI zYTmiHDSI@d{dVL}_nh>WJP7278l&Ev;y`+$zwXVC=+Z>j;}$~qMozwFt?-^u3t*cX zVV@2ISMxw(bGFX{K|ZE9OMA)<70Id2lN_eEMxo6w{VmD%M=)v!TTv#z_SP<0CaKoT zpFE%46gvk3l@5PZg|(OOOUmTl-YcpuL)XMC*P0~Tm;WgynsoIE5O|$ovhCb#L6EsU zS7Zq!g%MVFmz(a2R@vhXh`sE4A$ZyI1e*&W(64}>=jR$W()xF_P|Ee4d%R7iKSYcn z&bE9d;L~o8UF*ucE`y&)0@ePUu^TNKd=-=K ztL(Skw+P1wQ92WXWvFV-fr6{A^0e3GXc;D{@6Wtnh{&56`sg_-oW-eo2Q|0IKe+u> zl*65k%Qa1UI!4VM1ma~XrJ0+wv)mamb+hGB9-k^91Pvx$f1hLi&`#&ef|=wB{`&Yx z+MR#Ww@PW}BGApgyCRn_2F;h^n#c8e9@iMZ6DY7uJK)d}loZ;gy{LO-y_Hu61d97u zMY*|Qvfeu^%nD00^oJsw73P)BITv99^T*>Pl#RUe4OppaZ?`jmKy!tVkO`?It%*mj zV-BaLMV_auvNvtxxuRfVKaCyp4UVb*$>k@7SOp?;R}>;e(gql?E2ljL*JXCJbGfZ4 zI3vKu?{2pgM+N2^#LrYA$S2w70K(lI9#$34QHbP!>>i;{jQ+hs#4_$y9bUH`=$?4} zUoX$``YCk#@H$cBv_a8a+BVmPtZ}@>*%-!kcl7R1=}4(A%F%tVsQe+#x3VA}y7MRq z=U?*-UYUfNA4x0f=IPGqyGzN7&HhSldp?~bykB&&8@x?L-sNOmI3D?1rek!#^4K!E zZL&Ld%qybb%eL2wk&dy9)|H65*~3&p-|8Cdriv#WD3>c3BzPNhG;dnr`tbTDd7bF(0e= zP!KuXMYL&)S_;p)G^UbJe9FY%-4~47N=Qr&o8Xo@3sJ3_n8on1z%W?Lmtb?!i1O1C z6~JakQ0&K~w;=Y?CVkS5y%Jw-wl!^s~0^;H3UyE0Z0GQ9n6uowv;M(aXk`b_W<0RF{5TU=-q>!c?-L zN8u@D$!o4wHg5v??c^VG2*pvG`PZ=*lPS?X7hcSGD>7lY2ie~v%+ucI_e1Y=&VGJt}8isubbg1%+jSPb`~&1AJ(-Gy1{cE8oU`ppl-ubCT3 zul%wmP$8S_cTAG#{pndkm@xIJSf0AaKQ5Px$An~XPOIo#VNrx zKp@q)F+Fo0l=4HGD8Mab+2)>x+21&Bi-5r_3hzH2x64hNKIKkMQIP1y$m2$G$2Q86 z_TrYxj^4Ai*v?Vc?h`daf7DSmpCyh#rG?6FHyHP{QkijTbnQ_OqsT3#$fj){=H_i1 z@BW{sX-S8`c|%XF1;258Tac^OeX$pT@%E5>+@bF0`!tc}9}c$~b4+alO>Z9O8y6dqHSEV44<#&zdBfF$ zqt?m4KQ(DPJ`mdc+TB2vS7_t6)AWTWJ#P^^)42Z``tccKXmobKza)z?!>cN1KiYd} zyz{KX`U}oaV5GC?<%1IENG%UvVhGAZO}G=1AZd{l?Yhgki9C4htzymF;$4;-?mOzbPTina8{<%OHd{b_Ui%d}0=&e@E9 z9Jrr}NA%}C$w44{m;1cF97X;4R1JE*`^E0>eIW5g$a@b95-iPv%L`%GLnda7UXDZ3 z9$@HZ8O`+mk!_~c&w{w($GhU2Aq)X5j*2xk7DFiS^;#Y~_5trt%k7QN87)7BF};?j z&KH*XQR^PX{f}uVe^#p_Ix_fzBj+C5>EEG6)SKr`Y5r&lnEPbNuMzp0dS(iqgXgoH zR~g3;qBz$Vn4X%Hv(dJkf$2igHFa$HS6!r&dzw>)oj#d)|7e16)JD5pUpk2Y8_gCM z3tQ1_{KdP|KbbtesBboXHYM4Z1;pbxPo#SF*PKE}lbteswYQr3X{Z(qFvy+uAb;j(-q@|QdJcP7tqk|}RQW#f8}@t-L>A_b(CfX@Aq zgA!|6BwGs{dU$=GVd09;#DWL!wZZa?FH{qY8w&IVsx@UIu}bQzj?-!v-?j0i_K0IQ z$S1FNpHF#P_D-d~iv&R1m%OO^GW>!IXhFK0AFXOLNTq#4F>FF~lnqov6GV5<`n9-pB+vSS z@>V#6abL|nh;#-gQasMLMSRdcEI0KhP4FiQDuqN9dOFD7Sdb;%G!r<(Rf5!~6x)YP zxNoo7-27sSt-MP_@3`7rXD)E-TSF4+HjI9_2m?I_&}o^lY^b{7_&g^IWP%64_vHxM+|?oxO?|}QZ^d|q0Baj zoa)6gglEfIO0ViNT0x5M8_OHCGnpFx%V2&lu=}sW%)Toecc`ZL`HtM8<=`Rek~Wh+ zbDpf(iMtO#h3o3%iE9)>$&ssCnS~|N5e_jIz5Z!<1t64I;Xlix1MtZjsM9wi-_ry> zN3TW8rx^OQB*yt>SBV>0cXIB%`|fnf#{8$`*l^dSXaBA>H!94pA6E;)YgsY*NQ;BD zADBxYb*ydQJKw)pPlgg>n=g7>XDFr;ETCmd7moMNJ0R!Kyf73?nQL4zp4Xp9Yo9l@ zN($h6-g~^gi+xh=5y%(WP;uNbmVaEy_GhPje}??lq&wSKU#z78QS#~jpEI&H~ zogpl@gTlP@3b=4B?j@Mjew`Q#%)8aR`K-3|a_GnXQ$=mpt^s3kQSL_XwOdJLjg-ZN zUj=rH*mR1n!e%nr4}5zPj~9}U-4XKCA={IlC-rqayGMSq*| zRXB+@9bfMin=+@VfkMADzk<9kkUFxr{I1LM<&Yi#C+O3K5XBd|*!8q!)3X{l=r!9X ze_|17vA5OE6mjcJLJ)A|=pMJfUy`CBEmLDW=cE%8kMu_;KLwQw?Jf23Plk(EN~i%r zlS?7Bpxe?%CmUL`(i>XU;QugR0$~1twfuvn9ycxnMQkTa6|~ z@zO^Dbt{;;*`KhziZ)Yw;znz(+c~WdjOj!y(fifnn~!GvzNc9H$uB+8G?@Wio*rPr zl~J)cDJqZEr2x(esl6}@?VoYO!1vvUC%^YRQ)uVE@e6e8^bljnDNE{X4 z;Cwwk^tHQ`HJ7Pmy)v^?P}GFzpI_a+CFdh{*Y8I>udD=m3lqAKTHaYFyr<>$b&i(} z%(rmL`x+UitJ&l2Qwf?T&ydvQh7Zg$Y?vb)nqM5ICHj=q{_a=CRPJg5`Wn!Y`G@p3 zm7$)R&OFQtbUrnlOoQ>X-sNzA#0N_r@4;$Yl9}ji?<_O@^t8zE$|yaQP`<@n;B5Q9 z*FJsRQCBN-4D}zCVJ5134iPzjnI1 zc`6Y1vC(YiwegzG+Z~#3H)c^X0k!cNQ763Lnoz(>YI)T7_@wlQ3Pl?e_8}bCh|W9s zc9@|=qzVvV_C2~~FjU%V+BSrE=iqEMRW$v3(%+9&GMGeQtd`S~j9-y?iM|eN`Ss z?8njEyB~S%i71uFml>^Iq72i!1z+)8G5b@U9~ICJ4SE+=BUW9(sWLxN+S}w9bmAak z6Fa)}keT{95Hj6XuFZtE=}^~8Zoz{ddlz8a>U0nI8FwTtGK87Fgvjy&cq(8d^N;MG zDJzC~iRwB8q-k;Dgp~H|zs2K?6-NF_PyrHwF0R1T_Dm0gVBvA-hsz^{RT=hoQX;J# zhYu<_6l{-?@kwwXc=FfdK6aZG>EwE31x{QlUbMZd!&ne~Hc*)+y7YtGb(Np|Q3fax zd7)h-^HCaX4JDyxDSGuu;QV)7(4s}|l$=+9;ThU)Qfx-8r@`(P20=ybfb|4IbmY!^ zj6{06oGuDjoT^eXw~IVqoSdhw52{0ieW96kl;r8e(mT}2o72n!2P8e@En}amC#bt& z@6{9&rq({m1-+AaCvXS@mORD^W)VBfBYbw80940l=Gf-cS9`EsJcC&e9{4+ zyB7oBZ?Zxi^ZA{^s$)*8KX55q4W_%(#8lZp zrgk)wqB+bu6f0<+k)!_Y{=uK&FDmTXz3Diq5@77lyh1a_urqTRFSV@dFz7nwHkXfm z4O{r3qJN(#%7Geo;96!<=-{5=5Nho^*ltj^$Z0svLL--9=Z!{{Ah=^qQ)phtp#~iB;dladMd^T$HINwpDqv%)sbY-7wz>K3U>c{)$lz2Rk;uls87VtI~3#5g+>)ozYX zdxS1=fVv-~{MBARL+p9~{$NmPKteURR5a1R0mkJZB_O}1JR*sy95zFaLl_pD^AAx* z@zIi5GZh(^vHF%qU*nJpfmIFoVM2{SDYj`~ah#C9WfXd6`WSIV7hpAz>20OtgCEqP z^r4;WY7^m!#m)IDWz||$#hIydB`$es%~`8GVr5`odCwez=~muWgfOr=EW_B^uufC3 zoFNqQpR@{bbgVYhTlo#p+SvN4O_<_chfKc;x;Ll4V)A#WnhxDpKZVf<|CBWMu+2{g z399k}HKc&ucyvYF_0rXob*S=x3>m8`!Z+SDxK8xD7khQNsQ6fVqN)%kG014vYjI~a zwbu|YPq$F~2dH?M-Z~{t>KWYnT5JQW4zd<)<7iF&E?kunh~8brw$U18s7O6xV=9m&ZsMF#s(MjeIoT~41S*;dbbb#ZuUCq zZkJ2(lrc%7DIGG$^c2XZYy?7(Y)iNnnzSd0dFo5#x zVqVh4oTd2v0w_CN%{NZ@)WSfn5;5yWGY2?(NCO}6+$-Y{5%%!ahWfA<&w#F4?l1H^ z6v@QFbEWvcw*;#f!`0-BQ`e8r9*|@j0eYvA^mcwai0%QEJ%L@Yz*1FneTBnON-;YNmM>_PbA& zral~0ijAhWeGy?;4Uw|vabn7epy?7`{I`*s@|_+^SA55H9s zqmyxJMXcdiu^(>&9u;&bJi6R5*Ptb`ysw5U4i-v{vhvL$sGW9cV?v*8mEu@Fmj!mk z01Kz8*h4TU3|n;+Ybfg*K_Q_0N#p)r@t0;n0n#RQ?Y(1#S`m+??ic-G#1Rj0G;4}= z?TrtWQgMe8C*&btMKwzCig5 z|JqAG+c|z(Xv~Z9drD^W7pH~I!#h`+I2forZ(BgD&Z^&m754~b`b1s-n)h~~fsjlc zR_<_;I#vczQoqct&aHVrqNxX@*0pCF;$7V-Am-0{+k1o1aut4)OTGOrTTsh`i{s!>t_XpZcJ5UK`s=L>Ng74v2-8DYq8B z!w>hE!NmeC_Lt)A9Z;w1)Dx^=7K;(fcV}|HXetq>YS|fDnI6UHiMRyCdSCnbb@RpV zN*k}UA$3C}6f>yd4^;Mg!_4<2faMK=s13{WNbS5%Y)Ok5-r3bUgO{$yAbRp(QJ*Qo z9PE9c+2NLMqS(#RnUF?AX2&~=ky|tt;dEya$@zs=9*+ElKrnS8-sLqLZDjyu;pQC|i zLF#L+zi9o##5+L9{KZGOspW%*-*eR3tBj@9&!3#)x@TKJlywH|5JwqULr(d97`d#}E~v zc?g+{q#*tY#LFk9#dbOHy}G%Idy@yur{TzGnZJY%u%saKLA%sG1{D9*XG5Cgv#Xhq zI$q(^YpVB4tZQkFhXD$34h3>(K_ntf?e|*@#<|lZ zlu^*?>kOkD-OLDKrT;Sr0YgB)Dn1^Ic_bC>qkjs~Q&QoY=Y4;srhw$qZyA+|x^fXA zERo|Q_@{U&9A|09|GWBlClZ=wq+Zm4Fdt5$P3h3_wevzZAldCJ7-}OMe1K+RVHlxv zq;$x%V}rT9dNiISR!D1c7Ky98y5Yl+w(=Q$mZc}SCl7-|-4(|tt{;|yxvu{qsThu|K1+mF4W<%2a14_o+^Jeyc z?b}=}3ky;59N*0RSq(p*{I1AV7!q&3TM7k--E(!o@jPG?i_{EA4B`q?zEttt z%z(pi1TpNgTE#4e2Xda_V#V1=sx=n1bB z%Mx{-+lbLzA-+K9uWR;S7Uf0vOXgg2o&o2Y?QVU-wlVMOcqgs5HD+D($VcQ9{XOz5 zf5WPf2z>_FXo9R(&?Ts2(xeWYW$;od{-?%S&*pe;3XK>`$F$5=?Xau02JncLmTJ-- zz1mrCvmLF<9PV%0qOU~ATqebrGEfz{i$rKR5lzkbc_L_7KvXF=H(bCdE4<7yU#WFMF^rmxCH&`ph`WjtU+ewZ!z2O92@QqnD6x~M$o=I*qb zXTCSv!y;T1)8FqR81vVn6lo+PHUjggC3fiXR>}L=@70>`uX%nBGp5*l?KF-|lqR)w zl?G`RBhMapDB0f3u(Ub6y^tw$T4l9!Y*!+ID6%{*eIVc^V?bZ_`Oa06>EUC8Cs!M^ z2pMZ)Qeh#-OP0UYL;Zd2y~Y}1W_Y0&Pu^6(m%RVzBx~#dg+TQG6av$;C{Tx*0XVD3 zz}BpG7MkVG1SSQ_?ht;k`&PhvA4iaTv2E>86Wpd$2qs%h)^GHwJw1R=e3&thIBhYR zML##;I^FC?WPTf~^bwpnaX&D0Zah7{f94t1+c8|O22@igxKLdFMwl~luPD3tKBnmD z-uC9l8VMz_S&jE%-QxS|!dM^tGc&Qnj?)?k!bqg<3uQl-O<00?FO{^{-kO%HN!xgq zn2Rq9CJhW6>dNK)%a4SA%^G>OsjN=cD*bu^#Kx4`o zE8Xl-30WN`l_F5t(D1Gqk0Y>dzxAaMX5b)UHY9ecyjLVEhLfeW7{P~}IXhU!+3OJB z)l~bY2`qnLH6F9QvaGTOG&oCB)aL|L@c}!zz;G?FOE5WDYv4RD04KO;Fn&=Sxl`e! zX7brLVRfc#v?Z1s=UqhPwBw<{XyY%xHkZC3m^=1H;w5|3<)g9}ABUmhcYC8d+Qe73 z`N-~$BJVeNfVV;vK)*j+#lLZ{Sxa(DiL+HVA{!=Xn`l{L2y1!6iuI)Vw6P^n)vUtF z7@sPzhIy$p8+uTAxX(mwv!MR2xIAsirfmhIQ<;&jG?dT9<(Pj;G27Or_=b?%27mzc N=z-pS#Jwk>{{sb>U7r8| literal 0 HcmV?d00001 diff --git a/policyengine/__init__.py b/policyengine/__init__.py index 7846d09b..63a753be 100644 --- a/policyengine/__init__.py +++ b/policyengine/__init__.py @@ -1 +1 @@ -from .simulation import Simulation, SimulationOptions \ No newline at end of file +from .simulation import Simulation, SimulationOptions diff --git a/policyengine/outputs/compare.py b/policyengine/outputs/compare.py index 0317e0e0..385c543c 100644 --- a/policyengine/outputs/compare.py +++ b/policyengine/outputs/compare.py @@ -521,8 +521,8 @@ def compare_economic_outputs( dict: The comparison of the two economies. """ if baseline.get("type") == "general": - budgetary_impact_data = budgetary_impact(baseline, reform) - detailed_budgetary_impact_data = detailed_budgetary_impact( + budgetary_impact_data = budgetary_impact(baseline, reform) # done + detailed_budgetary_impact_data = detailed_budgetary_impact( # done baseline, reform, country_id ) decile_impact_data = decile_impact(baseline, reform) diff --git a/policyengine/outputs/calculate_economy_comparison.py b/policyengine/outputs/macro/calculate_economy_comparison.py similarity index 51% rename from policyengine/outputs/calculate_economy_comparison.py rename to policyengine/outputs/macro/calculate_economy_comparison.py index c41325d2..8ab3ad56 100644 --- a/policyengine/outputs/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/calculate_economy_comparison.py @@ -1,24 +1,39 @@ +"""Calculate comparison statistics between two economic scenarios.""" + import typing + if typing.TYPE_CHECKING: from policyengine import Simulation from pydantic import BaseModel from policyengine.utils.calculations import get_change -from .macro.single import calculate_government_balance, FiscalSummary +from .single import ( + calculate_government_balance, + FiscalSummary, + calculate_inequality, + InequalitySummary, +) + class FiscalComparison(BaseModel): baseline: FiscalSummary reform: FiscalSummary change: FiscalSummary + class EconomyComparison(BaseModel): fiscal: FiscalComparison + inequality: InequalitySummary + -def calculate_economy_comparison(simulation: "Simulation"): +def calculate_economy_comparison( + simulation: "Simulation", +) -> EconomyComparison: + """Calculate comparison statistics between two economic scenarios.""" if not simulation.is_comparison: raise ValueError("Simulation must be a comparison simulation.") - + baseline = simulation.baseline_simulation reform = simulation.reform_simulation options = simulation.options @@ -26,9 +41,14 @@ def calculate_economy_comparison(simulation: "Simulation"): baseline_balance = calculate_government_balance(baseline, options) reform_balance = calculate_government_balance(reform, options) change = get_change(baseline_balance, reform_balance) - fiscal_comparison = FiscalComparison(baseline=baseline_balance, reform=reform_balance, change=change) + fiscal_comparison = FiscalComparison( + baseline=baseline_balance, reform=reform_balance, change=change + ) + + baseline_inequality = calculate_inequality(baseline) + reform_inequality = calculate_inequality(reform) + inequality_comparison = get_change(baseline_inequality, reform_inequality) return EconomyComparison( - fiscal=fiscal_comparison, + fiscal=fiscal_comparison, inequality=inequality_comparison ) - diff --git a/policyengine/outputs/macro/single.py b/policyengine/outputs/macro/single.py index 6c5e6ea7..46301d7b 100644 --- a/policyengine/outputs/macro/single.py +++ b/policyengine/outputs/macro/single.py @@ -1,4 +1,5 @@ import typing + if typing.TYPE_CHECKING: from policyengine import Simulation, SimulationOptions @@ -6,12 +7,14 @@ from pydantic import BaseModel + class TaxBenefitProgram(BaseModel): name: str """The name of the tax-benefit program.""" is_positive: bool """Whether the program is positive on the *government* balance sheet.""" + UK_PROGRAMS = [ TaxBenefitProgram(name="income_tax", is_positive=True), TaxBenefitProgram(name="national_insurance", is_positive=True), @@ -26,6 +29,7 @@ class TaxBenefitProgram(BaseModel): TaxBenefitProgram(name="pension_credit", is_positive=False), ] + class FiscalSummary(BaseModel): tax_revenue: float """The total tax revenue collected by the government.""" @@ -40,6 +44,7 @@ class FiscalSummary(BaseModel): household_net_income: float """The total net income of the households in the simulation.""" + def calculate_government_balance( simulation: Microsimulation, options: "SimulationOptions", @@ -50,23 +55,21 @@ def calculate_government_balance( total_spending = simulation.calculate("gov_spending").sum() tb_programs = {} for program in UK_PROGRAMS: - tb_programs[program.name] = simulation.calculate(program.name).sum() * ( - 1 if program.is_positive else -1 - ) + tb_programs[program.name] = simulation.calculate( + program.name + ).sum() * (1 if program.is_positive else -1) total_state_tax = 0 else: total_tax = simulation.calculate("household_tax").sum() - total_spending = simulation.calculate( - "household_benefits" - ).sum() + total_spending = simulation.calculate("household_benefits").sum() total_state_tax = simulation.calculate( "household_state_income_tax" ).sum() - + national_tax = total_tax - total_state_tax total_net_income = simulation.calculate("household_net_income").sum() - + return FiscalSummary( tax_revenue=total_tax, federal_tax=national_tax, @@ -74,4 +77,45 @@ def calculate_government_balance( government_spending=total_spending, tax_benefit_programs=tb_programs, household_net_income=total_net_income, - ) \ No newline at end of file + ) + + +class InequalitySummary(BaseModel): + gini: float + """The Gini coefficient of the household net income distribution.""" + top_10_share: float + """The share of total income held by the top 10% of households.""" + top_1_share: float + """The share of total income held by the top 1% of households.""" + + +def calculate_inequality( + simulation: Microsimulation, +): + income = simulation.calculate("equiv_household_net_income") + income[income < 0] = 0 + household_count_people = simulation.calculate("household_count_people") + income.weights *= household_count_people + personal_hh_equiv_income = income + gini = personal_hh_equiv_income.gini() + in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 + in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 + + personal_hh_equiv_income.weights /= ( + household_count_people # Don't double-count people + ) + + top_10_share = ( + personal_hh_equiv_income[in_top_10_pct].sum() + / personal_hh_equiv_income.sum() + ) + top_1_share = ( + personal_hh_equiv_income[in_top_1_pct].sum() + / personal_hh_equiv_income.sum() + ) + + return InequalitySummary( + gini=gini, + top_10_share=top_10_share, + top_1_share=top_1_share, + ) diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 3f898ec6..907f2487 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -1,9 +1,13 @@ +"""Simulate tax-benefit policy and derive society-level output statistics.""" + from pydantic import BaseModel, Field from typing import Literal from .constants import DEFAULT_DATASETS_BY_COUNTRY from policyengine_core.simulations import Simulation as CountrySimulation -from policyengine_core.simulations import Microsimulation as CountryMicrosimulation -from .reforms import ParametricReform, SimulationAdjustment +from policyengine_core.simulations import ( + Microsimulation as CountryMicrosimulation, +) +from .utils.reforms import ParametricReform, SimulationAdjustment from policyengine_core.reforms import Reform as StructuralReform from policyengine_core.data import Dataset from .utils.huggingface import download @@ -19,44 +23,44 @@ from pathlib import Path import pandas as pd from typing import Type +from functools import wraps +from .outputs.macro.calculate_economy_comparison import ( + calculate_economy_comparison, + EconomyComparison, +) CountryType = Literal["uk", "us"] ScopeType = Literal["household", "macro"] DataType = str | None TimePeriodType = int -ReformType = ParametricReform | SimulationAdjustment | Type[StructuralReform] | None +ReformType = ( + ParametricReform | SimulationAdjustment | Type[StructuralReform] | None +) RegionType = str | None SubsampleType = int | None + class SimulationOptions(BaseModel): - country: CountryType = Field( - ..., description="The country to simulate." - ) - scope: ScopeType = Field( - ..., description="The scope of the simulation." - ) - data: DataType = Field( - None, description="The data to simulate." - ) + country: CountryType = Field(..., description="The country to simulate.") + scope: ScopeType = Field(..., description="The scope of the simulation.") + data: DataType = Field(None, description="The data to simulate.") time_period: TimePeriodType = Field( ..., description="The time period to simulate.", ge=2024, le=2035 ) - reform: ReformType = Field( - None, description="The reform to simulate." - ) - baseline: ReformType = Field( - None, description="The baseline to simulate." - ) + reform: ReformType = Field(None, description="The reform to simulate.") + baseline: ReformType = Field(None, description="The baseline to simulate.") region: RegionType = Field( None, description="The region to simulate within the country." ) subsample: SubsampleType = Field( - None, description="How many, if a subsample, households to randomly simulate." + None, + description="How many, if a subsample, households to randomly simulate.", ) class Simulation: """Simulate tax-benefit policy and derive society-level output statistics.""" + is_comparison: bool """Whether the simulation is a comparison between two scenarios.""" baseline_simulation: CountrySimulation @@ -71,7 +75,7 @@ def __init__(self, options: SimulationOptions): self.options.data = DEFAULT_DATASETS_BY_COUNTRY[ self.options.country ] - + self._initialise_simulations() def _set_data(self): @@ -108,7 +112,7 @@ def _initialise_simulations(self): self.is_comparison = False def _initialise_simulation( - self, + self, country: CountryType, scope: ScopeType, reform: ReformType, @@ -131,7 +135,7 @@ def _initialise_simulation( if isinstance(reform, ParametricReform): reform = reform.model_dump() - + simulation_editing_reform = None if isinstance(reform, SimulationAdjustment): @@ -158,13 +162,12 @@ def _initialise_simulation( if subsample is not None: simulation = simulation.subsample(subsample) - + if simulation_editing_reform is not None: simulation_editing_reform(simulation) - + return simulation - def _apply_region_to_simulation( self, country: CountryType, @@ -289,3 +292,7 @@ def _data_handle_cps_special_case(self): version=version, ) self.data = Dataset.from_file(self.data, "2023") + + def calculate_economy_comparison(self) -> EconomyComparison: + """Calculate comparison statistics between two economic scenarios.""" + return calculate_economy_comparison(self) diff --git a/policyengine/utils/calculations.py b/policyengine/utils/calculations.py index 7f520b0b..c4e9a853 100644 --- a/policyengine/utils/calculations.py +++ b/policyengine/utils/calculations.py @@ -3,6 +3,7 @@ Output = Dict[str, float] + def get_change( x: Output | Dict[str, Output], y: Output | Dict[str, Output], @@ -21,5 +22,5 @@ def get_change( result[key] = get_change(x[key], y[key]) else: result[key] = y[key] - x[key] - - return output_class(**result) \ No newline at end of file + + return output_class(**result) diff --git a/policyengine/reforms.py b/policyengine/utils/reforms.py similarity index 78% rename from policyengine/reforms.py rename to policyengine/utils/reforms.py index d18448ba..ab8225bb 100644 --- a/policyengine/reforms.py +++ b/policyengine/utils/reforms.py @@ -9,8 +9,11 @@ class ParametricReform(RootModel): """A reform that just changes parameter values.""" + root: Dict[str, Dict | float | bool] + class SimulationAdjustment(RootModel): """A reform that changes the simulation in some way.""" - root: Callable[[Simulation], None] \ No newline at end of file + + root: object # Python callable function that takes a Simulation object and returns nothing. Not JSON serialisable. Needs fixing. From 58d2981992abb1b7d2ac8652d6dd9d87ac59288f Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 14:28:04 +1100 Subject: [PATCH 18/32] Add budget, inequality and distributional impacts --- .../outputs/{compare.py => api_compare.py} | 10 +- .../outputs/{single.py => api_single.py} | 0 .../outputs/macro/comparison/__init__.py | 0 .../calculate_economy_comparison.py | 27 ++- .../outputs/macro/comparison/decile.py | 198 ++++++++++++++++++ policyengine/outputs/macro/single/__init__.py | 2 + .../macro/{single.py => single/budget.py} | 43 +--- .../outputs/macro/single/inequality.py | 50 +++++ policyengine/simulation.py | 2 +- 9 files changed, 278 insertions(+), 54 deletions(-) rename policyengine/outputs/{compare.py => api_compare.py} (99%) rename policyengine/outputs/{single.py => api_single.py} (100%) create mode 100644 policyengine/outputs/macro/comparison/__init__.py rename policyengine/outputs/macro/{ => comparison}/calculate_economy_comparison.py (62%) create mode 100644 policyengine/outputs/macro/comparison/decile.py create mode 100644 policyengine/outputs/macro/single/__init__.py rename policyengine/outputs/macro/{single.py => single/budget.py} (68%) create mode 100644 policyengine/outputs/macro/single/inequality.py diff --git a/policyengine/outputs/compare.py b/policyengine/outputs/api_compare.py similarity index 99% rename from policyengine/outputs/compare.py rename to policyengine/outputs/api_compare.py index 385c543c..2f561628 100644 --- a/policyengine/outputs/compare.py +++ b/policyengine/outputs/api_compare.py @@ -525,16 +525,16 @@ def compare_economic_outputs( detailed_budgetary_impact_data = detailed_budgetary_impact( # done baseline, reform, country_id ) - decile_impact_data = decile_impact(baseline, reform) - inequality_impact_data = inequality_impact(baseline, reform) + decile_impact_data = decile_impact(baseline, reform) # done + inequality_impact_data = inequality_impact(baseline, reform) # done poverty_impact_data = poverty_impact(baseline, reform) poverty_by_gender_data = poverty_gender_breakdown(baseline, reform) poverty_by_race_data = poverty_racial_breakdown(baseline, reform) - intra_decile_impact_data = intra_decile_impact(baseline, reform) + intra_decile_impact_data = intra_decile_impact(baseline, reform) # done labor_supply_response_data = labor_supply_response(baseline, reform) try: - wealth_decile_impact_data = wealth_decile_impact(baseline, reform) - intra_wealth_decile_impact_data = intra_wealth_decile_impact( + wealth_decile_impact_data = wealth_decile_impact(baseline, reform) # done + intra_wealth_decile_impact_data = intra_wealth_decile_impact( # done baseline, reform ) except: diff --git a/policyengine/outputs/single.py b/policyengine/outputs/api_single.py similarity index 100% rename from policyengine/outputs/single.py rename to policyengine/outputs/api_single.py diff --git a/policyengine/outputs/macro/comparison/__init__.py b/policyengine/outputs/macro/comparison/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/policyengine/outputs/macro/calculate_economy_comparison.py b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py similarity index 62% rename from policyengine/outputs/macro/calculate_economy_comparison.py rename to policyengine/outputs/macro/comparison/calculate_economy_comparison.py index 8ab3ad56..cadaeb73 100644 --- a/policyengine/outputs/macro/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py @@ -8,23 +8,31 @@ from pydantic import BaseModel from policyengine.utils.calculations import get_change -from .single import ( +from policyengine.outputs.macro.single import ( calculate_government_balance, FiscalSummary, calculate_inequality, InequalitySummary, ) +from .decile import calculate_decile_impacts, DecileImpacts + class FiscalComparison(BaseModel): baseline: FiscalSummary reform: FiscalSummary change: FiscalSummary +class InequalityComparison(BaseModel): + baseline: InequalitySummary + reform: InequalitySummary + change: InequalitySummary + class EconomyComparison(BaseModel): fiscal: FiscalComparison - inequality: InequalitySummary + inequality: InequalityComparison + distributional: DecileImpacts def calculate_economy_comparison( @@ -40,15 +48,22 @@ def calculate_economy_comparison( baseline_balance = calculate_government_balance(baseline, options) reform_balance = calculate_government_balance(reform, options) - change = get_change(baseline_balance, reform_balance) + balance_change = get_change(baseline_balance, reform_balance) fiscal_comparison = FiscalComparison( - baseline=baseline_balance, reform=reform_balance, change=change + baseline=baseline_balance, reform=reform_balance, change=balance_change ) baseline_inequality = calculate_inequality(baseline) reform_inequality = calculate_inequality(reform) - inequality_comparison = get_change(baseline_inequality, reform_inequality) + inequality_change = get_change(baseline_inequality, reform_inequality) + inequality_comparison = InequalityComparison( + baseline=baseline_inequality, reform=reform_inequality, change=inequality_change + ) + + decile_impacts = calculate_decile_impacts(baseline, reform, options) return EconomyComparison( - fiscal=fiscal_comparison, inequality=inequality_comparison + fiscal=fiscal_comparison, + inequality=inequality_comparison, + distributional=decile_impacts ) diff --git a/policyengine/outputs/macro/comparison/decile.py b/policyengine/outputs/macro/comparison/decile.py new file mode 100644 index 00000000..9357a489 --- /dev/null +++ b/policyengine/outputs/macro/comparison/decile.py @@ -0,0 +1,198 @@ +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation, SimulationOptions + +from policyengine_core.simulations import Microsimulation + +from pydantic import BaseModel +from typing import Dict +import numpy as np + +class IncomeMeasureSpecificDecileIncomeChange(BaseModel): + relative: Dict[int, float] + """Relative impacts by income decile.""" + average: Dict[int, float] + """Average impacts by income decile.""" + +class IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(BaseModel): + lose_more_than_5_percent_share: float + """Share of households losing more than 5% of net income.""" + lose_less_than_5_percent_share: float + """Share of households losing less than 5% of net income.""" + lose_share: float + """Share of households losing net income.""" + no_change_share: float + """Share of households with no change in net income.""" + gain_share: float + """Share of households gaining net income.""" + gain_less_than_5_percent_share: float + """Share of households gaining less than 5% of net income.""" + gain_more_than_5_percent_share: float + """Share of households gaining more than 5% of net income.""" + +class IncomeMeasureSpecificDecileWinnersLosers(BaseModel): + deciles: Dict[int, IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes] + """Winners and losers by income decile.""" + all: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes + """Winners and losers for all households.""" + +class IncomeMeasureSpecificDecileImpacts(BaseModel): + income_change: IncomeMeasureSpecificDecileIncomeChange + """Income change by income decile.""" + winners_and_losers: IncomeMeasureSpecificDecileWinnersLosers + """Winners and losers by income decile.""" + +class DecileImpacts(BaseModel): + income: IncomeMeasureSpecificDecileImpacts + """Impacts by income decile.""" + wealth: IncomeMeasureSpecificDecileImpacts | None + """Impacts by wealth decile, if available.""" + + +def calculate_decile_impacts( + baseline: Microsimulation, + reform: Microsimulation, + options: SimulationOptions, +) -> DecileImpacts: + """Calculate changes to households by income and wealth deciles.""" + income_impacts = calculate_income_specific_decile_impacts(baseline, reform, by_wealth_decile=False) + if options.country == "uk": + wealth_impacts = calculate_income_specific_decile_impacts(baseline, reform, by_wealth_decile=True) + else: + wealth_impacts = None + return DecileImpacts(income=income_impacts, wealth=wealth_impacts) + +def calculate_income_specific_decile_impacts( + baseline: Microsimulation, + reform: Microsimulation, + by_wealth_decile: bool, +) -> IncomeMeasureSpecificDecileImpacts: + """Calculate changes to households by income and wealth deciles.""" + income_impacts = calculate_income_specific_decile_income_changes(baseline, reform, by_wealth_decile) + winners_losers = calculate_income_specific_decile_winners_losers(baseline, reform, by_wealth_decile) + return IncomeMeasureSpecificDecileImpacts(income_change=income_impacts, winners_and_losers=winners_losers) + +def calculate_income_specific_decile_winners_losers( + baseline: Microsimulation, + reform: Microsimulation, + by_wealth_decile: bool, +) -> dict: + """Calculate winners and losers by income and wealth deciles.""" + baseline_income = baseline.calculate("household_net_income") + reform_income = reform.calculate("household_net_income") + people_per_household = baseline.calculate("household_count_people") + if not by_wealth_decile: + decile = baseline.calculate("household_income_decile") + else: + wealth = baseline.calculate("total_wealth") + household_count_people = baseline.calculate("household_count_people") + wealth.weights *= household_count_people + decile = ( + wealth.decile_rank().clip(1, 10).astype(int) + ) + # Filter out negative decile values due to negative incomes + absolute_change = (reform_income - baseline_income).values + capped_baseline_income = np.maximum(baseline_income.values, 1) + capped_reform_income = ( + np.maximum(reform_income.values, 1) + absolute_change + ) + income_change = ( + capped_reform_income - capped_baseline_income + ) / capped_baseline_income + + # Within each decile, calculate the percentage of people who: + # 1. Gained more than 5% of their income + # 2. Gained between 0% and 5% of their income + # 3. Had no change in income + # 3. Lost between 0% and 5% of their income + # 4. Lost more than 5% of their income + + BOUNDS = [ + (-np.inf, -0.05), + (-0.05, 0), + (-np.inf, -1e-3), + (-1e-3, 1e-3), + (1e-3, np.inf), + (0, 0.05), + (0.05, np.inf), + ] + LABELS = [ + "lose_more_than_5_percent_share", + "lose_less_than_5_percent_share", + "lose_share", + "no_change_share", + "gain_share", + "gain_less_than_5_percent_share", + "gain_more_than_5_percent_share", + ] + + deciles = {} + all = {} + + for i in range(len(BOUNDS)): + lower, upper = BOUNDS[i] + label = LABELS[i] + + # First, add the 'all' group + + total_people = people_per_household.sum() + in_group = (income_change >= lower) & (income_change < upper) + people_in_group = people_per_household[in_group].sum() + share_in_group = people_in_group / total_people + all[label] = share_in_group + + # Next, add the decile-specific groups + + for d in range(1, 11): + in_group = (income_change[decile == d] >= lower) & ( + income_change[decile == d] < upper + ) + people_in_group = people_per_household[decile == d][in_group].sum() + people_in_decile = people_per_household[decile == d].sum() + share_in_group = people_in_group / people_in_decile + if d not in deciles: + deciles[d] = {} + deciles[d][label] = share_in_group + + return IncomeMeasureSpecificDecileWinnersLosers(deciles=deciles, all=all) + + + +def calculate_income_specific_decile_income_changes( + baseline: Microsimulation, + reform: Microsimulation, + by_wealth_decile: bool, +) -> dict: + """Calculate changes to households by income and wealth deciles.""" + baseline_income = baseline.calculate("household_net_income") + reform_income = reform.calculate("household_net_income") + if not by_wealth_decile: + decile = baseline.calculate("household_income_decile") + else: + wealth = baseline.calculate("total_wealth") + household_count_people = baseline.calculate("household_count_people") + wealth.weights *= household_count_people + decile = ( + wealth.decile_rank().clip(1, 10).astype(int) + ) + # Filter out negative decile values due to negative incomes + baseline_income_filtered = baseline_income[decile >= 0] + reform_income_filtered = reform_income[decile >= 0] + + income_change = reform_income_filtered - baseline_income_filtered + rel_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).sum() + ) + avg_income_change_by_decile = ( + income_change.groupby(decile).sum() + / baseline_income_filtered.groupby(decile).count() + ) + rel_decile_dict = rel_income_change_by_decile.to_dict() + avg_decile_dict = avg_income_change_by_decile.to_dict() + per_decile_changes = dict( + relative={int(k): v for k, v in rel_decile_dict.items()}, + average={int(k): v for k, v in avg_decile_dict.items()}, + ) + return IncomeMeasureSpecificDecileImpacts(**per_decile_changes) \ No newline at end of file diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py new file mode 100644 index 00000000..ce42c17c --- /dev/null +++ b/policyengine/outputs/macro/single/__init__.py @@ -0,0 +1,2 @@ +from .budget import calculate_government_balance, FiscalSummary +from .inequality import calculate_inequality, InequalitySummary \ No newline at end of file diff --git a/policyengine/outputs/macro/single.py b/policyengine/outputs/macro/single/budget.py similarity index 68% rename from policyengine/outputs/macro/single.py rename to policyengine/outputs/macro/single/budget.py index 46301d7b..2a3d78c3 100644 --- a/policyengine/outputs/macro/single.py +++ b/policyengine/outputs/macro/single/budget.py @@ -49,7 +49,7 @@ def calculate_government_balance( simulation: Microsimulation, options: "SimulationOptions", ) -> FiscalSummary: - # Calculate the total tax and spending for the government + """Calculate government balance metrics for a set of households.""" if options.country == "uk": total_tax = simulation.calculate("gov_tax").sum() total_spending = simulation.calculate("gov_spending").sum() @@ -78,44 +78,3 @@ def calculate_government_balance( tax_benefit_programs=tb_programs, household_net_income=total_net_income, ) - - -class InequalitySummary(BaseModel): - gini: float - """The Gini coefficient of the household net income distribution.""" - top_10_share: float - """The share of total income held by the top 10% of households.""" - top_1_share: float - """The share of total income held by the top 1% of households.""" - - -def calculate_inequality( - simulation: Microsimulation, -): - income = simulation.calculate("equiv_household_net_income") - income[income < 0] = 0 - household_count_people = simulation.calculate("household_count_people") - income.weights *= household_count_people - personal_hh_equiv_income = income - gini = personal_hh_equiv_income.gini() - in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 - in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 - - personal_hh_equiv_income.weights /= ( - household_count_people # Don't double-count people - ) - - top_10_share = ( - personal_hh_equiv_income[in_top_10_pct].sum() - / personal_hh_equiv_income.sum() - ) - top_1_share = ( - personal_hh_equiv_income[in_top_1_pct].sum() - / personal_hh_equiv_income.sum() - ) - - return InequalitySummary( - gini=gini, - top_10_share=top_10_share, - top_1_share=top_1_share, - ) diff --git a/policyengine/outputs/macro/single/inequality.py b/policyengine/outputs/macro/single/inequality.py new file mode 100644 index 00000000..23cb66f2 --- /dev/null +++ b/policyengine/outputs/macro/single/inequality.py @@ -0,0 +1,50 @@ +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation, SimulationOptions + +from policyengine_core.simulations import Microsimulation + +from pydantic import BaseModel + + +class InequalitySummary(BaseModel): + gini: float + """The Gini coefficient of the household net income distribution.""" + top_10_share: float + """The share of total income held by the top 10% of households.""" + top_1_share: float + """The share of total income held by the top 1% of households.""" + + +def calculate_inequality( + simulation: Microsimulation, +): + """Calculate inequality statistics for a set of households.""" + income = simulation.calculate("equiv_household_net_income") + income[income < 0] = 0 + household_count_people = simulation.calculate("household_count_people") + income.weights *= household_count_people + personal_hh_equiv_income = income + gini = personal_hh_equiv_income.gini() + in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 + in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 + + personal_hh_equiv_income.weights /= ( + household_count_people # Don't double-count people + ) + + top_10_share = ( + personal_hh_equiv_income[in_top_10_pct].sum() + / personal_hh_equiv_income.sum() + ) + top_1_share = ( + personal_hh_equiv_income[in_top_1_pct].sum() + / personal_hh_equiv_income.sum() + ) + + return InequalitySummary( + gini=gini, + top_10_share=top_10_share, + top_1_share=top_1_share, + ) diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 907f2487..f60c3bd1 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -24,7 +24,7 @@ import pandas as pd from typing import Type from functools import wraps -from .outputs.macro.calculate_economy_comparison import ( +from .outputs.macro.comparison.calculate_economy_comparison import ( calculate_economy_comparison, EconomyComparison, ) From fd2765b08c02cfe7551590ddceb7ab43e437aa2d Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 15:49:07 +1100 Subject: [PATCH 19/32] Add poverty metrics --- .../calculate_economy_comparison.py | 48 +++++++++-- .../outputs/macro/comparison/decile.py | 4 +- policyengine/outputs/macro/single/__init__.py | 3 +- .../macro/single/calculate_single_economy.py | 35 ++++++++ policyengine/outputs/macro/single/poverty.py | 79 +++++++++++++++++++ policyengine/simulation.py | 7 +- policyengine/utils/calculations.py | 18 ++++- 7 files changed, 182 insertions(+), 12 deletions(-) create mode 100644 policyengine/outputs/macro/single/calculate_single_economy.py create mode 100644 policyengine/outputs/macro/single/poverty.py diff --git a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py index cadaeb73..6de34762 100644 --- a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py @@ -13,26 +13,42 @@ FiscalSummary, calculate_inequality, InequalitySummary, + calculate_poverty, ) from .decile import calculate_decile_impacts, DecileImpacts +from typing import Literal, List + class FiscalComparison(BaseModel): baseline: FiscalSummary reform: FiscalSummary change: FiscalSummary + relative_change: FiscalSummary class InequalityComparison(BaseModel): baseline: InequalitySummary reform: InequalitySummary change: InequalitySummary + relative_change: InequalitySummary + +class PovertyRateMetricComparison(BaseModel): + age_group: Literal["child", "working_age", "senior", "all"] + racial_group: Literal["white", "black", "hispanic", "other", "all"] + relative: bool + poverty_rate: Literal["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"] + baseline: float + reform: float + change: float + relative_change: float class EconomyComparison(BaseModel): fiscal: FiscalComparison inequality: InequalityComparison distributional: DecileImpacts + poverty: List[PovertyRateMetricComparison] def calculate_economy_comparison( @@ -48,22 +64,44 @@ def calculate_economy_comparison( baseline_balance = calculate_government_balance(baseline, options) reform_balance = calculate_government_balance(reform, options) - balance_change = get_change(baseline_balance, reform_balance) + balance_change = get_change(baseline_balance, reform_balance, relative=False) + balance_rel_change = get_change(baseline_balance, reform_balance, relative=True) fiscal_comparison = FiscalComparison( - baseline=baseline_balance, reform=reform_balance, change=balance_change + baseline=baseline_balance, reform=reform_balance, change=balance_change, relative_change=balance_rel_change ) baseline_inequality = calculate_inequality(baseline) reform_inequality = calculate_inequality(reform) - inequality_change = get_change(baseline_inequality, reform_inequality) + inequality_change = get_change(baseline_inequality, reform_inequality, relative=False) + inequality_rel_change = get_change(baseline_inequality, reform_inequality, relative=True) inequality_comparison = InequalityComparison( - baseline=baseline_inequality, reform=reform_inequality, change=inequality_change + baseline=baseline_inequality, reform=reform_inequality, change=inequality_change, relative_change=inequality_rel_change ) decile_impacts = calculate_decile_impacts(baseline, reform, options) + baseline_poverty_metrics = calculate_poverty(baseline, options) + reform_poverty_metrics = calculate_poverty(reform, options) + poverty_metrics = [] + for baseline_metric, reform_metric in zip(baseline_poverty_metrics, reform_poverty_metrics): + change = reform_metric.value - baseline_metric.value + rel_change = change / baseline_metric.value + poverty_metrics.append( + PovertyRateMetricComparison( + age_group=baseline_metric.age_group, + racial_group=baseline_metric.racial_group, + relative=baseline_metric.relative, + poverty_rate=baseline_metric.poverty_rate, + baseline=baseline_metric.value, + reform=reform_metric.value, + change=change, + relative_change=rel_change + ) + ) + return EconomyComparison( fiscal=fiscal_comparison, inequality=inequality_comparison, - distributional=decile_impacts + distributional=decile_impacts, + poverty=poverty_metrics, ) diff --git a/policyengine/outputs/macro/comparison/decile.py b/policyengine/outputs/macro/comparison/decile.py index 9357a489..c08c2b07 100644 --- a/policyengine/outputs/macro/comparison/decile.py +++ b/policyengine/outputs/macro/comparison/decile.py @@ -53,7 +53,7 @@ class DecileImpacts(BaseModel): def calculate_decile_impacts( baseline: Microsimulation, reform: Microsimulation, - options: SimulationOptions, + options: "SimulationOptions", ) -> DecileImpacts: """Calculate changes to households by income and wealth deciles.""" income_impacts = calculate_income_specific_decile_impacts(baseline, reform, by_wealth_decile=False) @@ -195,4 +195,4 @@ def calculate_income_specific_decile_income_changes( relative={int(k): v for k, v in rel_decile_dict.items()}, average={int(k): v for k, v in avg_decile_dict.items()}, ) - return IncomeMeasureSpecificDecileImpacts(**per_decile_changes) \ No newline at end of file + return IncomeMeasureSpecificDecileIncomeChange(**per_decile_changes) \ No newline at end of file diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py index ce42c17c..0b394133 100644 --- a/policyengine/outputs/macro/single/__init__.py +++ b/policyengine/outputs/macro/single/__init__.py @@ -1,2 +1,3 @@ from .budget import calculate_government_balance, FiscalSummary -from .inequality import calculate_inequality, InequalitySummary \ No newline at end of file +from .inequality import calculate_inequality, InequalitySummary +from .poverty import calculate_poverty, PovertyRateMetric \ No newline at end of file diff --git a/policyengine/outputs/macro/single/calculate_single_economy.py b/policyengine/outputs/macro/single/calculate_single_economy.py new file mode 100644 index 00000000..9ba6c434 --- /dev/null +++ b/policyengine/outputs/macro/single/calculate_single_economy.py @@ -0,0 +1,35 @@ +"""Calculate comparison statistics between two economic scenarios.""" + +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation + +from pydantic import BaseModel + +from .budget import FiscalSummary, calculate_government_balance +from .inequality import InequalitySummary, calculate_inequality +from .poverty import PovertyRateMetric, calculate_poverty +from typing import List + +class SingleEconomy(BaseModel): + fiscal: FiscalSummary + inequality: InequalitySummary + poverty: List[PovertyRateMetric] + + +def calculate_single_economy( + simulation: "Simulation", +) -> SingleEconomy: + """Calculate economy statistics for a single economic scenario.""" + options = simulation.options + + fiscal = calculate_government_balance(simulation.baseline_simulation, options) + inequality = calculate_inequality(simulation.baseline_simulation) + poverty = calculate_poverty(simulation.baseline_simulation, options) + + return SingleEconomy( + fiscal=fiscal, + inequality=inequality, + poverty=poverty, + ) \ No newline at end of file diff --git a/policyengine/outputs/macro/single/poverty.py b/policyengine/outputs/macro/single/poverty.py new file mode 100644 index 00000000..f761864b --- /dev/null +++ b/policyengine/outputs/macro/single/poverty.py @@ -0,0 +1,79 @@ +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation, SimulationOptions + +from policyengine_core.simulations import Microsimulation + +from pydantic import BaseModel +from typing import Literal, List +import numpy as np + +class PovertyRateMetric(BaseModel): + age_group: Literal["child", "working_age", "senior", "all"] + racial_group: Literal["white", "black", "hispanic", "other", "all"] + relative: bool + poverty_rate: Literal["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"] + value: float + + +AGE_BOUNDS = { + "child": (0, 18), + "working_age": (18, 65), + "senior": (65, np.inf), + "all": (0, np.inf), +} + +def calculate_poverty( + simulation: Microsimulation, + options: "SimulationOptions", +) -> List[PovertyRateMetric]: + """Calculate poverty statistics for a set of households.""" + + poverty_metrics = [] + age = simulation.calculate("age") + person_weight = simulation.calculate("person_weight").values + if options.country == "us": + racial_groups = ["white", "black", "hispanic", "other", "all"] + else: + racial_groups = ["all"] + for age_group in ["child", "working_age", "senior", "all"]: + lower_age, upper_age = AGE_BOUNDS[age_group] + in_age_group = (age >= lower_age) & (age < upper_age) + for racial_group in racial_groups: + if racial_group != "all": + in_racial_group = simulation.calculate("race") == racial_group + else: + in_racial_group = np.ones_like(age, dtype=bool) + for relative in [True, False]: + for poverty_rate in ["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"]: + if not poverty_rate.startswith(options.country): + continue + + if poverty_rate == "uk_hbai_bhc": + in_poverty = simulation.calculate("in_poverty", map_to="person") + elif poverty_rate == "uk_hbai_bhc_half": + in_poverty = simulation.calculate("in_deep_poverty", map_to="person") + elif poverty_rate == "us_spm": + in_poverty = simulation.calculate("in_poverty", map_to="person") + elif poverty_rate == "us_spm_half": + in_poverty = simulation.calculate("in_deep_poverty", map_to="person") + + in_group = np.array(in_age_group & in_racial_group) + total_in_group = (in_group * person_weight).sum() + total_in_group_in_poverty = (in_group * in_poverty * person_weight).sum() + if relative: + result = total_in_group_in_poverty / total_in_group + else: + result = total_in_group_in_poverty + + poverty_metrics.append(PovertyRateMetric( + age_group=age_group, + racial_group=racial_group, + relative=relative, + poverty_rate=poverty_rate, + value=result, + )) + + + return poverty_metrics diff --git a/policyengine/simulation.py b/policyengine/simulation.py index f60c3bd1..c07552a1 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -28,6 +28,7 @@ calculate_economy_comparison, EconomyComparison, ) +from .outputs.macro.single.calculate_single_economy import SingleEconomy, calculate_single_economy CountryType = Literal["uk", "us"] ScopeType = Literal["household", "macro"] @@ -45,7 +46,7 @@ class SimulationOptions(BaseModel): scope: ScopeType = Field(..., description="The scope of the simulation.") data: DataType = Field(None, description="The data to simulate.") time_period: TimePeriodType = Field( - ..., description="The time period to simulate.", ge=2024, le=2035 + 2025, description="The time period to simulate.", ge=2024, le=2035 ) reform: ReformType = Field(None, description="The reform to simulate.") baseline: ReformType = Field(None, description="The baseline to simulate.") @@ -296,3 +297,7 @@ def _data_handle_cps_special_case(self): def calculate_economy_comparison(self) -> EconomyComparison: """Calculate comparison statistics between two economic scenarios.""" return calculate_economy_comparison(self) + + def calculate_single_economy(self) -> SingleEconomy: + """Calculate economy statistics for a single economic scenario.""" + return calculate_single_economy(self) diff --git a/policyengine/utils/calculations.py b/policyengine/utils/calculations.py index c4e9a853..b6c24e7e 100644 --- a/policyengine/utils/calculations.py +++ b/policyengine/utils/calculations.py @@ -1,12 +1,13 @@ from typing import Dict from pydantic import BaseModel -Output = Dict[str, float] +Output = Dict[str, float | None] def get_change( x: Output | Dict[str, Output], y: Output | Dict[str, Output], + relative: bool, ) -> Output | Dict[str, Output]: """Take two objects of nested str-float relations and create a similarly-structured object with the differences.""" if isinstance(x, BaseModel): @@ -19,8 +20,19 @@ def get_change( result = {} for key in x: if isinstance(x[key], dict): - result[key] = get_change(x[key], y[key]) - else: + result[key] = get_change(x[key], y[key], relative=relative) + elif x[key] is None and y[key] is None: + result[key] = None + elif x[key] is None: + raise ValueError(f"Key {key} is None in x but not in y") + elif y[key] is None: + raise ValueError(f"Key {key} is None in y but not in x") + elif not relative: result[key] = y[key] - x[key] + else: + if x[key] == 0: + result[key] = 0 + else: + result[key] = (y[key] - x[key]) / x[key] return output_class(**result) From 5153bc398317518db4e6440e9b9ded32d442c519 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 15:49:14 +1100 Subject: [PATCH 20/32] Format --- policyengine/outputs/api_compare.py | 16 ++++-- .../calculate_economy_comparison.py | 40 +++++++++---- .../outputs/macro/comparison/decile.py | 40 ++++++++----- policyengine/outputs/macro/single/__init__.py | 2 +- .../macro/single/calculate_single_economy.py | 7 ++- policyengine/outputs/macro/single/poverty.py | 56 +++++++++++++------ policyengine/simulation.py | 7 ++- 7 files changed, 115 insertions(+), 53 deletions(-) diff --git a/policyengine/outputs/api_compare.py b/policyengine/outputs/api_compare.py index 2f561628..18b5ad8d 100644 --- a/policyengine/outputs/api_compare.py +++ b/policyengine/outputs/api_compare.py @@ -525,18 +525,22 @@ def compare_economic_outputs( detailed_budgetary_impact_data = detailed_budgetary_impact( # done baseline, reform, country_id ) - decile_impact_data = decile_impact(baseline, reform) # done - inequality_impact_data = inequality_impact(baseline, reform) # done + decile_impact_data = decile_impact(baseline, reform) # done + inequality_impact_data = inequality_impact(baseline, reform) # done poverty_impact_data = poverty_impact(baseline, reform) poverty_by_gender_data = poverty_gender_breakdown(baseline, reform) poverty_by_race_data = poverty_racial_breakdown(baseline, reform) - intra_decile_impact_data = intra_decile_impact(baseline, reform) # done + intra_decile_impact_data = intra_decile_impact( + baseline, reform + ) # done labor_supply_response_data = labor_supply_response(baseline, reform) try: - wealth_decile_impact_data = wealth_decile_impact(baseline, reform) # done - intra_wealth_decile_impact_data = intra_wealth_decile_impact( # done + wealth_decile_impact_data = wealth_decile_impact( baseline, reform - ) + ) # done + intra_wealth_decile_impact_data = intra_wealth_decile_impact( + baseline, reform + ) # done except: wealth_decile_impact_data = {} intra_wealth_decile_impact_data = {} diff --git a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py index 6de34762..275fe899 100644 --- a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py @@ -27,6 +27,7 @@ class FiscalComparison(BaseModel): change: FiscalSummary relative_change: FiscalSummary + class InequalityComparison(BaseModel): baseline: InequalitySummary reform: InequalitySummary @@ -38,12 +39,15 @@ class PovertyRateMetricComparison(BaseModel): age_group: Literal["child", "working_age", "senior", "all"] racial_group: Literal["white", "black", "hispanic", "other", "all"] relative: bool - poverty_rate: Literal["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"] + poverty_rate: Literal[ + "uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half" + ] baseline: float reform: float change: float relative_change: float + class EconomyComparison(BaseModel): fiscal: FiscalComparison inequality: InequalityComparison @@ -64,18 +68,32 @@ def calculate_economy_comparison( baseline_balance = calculate_government_balance(baseline, options) reform_balance = calculate_government_balance(reform, options) - balance_change = get_change(baseline_balance, reform_balance, relative=False) - balance_rel_change = get_change(baseline_balance, reform_balance, relative=True) + balance_change = get_change( + baseline_balance, reform_balance, relative=False + ) + balance_rel_change = get_change( + baseline_balance, reform_balance, relative=True + ) fiscal_comparison = FiscalComparison( - baseline=baseline_balance, reform=reform_balance, change=balance_change, relative_change=balance_rel_change + baseline=baseline_balance, + reform=reform_balance, + change=balance_change, + relative_change=balance_rel_change, ) baseline_inequality = calculate_inequality(baseline) reform_inequality = calculate_inequality(reform) - inequality_change = get_change(baseline_inequality, reform_inequality, relative=False) - inequality_rel_change = get_change(baseline_inequality, reform_inequality, relative=True) + inequality_change = get_change( + baseline_inequality, reform_inequality, relative=False + ) + inequality_rel_change = get_change( + baseline_inequality, reform_inequality, relative=True + ) inequality_comparison = InequalityComparison( - baseline=baseline_inequality, reform=reform_inequality, change=inequality_change, relative_change=inequality_rel_change + baseline=baseline_inequality, + reform=reform_inequality, + change=inequality_change, + relative_change=inequality_rel_change, ) decile_impacts = calculate_decile_impacts(baseline, reform, options) @@ -83,7 +101,9 @@ def calculate_economy_comparison( baseline_poverty_metrics = calculate_poverty(baseline, options) reform_poverty_metrics = calculate_poverty(reform, options) poverty_metrics = [] - for baseline_metric, reform_metric in zip(baseline_poverty_metrics, reform_poverty_metrics): + for baseline_metric, reform_metric in zip( + baseline_poverty_metrics, reform_poverty_metrics + ): change = reform_metric.value - baseline_metric.value rel_change = change / baseline_metric.value poverty_metrics.append( @@ -95,12 +115,12 @@ def calculate_economy_comparison( baseline=baseline_metric.value, reform=reform_metric.value, change=change, - relative_change=rel_change + relative_change=rel_change, ) ) return EconomyComparison( - fiscal=fiscal_comparison, + fiscal=fiscal_comparison, inequality=inequality_comparison, distributional=decile_impacts, poverty=poverty_metrics, diff --git a/policyengine/outputs/macro/comparison/decile.py b/policyengine/outputs/macro/comparison/decile.py index c08c2b07..61dc7381 100644 --- a/policyengine/outputs/macro/comparison/decile.py +++ b/policyengine/outputs/macro/comparison/decile.py @@ -9,12 +9,14 @@ from typing import Dict import numpy as np + class IncomeMeasureSpecificDecileIncomeChange(BaseModel): relative: Dict[int, float] """Relative impacts by income decile.""" average: Dict[int, float] """Average impacts by income decile.""" + class IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(BaseModel): lose_more_than_5_percent_share: float """Share of households losing more than 5% of net income.""" @@ -31,18 +33,21 @@ class IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(BaseModel): gain_more_than_5_percent_share: float """Share of households gaining more than 5% of net income.""" + class IncomeMeasureSpecificDecileWinnersLosers(BaseModel): deciles: Dict[int, IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes] """Winners and losers by income decile.""" all: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes """Winners and losers for all households.""" + class IncomeMeasureSpecificDecileImpacts(BaseModel): income_change: IncomeMeasureSpecificDecileIncomeChange """Income change by income decile.""" winners_and_losers: IncomeMeasureSpecificDecileWinnersLosers """Winners and losers by income decile.""" + class DecileImpacts(BaseModel): income: IncomeMeasureSpecificDecileImpacts """Impacts by income decile.""" @@ -56,22 +61,34 @@ def calculate_decile_impacts( options: "SimulationOptions", ) -> DecileImpacts: """Calculate changes to households by income and wealth deciles.""" - income_impacts = calculate_income_specific_decile_impacts(baseline, reform, by_wealth_decile=False) + income_impacts = calculate_income_specific_decile_impacts( + baseline, reform, by_wealth_decile=False + ) if options.country == "uk": - wealth_impacts = calculate_income_specific_decile_impacts(baseline, reform, by_wealth_decile=True) + wealth_impacts = calculate_income_specific_decile_impacts( + baseline, reform, by_wealth_decile=True + ) else: wealth_impacts = None return DecileImpacts(income=income_impacts, wealth=wealth_impacts) + def calculate_income_specific_decile_impacts( baseline: Microsimulation, reform: Microsimulation, by_wealth_decile: bool, ) -> IncomeMeasureSpecificDecileImpacts: """Calculate changes to households by income and wealth deciles.""" - income_impacts = calculate_income_specific_decile_income_changes(baseline, reform, by_wealth_decile) - winners_losers = calculate_income_specific_decile_winners_losers(baseline, reform, by_wealth_decile) - return IncomeMeasureSpecificDecileImpacts(income_change=income_impacts, winners_and_losers=winners_losers) + income_impacts = calculate_income_specific_decile_income_changes( + baseline, reform, by_wealth_decile + ) + winners_losers = calculate_income_specific_decile_winners_losers( + baseline, reform, by_wealth_decile + ) + return IncomeMeasureSpecificDecileImpacts( + income_change=income_impacts, winners_and_losers=winners_losers + ) + def calculate_income_specific_decile_winners_losers( baseline: Microsimulation, @@ -88,9 +105,7 @@ def calculate_income_specific_decile_winners_losers( wealth = baseline.calculate("total_wealth") household_count_people = baseline.calculate("household_count_people") wealth.weights *= household_count_people - decile = ( - wealth.decile_rank().clip(1, 10).astype(int) - ) + decile = wealth.decile_rank().clip(1, 10).astype(int) # Filter out negative decile values due to negative incomes absolute_change = (reform_income - baseline_income).values capped_baseline_income = np.maximum(baseline_income.values, 1) @@ -154,9 +169,8 @@ def calculate_income_specific_decile_winners_losers( if d not in deciles: deciles[d] = {} deciles[d][label] = share_in_group - - return IncomeMeasureSpecificDecileWinnersLosers(deciles=deciles, all=all) + return IncomeMeasureSpecificDecileWinnersLosers(deciles=deciles, all=all) def calculate_income_specific_decile_income_changes( @@ -173,9 +187,7 @@ def calculate_income_specific_decile_income_changes( wealth = baseline.calculate("total_wealth") household_count_people = baseline.calculate("household_count_people") wealth.weights *= household_count_people - decile = ( - wealth.decile_rank().clip(1, 10).astype(int) - ) + decile = wealth.decile_rank().clip(1, 10).astype(int) # Filter out negative decile values due to negative incomes baseline_income_filtered = baseline_income[decile >= 0] reform_income_filtered = reform_income[decile >= 0] @@ -195,4 +207,4 @@ def calculate_income_specific_decile_income_changes( relative={int(k): v for k, v in rel_decile_dict.items()}, average={int(k): v for k, v in avg_decile_dict.items()}, ) - return IncomeMeasureSpecificDecileIncomeChange(**per_decile_changes) \ No newline at end of file + return IncomeMeasureSpecificDecileIncomeChange(**per_decile_changes) diff --git a/policyengine/outputs/macro/single/__init__.py b/policyengine/outputs/macro/single/__init__.py index 0b394133..50b6e74a 100644 --- a/policyengine/outputs/macro/single/__init__.py +++ b/policyengine/outputs/macro/single/__init__.py @@ -1,3 +1,3 @@ from .budget import calculate_government_balance, FiscalSummary from .inequality import calculate_inequality, InequalitySummary -from .poverty import calculate_poverty, PovertyRateMetric \ No newline at end of file +from .poverty import calculate_poverty, PovertyRateMetric diff --git a/policyengine/outputs/macro/single/calculate_single_economy.py b/policyengine/outputs/macro/single/calculate_single_economy.py index 9ba6c434..9a117e03 100644 --- a/policyengine/outputs/macro/single/calculate_single_economy.py +++ b/policyengine/outputs/macro/single/calculate_single_economy.py @@ -12,6 +12,7 @@ from .poverty import PovertyRateMetric, calculate_poverty from typing import List + class SingleEconomy(BaseModel): fiscal: FiscalSummary inequality: InequalitySummary @@ -24,7 +25,9 @@ def calculate_single_economy( """Calculate economy statistics for a single economic scenario.""" options = simulation.options - fiscal = calculate_government_balance(simulation.baseline_simulation, options) + fiscal = calculate_government_balance( + simulation.baseline_simulation, options + ) inequality = calculate_inequality(simulation.baseline_simulation) poverty = calculate_poverty(simulation.baseline_simulation, options) @@ -32,4 +35,4 @@ def calculate_single_economy( fiscal=fiscal, inequality=inequality, poverty=poverty, - ) \ No newline at end of file + ) diff --git a/policyengine/outputs/macro/single/poverty.py b/policyengine/outputs/macro/single/poverty.py index f761864b..6c710cb7 100644 --- a/policyengine/outputs/macro/single/poverty.py +++ b/policyengine/outputs/macro/single/poverty.py @@ -9,11 +9,14 @@ from typing import Literal, List import numpy as np + class PovertyRateMetric(BaseModel): age_group: Literal["child", "working_age", "senior", "all"] racial_group: Literal["white", "black", "hispanic", "other", "all"] relative: bool - poverty_rate: Literal["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"] + poverty_rate: Literal[ + "uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half" + ] value: float @@ -24,12 +27,13 @@ class PovertyRateMetric(BaseModel): "all": (0, np.inf), } + def calculate_poverty( simulation: Microsimulation, options: "SimulationOptions", ) -> List[PovertyRateMetric]: """Calculate poverty statistics for a set of households.""" - + poverty_metrics = [] age = simulation.calculate("age") person_weight = simulation.calculate("person_weight").values @@ -46,34 +50,50 @@ def calculate_poverty( else: in_racial_group = np.ones_like(age, dtype=bool) for relative in [True, False]: - for poverty_rate in ["uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half"]: + for poverty_rate in [ + "uk_hbai_bhc", + "uk_hbai_bhc_half", + "us_spm", + "us_spm_half", + ]: if not poverty_rate.startswith(options.country): continue - + if poverty_rate == "uk_hbai_bhc": - in_poverty = simulation.calculate("in_poverty", map_to="person") + in_poverty = simulation.calculate( + "in_poverty", map_to="person" + ) elif poverty_rate == "uk_hbai_bhc_half": - in_poverty = simulation.calculate("in_deep_poverty", map_to="person") + in_poverty = simulation.calculate( + "in_deep_poverty", map_to="person" + ) elif poverty_rate == "us_spm": - in_poverty = simulation.calculate("in_poverty", map_to="person") + in_poverty = simulation.calculate( + "in_poverty", map_to="person" + ) elif poverty_rate == "us_spm_half": - in_poverty = simulation.calculate("in_deep_poverty", map_to="person") - + in_poverty = simulation.calculate( + "in_deep_poverty", map_to="person" + ) + in_group = np.array(in_age_group & in_racial_group) total_in_group = (in_group * person_weight).sum() - total_in_group_in_poverty = (in_group * in_poverty * person_weight).sum() + total_in_group_in_poverty = ( + in_group * in_poverty * person_weight + ).sum() if relative: result = total_in_group_in_poverty / total_in_group else: result = total_in_group_in_poverty - - poverty_metrics.append(PovertyRateMetric( - age_group=age_group, - racial_group=racial_group, - relative=relative, - poverty_rate=poverty_rate, - value=result, - )) + poverty_metrics.append( + PovertyRateMetric( + age_group=age_group, + racial_group=racial_group, + relative=relative, + poverty_rate=poverty_rate, + value=result, + ) + ) return poverty_metrics diff --git a/policyengine/simulation.py b/policyengine/simulation.py index c07552a1..c977e8ec 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -28,7 +28,10 @@ calculate_economy_comparison, EconomyComparison, ) -from .outputs.macro.single.calculate_single_economy import SingleEconomy, calculate_single_economy +from .outputs.macro.single.calculate_single_economy import ( + SingleEconomy, + calculate_single_economy, +) CountryType = Literal["uk", "us"] ScopeType = Literal["household", "macro"] @@ -297,7 +300,7 @@ def _data_handle_cps_special_case(self): def calculate_economy_comparison(self) -> EconomyComparison: """Calculate comparison statistics between two economic scenarios.""" return calculate_economy_comparison(self) - + def calculate_single_economy(self) -> SingleEconomy: """Calculate economy statistics for a single economic scenario.""" return calculate_single_economy(self) From 34aacd14e4a0ac1ffeafa6e745df3c630c1f8a56 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:07:32 +1100 Subject: [PATCH 21/32] Remove original API placeholder code --- policyengine/outputs/api_compare.py | 571 ------------------ policyengine/outputs/api_single.py | 365 ----------- .../calculate_economy_comparison.py | 23 + .../outputs/macro/comparison/labor_supply.py | 119 ++++ .../macro/single/calculate_single_economy.py | 3 + policyengine/outputs/macro/single/poverty.py | 5 + 6 files changed, 150 insertions(+), 936 deletions(-) delete mode 100644 policyengine/outputs/api_compare.py delete mode 100644 policyengine/outputs/api_single.py create mode 100644 policyengine/outputs/macro/comparison/labor_supply.py diff --git a/policyengine/outputs/api_compare.py b/policyengine/outputs/api_compare.py deleted file mode 100644 index 18b5ad8d..00000000 --- a/policyengine/outputs/api_compare.py +++ /dev/null @@ -1,571 +0,0 @@ -from microdf import MicroDataFrame, MicroSeries -import numpy as np -import sys - - -def budgetary_impact(baseline: dict, reform: dict) -> dict: - tax_revenue_impact = reform["total_tax"] - baseline["total_tax"] - state_tax_revenue_impact = ( - reform["total_state_tax"] - baseline["total_state_tax"] - ) - benefit_spending_impact = ( - reform["total_benefits"] - baseline["total_benefits"] - ) - budgetary_impact = tax_revenue_impact - benefit_spending_impact - return dict( - budgetary_impact=budgetary_impact, - tax_revenue_impact=tax_revenue_impact, - state_tax_revenue_impact=state_tax_revenue_impact, - benefit_spending_impact=benefit_spending_impact, - households=sum(baseline["household_weight"]), - baseline_net_income=baseline["total_net_income"], - ) - - -def labor_supply_response(baseline: dict, reform: dict) -> dict: - substitution_lsr = ( - reform["substitution_lsr"] - baseline["substitution_lsr"] - ) - income_lsr = reform["income_lsr"] - baseline["income_lsr"] - total_change = substitution_lsr + income_lsr - revenue_change = ( - reform["budgetary_impact_lsr"] - baseline["budgetary_impact_lsr"] - ) - - substitution_lsr_hh = np.array(reform["substitution_lsr_hh"]) - np.array( - baseline["substitution_lsr_hh"] - ) - income_lsr_hh = np.array(reform["income_lsr_hh"]) - np.array( - baseline["income_lsr_hh"] - ) - decile = np.array(baseline["household_income_decile"]) - household_weight = baseline["household_weight"] - - total_lsr_hh = substitution_lsr_hh + income_lsr_hh - - emp_income = MicroSeries( - baseline["employment_income_hh"], weights=household_weight - ) - self_emp_income = MicroSeries( - baseline["self_employment_income_hh"], weights=household_weight - ) - earnings = emp_income + self_emp_income - original_earnings = earnings - total_lsr_hh - substitution_lsr_hh = MicroSeries( - substitution_lsr_hh, weights=household_weight - ) - income_lsr_hh = MicroSeries(income_lsr_hh, weights=household_weight) - - decile_avg = dict( - income=income_lsr_hh.groupby(decile).mean().to_dict(), - substitution=substitution_lsr_hh.groupby(decile).mean().to_dict(), - ) - decile_rel = dict( - income=( - income_lsr_hh.groupby(decile).sum() - / original_earnings.groupby(decile).sum() - ).to_dict(), - substitution=( - substitution_lsr_hh.groupby(decile).sum() - / original_earnings.groupby(decile).sum() - ).to_dict(), - ) - - relative_lsr = dict( - income=(income_lsr_hh.sum() / original_earnings.sum()), - substitution=(substitution_lsr_hh.sum() / original_earnings.sum()), - ) - - decile_rel["income"] = { - int(k): v for k, v in decile_rel["income"].items() if k > 0 - } - decile_rel["substitution"] = { - int(k): v for k, v in decile_rel["substitution"].items() if k > 0 - } - - hours = dict( - baseline=baseline["weekly_hours"], - reform=reform["weekly_hours"], - change=reform["weekly_hours"] - baseline["weekly_hours"], - income_effect=reform["weekly_hours_income_effect"] - - baseline["weekly_hours_income_effect"], - substitution_effect=reform["weekly_hours_substitution_effect"] - - baseline["weekly_hours_substitution_effect"], - ) - - return dict( - substitution_lsr=substitution_lsr, - income_lsr=income_lsr, - relative_lsr=relative_lsr, - total_change=total_change, - revenue_change=revenue_change, - decile=dict( - average=decile_avg, - relative=decile_rel, - ), - hours=hours, - ) - - -def detailed_budgetary_impact( - baseline: dict, reform: dict, country_id: str -) -> dict: - result = {} - if country_id == "uk": - for program in baseline["programs"]: - # baseline[programs][program] = total budgetary impact of program - result[program] = dict( - baseline=baseline["programs"][program], - reform=reform["programs"][program], - difference=reform["programs"][program] - - baseline["programs"][program], - ) - return result - - -def decile_impact(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on the deciles of the population. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on the deciles of the population. - """ - baseline_income = MicroSeries( - baseline["household_net_income"], weights=baseline["household_weight"] - ) - reform_income = MicroSeries( - reform["household_net_income"], weights=baseline_income.weights - ) - - # Filter out negative decile values - decile = MicroSeries(baseline["household_income_decile"]) - baseline_income_filtered = baseline_income[decile >= 0] - reform_income_filtered = reform_income[decile >= 0] - - income_change = reform_income_filtered - baseline_income_filtered - rel_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).sum() - ) - - avg_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).count() - ) - rel_decile_dict = rel_income_change_by_decile.to_dict() - avg_decile_dict = avg_income_change_by_decile.to_dict() - result = dict( - relative={int(k): v for k, v in rel_decile_dict.items()}, - average={int(k): v for k, v in avg_decile_dict.items()}, - ) - return result - - -def wealth_decile_impact(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on the deciles of the population. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on the deciles of the population. - """ - baseline_income = MicroSeries( - baseline["household_net_income"], weights=baseline["household_weight"] - ) - reform_income = MicroSeries( - reform["household_net_income"], weights=baseline_income.weights - ) - - # Filter out negative decile values - decile = MicroSeries(baseline["household_wealth_decile"]) - baseline_income_filtered = baseline_income[decile >= 0] - reform_income_filtered = reform_income[decile >= 0] - - income_change = reform_income_filtered - baseline_income_filtered - rel_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).sum() - ) - avg_income_change_by_decile = ( - income_change.groupby(decile).sum() - / baseline_income_filtered.groupby(decile).count() - ) - rel_decile_dict = rel_income_change_by_decile.to_dict() - avg_decile_dict = avg_income_change_by_decile.to_dict() - result = dict( - relative={int(k): v for k, v in rel_decile_dict.items()}, - average={int(k): v for k, v in avg_decile_dict.items()}, - ) - return result - - -def inequality_impact(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on inequality. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on inequality. - """ - - return dict( - gini=dict( - baseline=baseline["gini"], - reform=reform["gini"], - ), - top_10_pct_share=dict( - baseline=baseline["top_10_percent_share"], - reform=reform["top_10_percent_share"], - ), - top_1_pct_share=dict( - baseline=baseline["top_1_percent_share"], - reform=reform["top_1_percent_share"], - ), - ) - - -def poverty_impact(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on poverty. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on poverty. - """ - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], weights=baseline["person_weight"] - ) - baseline_deep_poverty = MicroSeries( - baseline["person_in_deep_poverty"], weights=baseline["person_weight"] - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - reform_deep_poverty = MicroSeries( - reform["person_in_deep_poverty"], weights=baseline_poverty.weights - ) - age = MicroSeries(baseline["age"]) - - poverty = dict( - child=dict( - baseline=float(baseline_poverty[age < 18].mean()), - reform=float(reform_poverty[age < 18].mean()), - ), - adult=dict( - baseline=float(baseline_poverty[(age >= 18) & (age < 65)].mean()), - reform=float(reform_poverty[(age >= 18) & (age < 65)].mean()), - ), - senior=dict( - baseline=float(baseline_poverty[age >= 65].mean()), - reform=float(reform_poverty[age >= 65].mean()), - ), - all=dict( - baseline=float(baseline_poverty.mean()), - reform=float(reform_poverty.mean()), - ), - ) - - deep_poverty = dict( - child=dict( - baseline=float(baseline_deep_poverty[age < 18].mean()), - reform=float(reform_deep_poverty[age < 18].mean()), - ), - adult=dict( - baseline=float( - baseline_deep_poverty[(age >= 18) & (age < 65)].mean() - ), - reform=float(reform_deep_poverty[(age >= 18) & (age < 65)].mean()), - ), - senior=dict( - baseline=float(baseline_deep_poverty[age >= 65].mean()), - reform=float(reform_deep_poverty[age >= 65].mean()), - ), - all=dict( - baseline=float(baseline_deep_poverty.mean()), - reform=float(reform_deep_poverty.mean()), - ), - ) - - return dict( - poverty=poverty, - deep_poverty=deep_poverty, - ) - - -def intra_decile_impact(baseline: dict, reform: dict) -> dict: - baseline_income = MicroSeries( - baseline["household_net_income"], weights=baseline["household_weight"] - ) - reform_income = MicroSeries( - reform["household_net_income"], weights=baseline_income.weights - ) - people = MicroSeries( - baseline["household_count_people"], weights=baseline_income.weights - ) - decile = MicroSeries(baseline["household_income_decile"]).values - absolute_change = (reform_income - baseline_income).values - capped_baseline_income = np.maximum(baseline_income.values, 1) - capped_reform_income = ( - np.maximum(reform_income.values, 1) + absolute_change - ) - income_change = ( - capped_reform_income - capped_baseline_income - ) / capped_baseline_income - - # Within each decile, calculate the percentage of people who: - # 1. Gained more than 5% of their income - # 2. Gained between 0% and 5% of their income - # 3. Had no change in income - # 3. Lost between 0% and 5% of their income - # 4. Lost more than 5% of their income - - outcome_groups = {} - all_outcomes = {} - BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] - LABELS = [ - "Lose more than 5%", - "Lose less than 5%", - "No change", - "Gain less than 5%", - "Gain more than 5%", - ] - for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): - outcome_groups[label] = [] - for i in range(1, 11): - in_decile = decile == i - in_group = (income_change > lower) & (income_change <= upper) - in_both = in_decile & in_group - outcome_groups[label].append( - float(people[in_both].sum() / people[in_decile].sum()) - ) - all_outcomes[label] = sum(outcome_groups[label]) / 10 - return dict(deciles=outcome_groups, all=all_outcomes) - - -def intra_wealth_decile_impact(baseline: dict, reform: dict) -> dict: - baseline_income = MicroSeries( - baseline["household_net_income"], weights=baseline["household_weight"] - ) - reform_income = MicroSeries( - reform["household_net_income"], weights=baseline_income.weights - ) - people = MicroSeries( - baseline["household_count_people"], weights=baseline_income.weights - ) - decile = MicroSeries(baseline["household_wealth_decile"]).values - absolute_change = (reform_income - baseline_income).values - capped_baseline_income = np.maximum(baseline_income.values, 1) - capped_reform_income = ( - np.maximum(reform_income.values, 1) + absolute_change - ) - income_change = ( - capped_reform_income - capped_baseline_income - ) / capped_baseline_income - - # Within each decile, calculate the percentage of people who: - # 1. Gained more than 5% of their income - # 2. Gained between 0% and 5% of their income - # 3. Had no change in income - # 3. Lost between 0% and 5% of their income - # 4. Lost more than 5% of their income - - outcome_groups = {} - all_outcomes = {} - BOUNDS = [-np.inf, -0.05, -1e-3, 1e-3, 0.05, np.inf] - LABELS = [ - "Lose more than 5%", - "Lose less than 5%", - "No change", - "Gain less than 5%", - "Gain more than 5%", - ] - for lower, upper, label in zip(BOUNDS[:-1], BOUNDS[1:], LABELS): - outcome_groups[label] = [] - for i in range(1, 11): - in_decile = decile == i - in_group = (income_change > lower) & (income_change <= upper) - in_both = in_decile & in_group - outcome_groups[label].append( - float(people[in_both].sum() / people[in_decile].sum()) - ) - all_outcomes[label] = sum(outcome_groups[label]) / 10 - return dict(deciles=outcome_groups, all=all_outcomes) - - -def poverty_gender_breakdown(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on poverty. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on poverty. - """ - if baseline["is_male"] is None: - return {} - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], weights=baseline["person_weight"] - ) - baseline_deep_poverty = MicroSeries( - baseline["person_in_deep_poverty"], weights=baseline["person_weight"] - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - reform_deep_poverty = MicroSeries( - reform["person_in_deep_poverty"], weights=baseline_poverty.weights - ) - is_male = MicroSeries(baseline["is_male"]) - - poverty = dict( - male=dict( - baseline=float(baseline_poverty[is_male].mean()), - reform=float(reform_poverty[is_male].mean()), - ), - female=dict( - baseline=float(baseline_poverty[~is_male].mean()), - reform=float(reform_poverty[~is_male].mean()), - ), - ) - - deep_poverty = dict( - male=dict( - baseline=float(baseline_deep_poverty[is_male].mean()), - reform=float(reform_deep_poverty[is_male].mean()), - ), - female=dict( - baseline=float(baseline_deep_poverty[~is_male].mean()), - reform=float(reform_deep_poverty[~is_male].mean()), - ), - ) - - return dict( - poverty=poverty, - deep_poverty=deep_poverty, - ) - - -def poverty_racial_breakdown(baseline: dict, reform: dict) -> dict: - """ - Compare the impact of a reform on poverty. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The impact of the reform on poverty. - """ - if baseline["race"] is None: - return {} - baseline_poverty = MicroSeries( - baseline["person_in_poverty"], weights=baseline["person_weight"] - ) - reform_poverty = MicroSeries( - reform["person_in_poverty"], weights=baseline_poverty.weights - ) - race = MicroSeries( - baseline["race"] - ) # Can be WHITE, BLACK, HISPANIC, or OTHER. - - poverty = dict( - white=dict( - baseline=float(baseline_poverty[race == "WHITE"].mean()), - reform=float(reform_poverty[race == "WHITE"].mean()), - ), - black=dict( - baseline=float(baseline_poverty[race == "BLACK"].mean()), - reform=float(reform_poverty[race == "BLACK"].mean()), - ), - hispanic=dict( - baseline=float(baseline_poverty[race == "HISPANIC"].mean()), - reform=float(reform_poverty[race == "HISPANIC"].mean()), - ), - other=dict( - baseline=float(baseline_poverty[race == "OTHER"].mean()), - reform=float(reform_poverty[race == "OTHER"].mean()), - ), - ) - - return dict( - poverty=poverty, - ) - - -def compare_economic_outputs( - baseline: dict, reform: dict, country_id: str = None -) -> dict: - """ - Compare the economic outputs of two economies. - - Args: - baseline (dict): The baseline economy. - reform (dict): The reform economy. - - Returns: - dict: The comparison of the two economies. - """ - if baseline.get("type") == "general": - budgetary_impact_data = budgetary_impact(baseline, reform) # done - detailed_budgetary_impact_data = detailed_budgetary_impact( # done - baseline, reform, country_id - ) - decile_impact_data = decile_impact(baseline, reform) # done - inequality_impact_data = inequality_impact(baseline, reform) # done - poverty_impact_data = poverty_impact(baseline, reform) - poverty_by_gender_data = poverty_gender_breakdown(baseline, reform) - poverty_by_race_data = poverty_racial_breakdown(baseline, reform) - intra_decile_impact_data = intra_decile_impact( - baseline, reform - ) # done - labor_supply_response_data = labor_supply_response(baseline, reform) - try: - wealth_decile_impact_data = wealth_decile_impact( - baseline, reform - ) # done - intra_wealth_decile_impact_data = intra_wealth_decile_impact( - baseline, reform - ) # done - except: - wealth_decile_impact_data = {} - intra_wealth_decile_impact_data = {} - - return dict( - budget=budgetary_impact_data, - detailed_budget=detailed_budgetary_impact_data, - decile=decile_impact_data, - inequality=inequality_impact_data, - poverty=poverty_impact_data, - poverty_by_gender=poverty_by_gender_data, - poverty_by_race=poverty_by_race_data, - intra_decile=intra_decile_impact_data, - wealth_decile=wealth_decile_impact_data, - intra_wealth_decile=intra_wealth_decile_impact_data, - labor_supply_response=labor_supply_response_data, - ) - elif baseline.get("type") == "cliff": - return dict( - baseline=dict( - cliff_gap=baseline["cliff_gap"], - cliff_share=baseline["cliff_share"], - ), - reform=dict( - cliff_gap=reform["cliff_gap"], - cliff_share=reform["cliff_share"], - ), - ) diff --git a/policyengine/outputs/api_single.py b/policyengine/outputs/api_single.py deleted file mode 100644 index 1ef4e7a9..00000000 --- a/policyengine/outputs/api_single.py +++ /dev/null @@ -1,365 +0,0 @@ -from policyengine_core.simulations import Microsimulation -from typing import Dict - -from policyengine_us import Microsimulation -from policyengine_uk import Microsimulation -from dataclasses import dataclass - - -@dataclass -class UKProgram: - name: str - is_positive: bool - - -class UKPrograms: - PROGRAMS = [ - UKProgram("income_tax", True), - UKProgram("national_insurance", True), - UKProgram("vat", True), - UKProgram("council_tax", True), - UKProgram("fuel_duty", True), - UKProgram("tax_credits", False), - UKProgram("universal_credit", False), - UKProgram("child_benefit", False), - UKProgram("state_pension", False), - UKProgram("pension_credit", False), - UKProgram("ni_employer", True), - ] - - -class GeneralEconomyTask: - def __init__(self, simulation: Microsimulation, country_id: str): - self.simulation = simulation - self.country_id = country_id - self.household_count_people = self.simulation.calculate( - "household_count_people" - ) - - def calculate_tax_and_spending(self): - if self.country_id == "uk": - total_tax = self.simulation.calculate("gov_tax").sum() - total_spending = self.simulation.calculate("gov_spending").sum() - else: - total_tax = self.simulation.calculate("household_tax").sum() - total_spending = self.simulation.calculate( - "household_benefits" - ).sum() - return total_tax, total_spending - - def calculate_inequality_metrics(self): - personal_hh_equiv_income = self._get_weighted_household_income() - - try: - gini = personal_hh_equiv_income.gini() - except Exception as e: - print( - "WARNING: Gini index calculations resulted in an error: returning no change, but this is inaccurate." - ) - print("Error: ", e) - gini = 0.4 - - in_top_10_pct = personal_hh_equiv_income.decile_rank() == 10 - in_top_1_pct = personal_hh_equiv_income.percentile_rank() == 100 - - personal_hh_equiv_income.weights /= self.household_count_people - - top_10_share = ( - personal_hh_equiv_income[in_top_10_pct].sum() - / personal_hh_equiv_income.sum() - ) - top_1_share = ( - personal_hh_equiv_income[in_top_1_pct].sum() - / personal_hh_equiv_income.sum() - ) - - return gini, top_10_share, top_1_share - - def _get_weighted_household_income(self): - income = self.simulation.calculate("equiv_household_net_income") - income[income < 0] = 0 - income.weights *= self.household_count_people - return income - - def calculate_income_breakdown_metrics(self): - total_net_income = self.simulation.calculate( - "household_net_income" - ).sum() - employment_income_hh = ( - self.simulation.calculate("employment_income", map_to="household") - .astype(float) - .tolist() - ) - self_employment_income_hh = ( - self.simulation.calculate( - "self_employment_income", map_to="household" - ) - .astype(float) - .tolist() - ) - - return ( - total_net_income, - employment_income_hh, - self_employment_income_hh, - ) - - def calculate_household_income_metrics(self): - household_net_income = ( - self.simulation.calculate("household_net_income") - .astype(float) - .tolist() - ) - equiv_household_net_income = ( - self.simulation.calculate("equiv_household_net_income") - .astype(float) - .tolist() - ) - household_income_decile = ( - self.simulation.calculate("household_income_decile") - .astype(int) - .tolist() - ) - household_market_income = ( - self.simulation.calculate("household_market_income") - .astype(float) - .tolist() - ) - - return ( - household_net_income, - equiv_household_net_income, - household_income_decile, - household_market_income, - ) - - def calculate_wealth_metrics(self): - try: - wealth = self.simulation.calculate("total_wealth") - wealth.weights *= self.household_count_people - wealth_decile = ( - wealth.decile_rank().clip(1, 10).astype(int).tolist() - ) - wealth = wealth.astype(float).tolist() - except Exception as e: - wealth = None - wealth_decile = None - return wealth, wealth_decile - - def calculate_demographic_metrics(self): - try: - is_male = ( - self.simulation.calculate("is_male").astype(bool).tolist() - ) - except Exception: - is_male = None - - try: - race = self.simulation.calculate("race").astype(str).tolist() - except Exception: - race = None - - age = self.simulation.calculate("age").astype(int).tolist() - - return is_male, race, age - - def calculate_poverty_metrics(self): - in_poverty = ( - self.simulation.calculate("in_poverty").astype(bool).tolist() - ) - person_in_poverty = ( - self.simulation.calculate("in_poverty", map_to="person") - .astype(bool) - .tolist() - ) - person_in_deep_poverty = ( - self.simulation.calculate("in_deep_poverty", map_to="person") - .astype(bool) - .tolist() - ) - poverty_gap = self.simulation.calculate("poverty_gap").sum() - deep_poverty_gap = self.simulation.calculate("deep_poverty_gap").sum() - return ( - in_poverty, - person_in_poverty, - person_in_deep_poverty, - poverty_gap, - deep_poverty_gap, - ) - - def calculate_weights(self): - person_weight = ( - self.simulation.calculate("person_weight").astype(float).tolist() - ) - household_weight = ( - self.simulation.calculate("household_weight") - .astype(float) - .tolist() - ) - - return person_weight, household_weight - - def calculate_labor_supply_responses(self): - result = { - "substitution_lsr": 0, - "income_lsr": 0, - "budgetary_impact_lsr": 0, - "income_lsr_hh": (self.household_count_people * 0) - .astype(float) - .tolist(), - "substitution_lsr_hh": (self.household_count_people * 0) - .astype(float) - .tolist(), - } - - if not self._has_behavioral_response(): - return result - - result.update( - { - "substitution_lsr": self.simulation.calculate( - "substitution_elasticity_lsr" - ).sum(), - "income_lsr": self.simulation.calculate( - "income_elasticity_lsr" - ).sum(), - "income_lsr_hh": self.simulation.calculate( - "income_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - "substitution_lsr_hh": self.simulation.calculate( - "substitution_elasticity_lsr", map_to="household" - ) - .astype(float) - .tolist(), - } - ) - - return result - - def _has_behavioral_response(self) -> bool: - return ( - "employment_income_behavioral_response" - in self.simulation.tax_benefit_system.variables - and any( - self.simulation.calculate( - "employment_income_behavioral_response" - ) - != 0 - ) - ) - - def calculate_lsr_working_hours(self): - if self.country_id != "us": - return { - "weekly_hours": 0, - "weekly_hours_income_effect": 0, - "weekly_hours_substitution_effect": 0, - } - - return { - "weekly_hours": self.simulation.calculate( - "weekly_hours_worked" - ).sum(), - "weekly_hours_income_effect": self.simulation.calculate( - "weekly_hours_worked_behavioural_response_income_elasticity" - ).sum(), - "weekly_hours_substitution_effect": self.simulation.calculate( - "weekly_hours_worked_behavioural_response_substitution_elasticity" - ).sum(), - } - - def calculate_uk_programs(self) -> Dict[str, float]: - if self.country_id != "uk": - return {} - - return { - program.name: self.simulation.calculate( - program.name, map_to="household" - ).sum() - * (1 if program.is_positive else -1) - for program in UKPrograms.PROGRAMS - } - - -def compute_general_economy(simulation, country_id: str) -> Dict: - task_manager = GeneralEconomyTask(simulation, country_id) - - total_tax, total_spending = task_manager.calculate_tax_and_spending() - gini, top_10_share, top_1_share = ( - task_manager.calculate_inequality_metrics() - ) - wealth, wealth_decile = task_manager.calculate_wealth_metrics() - is_male, race, age = task_manager.calculate_demographic_metrics() - labor_supply_responses = task_manager.calculate_labor_supply_responses() - lsr_working_hours = task_manager.calculate_lsr_working_hours() - ( - in_poverty, - person_in_poverty, - person_in_deep_poverty, - poverty_gap, - deep_poverty_gap, - ) = task_manager.calculate_poverty_metrics() - total_net_income, employment_income_hh, self_employment_income_hh = ( - task_manager.calculate_income_breakdown_metrics() - ) - ( - household_net_income, - equiv_household_net_income, - household_income_decile, - household_market_income, - ) = task_manager.calculate_household_income_metrics() - person_weight, household_weight = task_manager.calculate_weights() - - if country_id == "uk": - uk_programs = task_manager.calculate_uk_programs() - else: - uk_programs = {} - - total_state_tax = 0 - - if country_id == "us": - try: - total_state_tax = simulation.calculate( - "household_state_income_tax" - ).sum() - except: - total_state_tax = 0 - - result = { - "total_net_income": total_net_income, - "employment_income_hh": employment_income_hh, - "self_employment_income_hh": self_employment_income_hh, - "total_tax": total_tax, - "total_state_tax": total_state_tax, - "total_benefits": total_spending, - "household_net_income": household_net_income, - "equiv_household_net_income": equiv_household_net_income, - "household_income_decile": household_income_decile, - "household_market_income": household_market_income, - "household_wealth_decile": wealth_decile, - "household_wealth": wealth, - "in_poverty": in_poverty, - "person_in_poverty": person_in_poverty, - "person_in_deep_poverty": person_in_deep_poverty, - "poverty_gap": poverty_gap, - "deep_poverty_gap": deep_poverty_gap, - "person_weight": person_weight, - "household_weight": household_weight, - "household_count_people": task_manager.household_count_people.astype( - int - ).tolist(), - "gini": float(gini), - "top_10_percent_share": float(top_10_share), - "top_1_percent_share": float(top_1_share), - "is_male": is_male, - "race": race, - "age": age, - **labor_supply_responses, - **lsr_working_hours, - "type": "general", - "programs": uk_programs, - } - - return result diff --git a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py index 275fe899..c13d6407 100644 --- a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py @@ -17,6 +17,10 @@ ) from .decile import calculate_decile_impacts, DecileImpacts +from .labor_supply import ( + calculate_labor_supply_impact, + LaborSupplyMetricImpact, +) from typing import Literal, List @@ -37,22 +41,36 @@ class InequalityComparison(BaseModel): class PovertyRateMetricComparison(BaseModel): age_group: Literal["child", "working_age", "senior", "all"] + """The age group of the population.""" racial_group: Literal["white", "black", "hispanic", "other", "all"] + """The racial group of the population.""" relative: bool + """Whether the poverty rate is relative to the total population, or a headcount.""" poverty_rate: Literal[ "uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half" ] + """The poverty rate definition being calculated.""" baseline: float + """The poverty rate value in the baseline scenario.""" reform: float + """The poverty rate value in the reform scenario.""" change: float + """The change in the poverty rate value.""" relative_change: float + """The relative change in the poverty rate value.""" class EconomyComparison(BaseModel): fiscal: FiscalComparison + """Government budgets and other top-level fiscal statistics.""" inequality: InequalityComparison + """Inequality statistics for the household sector.""" distributional: DecileImpacts + """Distributional impacts of the reform.""" poverty: List[PovertyRateMetricComparison] + """Poverty rates for different demographic groups and poverty definitions.""" + labor_supply: List[LaborSupplyMetricImpact] + """Labor supply impacts for different demographic groups and labor supply metrics.""" def calculate_economy_comparison( @@ -119,9 +137,14 @@ def calculate_economy_comparison( ) ) + labor_supply_metrics = calculate_labor_supply_impact( + baseline, reform, options + ) + return EconomyComparison( fiscal=fiscal_comparison, inequality=inequality_comparison, distributional=decile_impacts, poverty=poverty_metrics, + labor_supply=labor_supply_metrics, ) diff --git a/policyengine/outputs/macro/comparison/labor_supply.py b/policyengine/outputs/macro/comparison/labor_supply.py new file mode 100644 index 00000000..6f1b8126 --- /dev/null +++ b/policyengine/outputs/macro/comparison/labor_supply.py @@ -0,0 +1,119 @@ +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation, SimulationOptions + +from policyengine_core.simulations import Microsimulation + +from pydantic import BaseModel +from typing import Literal, List +import numpy as np + + +class LaborSupplyMetricImpact(BaseModel): + elasticity: Literal["income", "substitution", "all"] + """Filter to the effects of a specific elasticity.""" + decile: Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "all"] + """The income decile of the household, if filtering.""" + unit: Literal["earnings", "hours"] + """The unit of the labor supply metric.""" + baseline: float + """The labor supply metric value in the baseline scenario.""" + reform: float + """The labor supply metric value in the reform scenario.""" + change: float + """The change in the labor supply metric value.""" + relative_change: float + """The relative change in the labor supply metric value.""" + + +def calculate_labor_supply_impact( + baseline: Microsimulation, + reformed: Microsimulation, + options: "SimulationOptions", +) -> List[LaborSupplyMetricImpact]: + """Calculate labor supply impact statistics for a set of households.""" + if not _has_behavioral_response(reformed): + return [] + + lsr_metrics = [] + for elasticity in ["income", "substitution", "all"]: + for decile in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "all"]: + for unit in ["earnings", "hours"]: + if options.country != "us" and unit == "hours": + # Hours not yet supported for the UK. + continue + lsr_metrics.append( + calculate_specific_lsr_metric( + baseline, + reformed, + elasticity, + decile, + unit, + ) + ) + + +def calculate_specific_lsr_metric( + baseline: Microsimulation, + reformed: Microsimulation, + elasticity: Literal["income", "substitution", "all"], + decile: Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "all"], + unit: Literal["earnings", "hours"], +) -> LaborSupplyMetricImpact: + """Calculate a specific labor supply metric for a set of households.""" + + if unit == "earnings": + baseline_variable = "employment_income" + if elasticity == "income": + variable = "income_elasticity_lsr" + elif elasticity == "substitution": + variable = "substitution_elasticity_lsr" + else: + variable = "employment_income_behavioral_response" + else: + baseline_variable = "weekly_hours_worked" + if elasticity == "income": + variable = ( + "weekly_hours_worked_behavioural_response_income_elasticity" + ) + elif elasticity == "substitution": + variable = "weekly_hours_worked_behavioural_response_substitution_elasticity" + else: + variable = "weekly_hours_worked" + + baseline_values = baseline.calculate(baseline_variable) + reform_values = reformed.calculate(baseline_variable) + reformed.calculate( + variable + ) + + if decile == "all": + in_decile = np.ones_like(baseline_values, dtype=bool) + else: + in_decile = reformed.calculate("household_income_decile") == decile + + baseline_total = (baseline_values * in_decile).sum() + reform_total = (reform_values * in_decile).sum() + change = reform_total - baseline_total + relative_change = change / baseline_total + + return LaborSupplyMetricImpact( + elasticity=elasticity, + decile=decile, + unit=unit, + baseline=baseline_total, + reform=reform_total, + change=change, + relative_change=relative_change, + ) + + +def _has_behavioral_response(simulation: Microsimulation) -> bool: + """Check if the simulation has a behavioral response to labor supply.""" + return ( + "employment_income_behavioral_response" + in simulation.tax_benefit_system.variables + and any( + simulation.calculate("employment_income_behavioral_response") != 0 + ) + ) diff --git a/policyengine/outputs/macro/single/calculate_single_economy.py b/policyengine/outputs/macro/single/calculate_single_economy.py index 9a117e03..ab70dde5 100644 --- a/policyengine/outputs/macro/single/calculate_single_economy.py +++ b/policyengine/outputs/macro/single/calculate_single_economy.py @@ -15,8 +15,11 @@ class SingleEconomy(BaseModel): fiscal: FiscalSummary + """Government budgets and other top-level fiscal statistics.""" inequality: InequalitySummary + """Inequality statistics for the household sector.""" poverty: List[PovertyRateMetric] + """Poverty rates for different demographic groups and poverty definitions.""" def calculate_single_economy( diff --git a/policyengine/outputs/macro/single/poverty.py b/policyengine/outputs/macro/single/poverty.py index 6c710cb7..91aa8639 100644 --- a/policyengine/outputs/macro/single/poverty.py +++ b/policyengine/outputs/macro/single/poverty.py @@ -12,12 +12,17 @@ class PovertyRateMetric(BaseModel): age_group: Literal["child", "working_age", "senior", "all"] + """The age group of the population.""" racial_group: Literal["white", "black", "hispanic", "other", "all"] + """The racial group of the population.""" relative: bool + """Whether the poverty rate is relative to the total population, or a headcount.""" poverty_rate: Literal[ "uk_hbai_bhc", "uk_hbai_bhc_half", "us_spm", "us_spm_half" ] + """The poverty rate definition being calculated.""" value: float + """The poverty rate value.""" AGE_BOUNDS = { From 09ddb5ffd8c2761def8f75103ce58e0fa41c362e Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:25:04 +1100 Subject: [PATCH 22/32] Add basic household outputs --- .../calculate_household_comparison.py | 38 +++++++++++++++++++ .../single/calculate_single_household.py | 34 +++++++++++++++++ .../macro/single/calculate_single_economy.py | 2 + policyengine/simulation.py | 20 +++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 policyengine/outputs/household/comparison/calculate_household_comparison.py create mode 100644 policyengine/outputs/household/single/calculate_single_household.py diff --git a/policyengine/outputs/household/comparison/calculate_household_comparison.py b/policyengine/outputs/household/comparison/calculate_household_comparison.py new file mode 100644 index 00000000..cf5580d0 --- /dev/null +++ b/policyengine/outputs/household/comparison/calculate_household_comparison.py @@ -0,0 +1,38 @@ +"""Calculate comparison statistics between two economic scenarios.""" + +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation + +from pydantic import BaseModel +from policyengine.utils.calculations import get_change +from policyengine_core.simulations import Simulation as CountrySimulation +from typing import Literal, List + +class HouseholdComparison(BaseModel): + household_net_income: float + """The net income of the household.""" + +def calculate_net_income( + baseline: CountrySimulation, + reform: CountrySimulation, +) -> float: + return reform.calculate("household_net_income").sum() - baseline.calculate("household_net_income").sum() + + +def calculate_household_comparison( + simulation: "Simulation", +) -> HouseholdComparison: + """Calculate comparison statistics between two household scenarios.""" + if not simulation.is_comparison: + raise ValueError("Simulation must be a comparison simulation.") + + baseline = simulation.baseline_simulation + reform = simulation.reform_simulation + + net_income = calculate_net_income(baseline, reform) + + return HouseholdComparison( + household_net_income=net_income, + ) diff --git a/policyengine/outputs/household/single/calculate_single_household.py b/policyengine/outputs/household/single/calculate_single_household.py new file mode 100644 index 00000000..ad283b04 --- /dev/null +++ b/policyengine/outputs/household/single/calculate_single_household.py @@ -0,0 +1,34 @@ +"""Calculate comparison statistics between two economic scenarios.""" + +import typing + +if typing.TYPE_CHECKING: + from policyengine import Simulation + +from pydantic import BaseModel +from policyengine_core.simulations import Simulation as CountrySimulation +from typing import List + + +class SingleHousehold(BaseModel): + household_net_income: float + """The net income of the household.""" + +def calculate_net_income( + simulation: CountrySimulation, +) -> float: + return simulation.calculate("household_net_income").sum() + + +def calculate_single_household( + simulation: "Simulation", +) -> SingleHousehold: + """Calculate household statistics for a single household scenario.""" + if simulation.is_comparison: + raise ValueError("This function is for single economy simulations only.") + + net_income = calculate_net_income(simulation.baseline_simulation) + + return SingleHousehold( + household_net_income=net_income, + ) diff --git a/policyengine/outputs/macro/single/calculate_single_economy.py b/policyengine/outputs/macro/single/calculate_single_economy.py index ab70dde5..ee99f2c6 100644 --- a/policyengine/outputs/macro/single/calculate_single_economy.py +++ b/policyengine/outputs/macro/single/calculate_single_economy.py @@ -27,6 +27,8 @@ def calculate_single_economy( ) -> SingleEconomy: """Calculate economy statistics for a single economic scenario.""" options = simulation.options + if simulation.is_comparison: + raise ValueError("This function is for single economy simulations only.") fiscal = calculate_government_balance( simulation.baseline_simulation, options diff --git a/policyengine/simulation.py b/policyengine/simulation.py index c977e8ec..2d39e005 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -33,9 +33,19 @@ calculate_single_economy, ) +from .outputs.household.single.calculate_single_household import ( + SingleHousehold, + calculate_single_household, +) + +from .outputs.household.comparison.calculate_household_comparison import ( + HouseholdComparison, + calculate_household_comparison, +) + CountryType = Literal["uk", "us"] ScopeType = Literal["household", "macro"] -DataType = str | None +DataType = str | dict | None # Needs stricter typing TimePeriodType = int ReformType = ( ParametricReform | SimulationAdjustment | Type[StructuralReform] | None @@ -304,3 +314,11 @@ def calculate_economy_comparison(self) -> EconomyComparison: def calculate_single_economy(self) -> SingleEconomy: """Calculate economy statistics for a single economic scenario.""" return calculate_single_economy(self) + + def calculate_single_household(self) -> SingleHousehold: + """Calculate household statistics for a single household scenario.""" + return calculate_single_household(self) + + def calculate_household_comparison(self) -> HouseholdComparison: + """Calculate comparison statistics between two household scenarios.""" + return calculate_household_comparison(self) From cf36e253572b008c50de353ea9348183da2b19c9 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:25:11 +1100 Subject: [PATCH 23/32] Format --- .../household/comparison/calculate_household_comparison.py | 7 ++++++- .../outputs/household/single/calculate_single_household.py | 5 ++++- .../outputs/macro/single/calculate_single_economy.py | 4 +++- policyengine/simulation.py | 6 +++--- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/policyengine/outputs/household/comparison/calculate_household_comparison.py b/policyengine/outputs/household/comparison/calculate_household_comparison.py index cf5580d0..adf81963 100644 --- a/policyengine/outputs/household/comparison/calculate_household_comparison.py +++ b/policyengine/outputs/household/comparison/calculate_household_comparison.py @@ -10,15 +10,20 @@ from policyengine_core.simulations import Simulation as CountrySimulation from typing import Literal, List + class HouseholdComparison(BaseModel): household_net_income: float """The net income of the household.""" + def calculate_net_income( baseline: CountrySimulation, reform: CountrySimulation, ) -> float: - return reform.calculate("household_net_income").sum() - baseline.calculate("household_net_income").sum() + return ( + reform.calculate("household_net_income").sum() + - baseline.calculate("household_net_income").sum() + ) def calculate_household_comparison( diff --git a/policyengine/outputs/household/single/calculate_single_household.py b/policyengine/outputs/household/single/calculate_single_household.py index ad283b04..26631794 100644 --- a/policyengine/outputs/household/single/calculate_single_household.py +++ b/policyengine/outputs/household/single/calculate_single_household.py @@ -14,6 +14,7 @@ class SingleHousehold(BaseModel): household_net_income: float """The net income of the household.""" + def calculate_net_income( simulation: CountrySimulation, ) -> float: @@ -25,7 +26,9 @@ def calculate_single_household( ) -> SingleHousehold: """Calculate household statistics for a single household scenario.""" if simulation.is_comparison: - raise ValueError("This function is for single economy simulations only.") + raise ValueError( + "This function is for single economy simulations only." + ) net_income = calculate_net_income(simulation.baseline_simulation) diff --git a/policyengine/outputs/macro/single/calculate_single_economy.py b/policyengine/outputs/macro/single/calculate_single_economy.py index ee99f2c6..12f88986 100644 --- a/policyengine/outputs/macro/single/calculate_single_economy.py +++ b/policyengine/outputs/macro/single/calculate_single_economy.py @@ -28,7 +28,9 @@ def calculate_single_economy( """Calculate economy statistics for a single economic scenario.""" options = simulation.options if simulation.is_comparison: - raise ValueError("This function is for single economy simulations only.") + raise ValueError( + "This function is for single economy simulations only." + ) fiscal = calculate_government_balance( simulation.baseline_simulation, options diff --git a/policyengine/simulation.py b/policyengine/simulation.py index 2d39e005..65f8bad9 100644 --- a/policyengine/simulation.py +++ b/policyengine/simulation.py @@ -45,7 +45,7 @@ CountryType = Literal["uk", "us"] ScopeType = Literal["household", "macro"] -DataType = str | dict | None # Needs stricter typing +DataType = str | dict | None # Needs stricter typing TimePeriodType = int ReformType = ( ParametricReform | SimulationAdjustment | Type[StructuralReform] | None @@ -314,11 +314,11 @@ def calculate_economy_comparison(self) -> EconomyComparison: def calculate_single_economy(self) -> SingleEconomy: """Calculate economy statistics for a single economic scenario.""" return calculate_single_economy(self) - + def calculate_single_household(self) -> SingleHousehold: """Calculate household statistics for a single household scenario.""" return calculate_single_household(self) - + def calculate_household_comparison(self) -> HouseholdComparison: """Calculate comparison statistics between two household scenarios.""" return calculate_household_comparison(self) From b04096049e4ba7f1fe20138cdde7d429c392c1d9 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:39:18 +1100 Subject: [PATCH 24/32] Update docs --- .gitignore | 2 +- docs/index.ipynb | 81 +++++++++++++++++++++++++++++++++ docs/index.md | 2 - docs/reference/simulation.ipynb | 74 ++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 docs/index.ipynb delete mode 100644 docs/index.md create mode 100644 docs/reference/simulation.ipynb diff --git a/.gitignore b/.gitignore index f844ae2d..42030f64 100644 --- a/.gitignore +++ b/.gitignore @@ -161,4 +161,4 @@ cython_debug/ *.ipynb -old/ +!docs/**/*.ipynb diff --git a/docs/index.ipynb b/docs/index.ipynb new file mode 100644 index 00000000..74d4e9d7 --- /dev/null +++ b/docs/index.ipynb @@ -0,0 +1,81 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PolicyEngine Python interface\n", + "\n", + "Welcome to the documentation for PolicyEngine, a Python package for analyzing tax-benefit policies and estimating their societal impacts.\n", + "\n", + "## Overview\n", + "\n", + "This package enables users to create and simulate different scenarios of specific or representative households in a country, under different tax-benefit rules or economic assumptions.\n", + "\n", + "We currently support the UK and the US.\n", + "\n", + "## Quick start\n", + "\n", + "To install the package, run:\n", + "\n", + "```bash\n", + "pip install policyengine\n", + "```\n", + "\n", + "Then, for example:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "EconomyComparison(fiscal=FiscalComparison(baseline=FiscalSummary(tax_revenue=658911285719.5891, federal_tax=658911285719.5891, state_tax=0.0, government_spending=349760026840.3932, tax_benefit_programs={'income_tax': 333376287037.05945, 'national_insurance': 52985626776.773834, 'ni_employer': 126330649370.35953, 'vat': 211671832822.39133, 'council_tax': 49007055050.00724, 'fuel_duty': 26506672341.204205, 'tax_credits': -34929879.49872104, 'universal_credit': -73459549194.97665, 'child_benefit': -14311471487.935827, 'state_pension': -132795868621.44594, 'pension_credit': -6252358021.417119}, household_net_income=1566030461192.7288), reform=FiscalSummary(tax_revenue=637686731286.3723, federal_tax=637686731286.3723, state_tax=0.0, government_spending=349224353712.28815, tax_benefit_programs={'income_tax': 312151564998.6612, 'national_insurance': 52985626776.773834, 'ni_employer': 126330649370.35953, 'vat': 211671832822.39133, 'council_tax': 49007055050.00724, 'fuel_duty': 26506672341.204205, 'tax_credits': -34929879.49872104, 'universal_credit': -73099552696.20555, 'child_benefit': -14311471487.935827, 'state_pension': -132795868621.44594, 'pension_credit': -6181432287.167828}, household_net_income=1586719205744.2463), change=FiscalSummary(tax_revenue=-21224554433.216797, federal_tax=-21224554433.216797, state_tax=0.0, government_spending=-535673128.1050415, tax_benefit_programs={'income_tax': -21224722038.398254, 'national_insurance': 0.0, 'ni_employer': 0.0, 'vat': 0.0, 'council_tax': 0.0, 'fuel_duty': 0.0, 'tax_credits': 0.0, 'universal_credit': 359996498.7711029, 'child_benefit': 0.0, 'state_pension': 0.0, 'pension_credit': 70925734.24929142}, household_net_income=20688744551.51758), relative_change=FiscalSummary(tax_revenue=-0.03221155092227281, federal_tax=-0.03221155092227281, state_tax=0.0, government_spending=-0.0015315447363843167, tax_benefit_programs={'income_tax': -0.06366596204858095, 'national_insurance': 0.0, 'ni_employer': 0.0, 'vat': 0.0, 'council_tax': 0.0, 'fuel_duty': 0.0, 'tax_credits': -0.0, 'universal_credit': -0.004900608603186478, 'child_benefit': -0.0, 'state_pension': -0.0, 'pension_credit': -0.01134383763795021}, household_net_income=0.013210946443379206)), inequality=InequalityComparison(baseline=InequalitySummary(gini=0.36255338125570424, top_10_share=0.3260922885079385, top_1_share=0.1314559726417293), reform=InequalitySummary(gini=0.3621067195625373, top_10_share=0.3247068529020242, top_1_share=0.13003247918783417), change=InequalitySummary(gini=-0.0004466616931669276, top_10_share=-0.0013854356059142536, top_1_share=-0.0014234934538951416), relative_change=InequalitySummary(gini=-0.001231988767060768, top_10_share=-0.004248599720813472, top_1_share=-0.010828670811137177)), distributional=DecileImpacts(income=IncomeMeasureSpecificDecileImpacts(income_change=IncomeMeasureSpecificDecileIncomeChange(relative={1: 0.006888347426579352, 2: 0.01207019625644219, 3: 0.013627468842833087, 4: 0.016100481654779814, 5: 0.013748247907171681, 6: 0.01686883037766935, 7: 0.01753355131276628, 8: 0.016653942719361867, 9: 0.01676805576642017, 10: 0.007412181202749425}, average={1: 104.97431830321577, 2: 345.37333460917273, 3: 505.9344918602069, 4: 693.5160756480564, 5: 633.0329182433123, 6: 916.7939753239693, 7: 1160.9595929383368, 8: 1339.97187253835, 9: 1645.9437072259466, 10: 1555.8434910392261}), winners_and_losers=IncomeMeasureSpecificDecileWinnersLosers(deciles={1: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0001755859570557263, lose_share=0.0001682513537722099, no_change_share=0.7777594280562966, gain_share=0.22207232058993112, gain_less_than_5_percent_share=0.8921554326814847, gain_more_than_5_percent_share=0.1076689813614596), 2: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.008308201427960779, lose_share=0.008308201427960779, no_change_share=0.3296747315922954, gain_share=0.6620170669797438, gain_less_than_5_percent_share=0.8919232634243426, gain_more_than_5_percent_share=0.09976853514769665), 3: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0025640225401700836, lose_share=7.961082321261601e-05, no_change_share=0.24144297964047653, gain_share=0.7584774095363108, gain_less_than_5_percent_share=0.8374155175602881, gain_more_than_5_percent_share=0.1600204598995418), 4: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.12752277174703963, gain_share=0.8724772282529604, gain_less_than_5_percent_share=0.9665865451338477, gain_more_than_5_percent_share=0.03341345486615228), 5: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.03956658976737942, gain_share=0.9604334102326206, gain_less_than_5_percent_share=0.9972436631437993, gain_more_than_5_percent_share=0.0027563368562006983), 6: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=9.23312947542871e-08, lose_share=0.0, no_change_share=0.04739185313495122, gain_share=0.9526081468650488, gain_less_than_5_percent_share=0.950097303756789, gain_more_than_5_percent_share=0.04990260391191623), 7: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=5.104037721866914e-07, lose_share=5.104037721866914e-07, no_change_share=0.018556113733354175, gain_share=0.9814433758628737, gain_less_than_5_percent_share=0.9532747831120698, gain_more_than_5_percent_share=0.046724706484157955), 8: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.0078485273494483, gain_share=0.9921514726505517, gain_less_than_5_percent_share=0.9864864572885578, gain_more_than_5_percent_share=0.013513542711442263), 9: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=3.9720293329414453e-08, lose_share=0.0, no_change_share=0.015484773300234851, gain_share=0.9845152266997651, gain_less_than_5_percent_share=0.9942833742036897, gain_more_than_5_percent_share=0.00571658607601697), 10: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.09527409658848911, gain_share=0.9047259034115109, gain_less_than_5_percent_share=1.0, gain_more_than_5_percent_share=0.0)}, all=IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0010924738666159373, lose_share=0.0008384108829899095, no_change_share=0.16458777279036807, gain_share=0.8345738163266421, gain_less_than_5_percent_share=0.947301858492644, gain_more_than_5_percent_share=0.051605667640740344))), wealth=IncomeMeasureSpecificDecileImpacts(income_change=IncomeMeasureSpecificDecileIncomeChange(relative={1: 0.008709359540639157, 2: 0.00905578708175186, 3: 0.012492298883059996, 4: 0.01152604162555258, 5: 0.013211680341905644, 6: 0.015499276808714067, 7: 0.015075628657318645, 8: 0.013872537910746014, 9: 0.014863082577873714, 10: 0.013423194473756452}, average={1: 369.702952145763, 2: 348.23782779938443, 3: 552.8656647582718, 4: 568.6862981673706, 5: 788.7199254212952, 6: 1082.0251273410129, 7: 995.5414649462065, 8: 980.0256472731063, 9: 1104.9136440223838, 10: 1148.3564641697874}), winners_and_losers=IncomeMeasureSpecificDecileWinnersLosers(deciles={1: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=2.6883274101429057e-05, lose_share=2.6883274101429057e-05, no_change_share=0.4508804429091072, gain_share=0.5490926738167914, gain_less_than_5_percent_share=0.9848507184309168, gain_more_than_5_percent_share=0.015122398294981835), 2: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=3.6190041582250956e-08, lose_share=0.0, no_change_share=0.494450094962446, gain_share=0.505549905037554, gain_less_than_5_percent_share=0.9931537493063021, gain_more_than_5_percent_share=0.006846214503656335), 3: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.02404055636315165, gain_share=0.9759594436368484, gain_less_than_5_percent_share=0.9891467785172058, gain_more_than_5_percent_share=0.010853221482794195), 4: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0021384901223377517, lose_share=8.272884193213454e-07, no_change_share=0.36369619644130957, gain_share=0.6363029762702711, gain_less_than_5_percent_share=0.9597482462129343, gain_more_than_5_percent_share=0.038113263664727975), 5: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0002447588006939626, lose_share=0.00024460254119754784, no_change_share=0.16613074345434808, gain_share=0.8336246540044544, gain_less_than_5_percent_share=0.9833489364919241, gain_more_than_5_percent_share=0.01640630470738194), 6: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.025790631489697343, gain_share=0.9742093685103027, gain_less_than_5_percent_share=0.9861761877807416, gain_more_than_5_percent_share=0.013823812219258384), 7: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.00020866319896562508, lose_share=4.163438722119544e-05, no_change_share=0.08407934672412146, gain_share=0.9158790188886573, gain_less_than_5_percent_share=0.9021123857304735, gain_more_than_5_percent_share=0.09767895107056095), 8: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0, lose_share=0.0, no_change_share=0.056524409525954916, gain_share=0.9434755904740451, gain_less_than_5_percent_share=0.9366881433479168, gain_more_than_5_percent_share=0.06331185665208312), 9: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.008053685714292545, lose_share=0.008053685714292545, no_change_share=0.027806404912023186, gain_share=0.9641399093736843, gain_less_than_5_percent_share=0.9371641387443307, gain_more_than_5_percent_share=0.05478217554137677), 10: IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=4.868756468537358e-08, lose_share=4.868756468537358e-08, no_change_share=0.06985295508301145, gain_share=0.9301469962294239, gain_less_than_5_percent_share=0.806768831589799, gain_more_than_5_percent_share=0.1932311197226364)}, all=IncomeMeasureSpecificDecileWinnersLosersGroupOutcomes(lose_more_than_5_percent_share=0.0, lose_less_than_5_percent_share=0.0010924738666159373, lose_share=0.0008384108829899095, no_change_share=0.16458777279036807, gain_share=0.8345738163266421, gain_less_than_5_percent_share=0.947301858492644, gain_more_than_5_percent_share=0.051605667640740344)))), poverty=[PovertyRateMetricComparison(age_group='child', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc', baseline=0.0866740345954895, reform=0.08660321682691574, change=-7.081776857376099e-05, relative_change=-0.0008170586370447596), PovertyRateMetricComparison(age_group='child', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc_half', baseline=0.005887233652174473, reform=0.005886665545403957, change=-5.681067705154419e-07, relative_change=-9.649808451302242e-05), PovertyRateMetricComparison(age_group='child', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc', baseline=1636588.5, reform=1635251.25, change=-1337.25, relative_change=-0.0008170960507176972), PovertyRateMetricComparison(age_group='child', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc_half', baseline=111163.3828125, reform=111152.65625, change=-10.7265625, relative_change=-9.649366750643566e-05), PovertyRateMetricComparison(age_group='working_age', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc', baseline=0.08067396283149719, reform=0.07947173714637756, change=-0.001202225685119629, relative_change=-0.014902276309776728), PovertyRateMetricComparison(age_group='working_age', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc_half', baseline=0.020408159121870995, reform=0.020407630130648613, change=-5.289912223815918e-07, relative_change=-2.5920575159308858e-05), PovertyRateMetricComparison(age_group='working_age', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc', baseline=3613979.5, reform=3560123.0, change=-53856.5, relative_change=-0.014902270474970874), PovertyRateMetricComparison(age_group='working_age', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc_half', baseline=914231.375, reform=914207.75, change=-23.625, relative_change=-2.584137959605685e-05), PovertyRateMetricComparison(age_group='senior', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc', baseline=0.033274661749601364, reform=0.03287290409207344, change=-0.0004017576575279236, relative_change=-0.012073981714712297), PovertyRateMetricComparison(age_group='senior', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc_half', baseline=0.0007299797143787146, reform=0.0007292248192243278, change=-7.548951543867588e-07, relative_change=-0.0010341316882062261), PovertyRateMetricComparison(age_group='senior', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc', baseline=436230.6875, reform=430963.625, change=-5267.0625, relative_change=-0.01207403021136609), PovertyRateMetricComparison(age_group='senior', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc_half', baseline=9570.03125, reform=9560.134765625, change=-9.896484375, relative_change=-0.0010341120228839378), PovertyRateMetricComparison(age_group='all', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc', baseline=0.07405699789524078, reform=0.07326966524124146, change=-0.0007873326539993286, relative_change=-0.01063144167838224), PovertyRateMetricComparison(age_group='all', racial_group='all', relative=True, poverty_rate='uk_hbai_bhc_half', baseline=0.01347795594483614, reform=0.013477379456162453, change=-5.764886736869812e-07, relative_change=-4.277270797192756e-05), PovertyRateMetricComparison(age_group='all', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc', baseline=5686796.5, reform=5626338.0, change=-60458.5, relative_change=-0.010631380954110104), PovertyRateMetricComparison(age_group='all', racial_group='all', relative=False, poverty_rate='uk_hbai_bhc_half', baseline=1034964.875, reform=1034920.625, change=-44.25, relative_change=-4.27550741758265e-05)], labor_supply=[])" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from policyengine import Simulation\n", + "\n", + "sim = Simulation({\n", + " \"scope\": \"macro\",\n", + " \"country\": \"uk\",\n", + " \"time_period\": 2025,\n", + " \"reform\": {\n", + " \"gov.hmrc.income_tax.allowances.personal_allowance.amount\": 15000\n", + " },\n", + "})\n", + "\n", + "sim.calculate_economy_comparison()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 080864a1..00000000 --- a/docs/index.md +++ /dev/null @@ -1,2 +0,0 @@ -# PolicyEngine Python interface - diff --git a/docs/reference/simulation.ipynb b/docs/reference/simulation.ipynb new file mode 100644 index 00000000..ee3c846a --- /dev/null +++ b/docs/reference/simulation.ipynb @@ -0,0 +1,74 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulation\n", + "\n", + "The `Simulation` class is the core interface of this package. You can initialise it by passing in a dictionary that matches the `SimulationOptions` schema, and then use its `calculate` methods to ask it questions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "EconomyComparison(fiscal=FiscalComparison(baseline=FiscalSummary(tax_revenue=658911285719.5891, federal_tax=658911285719.5891, state_tax=0.0, government_spending=349760026840.3932, tax_benefit_programs={'income_tax': 333376287037.05945, 'national_insurance': 52985626776.773834, 'ni_employer': 126330649370.35953, 'vat': 211671832822.39133, 'council_tax': 49007055050.00724, 'fuel_duty': 26506672341.204205, 'tax_credits': -34929879.49872104, 'universal_credit': -73459549194.97665, 'child_benefit': -14311471487.935827, 'state_pension': -132795868621.44594, 'pension_credit': -6252358021.417119}, household_net_income=1566030461192.7288), reform=FiscalSummary(tax_revenue=658911285719.5891, federal_tax=658911285719.5891, state_tax=0.0, government_spending=349760026840.3932, tax_benefit_programs={'income_tax': 333376287037.05945, 'national_insurance': 52985626776.773834, 'ni_employer': 126330649370.35953, 'vat': 211671832822.39133, 'council_tax': 49007055050.00724, 'fuel_duty': 26506672341.204205, 'tax_credits': -34929879.49872104, 'universal_credit': -73459549194.97665, 'child_benefit': -14311471487.935827, 'state_pension': -132795868621.44594, 'pension_credit': -6252358021.417119}, household_net_income=1566030461192.7288), change=FiscalSummary(tax_revenue=0.0, federal_tax=0.0, state_tax=0.0, government_spending=0.0, tax_benefit_programs={'income_tax': 0.0, 'national_insurance': 0.0, 'ni_employer': 0.0, 'vat': 0.0, 'council_tax': 0.0, 'fuel_duty': 0.0, 'tax_credits': 0.0, 'universal_credit': 0.0, 'child_benefit': 0.0, 'state_pension': 0.0, 'pension_credit': 0.0}, household_net_income=0.0)), inequality=InequalitySummary(gini=0.0, top_10_share=0.0, top_1_share=0.0))" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from policyengine import Simulation\n", + "\n", + "sim = Simulation({\n", + " \"country\": \"uk\",\n", + " \"scope\": \"macro\",\n", + " \"reform\": {},\n", + " \"time_period\": 2025,\n", + "})\n", + "\n", + "sim.calculate_economy_comparison()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Module documentation\n", + "\n", + "```{eval-rst}\n", + ".. automodule:: policyengine.simulation\n", + " :members:\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 4db06738df69addf72c182c27b5a09eeca732556 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:44:51 +1100 Subject: [PATCH 25/32] Add tests --- tests/country/test_uk.py | 27 +++++++++++++++++++++++++++ tests/country/test_us.py | 25 +++++++++++++++++++++++++ tests/test_package.py | 4 ++-- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/country/test_uk.py create mode 100644 tests/country/test_us.py diff --git a/tests/country/test_uk.py b/tests/country/test_uk.py new file mode 100644 index 00000000..27a1022d --- /dev/null +++ b/tests/country/test_uk.py @@ -0,0 +1,27 @@ +def test_uk_macro_single(): + from policyengine import Simulation + + sim = Simulation( + { + "scope": "macro", + "country": "uk", + } + ) + + sim.calculate_single_economy() + + +def test_uk_macro_comparison(): + from policyengine import Simulation + + sim = Simulation( + { + "scope": "macro", + "country": "uk", + "reform": { + "gov.hmrc.income_tax.allowances.personal_allowance.amount": 15_000, + }, + } + ) + + sim.calculate_economy_comparison() diff --git a/tests/country/test_us.py b/tests/country/test_us.py new file mode 100644 index 00000000..54add4d5 --- /dev/null +++ b/tests/country/test_us.py @@ -0,0 +1,25 @@ +def test_us_macro_single(): + from policyengine import Simulation + + sim = Simulation( + { + "scope": "macro", + "country": "us", + } + ) + + sim.calculate_single_economy() + + +def test_us_macro_comparison(): + from policyengine import Simulation + + sim = Simulation( + { + "scope": "macro", + "country": "us", + "reform": {}, + } + ) + + sim.calculate_economy_comparison() diff --git a/tests/test_package.py b/tests/test_package.py index eb706cfd..60c2ab07 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -1,2 +1,2 @@ -def test_this(): - assert True +def test_package_imports(): + from policyengine import Simulation From f3939752d538b20fe9bc4774c22ebd53f7ecafc5 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:47:52 +1100 Subject: [PATCH 26/32] Fix bug identified by tests --- policyengine/outputs/macro/single/budget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine/outputs/macro/single/budget.py b/policyengine/outputs/macro/single/budget.py index 2a3d78c3..c349c364 100644 --- a/policyengine/outputs/macro/single/budget.py +++ b/policyengine/outputs/macro/single/budget.py @@ -50,10 +50,10 @@ def calculate_government_balance( options: "SimulationOptions", ) -> FiscalSummary: """Calculate government balance metrics for a set of households.""" + tb_programs = {} if options.country == "uk": total_tax = simulation.calculate("gov_tax").sum() total_spending = simulation.calculate("gov_spending").sum() - tb_programs = {} for program in UK_PROGRAMS: tb_programs[program.name] = simulation.calculate( program.name From 0a788d9922c1a01c79c201d90bf79893156d3e93 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:48:15 +1100 Subject: [PATCH 27/32] Add dep --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 8bf5a0e2..02144b35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ dependencies = [ "policyengine-us", "microdf_python", "getpass4", + "pydantic", ] [project.optional-dependencies] From 6e337dbefa5dad04913501ae1f6f3ee12f239f80 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:51:46 +1100 Subject: [PATCH 28/32] Use UV --- .github/workflows/code_changes.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml index 608b74ae..edc216d0 100644 --- a/.github/workflows/code_changes.yaml +++ b/.github/workflows/code_changes.yaml @@ -24,6 +24,8 @@ jobs: steps: - name: Checkout repo uses: actions/checkout@v2 + - name: Install uv + uses: astral-sh/setup-uv@v5 - name: Set up Python uses: actions/setup-python@v2 @@ -31,7 +33,7 @@ jobs: python-version: '3.10' - name: Install package - run: make install + run: uv pip install .[dev] - name: Run tests run: make test \ No newline at end of file From ab164843952f64bf63fac0f304514270b7ac7f6a Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:52:26 +1100 Subject: [PATCH 29/32] Add system flag --- .github/workflows/code_changes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml index edc216d0..480b54cb 100644 --- a/.github/workflows/code_changes.yaml +++ b/.github/workflows/code_changes.yaml @@ -33,7 +33,7 @@ jobs: python-version: '3.10' - name: Install package - run: uv pip install .[dev] + run: uv pip install .[dev] --system - name: Run tests run: make test \ No newline at end of file From bc2c09574071f97eb0920ca32b73252f0b79709d Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 17:56:37 +1100 Subject: [PATCH 30/32] Add secret ref --- .github/workflows/code_changes.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml index 480b54cb..acd4db3f 100644 --- a/.github/workflows/code_changes.yaml +++ b/.github/workflows/code_changes.yaml @@ -36,4 +36,6 @@ jobs: run: uv pip install .[dev] --system - name: Run tests - run: make test \ No newline at end of file + run: make test + env: + HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }} \ No newline at end of file From fb701734b594b129911837ae2be5380582699a80 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 18:09:20 +1100 Subject: [PATCH 31/32] Add zero-division check --- .../outputs/macro/comparison/calculate_economy_comparison.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py index c13d6407..d2ddde59 100644 --- a/policyengine/outputs/macro/comparison/calculate_economy_comparison.py +++ b/policyengine/outputs/macro/comparison/calculate_economy_comparison.py @@ -123,7 +123,10 @@ def calculate_economy_comparison( baseline_poverty_metrics, reform_poverty_metrics ): change = reform_metric.value - baseline_metric.value - rel_change = change / baseline_metric.value + if baseline_metric.value == 0: + rel_change = 0 + else: + rel_change = change / baseline_metric.value poverty_metrics.append( PovertyRateMetricComparison( age_group=baseline_metric.age_group, From 1ba4b702949749a6ceda1b862e1a9a7cf86a0bc0 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Tue, 28 Jan 2025 18:12:02 +1100 Subject: [PATCH 32/32] Add missing dep --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 02144b35..c3ae9885 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ dev = [ "black", "pytest", "furo", - "sphinx-autoapi", + "autodoc_pydantic", "jupyter-book", "yaml-changelog>=0.1.7", "itables",