From 076bd8fa62caeaee8d38c5d5cf61c12acd79c823 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 26 Sep 2026 07:38:32 -0400 Subject: [PATCH 01/10] Bind state Historic Table 2 AGI bands as shares of the bound state total (#940) State return-count and AGI bands from IRS SOI Historic Table 2 compiled to nothing: every bounded AGI slice from another tax year is refused as a stale nominal level, and only EITC and taxable-interest families were rescued. So a state's top tail was free as long as its totals matched (Colorado: returns and AGI within 0.12%, 24% of SOI's AGI above $1M in Build P ACS-local, #940). - `_is_soi_state_agi_band_fact`: state HT2 AGI-table bands, return_count and AGI, all filing statuses, lower edge >= $100k (the SOI slice materializer has no filer filter; same floor as the national size classes, #958). - `_rebase_soi_state_agi_bands`: each band binds as control x band / partition, where partition is the state's published bands of that vintage over the whole AGI line and control is the state's latest HT2 all-returns total (the row that already binds). Values land at the control's period and age with it; counts never age. One vintage per state and measure, so a collapsed 500k_plus row never binds beside split 500k_to_1m/1m_plus rows. Gaps drop a state's bands; overlaps raise. - Release coverage requirement `irs_state_agi_top_tail`: 51 state $1M+ AGI rows, so a feed without the split bands fails instead of shipping without the constraint. Tests: synthetic rule tests plus a Hypothesis property test (share identity, band-sum identity, control homogeneity, feed-order invariance), and feed-gated tests for the pinned feed (exact shares, band means inside their edges, differential against Table 1.1's TY2023 classes). Co-Authored-By: Claude Opus 5.5 --- .../build/us_runtime/fiscal_targets.py | 315 +++++++ .../tests/test_us_fiscal_targets.py | 24 + .../tests/test_us_soi_state_agi_bands.py | 877 ++++++++++++++++++ 3 files changed, 1216 insertions(+) create mode 100644 packages/microcosm-build/tests/test_us_soi_state_agi_bands.py diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index 1cf1d0ec54..581e0d6f57 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -60,6 +60,7 @@ "US_JCT_TAX_EXPENDITURE_TARGET_SPECS", "US_JCT_TAX_EXPENDITURE_TARGET_REFERENCES", "SOI_VARIABLE_MAP", + "US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND", "US_SOI_FISCAL_TARGET_SPECS", "US_SOI_FISCAL_TARGET_REFERENCES", "US_STATE_INCOME_TAX_TARGET_SPECS", @@ -337,6 +338,18 @@ def _us_hierarchy_seed( _SOI_TOTAL_UPRATED_DECOMPOSITION_MEASURES = ( _SOI_TOTAL_UPRATED_AMOUNT_MEASURES | _SOI_TOTAL_UPRATED_RETURN_MEASURES ) +#: Lowest AGI edge a state Historic Table 2 band may have to bind +#: (microcosm#940). The SOI slice materializer counts every tax unit in the +#: band, filer or not, so a return count is the same concept as a tax-unit +#: count only where filing is near universal; the national size-of-AGI +#: classes use the same floor for the same reason (microcosm#958). +US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND = 100_000.0 +_SOI_STATE_AGI_BAND_MEASURES = frozenset({"return_count", "adjusted_gross_income"}) +#: Period-stripped record-set prefixes: a state's AGI bands, and the state +#: all-returns totals the bands are rebased onto. +_SOI_STATE_AGI_BAND_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_agi." +_SOI_STATE_AGI_BAND_CONTROL_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_broad." +_SOI_STATE_AGI_BAND_REBASE_FLAG = "requires_state_agi_band_rebase" _SOI_FORM_W2_ITEM_LAYOUT_DIMENSION = "irs_soi.form_w2_item" _SOI_FORM_W2_SOCIAL_SECURITY_TIP_ITEMS = frozenset( { @@ -1043,6 +1056,11 @@ def compile_us_fiscal_target_registry( materialized_facts, target_period=target_period, ) + registry = _rebase_soi_state_agi_bands( + registry, + materialized_facts, + target_period=target_period, + ) registry = apply_ledger_target_profile( registry, _load_us_fiscal_target_profile(), @@ -1966,6 +1984,251 @@ def _soi_total_uprating_index(measure_id: str) -> str: return "total_taxable_interest_amount" +def _rebase_soi_state_agi_bands( + registry: TargetRegistry, + facts: tuple[object, ...], + *, + target_period: int | str, +) -> TargetRegistry: + """Bind state HT2 AGI bands as shares of the state total that binds (#940). + + A state's income above $1M is what progressive state rate schedules tax, + and state totals alone leave it unconstrained. #940 measured Build P's + ACS-local release matching Colorado's return count and AGI within 0.12% + while holding 24% of SOI's Colorado AGI above $1M; after the PUF fix + (#982), one pre-calibration Colorado record carries 84% of it. The bands + bind return counts and AGI from the $100k floor up, with $500k-$1M and + $1M+ split. + + Each flagged band row becomes ``control x band / partition``: + + * ``partition`` is the sum of the same state's published bands of the + same vintage, measure and record set over the whole AGI line (under $1 + to $1M+). HT2 publishes amounts additively exactly and counts rounded + to tens, so the shares over one partition sum to one. + * ``control`` is the state's HT2 all-returns total of the latest vintage + not after the target period: the ``state_broad`` fact that already + binds as the state's return count or AGI. Congressional-district + ``_total`` rows are a processing-window subset stamped with the + wrong vintage and never anchor a state. + + The value lands at the control's period and ages with the state total + (counts never age), so a state's bands keep summing to the same share of + its bound total at every stage. The control may be older than the band: + the latest published shares scale onto the level the state total binds + at, which keeps the two consistent instead of mixing levels. + + One vintage per state and measure: rows from an older vintage than the + state's latest flagged vintage are dropped, so a collapsed ``500k_plus`` + row from one year never binds beside another year's split + ``500k_to_1m``/``1m_plus`` rows. A band with no complete partition or no + control is dropped, never shipped as an unanchored nominal level. + """ + + flagged = [ + spec + for spec in registry.specs + if spec.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true" + ] + if not flagged: + return registry + latest_periods: dict[tuple[str, str], tuple[int, int, str]] = {} + for spec in flagged: + key = _soi_state_agi_band_key_from_spec(spec) + period_key = _period_key_from_value(spec.metadata.get("source_period", "")) + if key not in latest_periods or period_key[:2] > latest_periods[key][:2]: + latest_periods[key] = period_key + partitions = _soi_state_agi_band_partition_totals(facts) + controls = _soi_state_agi_band_controls(facts, target_period=target_period) + + specs: list[TargetSpec] = [] + kept_bounds: dict[tuple[str, str], list[tuple[float, float, str]]] = {} + for spec in registry.specs: + if spec.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) != "true": + specs.append(spec) + continue + key = _soi_state_agi_band_key_from_spec(spec) + source_period = spec.metadata.get("source_period", "") + if _period_key_from_value(source_period)[:2] != latest_periods[key][:2]: + continue + partition = partitions.get( + ( + *key, + source_period, + _normalized_record_set_id( + spec.metadata.get("ledger_layout_record_set_id", "") + ), + ) + ) + control = controls.get(key) + if partition is None or partition == 0 or control is None: + continue + share = spec.value / partition + factor = control.value / partition + kept_bounds.setdefault(key, []).append( + (*_bounds_from_metadata(spec), spec.name) + ) + specs.append( + replace( + spec, + value=spec.value * factor, + metadata={ + **dict(spec.metadata), + "uprating_index": f"state_total_{key[1]}", + "uprating_from_period": source_period, + # Lands at the CONTROL's period; target aging completes + # the remaining links with the state total (#488). + "uprating_to_period": control.source_period, + "uprating_index_source_period": control.source_period, + "uprating_index_source_record_id": control.source_record_id, + "uprating_factor": _format_float(factor), + "state_agi_band_share": _format_float(share), + "stale_distribution_rebased_to_active_total": "true", + }, + ) + ) + _check_soi_state_agi_bands_disjoint(kept_bounds) + return TargetRegistry(specs, country=registry.country) + + +def _soi_state_agi_band_key_from_spec(spec: TargetSpec) -> tuple[str, str]: + return ( + spec.metadata.get("state_fips", ""), + spec.metadata.get("source_measure_id", ""), + ) + + +def _soi_state_agi_band_partition_totals( + facts: tuple[object, ...], +) -> dict[tuple[str, str, str, str], float]: + """Sum of each state's published bands over one complete AGI partition. + + Keyed ``(state_fips, measure_id, period, period-free record set)``. Every + band of the record set counts, including those below the binding floor + and negative AGI under $1. A group with a gap in the AGI line has no + total; overlapping or duplicated bands are a packaging error and raise. + """ + + bands: dict[tuple[str, str, str, str], list[tuple[float, float, float]]] = {} + for fact in facts: + if _source_name(fact) != "irs_soi": + continue + measure_id = _measure_id(fact) + if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: + continue + record_set = _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")) + if not record_set.startswith(_SOI_STATE_AGI_BAND_RECORD_SET_PREFIX): + continue + state_fips = _state_fips(fact) + if _geography_level(fact) != "state" or state_fips is None: + continue + if _filing_status_label(_dimensions(fact).get("filing_status")) != "All": + continue + if _is_all_agi_range_fact(fact): + continue + lower, upper = _agi_bounds(fact) + bands.setdefault( + (state_fips, measure_id, str(_period_value(fact)), record_set), [] + ).append( + ( + _bound_from_metadata_value(lower), + _bound_from_metadata_value(upper), + _numeric_value(fact), + ) + ) + totals: dict[tuple[str, str, str, str], float] = {} + for key, rows in bands.items(): + rows.sort() + cursor = -float("inf") + complete = True + for lower, upper, _ in rows: + if lower < cursor or upper <= lower: + state_fips, measure_id, period, record_set = key + raise ValueError( + f"Overlapping state AGI bands in {record_set} ({period}) " + f"for state {state_fips} {measure_id}: a band starting at " + f"{_format_bound(lower)} overlaps the one ending at " + f"{_format_bound(cursor)}. One vintage's bands must tile the " + "AGI line (microcosm#940)." + ) + if lower > cursor: + complete = False + cursor = upper + if complete and cursor == float("inf"): + totals[key] = sum(value for _, _, value in rows) + return totals + + +def _soi_state_agi_band_controls( + facts: tuple[object, ...], + *, + target_period: int | str, +) -> dict[tuple[str, str], _SoiTotalControl]: + """The latest state HT2 all-returns total per (state, measure).""" + + controls: dict[tuple[str, str], _SoiTotalControl] = {} + target_period_key = _period_key_from_value(target_period) + for fact in facts: + if _source_name(fact) != "irs_soi": + continue + measure_id = _measure_id(fact) + if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: + continue + if not _normalized_record_set_id( + _str_at(fact, "layout", "record_set_id") + ).startswith(_SOI_STATE_AGI_BAND_CONTROL_RECORD_SET_PREFIX): + continue + state_fips = _state_fips(fact) + if _geography_level(fact) != "state" or state_fips is None: + continue + if not _is_all_income_range(fact): + continue + if _soi_return_universe_from_fact(fact) != "all_returns": + continue + period_key = _period_key(fact) + if not period_key[0] or not _not_after_target_period( + period_key, target_period_key + ): + continue + source_record_id = _source_record_id(fact) + if not source_record_id: + continue + candidate = _SoiTotalControl( + value=_numeric_value(fact), + source_period=str(_period_value(fact)), + source_record_id=source_record_id, + period_key=period_key, + ) + key = (state_fips, measure_id) + current = controls.get(key) + # Latest period wins; a same-period tie resolves on the record id so + # the choice never depends on feed order. + if current is None or (candidate.period_key[1], candidate.source_record_id) > ( + current.period_key[1], + current.source_record_id, + ): + controls[key] = candidate + return controls + + +def _check_soi_state_agi_bands_disjoint( + kept_bounds: Mapping[tuple[str, str], list[tuple[float, float, str]]], +) -> None: + """Refuse overlapping bands for one state and measure: a packaging error.""" + + for (state_fips, measure_id), bounds in kept_bounds.items(): + ordered = sorted(bounds) + for (_, upper, name), (lower, _, other) in zip( + ordered, ordered[1:], strict=False + ): + if lower < upper: + raise ValueError( + "Overlapping state AGI band targets for state " + f"{state_fips} {measure_id}: {name} and {other}. One " + "vintage's bands must tile the AGI line (microcosm#940)." + ) + + @dataclass(frozen=True) class _EitcActiveTotal: value: float @@ -2720,10 +2983,16 @@ def _soi_reference_from_fact( and _is_cross_period_fact(fact, target_period=target_period) and _is_soi_total_uprated_decomposition_fact(fact, measure_id) ) + # A state's Historic Table 2 AGI band binds only as a share of its own + # published partition, rebased onto the state total that binds + # (_rebase_soi_state_agi_bands) — at every vintage, so no state band ever + # binds as a raw nominal level (microcosm#940). + requires_state_agi_band_rebase = _is_soi_state_agi_band_fact(fact, measure_id) if ( cross_period_agi_slice and not requires_total_eitc_uprating and not requires_total_soi_uprating + and not requires_state_agi_band_rebase ): return None status = _filing_status_label(_dimensions(fact).get("filing_status")) @@ -2771,6 +3040,8 @@ def _soi_reference_from_fact( metadata["requires_total_eitc_uprating"] = "true" if requires_total_soi_uprating: metadata["requires_total_soi_uprating"] = "true" + if requires_state_agi_band_rebase: + metadata[_SOI_STATE_AGI_BAND_REBASE_FLAG] = "true" return LedgerTargetReference( name=source_record_id, ledger_source_record_id=source_record_id, @@ -2870,6 +3141,33 @@ def _is_soi_total_uprated_decomposition_fact( return not _is_all_income_range(fact) +def _is_soi_state_agi_band_fact(fact: object, measure_id: str) -> bool: + """Whether a fact is a state Historic Table 2 AGI band that binds (#940). + + True only for a return count or AGI amount, from a state record set of the + Historic Table 2 AGI table, at state geography, for all filing statuses, + in a bounded AGI band whose lower edge is at or above + :data:`US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND`. The national shape of + AGI belongs to Pub 1304 Table 1.1, so the HT2 ``us`` rows never qualify. + """ + if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: + return False + if not _normalized_record_set_id( + _str_at(fact, "layout", "record_set_id") + ).startswith(_SOI_STATE_AGI_BAND_RECORD_SET_PREFIX): + return False + if _geography_level(fact) != "state" or _state_fips(fact) is None: + return False + if _filing_status_label(_dimensions(fact).get("filing_status")) != "All": + return False + if _is_all_agi_range_fact(fact): + return False + lower, _ = _agi_bounds(fact) + return ( + _bound_from_metadata_value(lower) >= US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND + ) + + def _state_income_tax_reference_from_fact( fact: object, *, @@ -3727,6 +4025,23 @@ def _str_at(obj: object, *path: str) -> str: accepted_name_substrings=(".adjusted_gross_income",), min_matches=20, ), + TargetCoverageRequirement( + requirement_id="irs_state_agi_top_tail", + label="SOI AGI of returns at $1M+ in every state", + accepted_families=("irs_soi",), + required_metadata=( + (_SOI_STATE_AGI_BAND_REBASE_FLAG, "true"), + ("source_measure_id", "adjusted_gross_income"), + ("agi_lower_bound", "1000000.0"), + ), + min_matches=len(US_STATE_FIPS_TO_POSTAL), + notes=( + "State totals leave a state's top tail free, which is what " + "progressive state rate schedules tax (microcosm#940). A feed " + "without the split Historic Table 2 state bands must fail here, " + "not ship without the constraint." + ), + ), TargetCoverageRequirement( requirement_id="irs_wages_distribution", label="SOI wages by AGI bracket", diff --git a/packages/microcosm-build/tests/test_us_fiscal_targets.py b/packages/microcosm-build/tests/test_us_fiscal_targets.py index 3559eb8451..8d3c72c6bf 100644 --- a/packages/microcosm-build/tests/test_us_fiscal_targets.py +++ b/packages/microcosm-build/tests/test_us_fiscal_targets.py @@ -5822,6 +5822,7 @@ def test_soi_income_tax_liability_satisfies_total_tax() -> None: "metadata": {"target_role": "federal_income_tax_total"}, }, *complete_agi_distribution_rows(), + *complete_state_agi_top_tail_rows(), *complete_income_source_rows(), *complete_deduction_amount_rows(), *complete_program_rows(), @@ -6818,6 +6819,7 @@ def complete_coverage_targets() -> list[dict[str, object]]: return [ federal_income_tax_total_row(), *complete_agi_distribution_rows(), + *complete_state_agi_top_tail_rows(), *complete_income_source_rows(), *complete_deduction_amount_rows(), *complete_program_rows(), @@ -6828,6 +6830,28 @@ def complete_coverage_targets() -> list[dict[str, object]]: ] +def complete_state_agi_top_tail_rows() -> list[dict[str, object]]: + rows = [] + for postal in US_STATE_FIPS_TO_POSTAL.values(): + name = ( + f"irs_soi.ty2023.historic_table_2.state_agi.{postal.lower()}." + "1m_plus.adjusted_gross_income" + ) + rows.append( + { + "name": name, + "measure": name, + "family": "irs_soi", + "metadata": { + "requires_state_agi_band_rebase": "true", + "source_measure_id": "adjusted_gross_income", + "agi_lower_bound": "1000000.0", + }, + } + ) + return rows + + def federal_income_tax_total_row() -> dict[str, object]: return { "name": "irs_soi.ty2023.table_3_3.us.all.income_tax_liability_amount", diff --git a/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py b/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py new file mode 100644 index 0000000000..8e77ca00ae --- /dev/null +++ b/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py @@ -0,0 +1,877 @@ +"""State x AGI-band SOI targets from Historic Table 2 (microcosm#940). + +A state's Historic Table 2 AGI band binds, from the $100k floor up, as a share +of the same state's published partition, rebased onto the state all-returns +total that binds (``_rebase_soi_state_agi_bands``). The synthetic tests below +pin the rule and its invariants; the feed-gated tests check it on the pinned +Chronicle feed. +""" + +from __future__ import annotations + +import importlib.util +import math +import random +from hashlib import sha256 +from pathlib import Path + +import pytest + +from microcosm.build import target_profile_coverage_gate +from microcosm.build.us_runtime import ( + US_FISCAL_TARGET_COVERAGE_REQUIREMENTS, + US_FISCAL_TARGET_REFERENCES, + compile_us_fiscal_target_registry, +) +from microcosm.build.us_runtime.fiscal_targets import ( + US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND, +) +from microcosm.build.us_runtime.target_aging import age_us_dollar_targets +from microcosm.calibrate.geography_constants import US_STATE_FIPS_TO_POSTAL + +AGI = "us:statutes/26/62#adjusted_gross_income" +POSTAL_TO_FIPS = {postal: fips for fips, postal in US_STATE_FIPS_TO_POSTAL.items()} +FLAG = "requires_state_agi_band_rebase" +MEASURES = ("return_count", "adjusted_gross_income") + +#: The ten Historic Table 2 AGI stubs, as Chronicle labels them. +BANDS: tuple[tuple[str, float | None, float | None], ...] = ( + ("under_1", None, 1), + ("1_to_10k", 1, 10_000), + ("10k_to_25k", 10_000, 25_000), + ("25k_to_50k", 25_000, 50_000), + ("50k_to_75k", 50_000, 75_000), + ("75k_to_100k", 75_000, 100_000), + ("100k_to_200k", 100_000, 200_000), + ("200k_to_500k", 200_000, 500_000), + ("500k_to_1m", 500_000, 1_000_000), + ("1m_plus", 1_000_000, None), +) +#: The TY2022 Chronicle package publishes stubs 9 and 10 summed. +COLLAPSED_BANDS = (*BANDS[:8], ("500k_plus", 500_000, None)) +BINDING_BANDS = tuple( + band + for band, lower, _ in BANDS + if lower is not None and lower >= US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND +) + + +# -------------------------------------------------------------------------- +# Synthetic Chronicle facts + + +def _fact_id(name: str, period: object) -> str: + digest = sha256(f"{name}@{period}".encode()).hexdigest()[:12] + return f"{name.replace('.', '_')[:72]}_{digest}_{period}" + + +def _fact( + *, + source_record_id: str, + record_set_id: str, + measure_id: str, + value: float, + period: int, + geography_level: str, + geography_id: str, + dimensions: dict[str, str], + groupby_dimension: str, + groupby_value_id: str, + constraints: list[dict[str, object]] | None = None, + source_name: str = "irs_soi", +) -> dict[str, object]: + fact_id = _fact_id(source_record_id, period) + labels = {**dimensions, groupby_dimension: groupby_value_id} + return { + "label": f"Test label for {source_record_id}", + "aggregate_fact_key": f"ledger.aggregate_fact.v2:{fact_id}", + "semantic_fact_key": f"ledger.semantic_fact.v2:{fact_id}", + "legacy_fact_key": f"ledger.fact.v1:{fact_id}", + "lineage": {"source_record_id": source_record_id}, + "value": value, + "period": {"type": "tax_year", "value": period}, + "entity": {"name": "tax_unit"}, + "aggregation": {"method": "sum"}, + "geography": { + "level": geography_level, + "id": geography_id, + "name": f"Test geography {geography_id}", + }, + "dimensions": dict(dimensions), + "dimension_labels": {key: f"Test dimension {key}" for key in labels}, + "dimension_value_labels": { + key: {str(value): f"Test value {key}={value}"} + for key, value in labels.items() + }, + "universe_constraints": {"constraints": list(constraints or [])}, + "layout": { + "record_set_id": record_set_id, + "groupby_dimension": groupby_dimension, + "groupby_dimension_label": f"Test dimension {groupby_dimension}", + "groupby_value_id": groupby_value_id, + "groupby_value_label": ( + f"Test value {groupby_dimension}={groupby_value_id}" + ), + "measure_id": measure_id, + }, + "observed_measure": { + "source_name": source_name, + "source_table": f"{source_name} table", + "source_measure_id": measure_id, + "source_concept": measure_id, + "unit": "count" if measure_id == "return_count" else "usd", + }, + "source": { + "source_name": source_name, + "source_table": f"{source_name} table", + "vintage": f"tax_year_{period}", + "url": f"https://example.org/{fact_id}", + }, + } + + +def _band_fact( + postal: str, + period: int, + band: str, + lower: float | None, + upper: float | None, + measure_id: str, + value: float, + *, + filing_status: str = "all", + record_set_kind: str = "state_agi", +) -> dict[str, object]: + record_set_id = ( + f"irs_soi.ty{period}.historic_table_2.{record_set_kind}.{postal.lower()}" + ) + constraints = [] + if upper is not None: + constraints.append({"variable": AGI, "operator": "<", "value": upper}) + if lower is not None: + constraints.append({"variable": AGI, "operator": ">=", "value": lower}) + geography_level, geography_id = ( + ("country", "0100000US") + if postal == "US" + else ("state", f"0400000US{POSTAL_TO_FIPS[postal]}") + ) + value_id = band if filing_status == "all" else f"{filing_status}_{band}" + return _fact( + source_record_id=f"{record_set_id}.{value_id}.{measure_id}", + record_set_id=record_set_id, + measure_id=measure_id, + value=value, + period=period, + geography_level=geography_level, + geography_id=geography_id, + dimensions={"filing_status": filing_status, "income_range": band}, + groupby_dimension=AGI, + groupby_value_id=band, + constraints=constraints, + ) + + +def _state_total_fact( + postal: str, + period: int, + measure_id: str, + value: float, + *, + record_set_id: str | None = None, +) -> dict[str, object]: + record_set_id = record_set_id or ( + f"irs_soi.ty{period}.historic_table_2.state_broad.{postal.lower()}" + ) + return _fact( + source_record_id=f"{record_set_id}.all.{measure_id}", + record_set_id=record_set_id, + measure_id=measure_id, + value=value, + period=period, + geography_level="state", + geography_id=f"0400000US{POSTAL_TO_FIPS[postal]}", + dimensions={"filing_status": "all", "income_range": "all"}, + groupby_dimension="state", + groupby_value_id="all", + ) + + +def _partition( + postal: str, + period: int, + values: dict[str, tuple[float, float]], + *, + bands=BANDS, +) -> list[dict[str, object]]: + """One state's band facts: ``values[band] = (returns, agi)``.""" + facts = [] + for band, lower, upper in bands: + returns, agi = values[band] + facts.append( + _band_fact(postal, period, band, lower, upper, "return_count", returns) + ) + facts.append( + _band_fact(postal, period, band, lower, upper, "adjusted_gross_income", agi) + ) + return facts + + +def _totals(postal: str, period: int, returns: float, agi: float) -> list[dict]: + return [ + _state_total_fact(postal, period, "return_count", returns), + _state_total_fact(postal, period, "adjusted_gross_income", agi), + ] + + +#: Colorado's published TY2023 cells (23in55cmcsv.csv; AGI in dollars). +CO_2023 = { + "under_1": (47_150, -2_559_604_000), + "1_to_10k": (291_060, 1_416_216_000), + "10k_to_25k": (389_460, 6_728_128_000), + "25k_to_50k": (632_110, 23_615_781_000), + "50k_to_75k": (477_700, 29_421_989_000), + "75k_to_100k": (320_010, 27_725_880_000), + "100k_to_200k": (581_560, 81_122_417_000), + "200k_to_500k": (257_510, 74_198_170_000), + "500k_to_1m": (38_030, 25_370_899_000), + "1m_plus": (15_610, 47_266_883_000), +} +#: Colorado's TY2022 all-returns totals (22in55cmcsv.csv, AGI_STUB 0). +CO_2022_TOTAL_RETURNS = 2_972_380 +CO_2022_TOTAL_AGI = 297_676_269_000 + + +def _reference_fact(reference, value: float) -> dict[str, object]: + selector = dict(reference.ledger_selector) + source_name = str(selector.get("source_name") or reference.family) + measure_id = str( + selector.get("source_measure_id") + or selector.get("layout_measure_id") + or reference.measure + or reference.name + ) + period = selector.get("period_value") or reference.period + fact_id = _fact_id(reference.name, period) + return { + "label": f"Test label for {reference.name}", + "aggregate_fact_key": f"ledger.aggregate_fact.v2:{fact_id}", + "semantic_fact_key": f"ledger.semantic_fact.v2:{fact_id}", + "legacy_fact_key": f"ledger.fact.v1:{fact_id}", + "lineage": { + "source_record_id": reference.ledger_source_record_id + or f"source.record:{fact_id}" + }, + "value": value, + "period": { + "type": str(selector.get("period_type") or "tax_year"), + "value": period, + }, + "entity": {"name": str(selector.get("entity_name") or reference.entity)}, + "aggregation": {"method": "sum"}, + "geography": { + "level": str(selector.get("geography_level") or "country"), + "id": str(selector.get("geography_id") or "0100000US"), + "name": "Test geography", + }, + "dimensions": dict(selector.get("dimensions") or {}), + "layout": { + "record_set_id": str( + selector.get("layout_record_set_id") or f"{source_name}.record_set" + ), + "groupby_dimension": str(selector.get("layout_groupby_dimension") or ""), + "groupby_value_id": str(selector.get("layout_groupby_value_id") or "all"), + "measure_id": measure_id, + }, + "observed_measure": { + "source_name": source_name, + "source_table": str(selector.get("source_table") or f"{source_name} t"), + "source_measure_id": measure_id, + "source_concept": str(selector.get("source_concept") or measure_id), + "unit": "usd", + }, + "source": { + "source_name": source_name, + "source_table": str(selector.get("source_table") or f"{source_name} t"), + "vintage": str(period), + "url": f"https://example.org/{fact_id}", + }, + } + + +def _packaged_reference_facts() -> list[dict[str, object]]: + return [ + _reference_fact(reference, value=index + 1) + for index, reference in enumerate(US_FISCAL_TARGET_REFERENCES) + ] + + +def _compile(facts, *, target_period: int = 2024): + return compile_us_fiscal_target_registry( + [*_packaged_reference_facts(), *facts], + target_period=target_period, + allow_unaged_dollar_targets=True, + ) + + +def _band_specs(registry) -> dict[str, object]: + return { + spec.name: spec for spec in registry.specs if spec.metadata.get(FLAG) == "true" + } + + +def _cbo_agi_fact(period: int, value: float) -> dict[str, object]: + record_set_id = ( + f"cbo.revenue_projection.ty{period}.income_by_source.adjusted_gross_income" + ) + fact = _fact( + source_record_id=f"{record_set_id}.projected_amount", + record_set_id=record_set_id, + measure_id="projected_amount", + value=value, + period=period, + geography_level="country", + geography_id="0100000US", + dimensions={}, + groupby_dimension="cbo.income_source", + groupby_value_id="adjusted_gross_income", + source_name="cbo", + ) + fact["assertion"] = "source_projection" + fact["observed_measure"]["source_concept"] = "cbo.adjusted_gross_income" + fact["observed_measure"]["unit"] = "usd" + return fact + + +def _co_name(band: str, measure_id: str, period: int = 2023) -> str: + return f"irs_soi.ty{period}.historic_table_2.state_agi.co.{band}.{measure_id}" + + +# -------------------------------------------------------------------------- +# The rule + + +def test_state_bands_bind_as_shares_of_the_bound_state_total() -> None: + """TY2023 Colorado bands against the TY2022 state total that binds: each + binding band is control x band / partition, landed at the control's + period, with the share and the control named in its metadata.""" + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + bands = _band_specs(registry) + + assert set(bands) == { + _co_name(band, measure) for band in BINDING_BANDS for measure in MEASURES + } + for measure, control, column in ( + ("return_count", CO_2022_TOTAL_RETURNS, 0), + ("adjusted_gross_income", CO_2022_TOTAL_AGI, 1), + ): + partition = sum(values[column] for values in CO_2023.values()) + for band in BINDING_BANDS: + spec = bands[_co_name(band, measure)] + share = CO_2023[band][column] / partition + assert spec.value == pytest.approx(control * share, rel=1e-12) + assert spec.metadata["state_fips"] == "08" + assert spec.metadata["uprating_from_period"] == "2023" + assert spec.metadata["uprating_to_period"] == "2022" + assert spec.metadata["uprating_index"] == f"state_total_{measure}" + assert spec.metadata["uprating_index_source_record_id"] == ( + f"irs_soi.ty2022.historic_table_2.state_broad.co.all.{measure}" + ) + assert float(spec.metadata["state_agi_band_share"]) == pytest.approx( + share, rel=1e-12 + ) + assert float(spec.metadata["uprating_factor"]) == pytest.approx( + control / partition, rel=1e-12 + ) + top = bands[_co_name("1m_plus", "adjusted_gross_income")] + assert top.metadata["agi_lower_bound"] == "1000000.0" + assert top.metadata["agi_upper_bound"] == "inf" + assert top.metadata["measure_mode"] == "sum" + assert bands[_co_name("1m_plus", "return_count")].metadata["measure_mode"] == ( + "indicator_sum" + ) + + +def test_bands_below_the_floor_and_non_state_rows_never_bind() -> None: + """The $100k floor is inclusive; national HT2 bands (Table 1.1 owns the + national shape), filing-status slices and other HT2 state tables stay + refused across periods.""" + us_bands = [ + _band_fact("US", 2023, band, lower, upper, measure, 1_000.0) + for band, lower, upper in BANDS + for measure in MEASURES + ] + single_filers = [ + _band_fact( + "CO", 2023, band, lower, upper, measure, 1_000.0, filing_status="single" + ) + for band, lower, upper in BANDS + for measure in MEASURES + ] + other_table = [ + _band_fact( + "CO", 2023, band, lower, upper, measure, 1_000.0, record_set_kind="state_x" + ) + for band, lower, upper in BANDS + for measure in MEASURES + ] + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + *us_bands, + *single_filers, + *other_table, + ] + ) + names = {spec.name for spec in registry.specs} + + assert {name for name in names if ".state_agi.co." in name} == { + _co_name(band, measure) for band in BINDING_BANDS for measure in MEASURES + } + assert _co_name("100k_to_200k", "return_count") in names + assert _co_name("75k_to_100k", "return_count") not in names + assert not {name for name in names if ".historic_table_2.us." in name} + assert not {name for name in names if ".state_x." in name} + + +def test_an_older_vintage_never_binds_beside_a_newer_one() -> None: + """A collapsed TY2022 ``500k_plus`` row has no TY2023 twin, so latest-period + selection keeps it; the pass drops it because the state's newest bands + are TY2023. Only TY2023 bands bind, and they tile the line.""" + ty2022_values = {band: (100.0, 1_000_000.0) for band, _, _ in COLLAPSED_BANDS} + registry = _compile( + [ + *_partition("CO", 2022, ty2022_values, bands=COLLAPSED_BANDS), + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + bands = _band_specs(registry) + + assert {spec.metadata["uprating_from_period"] for spec in bands.values()} == { + "2023" + } + assert not [name for name in bands if ".500k_plus." in name] + assert len(bands) == len(BINDING_BANDS) * len(MEASURES) + + +def test_the_latest_vintage_binds_even_when_it_is_the_collapsed_one() -> None: + """With only the TY2022 package the collapsed top band binds (as a share), + and nothing below the floor does.""" + ty2022_values = {band: (100.0, 1_000_000.0) for band, _, _ in COLLAPSED_BANDS} + registry = _compile( + [ + *_partition("CO", 2022, ty2022_values, bands=COLLAPSED_BANDS), + *_totals("CO", 2022, 900.0, 9_000_000.0), + ] + ) + bands = _band_specs(registry) + + assert {name.split(".")[5] for name in bands} == { + "100k_to_200k", + "200k_to_500k", + "500k_plus", + } + for spec in bands.values(): + assert spec.value == pytest.approx(100.0 if "count" in spec.name else 1e6) + + +def test_bands_without_a_complete_partition_or_a_control_are_dropped() -> None: + """A gap in the published partition, or no state total to rebase onto, + drops the state's bands: never an unanchored nominal level.""" + gap = dict(CO_2023) + gapped = [ + fact + for fact in _partition("CO", 2023, gap) + if ".75k_to_100k." not in str(fact["lineage"]["source_record_id"]) + ] + registry = _compile( + [ + *gapped, + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + *_partition("WY", 2023, CO_2023), + ] + ) + + assert _band_specs(registry) == {} + + +def test_congressional_district_state_totals_never_anchor_a_state() -> None: + """The CD file's ``_total`` rows are a processing-window subset with a + wrong vintage stamp; with only those, the bands are dropped.""" + cd_record_set = "irs_soi.ty2023.congressional_district_2022.all_returns" + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + _state_total_fact( + "CO", 2023, "return_count", 1.0, record_set_id=cd_record_set + ), + _state_total_fact( + "CO", 2023, "adjusted_gross_income", 1.0, record_set_id=cd_record_set + ), + ] + ) + + assert _band_specs(registry) == {} + + +def test_the_control_is_the_latest_state_total_not_after_the_target() -> None: + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2021, 1.0, 1.0), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + *_totals("CO", 2025, 5.0, 5.0), + ] + ) + controls = { + spec.metadata["uprating_index_source_record_id"] + for spec in _band_specs(registry).values() + } + + assert controls == { + f"irs_soi.ty2022.historic_table_2.state_broad.co.all.{measure}" + for measure in MEASURES + } + + +def test_overlapping_bands_of_one_vintage_are_a_packaging_error() -> None: + both_tops = [ + *_partition("CO", 2023, CO_2023), + _band_fact("CO", 2023, "500k_plus", 500_000, None, "return_count", 53_640.0), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + + with pytest.raises(ValueError, match="Overlapping state AGI bands"): + _compile(both_tops) + + +def test_rebased_bands_age_with_the_state_total() -> None: + """End to end: the AGI bands and the state AGI total take the same + 2022->2024 link, so each band stays its exact share of the aged total; + counts never age.""" + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + cbo = ( + _cbo_agi_fact(2022, 14_000_000_000_000), + _cbo_agi_fact(2023, 15_000_000_000_000), + _cbo_agi_fact(2024, 16_000_000_000_000), + ) + aged = { + spec.name: spec + for spec in age_us_dollar_targets(registry, cbo, target_period=2024).specs + } + link = 16 / 14 + total_agi = aged[ + "irs_soi.ty2022.historic_table_2.state_broad.co.all.adjusted_gross_income" + ] + total_returns = aged[ + "irs_soi.ty2022.historic_table_2.state_broad.co.all.return_count" + ] + + assert total_agi.value == pytest.approx(CO_2022_TOTAL_AGI * link, rel=1e-12) + assert total_returns.value == CO_2022_TOTAL_RETURNS + for band in BINDING_BANDS: + agi = aged[_co_name(band, "adjusted_gross_income")] + returns = aged[_co_name(band, "return_count")] + assert float(agi.metadata["aging_factor"]) == pytest.approx(link, rel=1e-12) + assert agi.metadata["source_period"] == "2022" + assert agi.value / total_agi.value == pytest.approx( + float(agi.metadata["state_agi_band_share"]), rel=1e-12 + ) + assert returns.metadata["aging_factor"] == "1" + assert returns.value / total_returns.value == pytest.approx( + float(returns.metadata["state_agi_band_share"]), rel=1e-12 + ) + + +def test_release_coverage_requires_a_top_tail_row_in_every_state() -> None: + requirement = next( + requirement + for requirement in US_FISCAL_TARGET_COVERAGE_REQUIREMENTS + if requirement.requirement_id == "irs_state_agi_top_tail" + ) + facts = [] + for postal in sorted(POSTAL_TO_FIPS): + facts += _partition(postal, 2023, CO_2023) + facts += _totals(postal, 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI) + registry = _compile(facts) + everything = target_profile_coverage_gate(registry.specs, [requirement]) + one_state_short = target_profile_coverage_gate( + [ + spec + for spec in registry.specs + if spec.name != _co_name("1m_plus", "adjusted_gross_income") + ], + [requirement], + ) + + assert requirement.min_matches == 51 + assert everything.passed + assert not one_state_short.passed + + +# -------------------------------------------------------------------------- +# Invariants over generated states (Hypothesis is a workspace dependency; the +# wheels job installs no test extras, so these skip there). + + +def _generated_state_facts(draw_values, postal: str, period: int): + values = {} + for band, lower, _ in BANDS: + returns = draw_values(0, 10_000_000) + mean = (lower or 0) + draw_values(0, 5_000_000) + agi = -draw_values(0, 10**10) if band == "under_1" else returns * mean + values[band] = (float(returns), float(agi)) + return values + + +def test_rebase_invariants_hold_for_generated_partitions() -> None: + """For generated partitions and controls: every band equals control x + band / partition; the binding bands of a state sum to control x their + partition share; scaling a control scales exactly that state's bands; + and the output never depends on feed order.""" + pytest.importorskip("hypothesis") + from hypothesis import given, settings + from hypothesis import strategies as st + + states = sorted(POSTAL_TO_FIPS) + + @settings(max_examples=40, deadline=None) + @given( + chosen=st.lists(st.sampled_from(states), min_size=1, max_size=3, unique=True), + seed=st.integers(0, 2**32 - 1), + scale=st.floats(0.25, 4.0, allow_nan=False, allow_infinity=False), + ) + def check(chosen, seed, scale): + rng = random.Random(seed) + + def draw(low, high): + return rng.randint(low, high) + + facts = [] + expected = {} + controls = {} + for postal in chosen: + values = _generated_state_facts(draw, postal, 2023) + facts += _partition(postal, 2023, values) + returns_total = float(draw(1, 10_000_000)) + agi_total = float(draw(1, 10**12)) + facts += _totals(postal, 2022, returns_total, agi_total) + controls[postal] = (returns_total, agi_total) + for column, measure in enumerate(MEASURES): + partition = sum(value[column] for value in values.values()) + for band in BINDING_BANDS: + if partition == 0: + continue + expected[ + f"irs_soi.ty2023.historic_table_2.state_agi." + f"{postal.lower()}.{band}.{measure}" + ] = controls[postal][column] * values[band][column] / partition + + bands = { + name: spec.value for name, spec in _band_specs(_compile(facts)).items() + } + assert set(bands) == set(expected) + for name, value in expected.items(): + assert bands[name] == pytest.approx(value, rel=1e-9, abs=1e-6) + + shuffled = list(facts) + rng.shuffle(shuffled) + reordered = { + name: spec.value for name, spec in _band_specs(_compile(shuffled)).items() + } + assert reordered == pytest.approx(bands, rel=1e-12) + + first = chosen[0] + scaled_facts = [ + {**fact, "value": fact["value"] * scale} + if ".state_broad." in str(fact["lineage"]["source_record_id"]) + and f".{first.lower()}.all." in str(fact["lineage"]["source_record_id"]) + else fact + for fact in facts + ] + scaled = { + name: spec.value + for name, spec in _band_specs(_compile(scaled_facts)).items() + } + for name, value in bands.items(): + factor = scale if f".state_agi.{first.lower()}." in name else 1.0 + assert scaled[name] == pytest.approx(value * factor, rel=1e-9, abs=1e-6) + + check() + + +# -------------------------------------------------------------------------- +# The pinned Chronicle feed (skips where the feed is not on disk, as in CI) + + +def _load_repo_tool(name: str): + path = Path(__file__).resolve().parents[3] / "tools" / f"{name}.py" + spec = importlib.util.spec_from_file_location(f"_tool_{name}", path) + assert spec is not None and spec.loader is not None + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +@pytest.fixture(scope="module") +def pinned_feed_registry(): + feed_path = _load_repo_tool("build_us_target_parity_manifest").DEFAULT_FEED_PATH + if not feed_path.exists(): + pytest.skip(f"pinned feed not present at {feed_path}") + from microcosm.build.ledger_artifact import load_ledger_consumer_artifact + from microcosm.build.us_runtime import ( + default_congressional_district_vintage_crosswalk_path, + load_congressional_district_vintage_crosswalk, + ) + from microcosm.build.us_runtime.chronicle_feed import load_us_chronicle_feed + + facts = load_ledger_consumer_artifact( + feed_path, + expected_facts_sha256=load_us_chronicle_feed().facts_sha256, + expected_manifest_sha256=None, + ).facts + crosswalk = load_congressional_district_vintage_crosswalk( + default_congressional_district_vintage_crosswalk_path() + ) + registry = compile_us_fiscal_target_registry( + facts, + target_period=2024, + congressional_district_vintage_crosswalk=crosswalk, + age_targets=True, + ) + return facts, registry + + +def test_pinned_feed_binds_every_state_band_from_ty2023(pinned_feed_registry) -> None: + """51 states x 4 bands x 2 measures, all TY2023, each an exact share of + its bound state total after aging; Colorado's $1M+ rows pinned.""" + _, registry = pinned_feed_registry + bands = _band_specs(registry) + totals = { + (spec.metadata["state_fips"], spec.metadata["source_measure_id"]): spec + for spec in registry.specs + if spec.name.startswith("irs_soi.ty") + and ".historic_table_2.state_broad." in spec.name + and ".all." in spec.name + and spec.metadata.get("source_measure_id") in MEASURES + } + + assert len(bands) == 51 * len(BINDING_BANDS) * len(MEASURES) + assert {spec.metadata["uprating_from_period"] for spec in bands.values()} == { + "2023" + } + assert {name.split(".")[5] for name in bands} == set(BINDING_BANDS) + for spec in bands.values(): + key = (spec.metadata["state_fips"], spec.metadata["source_measure_id"]) + assert ( + spec.metadata["uprating_index_source_record_id"] + == (totals[key].metadata["ledger_source_record_id"]) + ) + assert spec.value / totals[key].value == pytest.approx( + float(spec.metadata["state_agi_band_share"]), rel=1e-12 + ) + + top = bands[_co_name("1m_plus", "adjusted_gross_income")] + share = 47_266_883_000 / sum(agi for _, agi in CO_2023.values()) + assert float(top.metadata["state_agi_band_share"]) == pytest.approx( + share, rel=1e-12 + ) + assert top.value == pytest.approx( + CO_2022_TOTAL_AGI * share * float(top.metadata["aging_factor"]), rel=1e-12 + ) + top_returns = bands[_co_name("1m_plus", "return_count")] + assert top_returns.value == pytest.approx( + CO_2022_TOTAL_RETURNS + * 15_610 + / sum(returns for returns, _ in CO_2023.values()), + rel=1e-12, + ) + + +def test_pinned_feed_state_bands_have_means_inside_their_edges( + pinned_feed_registry, +) -> None: + """Every state band's aged AGI per return lies inside the band.""" + _, registry = pinned_feed_registry + bands = _band_specs(registry) + for name, spec in bands.items(): + if not name.endswith(".adjusted_gross_income"): + continue + returns = bands[name.removesuffix("adjusted_gross_income") + "return_count"] + mean = spec.value / returns.value + lower = float(spec.metadata["agi_lower_bound"]) + upper = float(spec.metadata["agi_upper_bound"]) + assert lower <= mean < upper, (name, mean) + + +def test_pinned_feed_state_top_tail_agrees_with_table_1_1(pinned_feed_registry) -> None: + """Differential against the national owner of the AGI shape: summed over + the states, the aged $500k-$1M and $1M+ bands come to 97%-100% of SOI + Table 1.1's TY2023 classes aged to 2024 the same way. Table 1.1 also + counts returns filed from other areas and Puerto Rico, which no state + holds (1.2%-1.7% of these classes in the raw HT2 files), and the states' + TY2022 totals grew like the nation's to TY2023 (AGI x1.0305 in HT2 and in + Table 1.1; returns +0.19%), so the expected ratio is 0.98-0.99.""" + facts, registry = pinned_feed_registry + bands = _band_specs(registry) + table_1_1: dict[tuple[str, float, float], float] = {} + for fact in facts: + record_id = str(fact["lineage"]["source_record_id"]) + if not record_id.startswith("irs_soi.ty2023.table_1_1."): + continue + measure = record_id.rsplit(".", 1)[1] + if measure not in MEASURES: + continue + if (fact.get("dimensions") or {}).get("filing_status", "all") != "all": + continue + lower, upper = -math.inf, math.inf + for constraint in (fact.get("universe_constraints") or {}).get( + "constraints" + ) or []: + if constraint["operator"] == ">=": + lower = float(constraint["value"]) + elif constraint["operator"] == "<": + upper = float(constraint["value"]) + if (lower, upper) != (-math.inf, math.inf): + table_1_1[(measure, lower, upper)] = float(fact["value"]) + link = float( + next( + spec + for spec in registry.specs + if spec.name == "irs_soi.ty2023.table_1_1.all.adjusted_gross_income" + ).metadata["aging_factor"] + ) + + for band, lower, upper in ( + ("500k_to_1m", 500_000.0, 1_000_000.0), + ("1m_plus", 1_000_000.0, math.inf), + ): + for measure in MEASURES: + national = sum( + value + for (class_measure, class_lower, class_upper), value in ( + table_1_1.items() + ) + if class_measure == measure + and class_lower >= lower + and class_upper <= upper + ) + if measure == "adjusted_gross_income": + national *= link + states = sum( + spec.value + for name, spec in bands.items() + if name.endswith(f".{band}.{measure}") + ) + assert 0.97 <= states / national <= 1.0, (band, measure, states / national) From e6992b3f7df1ed1c5b48e52ea6806a061effce9b Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 26 Sep 2026 07:41:45 -0400 Subject: [PATCH 02/10] Document the state AGI band rule and commit the #940 support oracle docs/us-fact-to-target.md: which state HT2 bands bind, the share-of-state- total value, periods, one-vintage rule, receipts, release gate and the Table 1.1 agreement check. experiments/940-state-agi-bands: pre-calibration, proxy-AGI support per state and band on the #982 fix's offline outputs (both predictor designs), with the solver's necessary feasibility conditions under the 5x upward weight cap. Deterministic; reproduces its committed outputs byte for byte. Co-Authored-By: Claude Opus 5.5 --- docs/us-fact-to-target.md | 50 + experiments/940-state-agi-bands/README.md | 295 +++ .../support_by_state_band.csv | 409 ++++ .../940-state-agi-bands/support_oracle.py | 686 ++++++ .../940-state-agi-bands/support_summary.json | 1951 +++++++++++++++++ 5 files changed, 3391 insertions(+) create mode 100644 experiments/940-state-agi-bands/README.md create mode 100644 experiments/940-state-agi-bands/support_by_state_band.csv create mode 100644 experiments/940-state-agi-bands/support_oracle.py create mode 100644 experiments/940-state-agi-bands/support_summary.json diff --git a/docs/us-fact-to-target.md b/docs/us-fact-to-target.md index 5a4f56a557..4cae68ceb0 100644 --- a/docs/us-fact-to-target.md +++ b/docs/us-fact-to-target.md @@ -111,6 +111,56 @@ exclusion register instead. wiring is safe and normal (the keogh ALD facts rode the feed unmapped for weeks). +### State AGI bands bind as shares of the state total (microcosm#940) + +A state's total return count and AGI leave its top tail free, and the top +tail is what progressive state rate schedules tax: #940 measured Build P's +ACS-local release within 0.12% of Colorado's SOI returns and AGI while +holding 24% of Colorado's SOI AGI above $1M. IRS SOI Historic Table 2 +publishes each state's returns and AGI in ten AGI classes, including +$500k–$1M and $1M+ separately. `_soi_reference_from_fact` rescues those +bands from the cross-period refusal and `_rebase_soi_state_agi_bands` +binds them: + +- **Which rows.** `return_count` and `adjusted_gross_income` from the + per-state HT2 AGI record sets (`irs_soi..historic_table_2.state_agi.`), + all filing statuses, bands from + `US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND` ($100,000) up. The floor is the + national size-of-AGI floor for the same reason: the SOI slice materializer + counts every tax unit in a band, filer or not. The HT2 `us` rows never + qualify; the national AGI shape belongs to Table 1.1. +- **The value.** `control x band / partition`. The partition is the sum of + the state's published bands of the same vintage, measure and record set + over the whole AGI line, negative AGI under $1 included; HT2 publishes + amounts that add exactly and counts rounded to tens. The control is the + state's latest HT2 all-returns total not after the build period + (`irs_soi..historic_table_2.state_broad..all.`), the row + that already binds the state's total. Congressional-district `_total` + rows never anchor a state. +- **Periods.** The value lands at the control's period and ages with the + state total: AGI on the CBO AGI series, counts never. The bands therefore + stay the same share of the state total they bind beside, at every stage. + The control may be older than the bands (TY2023 bands on the TY2022 state + total): the newest published shares scale onto the level the state total + binds at, rather than binding a second, differently aged level. +- **One vintage.** Per state and measure only the newest vintage's bands + bind, so the TY2022 package's summed `500k_plus` row never binds beside + TY2023's split rows. A gap in a partition drops that state's bands; an + overlap raises. +- **Receipts.** Every rebased row carries `state_agi_band_share`, + `uprating_factor` and the control's record id. +- **Release gate.** `irs_state_agi_top_tail` in + `US_FISCAL_TARGET_COVERAGE_REQUIREMENTS` requires a $1M+ AGI row for all 51 + states, so a feed without the split bands fails the release rather than + shipping without the constraint. +- **Agreement with Table 1.1.** On the pinned feed the states' $500k–$1M and + $1M+ rows sum to 98–99% of Table 1.1's TY2023 classes aged the same way; + Table 1.1 also counts returns filed from other areas and Puerto Rico + (`test_pinned_feed_state_top_tail_agrees_with_table_1_1`). +- **Support.** The rows can bind only where the pool has records in the + band. `experiments/940-state-agi-bands/` measures pre-calibration support + per state and band on the #982 fix's offline outputs. + ## 4. Keep the exclusion register honest `US_FISCAL_TARGET_SUPPORT_EXCLUSIONS` is keyed by `source_record_id` and its diff --git a/experiments/940-state-agi-bands/README.md b/experiments/940-state-agi-bands/README.md new file mode 100644 index 0000000000..cf610d084f --- /dev/null +++ b/experiments/940-state-agi-bands/README.md @@ -0,0 +1,295 @@ +# Support oracle for microcosm#940 (state x AGI-band SOI targets) + +Analysis only, 2026-09-26. Every number here is **pre-calibration** and uses +**proxy AGI** (defined below), computed from the offline #982 predictions and +SOI Historic Table 2. Nothing was calibrated, aged at the record level, or run +through the PolicyEngine engine. + +Files: + +- `support_oracle.py` — the deterministic script (two runs produce + byte-identical outputs). +- `support_by_state_band.csv` — 408 rows = 2 variants x 51 states x 4 bands, + every metric below plus the raw SOI values. +- `support_summary.json` — per-band counts, worst-10 lists, Colorado rows, + sensitivity, national sums, the Colorado reproduction check. + +## What was computed + +**Inputs.** `imputed_current.parquet` (old design: the QRF copied each unit's +own survey income) and `imputed_demographic_midrank6_earn.parquet` (the chosen +#1033 design), 231,007 PUF-clone recipient tax units each, 8-tree fits, from +the tail lane's archive +`/Users/maxghenis/PolicyEngine/_recovered/lane958-958-964-982-archive-20260926/982/` +(`MICROCOSM_940_PREDICTIONS_DIR`; the lane's `.lane958/982/` copy, which the +first run read, moved there on 2026-09-26). The SOI files are read from +Chronicle's `db/data/irs_soi/historic_table_2/` (`MICROCOSM_940_SOI_DIR`); +`23in55cmcsv.csv` sha256 `d1f7c890...668f` is the file the Chronicle +TY2023 state AGI package registers. Rerunning from this directory reproduces +both output files byte for byte. +SOI Historic Table 2 TY2023 (`23in55cmcsv.csv`) and TY2022 (`22in55cmcsv.csv`), +50 states + DC (US, OA, PR excluded), `N1` = returns, `A00100` = AGI in $ +thousands. State postal codes mapped to FIPS with the standard table (CO=08, +CA=06, DC=11, WY=56 asserted; the five largest states by PUF-half weight come +out as CA, TX, FL, NY, PA). + +**Proxy AGI** on the PUF half = the sum of the 15 imputed income items +(wages, self-employment, taxable interest, qualified and non-qualified +dividends, short- and long-term gains, pensions, IRA distributions, rental, +estate, farm, miscellaneous, partnership, S-corp). No adjustments, no Social +Security, no capital-gains distributions. + +**Survey half** = the same units at the same weight `w` with income = +the parquet's `survey_total`. Note: `survey_total` is **not** the six-item +predictor sum. `compare_predictors.py` builds it from its `SURVEY` list (up to +14 survey items: the six predictor items plus pensions, IRA distributions, +rental, farm operations, unemployment compensation, alimony, miscellaneous); +43,343 of 231,007 rows differ from the six-item sum. I used `survey_total` +because it is closer in scope to the 15-item PUF proxy; the six-item version is +carried alongside as `svy6_*` / `ratio6_*` columns and moves the ratios by a +few percent (Colorado $1M+: ratio_A 1.62 vs 1.61). The survey half's maximum +income is $3.16M, so the survey channel has almost no support above that. + +**Frame view** = PUF half at weight `w` + survey half at weight `w`; each +channel carries half the population (PUF-half weights sum to 91.66M; x2 = +183.3M). The **x2 view** (PUF half doubled, "as if this half were the whole +population") is the #982 README convention and is reported for comparison. + +**Targets at 2024** (the rule the compiler will use), per state `s`, measure +`m` in {returns, AGI}, band `b` in {100k_200k, 200k_500k, 500k_1m, 1m_plus} +(HT2 `AGI_STUB` 7, 8, 9, 10): + + share(s,b,m) = TY2023 HT2 value(s,b,m) / sum over TY2023 stubs 1..10 + control(s,m) = TY2022 HT2 stub-0 value(s,m) + target(s,b,m) = share x control; AGI x 1.1203460 (CBO AGI 2022->2024); counts not aged + +TY2023 stub 0 equals the sum of stubs 1..10 to 3.5e-5 (returns) and exactly +(AGI), so the denominator choice is immaterial. Summed over the 51 states the +2024 targets are 787,789 returns / $2,725.6B for $1M+, against SOI Table 1.1 +TY2023 $1M+ of 799,094 returns / $2,543.5B (five sub-bands summed from +`score_variants.py`). + +**Solver contract** (read from the worktree, not assumed): +`packages/microcosm-build/src/microcosm/build/us/spec/calibration.yaml` sets +`hard_constraints.max_weight_ratio: 5.0`, `mass: conserve`, and the loss +`weighted_mean(min(abs((A@w-target)/target_scale), target_loss_cap))` with +`target_scale = max(abs(target), 1)` and `target_loss_cap: 1.0`. +`packages/microcosm-calibrate/src/microcosm/calibrate/solve.py` optimises +log-weights with Adam and clamps **upward only** +(`log_w.clamp_(max=torch.log(upper))`, `upper = max_weight_ratio * w0`); there +is no lower bound, so a weight may fall toward zero. The yaml's +`infeasibility_contract` says `structural_cap_mass_or_empty_support: refuse` +and its attainment block says `positive_target_zero_support: fail`. + +**Feasibility flags** (per cell, frame view, records `(a_j, w0_j)`): + +- `c1_count_reachable`: `N_target <= 5 * sum(w0)` +- `c2_amount_reachable`: `A_target <= 5 * sum(w0 * a)` (all `a > 0` in these bands) +- `c3_mean_in_range`: `min(a) <= A_target / N_target <= max(a)` +- `feasible_necessary` = all three. These are **necessary, not sufficient**: + each record's weight is shared by every target it enters, mass is conserved + frame-wide, and the cap prevents putting all of a cell's weight on its top + record, so the true reachable set is smaller. +- `over2x_A` / `over2x_N`: frame start > 2 x target, i.e. the starting relative + error exceeds the 1.0 loss cap and the target contributes **zero gradient at + the start** (it can re-enter the active region only if other targets move + the same records). +- `zero_support`: no frame record in the cell. + +## Colorado reproduction check (chosen variant, $1M+, x2 view) + +| Quantity | #982 README | Computed here | | +|---|---|---|---| +| PUF records at $1M+ proxy AGI | 15 | 15 | reproduces | +| Weighted returns, x2 | ~14,847 | 14,847.2 | reproduces | +| Largest record's share of income above $1M | 84.0% | 83.96% | reproduces | +| Largest record's proxy AGI | $125.4M | $125.40M | reproduces | +| Largest record's weight, x2 | 867 | 867.2 | reproduces | + +The 84% is the share of income **above $1M** (`w * max(agi - 1e6, 0)`), as in +`score_variants.py`. The same record's share of the cell's total proxy AGI is +75.9%. In the old design the largest Colorado $1M+ record is $12.8M with a +20.3% share (31.6% of income above $1M). + +## Colorado, all four bands (pre-calibration, proxy AGI) + +Targets at 2024 (both variants): returns 559,959 / 247,962 / 36,620 / 15,031; +AGI $86.1B / $78.8B / $26.9B / $50.2B for 100k_200k / 200k_500k / 500k_1m / +1m_plus. Raw TY2023 HT2: 581,520 / 257,510 / 38,030 / 15,610 returns and +$81.1B / $74.2B / $25.4B / $47.3B. + +| Band | Variant | PUF n | PUF N | PUF A $bn | PUF mean | PUF max | Largest share of PUF A | Largest w (half / x2) | Survey n | Survey N | Survey A $bn | Frame N | Frame A $bn | ratio_N | ratio_A | 5x count cap | 5x amount cap $bn | Target mean | Feasible (necessary) | >2x | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| 100k_200k | current | 574 | 316,972 | 44.7 | $141k | $200k | 0.4% | 1,138 / 2,276 | 565 | 309,786 | 43.3 | 626,758 | 88.0 | 1.12 | 1.02 | 3,133,789 | 440 | $154k | yes | no | +| 100k_200k | chosen | 569 | 312,760 | 43.0 | $138k | $199k | 0.5% | 1,206 / 2,412 | 565 | 309,786 | 43.3 | 622,547 | 86.3 | 1.11 | 1.00 | 3,112,733 | 432 | $154k | yes | no | +| 200k_500k | current | 309 | 164,652 | 47.3 | $287k | $493k | 1.1% | 1,394 / 2,789 | 283 | 148,922 | 41.9 | 313,574 | 89.3 | 1.27 | 1.13 | 1,567,871 | 446 | $318k | yes | no | +| 200k_500k | chosen | 220 | 114,549 | 32.0 | $279k | $500k | 1.1% | 935 / 1,870 | 283 | 148,922 | 41.9 | 263,471 | 74.0 | 1.06 | 0.94 | 1,317,356 | 370 | $318k | yes | no | +| 500k_1m | current | 36 | 19,368 | 13.3 | $685k | $992k | 6.4% | 934 / 1,868 | 17 | 8,404 | 6.0 | 27,773 | 19.3 | 0.76 | 0.71 | 138,863 | 96 | $736k | yes | no | +| 500k_1m | chosen | 21 | 12,867 | 9.1 | $707k | $954k | 11.7% | 1,394 / 2,789 | 17 | 8,404 | 6.0 | 21,271 | 15.1 | 0.58 | 0.56 | 106,357 | 75 | $736k | yes | no | +| 1m_plus | current | 26 | 13,775 | 31.9 | $2.32M | $12.8M | 20.3% | 749 / 1,499 | 13 | 7,617 | 9.8 | 21,392 | 41.7 | 1.42 | 0.83 | 106,962 | 209 | $3.34M | yes | no | +| 1m_plus | chosen | 15 | 7,424 | 71.7 | $9.65M | $125.4M | 75.9% | 434 / 867 | 13 | 7,617 | 9.8 | 15,041 | 81.5 | 1.00 | 1.62 | 75,206 | 407 | $3.34M | yes | no | + +Colorado $1M+ in the chosen variant passes all three necessary conditions +(count 1.00x, amount 1.62x, target mean $3.34M inside [$1.0M, $125.4M]) and is +under 2x, so it is not "infeasible" or "zero-gradient" in this oracle; it is +one record carrying 76% of the cell's amount. Dropping that record leaves 14 +PUF + 13 survey records, ratio_A 0.54, still feasible (necessary). + +## Per-band counts, 51 states (pre-calibration, proxy AGI) + +Infeasible = fails at least one necessary condition, with the three failures +broken out (a state can fail more than one). + +### Old design (`current`) + +| Band | PUF records (min state) | States PUF n<10 | Zero support | Infeasible (count cap / amount cap / mean out of range) | A_frame>2x | N_frame>2x | Largest record >50% of PUF A | ratio_A median [min, max] | ratio_N median [min, max] | +|---|---|---|---|---|---|---|---|---|---| +| 100k_200k | 37,200 (274) | 0 | 0 | 0 (0 / 0 / 0) | 0 | 0 | 0 | 0.99 [0.83, 1.21] | 1.06 [0.91, 1.22] | +| 200k_500k | 18,154 (133) | 0 | 0 | 0 (0 / 0 / 0) | 0 | 0 | 0 | 1.17 [0.91, 1.53] | 1.26 [1.01, 1.57] | +| 500k_1m | 3,098 (20) | 0 | 0 | 0 (0 / 0 / 0) | 1 (RI) | 1 (RI) | 0 | 1.09 [0.67, 2.01] | 1.18 [0.76, 2.10] | +| 1m_plus | 1,570 (9) | 2 | 0 | 12 (0 / 1 / 12) | 0 | 2 (NE, WV) | 1 (OH) | 0.63 [0.12, 1.63] | 1.31 [0.57, 2.41] | + +### Chosen design (`demographic_midrank6_earn`) + +| Band | PUF records (min state) | States PUF n<10 | Zero support | Infeasible (count cap / amount cap / mean out of range) | A_frame>2x | N_frame>2x | Largest record >50% of PUF A | ratio_A median [min, max] | ratio_N median [min, max] | +|---|---|---|---|---|---|---|---|---|---| +| 100k_200k | 37,680 (282) | 0 | 0 | 0 (0 / 0 / 0) | 0 | 0 | 0 | 0.97 [0.84, 1.20] | 1.05 [0.91, 1.24] | +| 200k_500k | 13,302 (78) | 0 | 0 | 0 (0 / 0 / 0) | 0 | 0 | 0 | 0.99 [0.78, 1.30] | 1.07 [0.85, 1.36] | +| 500k_1m | 1,990 (13) | 0 | 0 | 0 (0 / 0 / 0) | 0 | 0 | 0 | 0.85 [0.52, 1.43] | 0.91 [0.58, 1.53] | +| 1m_plus | 1,078 (4) | 11 | 0 | 9 (0 / 2 / 9) | 2 (SC, WV) | 1 (WV) | 4 (CO, NV, SC, WV) | 0.58 [0.11, 2.70] | 0.96 [0.44, 2.31] | + +Reading the 1m_plus row for the chosen design: + +- No cell is empty and the count cap never binds: even the thinnest cell + (DE, 4 PUF + 3 survey records) has 5x headroom on returns. +- The binding failure is the **mean** condition: in 9 states the SOI target mean + ($2.75M-$5.93M) exceeds every record in the cell, so no reweighting of the + existing records can hit both the count and the amount. Two of them (WY, DE) + also fail the 5x amount cap outright. +- ratio_A distribution: 4 states below 0.25, 18 in [0.25, 0.5), 19 in + [0.5, 1), 8 in [1, 2), 2 at or above 2. The frame starts **below** the SOI + amount in 41 of 51 states; the solver would have to push top-record weights + up (toward the 5x cap) almost everywhere. +- The two over-2x cells (WV 2.70x, SC 2.03x) are each one record: the largest + carries 64% / 56% of the state's PUF amount, and removing it brings both under + 2x (1.24x, 1.05x). +- 11 states have fewer than 10 PUF records at $1M+ (DE 4, IA 7, IN 7, MS 7, + KY 8, RI 8, WI 8, MN 9, MT 9, SD 9, WY 9). The old design had 2 (KY 9, ME 9) + because it spread survey-topcoded incomes across more clones; its + $1M+ amounts were correspondingly lower (national x2 $2.22T vs $2.70T). + +### States failing the mean condition at $1M+ (chosen design) + +| State | PUF n | Survey n | Target N | Target A $bn | Target mean | Frame max record | 5x amount cap $bn | ratio_A | +|---|---|---|---|---|---|---|---|---| +| DE | 4 | 3 | 1,646 | 4.55 | $2.76M | $1.35M | 4.45 | 0.20 | +| IA | 7 | 6 | 4,321 | 13.87 | $3.21M | $1.47M | 19.97 | 0.29 | +| ID | 10 | 6 | 3,175 | 10.67 | $3.36M | $2.42M | 10.90 | 0.20 | +| ME | 11 | 6 | 2,056 | 5.66 | $2.75M | $2.75M | 27.07 | 0.96 | +| MI | 17 | 13 | 15,917 | 51.12 | $3.21M | $2.83M | 101.95 | 0.40 | +| MT | 9 | 5 | 2,236 | 7.27 | $3.25M | $3.08M | 7.83 | 0.22 | +| RI | 8 | 5 | 1,892 | 6.08 | $3.22M | $3.08M | 11.76 | 0.39 | +| WI | 8 | 5 | 9,758 | 31.29 | $3.21M | $2.51M | 44.62 | 0.29 | +| WY | 9 | 9 | 1,720 | 10.20 | $5.93M | $2.23M | 5.44 | 0.11 | + +(ME fails by a hair: target mean $2.7545M vs max record $2.7543M.) The old +design's 12 failures are AR, FL, ID, IN, KY, LA, MO, MT, ND, OK, UT, WY, with +Florida the notable one: 84 PUF records but a max of $2.9M against a $4.59M +target mean, because the old design's clones inherited survey topcodes. + +## Worst 10 states at $1M+ by |log(ratio_A)| (chosen design) + +| State | PUF n | Survey n | Frame N | Target N | ratio_N | Frame A $bn | Target A $bn | ratio_A | Largest share of PUF A | Max record | Failing | ratio_A without largest record | +|---|---|---|---|---|---|---|---|---|---|---|---|---| +| WY | 9 | 9 | 844 | 1,720 | 0.49 | 1.09 | 10.20 | 0.11 | 18% | $2.2M | amount cap, mean | 0.10 | +| DE | 4 | 3 | 724 | 1,646 | 0.44 | 0.89 | 4.55 | 0.20 | 31% | $1.3M | amount cap, mean | 0.16 | +| ID | 10 | 6 | 1,633 | 3,175 | 0.51 | 2.18 | 10.67 | 0.20 | 15% | $2.4M | mean | 0.19 | +| MT | 9 | 5 | 1,009 | 2,236 | 0.45 | 1.57 | 7.27 | 0.22 | 23% | $3.1M | mean | 0.18 | +| WI | 8 | 5 | 7,111 | 9,758 | 0.73 | 8.92 | 31.29 | 0.29 | 27% | $2.5M | mean | 0.24 | +| IA | 7 | 6 | 3,342 | 4,321 | 0.77 | 3.99 | 13.87 | 0.29 | 23% | $1.5M | mean | 0.26 | +| IN | 7 | 4 | 5,465 | 9,534 | 0.57 | 8.80 | 29.19 | 0.30 | 28% | $3.2M | - | 0.24 | +| IL | 25 | 16 | 21,272 | 30,493 | 0.70 | 37.45 | 108.07 | 0.35 | 23% | $18.7M | - | 0.29 | +| NH | 14 | 6 | 2,886 | 3,688 | 0.78 | 4.73 | 13.25 | 0.36 | 12% | $4.3M | - | 0.32 | +| WV | 16 | 10 | 2,863 | 1,238 | 2.31 | 8.97 | 3.32 | 2.70 | 64% | $77.0M | - (over 2x) | 1.24 | + +The highest ratios are WV 2.70, SC 2.03, CO 1.62, VA 1.28, AK 1.15, AL 1.15; +the four states where one record exceeds half the PUF amount are CO (76%), NV +(78%), WV (64%), SC (56%). The old design's worst list is WY 0.12, MT 0.27, +FL 0.30, ID 0.34, ND 0.36, NV 0.37, NY 0.38, AR 0.42, IN 0.43, IL 0.43 (all +under-target; its only over-target $1M+ amounts are WV 1.63 and OH 1.56, the +latter one $122M record at 67%). + +## Sensitivity: remove each state's single largest $1M+ record + +| | Old design | Chosen design | +|---|---|---| +| States passing all necessary conditions | 39 -> 21 | 42 -> 30 | +| States flipping feasible -> infeasible | 18 | 12 (AR, IL, IN, KS, KY, MD, MN, MO, MS, ND, OR, VT) | +| States over 2x on amount | 0 -> 0 | 2 -> 0 (SC, WV) | +| Median ratio_A | 0.63 -> 0.58 | 0.58 -> 0.50 | + +In the chosen design, 12 of the 42 passing states pass the mean condition only +because of their single largest record; without it, the target mean exceeds +every remaining record. That is the one-record dependence in the direction +opposite to Colorado's: most states are short of top-tail income, not long. + +## National sums at $1M+ (sum over 51 states; returns / AGI $bn) + +| | Target 2024 | PUF half | Survey half | Frame (PUF + survey) | ratio N / A | PUF x2 | SOI Table 1.1 TY2023 | +|---|---|---|---|---|---|---|---| +| Old design | 787,789 / 2,725.6 | 633,202 / 1,111.5 | 326,243 / 407.3 | 959,445 / 1,518.8 | 1.22 / 0.56 | 1,266,404 / 2,223.0 | 799,094 / 2,543.5 | +| Chosen design | 787,789 / 2,725.6 | 420,000 / 1,351.6 | 326,243 / 407.3 | 746,243 / 1,758.9 | 0.95 / 0.65 | 840,000 / 2,703.2 | 799,094 / 2,543.5 | + +The chosen design's x2 view (840,000 returns / $2,703B) reproduces the #982 +README's national $1M+ story (sum of its five sub-band rows = 839,999). The +frame view is lower because the survey half, with a $3.16M ceiling, contributes +only $407B of $1M+ income at 326k returns; the assembled frame therefore starts +at 0.65 of the national $1M+ amount target even though the PUF channel alone +is on target. + +## What these numbers can and cannot tell you + +They can: + +- Show that no state x band cell is empty and none fails the 5x **count** cap, + in either variant, so the `structural_cap_mass_or_empty_support: refuse` and + `positive_target_zero_support: fail` contracts would not trip on support + alone for these four bands. +- Identify the cells where the pair (returns, AGI) is unreachable by any + per-cell reweighting of the current records under the 5x cap: 9 states at + $1M+ in the chosen design (12 in the old), all because the SOI target mean + exceeds the cell's largest record, plus WY and DE on the amount cap. +- Identify cells that start beyond the 1.0 loss cap (zero initial gradient): + SC and WV amounts at $1M+ in the chosen design (RI at 500k_1m and NE/WV + counts in the old), and show each is a single-record effect. +- Quantify how thin and how single-record-dependent the $1M+ cells are (11 + states under 10 PUF records; 12 states whose feasibility rests on one + record; four states with one record above half the amount). + +They cannot: + +- Predict the calibrated outcome. Weights are shared across every target a + record enters, mass is conserved frame-wide, L0 selection changes the + support, and the cap forbids concentrating a cell on its top record; the + flags are necessary conditions on one cell at a time. +- Stand in for engine AGI. Proxy AGI omits adjustments, Social Security and + other AGI components; the survey half's income is the saved broad survey + total (up to 14 items), not the engine's AGI for those households; band + membership will shift when the engine computes AGI for both halves. +- Reflect production fits. These are 8-tree offline fits on the 2026-09-12 + donor frame with no tail stratum (#958) and no clone selection; the record + counts, maxima and shares will differ in a production build. +- Reflect record-level aging. Incomes were not aged from the donor year; + only the AGI targets carry the x1.1203460 factor. +- Speak to bands below $100k or to the sub-$1M national comparison, which + were not computed here. + +## Limitations restated + +PUF half only for imputed income; survey half approximated with the saved +`survey_total` (broad survey list, up to 14 items, not six; six-item version +in `svy6_*`); 8-tree fits; no tail stratum; no engine AGI; no aging of +incomes; no clone selection; feasibility conditions are per-cell and necessary +only; the AGI aging factor 1.1203460 was supplied by the caller and matches the +"x1.1203 over 2022->2024" CBO AGI default documented in +`us_runtime/fiscal_targets.py`. diff --git a/experiments/940-state-agi-bands/support_by_state_band.csv b/experiments/940-state-agi-bands/support_by_state_band.csv new file mode 100644 index 0000000000..54204487ce --- /dev/null +++ b/experiments/940-state-agi-bands/support_by_state_band.csv @@ -0,0 +1,409 @@ +variant,state,fips,band,band_low,band_high,soi2023_returns,soi2023_agi,soi2023_share_returns,soi2023_share_agi,ty2022_control_returns,ty2022_control_agi,target_returns_2024,target_agi_2024,puf_n,puf_N,puf_A,puf_mean_agi,puf_min_agi,puf_max_agi,puf_largest_share_of_A,puf_largest_w,puf_largest_share_above_low,puf_N_x2,puf_A_x2,puf_largest_w_x2,svy_n,svy_N,svy_A,svy_max_income,svy6_n,svy6_N,svy6_A,frame_n,frame_N,frame_A,ratio_N,ratio_A,frame6_N,frame6_A,ratio6_N,ratio6_A,cap_N_5x,cap_A_5x,frame_min_agi,frame_max_agi,target_mean_agi,c1_count_reachable,c2_amount_reachable,c3_mean_in_range,feasible_necessary,failing_conditions,zero_support,over2x_A,over2x_N,start_loss_A_capped,start_loss_N_capped,drop1_removed_agi,drop1_removed_w,drop1_removed_channel,drop1_frame_n,drop1_frame_N,drop1_frame_A,drop1_ratio_A,drop1_feasible_necessary,drop1_failing_conditions,drop1_over2x_A +current,AK,02,100k_200k,100000.0,200000.0,72120.0,10028423000.0,0.20727711674426624,0.3199851628615256,348250.0,30289519000.0,72184.25590619072,10858613770.685642,484,35074.316226881456,4929461989.604954,140543.3525123704,100001.57343687941,199354.49853840718,0.006748882897250891,179.73601038200735,0.010755579509356055,70148.63245376291,9858923979.209908,359.4720207640147,477,34446.28783107328,4829864871.900757,199808.68,457,32954.97155840823,4601843387.096263,961,69520.60405795473,9759326861.50571,0.9630992684651675,0.8987636053372106,68029.28778528969,9531305376.701218,0.9424394132939357,0.8777644714127617,347603.02028977365,48796634307.52855,100000.0,199808.68,150429.11552343614,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AK,02,200k_500k,200000.0,500000.0,24460.0,6808021000.0,0.07029947692130827,0.21722914045904193,348250.0,30289519000.0,24481.7928378456,7371614717.659699,242,18068.151101759664,5064575137.767042,280304.00616219116,200022.8612490445,498414.59101324005,0.013178324468817705,179.73601038200735,0.021224384203821094,36136.30220351933,10129150275.534084,359.4720207640147,223,16290.245853620207,4437560538.973768,497843.36,203,14718.662144223279,3990690407.561447,465,34358.39695537987,9502135676.74081,1.4034265048704417,1.2890168627474738,32786.81324598294,9055265545.32849,1.3392325252952424,1.2283964765053954,171791.98477689933,47510678383.704056,200000.0,498414.59101324005,301106.00013999635,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AK,02,500k_1m,500000.0,1000000.0,2870.0,1915583000.0,0.00824854860033339,0.06112208651647122,348250.0,30289519000.0,2872.5570500661033,2074162203.0394325,38,2994.4805584641404,2047996040.1950042,683923.6389116565,500081.1835210288,987939.4431635682,0.05479620661888202,124.83,0.09043466760310423,5988.961116928281,4095992080.3900084,249.66,14,1290.4213372674158,899698798.2563313,993613.0,14,1290.4213372674158,859768797.745878,52,4284.901895731556,2947694838.451335,1.4916681622155952,1.4211496256810805,4284.901895731557,2907764837.940882,1.4916681622155954,1.401898479144932,21424.50947865778,14738474192.256676,500081.1835210288,993613.0,722061.2739411744,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AK,02,1m_plus,1000000.0,inf,1080.0,2528808000.0,0.0031039834454216243,0.08068876230345777,348250.0,30289519000.0,1080.9622348680807,2738152286.976728,14,989.6179347026177,1595244753.6469622,1611980.4398313947,1017836.5200223096,4635470.180416907,0.1397256333962377,48.084999999999994,0.28864571078615275,1979.2358694052355,3190489507.2939243,96.16999999999999,10,802.0532521890672,935870221.1120284,1950003.4,8,637.5125607349346,760796045.8711413,24,1791.6711868916848,2531114974.7589903,1.6574780589909675,0.9243879483246955,1627.1304954375523,2356040799.5181036,1.505261185776879,0.8604491469389657,8958.355934458425,12655574873.794952,1000895.04,4635470.180416907,2533069.3327236255,True,True,True,True,,False,False,False,False,False,4635470.180416907,48.084999999999994,puf,23.0,1743.5861868916852,2308218391.133644,0.8429839355948364,False,mean_out_of_range,False +current,AL,01,100k_200k,100000.0,200000.0,337310.0,46273164000.0,0.15755964948338036,0.2777399863679626,2149560.0,159215844000.0,338683.9201434951,49542379432.97288,653,194301.29271245192,26831427071.024292,138091.86082324394,100053.12280611218,199968.54507933016,0.004657966581844128,664.6133333333333,0.007906526515989156,388602.58542490384,53662854142.048584,1329.2266666666667,620,179324.70705922286,24438373441.8444,199618.36,605,174844.95602389995,23703453288.31297,1273,373625.99977167475,51269800512.86869,1.10317017593683,1.0348675437002957,369146.24873635184,50534880359.337265,1.0899432384624295,1.0200333721901098,1868129.9988583736,256349002564.34344,100000.0,199968.54507933016,146279.10121030413,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AL,01,200k_500k,200000.0,500000.0,102970.0,28835057000.0,0.04809794286354889,0.17307328148339768,2149560.0,159215844000.0,103389.41406177015,30872263994.42667,262,73896.31563782088,20833576771.040718,281929.8444207939,200022.8612490445,499993.34924233315,0.012214219913564367,564.8266666666666,0.02337185736763896,147792.63127564176,41667153542.081436,1129.6533333333332,225,64525.55820799478,17794868985.238434,485893.0,220,62892.02590178503,17162150745.562168,487,138421.87384581566,38628445756.279144,1.3388399102747146,1.2512346280549003,136788.34153960593,37995727516.60289,1.3230401079348564,1.230739913453131,692109.3692290783,193142228781.39572,200000.0,499993.34924233315,298601.78892185225,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AL,01,500k_1m,500000.0,1000000.0,13670.0,9198596000.0,0.006385344070551746,0.05521165415972842,2149560.0,159215844000.0,13725.680200295212,9848480066.81857,47,13188.002398269007,8413321178.706922,637952.6576224472,501829.625910472,974006.35953896,0.0396867878429041,361.8235360034074,0.0840896194125263,26376.004796538014,16826642357.413843,723.6470720068148,21,6033.990834712825,3631929795.856325,940814.92,17,5131.529249652672,2941327691.302324,68,19221.993232981833,12045250974.563246,1.4004401204516193,1.2230568466240819,18319.531647921678,11354648870.009245,1.3346902580119608,1.152934137346254,96109.96616490916,60226254872.81623,500000.0,974006.35953896,717522.1863763625,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AL,01,1m_plus,1000000.0,inf,6570.0,19010645000.0,0.0030688888473683227,0.11410536532894479,2149560.0,159215844000.0,6596.760710749052,20353753805.457275,23,5872.596371935016,10885607845.702055,1853627.7919122945,1039662.2969962737,7540664.906949588,0.15587032273778617,225.012413234649,0.2935821716294561,11745.192743870031,21771215691.40411,450.024826469298,19,4938.266470688135,5932706378.396601,2073417.4,18,4561.2808249050295,5395832280.355074,42,10810.86284262315,16818314224.098656,1.6388138537460446,0.8263003662542733,10433.877196840045,16281440126.057129,1.5816667686367079,0.7999232122819393,54054.31421311575,84091571120.49329,1014300.0,7540664.906949588,3085416.4184388216,True,True,True,True,,False,False,False,False,False,7540664.906949588,225.012413234649,puf,41.0,10585.850429388502,15121571015.992098,0.7429376988896114,True,,False +current,AR,05,100k_200k,100000.0,200000.0,184970.0,25143019000.0,0.14314458400080485,0.24477600092236568,1295860.0,95807833000.0,185495.34062328297,26273747409.574898,606,117547.93527436112,16479684731.632183,140195.4419119996,100026.46337733536,199745.87350528824,0.00442104737768513,375.01673849483115,0.00748287983583163,235095.87054872225,32959369463.264366,750.0334769896623,562,109613.62239580293,15256715047.44149,199068.0,541,104588.39383016556,14477698667.500599,1168,227161.55767016407,31736399779.073677,1.2246213673447452,1.2079129514470415,222136.32910452667,30957383399.132782,1.1975305059314498,1.1782629602296868,1135807.7883508203,158681998895.36838,100000.0,199745.87350528824,141641.010072234,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AR,05,200k_500k,200000.0,500000.0,55710.0,15903490000.0,0.043112854920715996,0.1548259850143228,1295860.0,95807833000.0,55868.22417755903,16618699575.842514,210,40902.495808842184,11574276684.221233,282972.3823776822,200022.8612490445,499046.3215049199,0.01379794012199225,323.7441146819056,0.027978367196930826,81804.99161768437,23148553368.442467,647.4882293638112,155,29173.615403372918,8115371081.516266,499681.36,145,27370.85486000207,7536663000.7138195,365,70076.11121221511,19689647765.737495,1.2543106970699645,1.1847887180269516,68273.35066884426,19110939684.93505,1.2220426132010132,1.1499660125462126,350380.55606107553,98448238828.68747,200000.0,499681.36,297462.4631530325,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AR,05,500k_1m,500000.0,1000000.0,8210.0,5514101000.0,0.006353554817789954,0.05368168363003732,1295860.0,95807833000.0,8233.31754618129,5762080395.551717,29,5645.6665396076105,3953662794.3994393,700300.4457776973,501209.46069199673,955321.8079747028,0.07651503143780872,406.75166666666667,0.09913657801182431,11291.333079215221,7907325588.798879,813.5033333333333,12,2535.7066967808414,1625777309.0600111,827513.08,11,2357.9666967808416,1497737954.6442604,41,8181.373236388453,5579440103.459451,0.9936909624217118,0.9683030642485893,8003.633236388452,5451400749.043699,0.9721030667766035,0.9460820354488876,40906.86618194226,27897200517.297253,500000.68,955321.8079747028,699849.1632603479,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AR,05,1m_plus,1000000.0,inf,3420.0,17657157000.0,0.002646669607410675,0.17189854082830527,1295860.0,95807833000.0,3429.7132774591973,18451232248.172237,20,3903.1277729823714,5426986712.783373,1390419.9473942982,1018624.5975408443,2373968.347917827,0.08636920545666922,250.67333333333332,0.14309145773173917,7806.255545964743,10853973425.566746,501.34666666666664,10,1969.3470381924483,2290176546.512284,2200012.96,10,1969.3470381924483,2289030225.0917234,30,5872.47481117482,7717163259.295657,1.7122349118131739,0.4182464973340798,5872.4748111748195,7716016937.875096,1.7122349118131737,0.4181843702411495,29362.3740558741,38585816296.47829,1010880.0,2373968.347917827,5379817.715211837,True,True,False,False,mean_out_of_range,False,False,False,False,False,2373968.347917827,149.50203172377397,puf,29.0,5722.972779451046,7362250168.03401,0.399011300113211,False,mean_out_of_range,False +current,AZ,04,100k_200k,100000.0,200000.0,567820.0,78260266000.0,0.1674481424468154,0.258134759792734,3373850.0,287127454000.0,564944.9153941881,83037330213.79538,647,324061.1855917603,44635759230.95549,137738.677803845,100022.8089622065,199977.72106358095,0.003656397270660113,882.4479912761135,0.006237500424291553,648122.3711835206,89271518461.91098,1764.895982552227,590,295863.2625008974,40663017765.7142,198917.68,571,282692.03165020427,38753822651.60279,1237,619924.4480926578,85298776996.6697,1.0973183954759695,1.0272340979298322,606753.2172419645,83389581882.55829,1.0740042094521813,1.0042420880808183,3099622.2404632894,426493884983.34845,100000.0,199977.72106358095,146983.05613717472,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AZ,04,200k_500k,200000.0,500000.0,204990.0,58519083000.0,0.06045083780101562,0.19302016470907551,3373850.0,287127454000.0,203952.05911495656,62091130879.615204,272,136735.3753082695,39327377665.504616,287616.7017996708,200022.8612490445,498957.53383001115,0.012483123605499268,1002.4599999999999,0.024242836435975582,273470.750616539,78654755331.00923,2004.9199999999998,224,112003.32488096142,31133604561.709717,491090.0,209,104137.43431787501,28781969664.678772,496,248738.7001892309,70460982227.21434,1.2195939637414035,1.1347994669935542,240872.8096261445,68109347330.18339,1.1810266131727445,1.096925540980024,1243693.5009461546,352304911136.0717,200000.0,498957.53383001115,304439.83330718835,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AZ,04,500k_1m,500000.0,1000000.0,29880.0,20029953000.0,0.008811508041828122,0.06606707810467641,3373850.0,287127454000.0,29728.706406921807,21252596067.432247,49,26174.605133872374,16779237266.298765,641050.2538808072,502686.66209918685,917643.2685289237,0.0452596538641655,983.0152684952828,0.0725675989274684,52349.21026774475,33558474532.59753,1966.0305369905657,30,14928.496649956216,9077654664.113232,910480.08,29,14403.5719671015,8576789146.570451,79,41103.101783828584,25856891930.412,1.3826064686843706,1.2166462792766966,40578.17710097387,25356026412.869217,1.3649493033953861,1.1930790164372023,205515.5089191429,129284459652.06,500268.68,917643.2685289237,714884.6564842106,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,AZ,04,1m_plus,1000000.0,inf,14180.0,45796317000.0,0.004181632665097817,0.15105521476488337,3373850.0,287127454000.0,14108.201367140271,48591757882.661064,22,11861.32976718734,26020499126.365532,2193725.293630019,1040875.4727049348,9505753.801712384,0.2668519315116497,730.4649999999999,0.4388079055457002,23722.65953437468,52040998252.731064,1460.9299999999998,11,5876.469823582646,8199709878.210753,2155028.3200000003,10,5559.174823582646,7764055815.179177,33,17737.799590769984,34220209004.57629,1.257268671546147,0.7042389593562542,17420.504590769986,33784554941.54471,1.2347785615921583,0.695273363501838,88688.99795384992,171101045022.88144,1040875.4727049348,9505753.801712384,3444220.6074430733,True,True,True,True,,False,False,False,False,False,9505753.801712384,730.4649999999999,puf,32.0,17007.334590769984,27276588553.808453,0.5613418765313186,False,mean_out_of_range,False +current,CA,06,100k_200k,100000.0,200000.0,3252990.0,453934849000.0,0.17600569193228116,0.22134471029512734,18487690.0,1987000701000.0,3253938.670679515,492741720846.0508,3486,1660064.2281779663,232142207616.25967,139839.29276703444,100002.59973293605,199986.23205208415,0.0009652704098919978,1274.3367275974456,0.0014613318861150294,3320128.4563559326,464284415232.51935,2548.673455194891,3428,1639418.2520879824,227725359541.59036,199986.0,3324,1583764.675215677,218892508698.46567,6914,3299482.4802659485,459867567157.85004,1.0139965175117829,0.9332831942224115,3243828.903393643,451034716314.72534,0.9968930676607494,0.9153572698091946,16497412.401329743,2299337835789.25,100000.0,199986.23205208415,151429.32019156718,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CA,06,200k_500k,200000.0,500000.0,1626920.0,477270483000.0,0.08802584093970989,0.23272347788404874,18487690.0,1987000701000.0,1627394.459282665,518072317251.07275,1967,941147.074727549,275530529294.56665,292760.33118875657,200002.17551395053,499963.45120472857,0.0016956326781164953,1084.1716666666666,0.0028678240572764554,1882294.149455098,551061058589.1333,2168.3433333333332,1783,851007.2026135796,243845460102.59082,497219.2,1704,810585.8703272371,231738400172.2893,3750,1792154.2773411283,519375989397.1575,1.1012414765938723,1.0025163902850516,1751732.945054786,507268929466.85596,1.076403409795882,0.979146950291534,8960771.38670564,2596879946985.787,200000.0,499963.45120472857,318344.64858595654,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CA,06,500k_1m,500000.0,1000000.0,317160.0,213715326000.0,0.017160201922920847,0.10421045448109822,18487690.0,1987000701000.0,317252.4934883645,231985840559.27975,369,174316.9809535417,118611342577.62923,680434.8143755489,500000.346603947,996890.1095285104,0.006794118436853833,1261.3316666666665,0.010444223524732647,348633.9619070834,237222685155.25845,2522.663333333333,269,129606.66803546494,86044428882.48149,991818.6799999999,240,114702.5010677051,75571412149.70258,638,303923.6489890067,204655771460.11072,0.9579866359668292,0.8821907878804985,289019.4820212468,194182754727.3318,0.9110077555051489,0.8370457190800484,1519618.2449450335,1023278857300.5536,500000.0,996890.1095285104,731234.0968812213,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CA,06,1m_plus,1000000.0,inf,132720.0,400221114000.0,0.007180924452043306,0.19515317391356118,18487690.0,1987000701000.0,132758.70518279652,434436000817.56104,192,94812.40991074959,158576520128.28314,1672529.1581297962,1000116.3271681498,12209070.01218226,0.03339308075558702,433.7233333333333,0.0762440688447585,189624.81982149917,317153040256.5663,867.4466666666666,108,53507.29216257929,69490312656.51846,3160005.48,102,50344.335864136316,64588769577.8262,300,148319.70207332887,228066832784.8016,1.1172126292517413,0.5249722222734874,145156.7457748859,223165289706.10934,1.0933877787902377,0.5136896787700298,741598.5103666444,1140334163924.008,1000000.68,12209070.01218226,3272372.988418218,True,True,True,True,,False,False,False,False,False,12209070.01218226,433.7233333333333,puf,299.0,147885.97873999557,222771474242.2179,0.5127831805443986,True,,False +current,CO,08,100k_200k,100000.0,200000.0,581520.0,81135957000.0,0.18838743954153614,0.25829961207762075,2972380.0,297676269000.0,559959.0575444712,86143028408.32648,574,316971.58528452064,44739515146.15635,141146.76905817023,100128.74413624065,199905.1461059306,0.004450698784424167,1138.1113674441156,0.006541070102047981,633943.1705690413,89479030292.3127,2276.222734888231,565,309786.1441913132,43285888407.5609,199191.36,554,301955.6431578521,42273761845.70089,1139,626757.7294758339,88025403553.71724,1.1192920643596476,1.0218517409960108,618927.2284423728,87013276991.85724,1.1053080044039083,1.0101023681151038,3133788.6473791697,440127017768.5862,100000.0,199905.1461059306,153838.0837807684,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CO,08,200k_500k,200000.0,500000.0,257510.0,74198170000.0,0.08342215152761895,0.23621288558745118,2972380.0,297676269000.0,247962.334757664,78777095907.74701,309,164651.8285019213,47314373663.4635,287360.1471295619,200022.8612490445,492850.46049752575,0.011352305544379427,1394.3763504611175,0.01795410271179161,329303.6570038426,94628747326.927,2788.752700922235,283,148922.4648858587,41937931417.28938,496561.36,265,138821.98294622503,38977830955.05299,592,313574.29338777997,89252305080.75288,1.264604536387509,1.1329727765704007,303473.81144814636,86292204618.5165,1.223870600124548,1.0953971281141177,1567871.4669388998,446261525403.7644,200000.0,496561.36,317697.8309416897,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CO,08,500k_1m,500000.0,1000000.0,38030.0,25370899000.0,0.012320082414645446,0.08076928666485682,2972380.0,297676269000.0,36619.96656764383,26936590805.255203,36,19368.320580069103,13272233771.77945,685254.7548927495,500527.9881819055,992496.8746961312,0.06357793775928834,934.0293876190427,0.10501639968536947,38736.641160138206,26544467543.5589,1868.0587752380854,17,8404.345746841505,5973596769.111459,980514.24,15,7530.3213818583345,5517635468.550416,53,27772.666326910607,19245830540.890903,0.758402285147076,0.7144865020237131,26898.64196192744,18789869240.329865,0.7345348585242613,0.6975592930885689,138863.33163455303,96229152704.45451,500527.9881819055,992496.8746961312,735571.1468359304,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CO,08,1m_plus,1000000.0,inf,15610.0,47266883000.0,0.005056967827836324,0.15047604039499143,2972380.0,297676269000.0,15031.230032104131,50183822260.727684,26,13774.826201251435,31897551315.930576,2315640.9271452515,1059643.2702475048,12799359.136161376,0.20327034545438805,749.4883333333332,0.31641697953914316,27549.65240250287,63795102631.86115,1498.9766666666665,13,7617.498400192488,9824303047.565695,2027867.6,12,6978.775056734023,9017215747.798136,39,21392.32460144392,41721854363.49627,1.4231918848792535,0.8313805621806235,20753.601257985458,40914767063.728714,1.3806987993437212,0.8152979430534002,106961.6230072196,208609271817.48135,1000067.68,12799359.136161376,3338637.1011250336,True,True,True,True,,False,False,False,False,False,12799359.136161376,450.015,puf,38.0,20942.30960144392,35961950761.83661,0.7166044582056342,True,,False +current,CT,09,100k_200k,100000.0,200000.0,346700.0,48601609000.0,0.1902415469540501,0.21907630202483674,1823240.0,217323692000.0,346855.9980685023,53340200502.92582,460,184867.05130407994,25830688696.899445,139725.75704911118,100022.8089622065,199671.2530364865,0.006424939195261896,998.1333333333332,0.009007001488646556,369734.1026081599,51661377393.79889,1996.2666666666664,459,185776.04340216832,25801077183.39982,199435.0,449,182354.50644972283,25519256539.22057,919,370643.09470624826,51631765880.299255,1.0685791705209264,0.9679709748647672,367221.55775380274,51349945236.12001,1.0587147398306729,0.9626875180812896,1853215.4735312413,258158829401.49628,100000.35999999999,199671.2530364865,153781.97522878472,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CT,09,200k_500k,200000.0,500000.0,164030.0,47639359000.0,0.0900066943953644,0.21473887007637185,1823240.0,217323692000.0,164103.80548940419,52284132422.259186,249,94018.22965393847,27975450637.716156,297553.4717116879,200022.8612490445,492270.076068887,0.009965432770368932,614.5616666666666,0.016995034695827332,188036.45930787694,55950901275.43231,1229.1233333333332,227,85390.16696983099,24679510270.717487,499145.6,207,75957.89480489532,22381042480.62805,476,179408.39662376948,52654960908.43365,1.093261646728561,1.007092562676178,169976.12445883377,50356493118.34421,1.03578417302339,0.9631314661904131,897041.9831188475,263274804542.16824,200000.0,499145.6,318604.0218039615,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CT,09,500k_1m,500000.0,1000000.0,30840.0,20858997000.0,0.01692255352772687,0.09402388152843177,1823240.0,217323692000.0,30853.876493892738,22892721149.82712,52,19243.5407630594,13009493701.323248,676044.6978810024,506671.1578581003,955186.2522547613,0.04043632449823858,550.7366836810287,0.07399889051130078,38487.0815261188,26018987402.646496,1101.4733673620574,32,11135.513305922732,7194801114.931974,984077.32,28,9773.603153426993,6363961131.912221,84,30379.054068982132,20204294816.25522,0.9846106071953522,0.8825641427256801,29017.143916486395,19373454833.23547,0.9404699575507178,0.846271384971715,151895.27034491065,101021474081.2761,500097.04,984077.32,741972.281971069,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,CT,09,1m_plus,1000000.0,inf,16460.0,54752381000.0,0.009031946532632434,0.24680148257097687,1823240.0,217323692000.0,16467.406196156757,60090664499.452805,29,12269.494046019847,18599532732.52257,1515916.8473255956,1058898.312746815,5682359.768074059,0.08458204072279314,1440.483383892624,0.18620151518642755,24538.988092039694,37199065465.04514,2880.966767785248,14,6861.844757823652,8533555853.885227,1900719.0,13,6415.855937351987,7909842146.203199,43,19131.3388038435,27133088586.407795,1.161770018663198,0.45153583859361174,18685.349983371834,26509374878.72577,1.1346868936610497,0.44115629440188947,95656.69401921751,135665442932.03897,1058898.312746815,5682359.768074059,3649066.755484361,True,True,True,True,,False,False,False,False,False,5682359.768074059,251.72409917154155,puf,42.0,18879.61470467196,25702701692.620747,0.42773202637582414,False,mean_out_of_range,False +current,DC,11,100k_200k,100000.0,200000.0,70930.0,9850931000.0,0.20344184712462354,0.19717523234354584,348690.0,46825089000.0,70938.13767388498,10343872070.191944,705,42193.02174768815,5952128995.895037,141069.03818096808,100022.8089622065,199705.3618322828,0.004341352230314193,133.6334452278368,0.007200340978421511,84386.0434953763,11904257991.790073,267.2668904556736,749,44703.740416827386,6291486834.312745,199360.0,732,43723.6999656141,6136675175.55497,1454,86896.76216451553,12243615830.207783,1.224965371433842,1.1836588607365275,85916.72171330225,12088804171.450006,1.2111499474130043,1.1686923513184635,434483.8108225777,61218079151.03891,100000.0,199705.3618322828,145815.38801800142,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DC,11,200k_500k,200000.0,500000.0,39740.0,11892240000.0,0.11398250394378316,0.2380338655387201,348690.0,46825089000.0,39744.55930015775,12487328272.629202,559,30312.660376939704,9134347480.341297,301337.7040073406,200022.8612490445,499563.59292011545,0.0054007612693559226,103.68257746415144,0.009309125331465048,60625.32075387941,18268694960.682594,207.36515492830287,565,29736.40816410325,9007774261.582886,499004.0,550,28895.857880358042,8766832321.177399,1124,60049.06854104295,18142121741.92418,1.5108751889168541,1.4528425413216404,59208.51825729775,17901179801.518696,1.4897263751283498,1.4335476260967719,300245.34270521475,90710608709.6209,200000.0,499563.59292011545,314189.6272725721,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DC,11,500k_1m,500000.0,1000000.0,7580.0,5053560000.0,0.02174100100387208,0.1011515426472939,348690.0,46825089000.0,7580.869640040155,5306440390.155936,138,7080.137349600036,4769631638.704408,673663.7162800025,500390.9421719764,999311.053303031,0.02211688303863525,106.00333333333333,0.04268810948669263,14160.274699200072,9539263277.408815,212.00666666666666,92,4798.331639168806,3157532318.5834823,999276.08,83,4290.029278889504,2833157333.908137,230,11878.46898876884,7927163957.28789,1.5669005737850836,1.4938760024504754,11370.16662848954,7602788972.612545,1.4998499075139502,1.4327474566032254,59392.344943844204,39635819786.43945,500390.9421719764,999311.053303031,699977.7917468356,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DC,11,1m_plus,1000000.0,inf,3370.0,13410961000.0,0.009665854008317798,0.2684324305109062,348690.0,46825089000.0,3370.386634160333,14082046145.926048,62,3042.826455155004,4839071551.001659,1590321.2431992455,1006871.3658668868,8513195.821391072,0.07039394614091843,40.01333333333333,0.16736469287796588,6085.652910310008,9678143102.003319,80.02666666666666,31,1486.619741959795,1744852275.947395,1397627.4,29,1384.8288182107954,1618982538.2589602,93,4529.446197114799,6583923826.949055,1.3438951339311918,0.46754028205295944,4427.655273365799,6458054089.26062,1.3136935770186093,0.4586019689424851,22647.230985573995,32919619134.745274,1001373.6,8513195.821391072,4178169.3539840183,True,True,True,True,,False,False,False,False,False,8513195.821391072,40.01333333333333,puf,92.0,4489.432863781466,6243282484.815792,0.4433505202382809,False,mean_out_of_range,False +current,DE,10,100k_200k,100000.0,200000.0,96120.0,13335670000.0,0.18944007568142848,0.2987687403274699,503140.0,42387377000.0,95314.87967835393,14188087771.962938,431,46071.43744173074,6406521207.618534,139056.24750087815,100022.8089622065,199951.77309552,0.006050437376179226,197.53405193113318,0.01056412595962409,92142.87488346148,12813042415.237068,395.06810386226636,421,44734.70315344065,6206422753.347822,198540.0,407,43185.319498549936,5944968520.112755,852,90806.1405951714,12612943960.966356,0.9526963775393983,0.8889812470635245,89256.75694028067,12351489727.731289,0.9364409548801113,0.8705535182929338,454030.70297585696,63064719804.83178,100000.0,199951.77309552,148854.90932624092,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DE,10,200k_500k,200000.0,500000.0,33790.0,9489115000.0,0.06659571532746014,0.21259156348143737,503140.0,42387377000.0,33506.96820985829,10095660472.870888,191,19806.610922011758,5640482550.381711,284777.7730673374,200241.51142191066,499889.6311303404,0.019662434016984625,223.08999999999997,0.03947664399056472,39613.221844023516,11280965100.763422,446.17999999999995,142,13873.901748808064,3838078236.9062347,494469.99999999994,129,12681.743888077443,3554916794.9167633,333,33680.51267081982,9478560787.287947,1.0051793543323466,0.9388747583933499,32488.3548100892,9195399345.298473,0.9695999532578002,0.9108269211319456,168402.5633540991,47392803936.439735,200241.51142191066,499889.6311303404,301300.3268347203,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DE,10,500k_1m,500000.0,1000000.0,3930.0,2611383000.0,0.007745521196712588,0.058504717754906156,503140.0,42387377000.0,3897.0815349139716,2778302943.1751003,33,3373.081785585052,2311234627.5619383,685199.7000010662,501438.89817015256,960345.4257186694,0.062429393140567786,214.77999999999997,0.09477980115370317,6746.163571170104,4622469255.123877,429.55999999999995,22,2330.1882000196833,1672728530.491612,987894.04,20,2099.1573298548387,1485163557.852753,55,5703.269985604736,3983963158.0535507,1.4634720712176825,1.4339556339023987,5472.23911543989,3796398185.414691,1.4041890236101233,1.3664450072806282,28516.34992802368,19919815790.267754,501438.89817015256,987894.04,712918.8646129858,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,DE,10,1m_plus,1000000.0,inf,1660.0,4274659000.0,0.003271645085634325,0.0957683029618671,503140.0,42387377000.0,1646.0955083860542,4547895762.808417,15,1311.652436586355,1821797829.901627,1388933.3630507733,1015993.9897446156,3706865.645664881,0.1449781136088547,132.83313035825407,0.35356977571962256,2623.30487317271,3643595659.803254,265.66626071650813,3,300.74242827208656,332685138.92891496,1110687.2,3,300.74242827208656,332685138.92891496,18,1612.3948648584417,2154482968.8305416,0.9795269209132008,0.47373182702413236,1612.3948648584415,2154482968.830542,0.9795269209132007,0.47373182702413247,8061.974324292209,10772414844.152708,1015993.9897446156,3706865.645664881,2762838.3284196486,True,True,True,True,,False,False,False,False,False,3706865.645664881,66.63499999999999,puf,17.0,1545.7598648584415,1907475976.5316625,0.41941945814381587,False,mean_out_of_range,False +current,FL,12,100k_200k,100000.0,200000.0,1654530.0,228173416000.0,0.14748833129494993,0.20737743283796525,11130320.0,1121782194000.0,1641592.323578807,260628679766.27945,1647,924101.7038113233,127366449349.46811,137827.3071288189,100003.6626126777,199925.49749403913,0.0016460299763075704,1225.1666666666665,0.002574925434552909,1848203.4076226465,254732898698.93622,2450.333333333333,1521,841240.0879100991,114870119698.90913,199720.0,1489,824152.7265724783,112083992411.82726,3168,1765341.791721422,242236569048.37726,1.0753838004510345,0.9294317465967465,1748254.4303838015,239450441761.29535,1.0649747841001487,0.918741720888216,8826708.95860711,1211182845241.8862,100000.0,199925.49749403913,158765.77638843204,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,FL,12,200k_500k,200000.0,500000.0,653190.0,189337847000.0,0.05822674905776767,0.17208138151346888,11130320.0,1121782194000.0,648082.3495726526,216269160353.89426,697,381235.2253376905,109298072195.23724,286694.5783890332,200002.27912743858,499429.4706585727,0.004060703071851622,950.8567807366323,0.007674668033259155,762470.450675381,218596144390.4745,1901.7135614732647,570,312084.2207247651,87291108727.91214,499187.0,531,287911.28375601093,80046701681.14584,1267,693319.4460624557,196589180923.14938,1.069801463532578,0.9090023774146007,669146.5090937014,189344773876.3831,1.032502288536231,0.8755051971651753,3466597.2303122785,982945904615.747,200000.0,499429.4706585727,333706.29596146656,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,FL,12,500k_1m,500000.0,1000000.0,120680.0,81928683000.0,0.010757672463282356,0.07446161018308743,11130320.0,1121782194000.0,119736.33697152088,93582174731.87158,104,57166.532689122745,38441662451.91199,672450.4818398126,500116.7625966445,994643.595776864,0.02035297286921242,821.9910568172833,0.03767413892464891,114333.06537824549,76883324903.82397,1643.9821136345665,67,36908.20610611791,23854214887.512848,990880.0,63,34629.17862378518,22305230036.673477,171,94074.73879524066,62295877339.424835,0.7856824517490977,0.6656810179707069,91795.71131290792,60746892488.585464,0.7666487353353845,0.6491288823179774,470373.69397620327,311479386697.12415,500000.0,994643.595776864,781568.7125465511,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,FL,12,1m_plus,1000000.0,inf,72950.0,290759506000.0,0.006502918513394497,0.2642593558204649,11130320.0,1121782194000.0,72379.56398800504,332116981490.41,84,47536.04887822464,63721079176.95933,1340479.0823107038,1000114.3062452227,2900503.852608288,0.03505574040426367,839.7783333333333,0.0861296674052359,95072.09775644928,127442158353.91866,1679.5566666666666,54,30008.071801161317,36469087480.217674,2289205.6,53,29591.052835820312,34715032797.49151,138,77544.12067938596,100190166657.177,1.0713537966633344,0.3016713153526901,77127.10171404495,98436111974.45084,1.0655922399149391,0.29638987905017206,387720.6033969298,500950833285.885,1000000.0,2900503.852608288,4588546.313230754,True,True,False,False,mean_out_of_range,False,False,False,False,False,2900503.852608288,707.1283333333333,puf,137.0,76836.99234605262,98139138202.05519,0.2954956948050216,False,mean_out_of_range,False +current,GA,13,100k_200k,100000.0,200000.0,745870.0,103159160000.0,0.15278460580436884,0.25090203433030794,4932040.0,405672589000.0,753539.7872113793,114033384485.3369,815,465837.15119356965,64845476325.75497,139202.02834747647,100022.8089622065,199487.4308680112,0.0032922691883861726,1194.8067553865367,0.005351524439468293,931674.3023871393,129690952651.50993,2389.6135107730734,781,448684.922117173,61051557246.18608,198791.87999999998,755,432160.23786974885,58819163510.420456,1596,914522.0733107426,125897033571.94106,1.2136347527117441,1.1040366305020934,897997.3890633185,123664639836.17542,1.1917053409834306,1.0844599622672513,4572610.366553713,629485167859.7053,100000.0,199487.4308680112,151330.2766763513,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,GA,13,200k_500k,200000.0,500000.0,295600.0,85038313000.0,0.06055093980957999,0.20682880441947638,4932040.0,405672589000.0,298639.6571784409,94002380809.55121,357,205403.53800598654,59535325710.63588,289845.6681349895,200022.8612490445,495980.06135828735,0.009043949240379446,1166.8,0.016531063494639252,410807.0760119731,119070651421.27176,2333.6,314,179992.70963018353,50308444633.98255,493148.68,302,172485.23402965543,47911419304.88381,671,385396.2476361701,109843770344.61842,1.2905059270339676,1.1685211523223211,377888.77203564194,107446745015.51968,1.2653670165776032,1.143021528712201,1926981.2381808506,549218851723.0921,200000.0,495980.06135828735,314768.5799591701,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,GA,13,500k_1m,500000.0,1000000.0,46120.0,30879362000.0,0.009447257591399964,0.07510428298002819,4932040.0,405672589000.0,46594.25233108828,34134420633.203114,45,24604.007766956776,17568261242.68076,714040.6314728515,509552.9945575485,970189.0212030772,0.04647447884441983,975.2592026218372,0.07259821434684328,49208.01553391355,35136522485.36152,1950.5184052436744,22,12141.545032925364,8040918646.224129,950002.72,21,11540.338099378281,7661431959.566891,67,36745.55279988214,25609179888.904892,0.7886284458172331,0.7502450433857495,36144.34586633506,25229693202.24765,0.7757254180086733,0.7391276235023105,183727.7639994107,128045899444.52446,509552.9945575485,970189.0212030772,732588.6547261579,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,GA,13,1m_plus,1000000.0,inf,19740.0,54395277000.0,0.004043557347229733,0.13229930970027876,4932040.0,405672589000.0,19942.986578830933,60129197798.11509,29,15962.91376751185,29456592062.180397,1845314.2384400547,1019020.1381115605,6844139.547866784,0.161855897299417,696.613958009246,0.3017049237943053,31925.8275350237,58913184124.360794,1393.227916018492,13,7714.510364479574,9881904400.343311,2204688.0,13,7714.510364479574,9677976068.38448,42,23677.424131991425,39338496462.523705,1.1872556820112652,0.6542328503134774,23677.424131991425,39134568130.56488,1.1872556820112652,0.6508413476920136,118387.12065995713,196692482312.61853,1019020.1381115605,6844139.547866784,3015054.8194191228,True,True,True,True,,False,False,False,False,False,6844139.547866784,696.613958009246,puf,41.0,22980.81017398218,34570773322.91661,0.574941535707638,True,,False +current,HI,15,100k_200k,100000.0,200000.0,131140.0,18094971000.0,0.1885658413136629,0.3085593459561336,689960.0,57676242000.0,130102.88787277487,19938286333.829025,681,60419.58802301266,8527318353.539846,141134.99665525617,100000.47583698324,199984.69795700983,0.005366191694994506,241.90101896799828,0.008957022941226854,120839.17604602531,17054636707.079693,483.80203793599657,657,58025.108337394835,7989147287.035843,199097.44,622,55609.94836761913,7662519665.630491,1338,118444.69636040748,16516465640.575687,0.9103925231562292,0.8283793985119182,116029.53639063178,16189838019.170338,0.8918290615047288,0.8119974679920839,592223.4818020375,82582328202.87843,100000.0,199984.69795700983,153250.1442498824,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,HI,15,200k_500k,200000.0,500000.0,41940.0,11726380000.0,0.06030540936933828,0.1999607594415645,689960.0,57676242000.0,41608.32024846864,12920933783.164724,265,23689.628108209396,6776412804.527717,286049.7756053596,200022.8612490445,495321.4056169557,0.01476260948907648,240.23546941364066,0.025504424322006513,47379.25621641879,13552825609.055433,480.4709388272813,234,21411.062785571296,5897939337.57342,484280.8,209,18954.235139513068,5198869283.318352,499,45100.690893780695,12674352142.101135,1.0839344300480525,0.9809161129372188,42643.86324772246,11975282087.84607,1.0248878828337689,0.9268124339008077,225503.45446890348,63371760710.50568,200000.0,495321.4056169557,310537.2604807393,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,HI,15,500k_1m,500000.0,1000000.0,5180.0,3457928000.0,0.007448307594973111,0.0589653336301783,689960.0,57676242000.0,5139.034308227648,3810183425.315505,38,3628.87666318882,2534405257.8605514,698399.3927292865,504407.317591102,986443.8392011463,0.05989467475157591,201.40381999561822,0.07758750140289469,7257.75332637764,5068810515.721103,402.80763999123644,25,2397.838828531912,1490610622.8952136,838873.24,21,2009.546823551051,1235271722.55535,63,6026.715491720732,4025015880.755765,1.1727330720621767,1.0563837567537764,5638.423486739871,3769676980.415901,1.0971756848777399,0.9893688989799094,30133.577458603657,20125079403.778824,500015.64,986443.8392011463,741420.118409282,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,HI,15,1m_plus,1000000.0,inf,1960.0,4917011000.0,0.0028182785494492856,0.08384593145902883,689960.0,57676242000.0,1944.499467978029,5417901649.28073,21,1797.8152711818884,3258978787.4411097,1812743.9674592644,1013858.0404003914,5889367.388632923,0.13771163162413377,76.20500753836217,0.25499834519718,3595.630542363777,6517957574.882219,152.41001507672433,7,613.4321207713836,753113714.0236222,1636020.3599999999,6,477.0269612482046,591362644.8267184,28,2411.2473919532717,4012092501.4647317,1.2400349970064977,0.7405251629101405,2274.842232430093,3850341432.267828,1.1698857571792334,0.7106702338863962,12056.236959766358,20060462507.323658,1013858.0404003914,5889367.388632923,2786270.574254509,True,True,True,True,,False,False,False,False,False,5889367.388632923,76.20500753836217,puf,27.0,2335.042384414909,3563293215.2177753,0.6576887964902115,True,,False +current,IA,19,100k_200k,100000.0,200000.0,289160.0,39515430000.0,0.19511470985155197,0.3096123710966054,1485900.0,122342275000.0,289920.94736842107,42437229693.794754,452,152749.10635171575,20862351492.175613,136579.2048834548,100022.8089622065,199680.66580881353,0.005153479817754399,617.1466251531662,0.008928905975516401,305498.2127034315,41724702984.35123,1234.2932503063323,445,146627.90501195047,19789247044.10143,199273.72,421,137885.79036792502,18649186669.65093,897,299377.0113636663,40651598536.27705,1.0326160081949125,0.9579230036832775,290634.89671964076,39511538161.82654,1.0024625655983126,0.9310583760278769,1496885.0568183314,203257992681.38522,100000.0,199680.66580881353,146375.17598846368,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IA,19,200k_500k,200000.0,500000.0,81450.0,22945776000.0,0.05495951417004048,0.17978536774145143,1485900.0,122342275000.0,81664.34210526316,24642403400.75669,168,53790.805874353275,14939939358.618183,277741.5046265619,200022.8612490445,498939.53240676224,0.014776198414106562,533.8667564301948,0.027256863459332856,107581.61174870655,29879878717.236366,1067.7335128603895,152,48783.32315618465,13399748213.324036,496521.56,130,40493.122869561616,10983917063.350037,320,102574.12903053791,28339687571.94222,1.2560454953316418,1.1500374825887314,94283.92874391489,25923856421.96822,1.1545299492204986,1.0520019496625959,512870.64515268954,141698437859.7111,200000.0,498939.53240676224,301752.30419407884,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IA,19,500k_1m,500000.0,1000000.0,10560.0,7062917000.0,0.007125506072874494,0.055339559236190085,1485900.0,122342275000.0,10587.78947368421,7585154230.567849,29,10427.388670153798,7059295439.998692,676995.5223980896,520795.4819815579,866112.0858101435,0.06789495547247545,553.3816666666667,0.10977437957321343,20854.777340307595,14118590879.997383,1106.7633333333333,22,7578.885975491559,5061501432.872723,862924.7200000001,21,7167.081798304885,4768488031.921668,51,18006.274645645357,12120796872.871414,1.7006642123362652,1.597963140159381,17594.470468458683,11827783471.92036,1.661769957949152,1.5593332860991667,90031.37322822679,60603984364.35707,506009.51999999996,866112.0858101435,716405.8417879044,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IA,19,1m_plus,1000000.0,inf,4310.0,12915938000.0,0.0029082321187584347,0.10119930845031289,1485900.0,122342275000.0,4321.342105263158,13870951869.10055,20,5751.99318639244,9368599500.990181,1628757.0581887318,1007711.6137348005,4324684.688973256,0.10515124754741616,227.79,0.20940347370528012,11503.98637278488,18737199001.980362,455.58,6,1505.166018302784,1629998873.7575648,1135009.8800000001,5,1183.9390253177269,1288789383.3043323,26,7257.1592046952255,10998598374.747746,1.6793762280140705,0.7929231157703484,6935.932211710167,10657388884.294514,1.6050412216294057,0.7683242638910247,36285.79602347613,54992991873.73872,1000000.0,4324684.688973256,3209871.2694388367,True,True,True,True,,False,False,False,False,False,4324684.688973256,227.79,puf,25.0,7029.369204695225,10013478449.446527,0.7219027608157826,False,mean_out_of_range,False +current,ID,16,100k_200k,100000.0,200000.0,159150.0,21677262000.0,0.17990165602215566,0.28481408744373965,869500.0,72860958000.0,156424.48991126433,23249226666.845253,667,87970.10724733848,12064482011.096386,137142.97263700783,100052.53633010946,198969.09593800962,0.0038215363845289364,275.47666666666663,0.006243567257967032,175940.21449467697,24128964022.192772,550.9533333333333,632,81669.12376420545,11175965740.006195,199703.8,618,79452.94270355158,10815357806.358294,1299,169639.23101154395,23240447751.10258,1.0844800012311115,0.9996223996665149,167423.04995089007,22879839817.45468,1.0703122640570217,0.9841118651091592,848196.1550577197,116202238755.51291,100000.0,199703.8,148629.07131763033,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ID,16,200k_500k,200000.0,500000.0,47390.0,13485953000.0,0.053569208161419773,0.17718978517693623,869500.0,72860958000.0,46578.42649635449,14463910530.556015,251,31655.652125887646,8898547708.977116,281104.5456776416,200032.50120716525,497094.7709658112,0.008795257739074356,211.80666666666664,0.016628121551717785,63311.30425177529,17797095417.95423,423.6133333333333,192,23925.113311583416,6406951213.829483,468017.68,175,21541.322914306416,5740160904.614752,443,55580.76543747106,15305498922.806599,1.193272714822626,1.0581853980963634,53196.97504019406,14638708613.591867,1.1420947215629444,1.0120851192121647,277903.8271873553,76527494614.03299,200032.50120716525,497094.7709658112,310528.1053598504,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ID,16,500k_1m,500000.0,1000000.0,7030.0,4728593000.0,0.007946645566043067,0.062128229118043374,869500.0,72860958000.0,6909.608319674447,5071495213.383397,39,4565.403921316917,2976750046.058018,652023.3690953149,500572.84620823857,961825.7408979752,0.0376153404912161,179.91166666666666,0.07267683107079992,9130.807842633834,5953500092.116036,359.8233333333333,23,2642.522801931784,1659554053.6353104,838496.3200000001,21,2421.985951036863,1478866288.4481232,62,7207.926723248701,4636304099.693329,1.043174430412332,0.9141887953395632,6987.38987235378,4455616334.506142,1.0112570132894303,0.8785606900994435,36039.633616243504,23181520498.466644,500572.84620823857,961825.7408979752,733977.2355753945,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ID,16,1m_plus,1000000.0,inf,3230.0,9952358000.0,0.003651161476290058,0.13076244415385124,869500.0,72860958000.0,3174.6849036342055,10674070692.672844,17,1890.7550550786266,3012385789.2305984,1593218.4241101125,1017837.6223271172,2515624.215820396,0.14178996395720642,175.765,0.22410323186289405,3781.510110157253,6024771578.461197,351.53,6,557.0538948074108,611984226.6540214,1227125.0799999998,5,455.44222814074413,506114453.9941895,23,2447.8089498860377,3624370015.88462,0.7710399690639912,0.3395489987126044,2346.1972832193705,3518500243.2247877,0.7390331180690003,0.32963059216387264,12239.044749430188,18121850079.4231,1017837.6223271172,2515624.215820396,3362245.7083705384,True,True,False,False,mean_out_of_range,False,False,False,False,False,2515624.215820396,97.11666666666666,puf,22.0,2350.692283219371,3380060977.458196,0.31666091360800336,False,mean_out_of_range,False +current,IL,17,100k_200k,100000.0,200000.0,1124270.0,156259052000.0,0.18429870202253673,0.2580538337054279,6112890.0,580846466000.0,1126597.6926065446,167928278048.45697,991,565649.8831294915,79979755209.48642,141394.4519302182,100001.34620662153,199819.3405481617,0.004050265929138861,1861.8793011197565,0.005883097108869577,1131299.766258983,159959510418.97284,3723.758602239513,978,555068.2338948403,77864770637.98871,199999.0,944,531713.0237536278,74373891884.4015,1969,1120718.1170243318,157844525847.47513,0.9947811222934342,0.9399520300084772,1097362.9068831191,154353647093.88794,0.974050376709199,0.9191641151072129,5603590.58512166,789222629237.3756,100000.0,199999.0,149057.89276021943,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IL,17,200k_500k,200000.0,500000.0,447940.0,128317099000.0,0.07342965709658276,0.2119091272031327,6112890.0,580846466000.0,448867.4165691298,137899655753.98077,566,310462.94210167596,89927633496.01987,289656.57829322753,200022.8612490445,499603.03876276937,0.005259207274814485,1904.0721701157122,0.009632758861603056,620925.8842033519,179855266992.03973,3808.1443402314244,500,269212.6072215666,76953903012.37225,496893.39999999997,479,256675.23631648495,73209603898.05162,1066,579675.5493232426,166881536508.39212,1.2914181959428708,1.2101664474501397,567138.1784181609,163137237394.07147,1.2634870732053154,1.1830141018271698,2898377.746616213,834407682541.9606,200007.4,499603.03876276937,307216.898940899,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IL,17,500k_1m,500000.0,1000000.0,68110.0,45643960000.0,0.011165097881073921,0.07537866582921034,6112890.0,580846466000.0,68251.01518623796,49052592525.08871,95,53428.97775665324,36970717043.70102,691960.029856593,501589.85893143463,989108.8972648594,0.02290315162405439,858.6066666666666,0.04070137657212745,106857.95551330649,73941434087.40204,1717.2133333333331,57,35179.73768955142,23345894588.96895,967990.64,52,32299.56879911755,21153391995.56748,152,88608.71544620466,60316611632.66997,1.298276885763768,1.2296314736437244,85728.5465557708,58124109039.26849,1.256077236680532,1.1849344967758844,443043.5772310233,301583058163.34985,500000.0,989108.8972648594,718708.6139486406,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IL,17,1m_plus,1000000.0,inf,30430.0,100562853000.0,0.004988311973588011,0.16607440921250047,6112890.0,580846466000.0,30493.00238022642,108072758178.0677,38,22194.912091288603,37037188095.49689,1668724.2527999831,1005940.8280579578,10734942.579096384,0.11476943512610359,395.9720441035869,0.2597152290647933,44389.824182577206,74074376190.99377,791.9440882071738,16,8210.685328902198,9906596365.950151,2212967.96,14,7103.068518632262,8613522720.815596,54,30405.597420190803,46943784461.44705,0.9971336059681583,0.4343720402147914,29297.980609920865,45650710816.312485,0.960809966975227,0.42240719665075455,152027.98710095402,234718922307.23526,1005940.8280579578,10734942.579096384,3544182.26288366,True,True,True,True,,False,False,False,False,False,10734942.579096384,395.9720441035869,puf,53.0,30009.625376087217,42693047305.06762,0.3950398604125915,True,,False +current,IN,18,100k_200k,100000.0,200000.0,544590.0,74363014000.0,0.16798326922543053,0.2906339906727545,3246780.0,246316586000.0,545404.7188557433,80203298479.47289,600,303010.2088776317,42107156670.01579,138962.8317342286,100073.33203538264,199840.5968117291,0.004112729219275593,898.2449623373053,0.007063892203764818,606020.4177552634,84214313340.03159,1796.4899246746106,570,289102.28181436524,39368718092.246445,199933.96000000002,559,282294.831222997,38461947866.13081,1170,592112.4906919969,81475874762.26224,1.085638738026041,1.015866882122249,585305.0401006287,80569104536.1466,1.0731572717753455,1.0045609851914925,2960562.4534599846,407379373811.31116,100000.0,199933.96000000002,147052.8136385381,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IN,18,200k_500k,200000.0,500000.0,153020.0,43024986000.0,0.047200278846242824,0.16815514470432025,3246780.0,246316586000.0,153248.9213524043,46404060414.13467,241,122230.51544655378,34556580317.390564,282716.47379660024,200024.88217197155,496699.5541453555,0.010942699944246454,896.5583333333333,0.021800164779145186,244461.03089310756,69113160634.78113,1793.1166666666666,204,101039.34454922189,27006558097.418324,474605.68,186,91002.36855179993,24321364082.601013,445,223269.85999577568,61563138414.80888,1.456909830264674,1.3266756802182071,213232.8839983537,58877944399.99158,1.3914152355305198,1.268810183301489,1116349.2999788783,307815692074.04443,200000.0,496699.5541453555,302801.87295691296,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IN,18,500k_1m,500000.0,1000000.0,20910.0,14090422000.0,0.006449861656482404,0.05506979015298082,3246780.0,246316586000.0,20941.281829033942,15197048379.019861,43,20865.72980764809,14435611728.189266,691833.5405118713,506939.38246615126,998834.8484364243,0.0412587101017905,700.9549999999999,0.061997988608464456,41731.45961529618,28871223456.378532,1401.9099999999999,21,11282.35322345437,7795386119.12309,960002.7200000001,21,10860.394978208626,7581034197.820257,64,32148.083031102462,22230997847.312355,1.5351535447333937,1.4628497121851072,31726.124785856715,22016645926.00952,1.5150039546227863,1.448744873142892,160740.4151555123,111154989236.56177,505776.0,998834.8484364243,725698.0973318445,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,IN,18,1m_plus,1000000.0,inf,9520.0,27067715000.0,0.002936522380187111,0.10578912292127882,3246780.0,246316586000.0,9534.242133543908,29193545400.167686,14,7308.555734009777,9980915592.905558,1365648.1466591503,1001844.7482272278,2695116.7356674112,0.13721259927277923,508.14399001742794,0.3223231252857058,14617.111468019553,19961831185.811115,1016.2879800348559,4,2045.8786765715263,2518870474.7219377,1509979.0,3,1697.6552551506034,2138553358.177967,18,9354.4344105813,12499786067.627495,0.9811408478572199,0.42816951131792635,9006.21098916038,12119468951.083525,0.9446173972731634,0.41514207284374277,46772.1720529065,62498930338.137474,1001844.7482272278,2695116.7356674112,3061968.1135910433,True,True,False,False,mean_out_of_range,False,False,False,False,False,2695116.7356674112,508.14399001742794,puf,17.0,8846.290420563873,11130278696.00271,0.38125820428575896,False,mean_out_of_range,False +current,KS,20,100k_200k,100000.0,200000.0,242000.0,33272131000.0,0.1771466217700022,0.28385483932929817,1361370.0,112582214000.0,241162.0964790279,35802904142.43161,463,130017.36831946508,18301152941.57055,140759.29376299074,100005.38244142872,199900.1402588673,0.005521419483657586,560.3225725900149,0.008494536800805594,260034.73663893016,36602305883.1411,1120.6451451800299,462,129546.18255843362,17861790953.25487,199944.2,452,126394.43947768642,17366356245.908684,925,259563.5508778987,36162943894.825424,1.076303261032859,1.0100561605550629,256411.8077971515,35667509187.47923,1.063234279104261,0.9962183247924876,1297817.7543894935,180814719474.12714,100000.0,199944.2,148459.91416211263,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KS,20,200k_500k,200000.0,500000.0,79430.0,22503048000.0,0.05814362052558378,0.19198046180028217,1361370.0,112582214000.0,79154.98067491398,24214693986.884617,219,59351.789388877514,17208136902.61589,289934.5930392569,200021.1902699606,499906.97585749795,0.009922096721892523,388.27427329661987,0.01884909284320217,118703.57877775503,34416273805.23178,776.5485465932397,185,50806.19715892726,14130555077.575089,496663.0,170,46412.426523912145,12908869932.99216,404,110157.98654780476,31338691980.190975,1.391674732386314,1.2942014463269667,105764.21591278966,30117006835.60805,1.336166277990246,1.2437492231749985,550789.9327390238,156693459900.95486,200000.0,499906.97585749795,305914.9756644285,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KS,20,500k_1m,500000.0,1000000.0,11280.0,7597910000.0,0.008257082204816631,0.06482011994628381,1361370.0,112582214000.0,11240.944001171218,8175828696.178868,48,13460.774584557428,9145231576.18503,679398.612519423,502331.84746200434,986409.3461172989,0.044047370093606604,518.7666666666667,0.06799494446209461,26921.549169114856,18290463152.37006,1037.5333333333333,32,8733.820875123278,6018510313.03398,954750.0,29,8038.456878923409,5444078842.401502,80,22194.595459680706,15163741889.219011,1.9744423117282859,1.854703963685795,21499.231463480835,14589310418.586533,1.912582382871117,1.7844442393228137,110972.97729840354,75818709446.09506,502331.84746200434,986409.3461172989,727325.8095874343,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KS,20,1m_plus,1000000.0,inf,4950.0,13690751000.0,0.0036234536271136813,0.1168000307946139,1361370.0,112582214000.0,4932.861064343752,14732108553.278406,19,5719.022656528867,8334937109.094378,1457405.8558028564,1001301.3855404691,3711087.1121718395,0.10646006029305367,239.10457511564618,0.24780371981262925,11438.045313057733,16669874218.188757,478.20915023129237,11,3610.33745853609,4428177298.975367,2204149.4,9,2971.522695478685,3714064120.705836,30,9329.360115064954,12763114408.069746,1.8912675612334713,0.8663467528705868,8690.545352007552,12049001229.800215,1.76176568499476,0.8178735030511904,46646.80057532477,63815572040.34873,1000000.0,3711087.1121718395,2986524.120812291,True,True,True,True,,False,False,False,False,False,3711087.1121718395,239.10457511564618,puf,29.0,9090.255539949309,11875776500.896746,0.8061151910433061,False,mean_out_of_range,False +current,KY,21,100k_200k,100000.0,200000.0,307990.0,41822750000.0,0.15548375697301664,0.2862417243031326,1975890.0,139288462000.0,307218.80056541384,44668384961.681015,345,180468.40937073,25090746910.098072,139031.24096669475,100022.8089622065,199858.54238996774,0.007165120671764464,966.1477159275163,0.01243616751225298,360936.81874146,50181493820.196144,1932.2954318550326,313,159783.4234977507,22074359978.401188,199723.47999999998,304,154040.99598495517,21199810263.109367,658,340251.8328684807,47165106888.49926,1.107522821657633,1.0558946093296202,334509.40535568516,46290557173.20744,1.088831167689103,1.0363158912711534,1701259.1643424034,235825534442.4963,100000.0,199858.54238996774,145396.00076385983,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KY,21,200k_500k,200000.0,500000.0,83860.0,23695359000.0,0.04233536108236363,0.16217490284932848,1975890.0,139288462000.0,83650.01660903147,25307599754.134605,133,64326.355856029295,18271554054.030205,284044.60055104486,200022.8612490445,490840.04015901673,0.019023367324825825,929.0749999999999,0.037944916804145336,128652.71171205859,36543108108.06041,1858.1499999999999,96,47407.887953878075,12762765505.992966,490000.0,90,44522.38000524137,11883294650.45689,229,111734.24380990739,31034319560.023174,1.335734867001135,1.2262845888793927,108848.73586127066,30154848704.487095,1.3012398595210626,1.1915333337591834,558671.219049537,155171597800.11588,200000.0,490840.04015901673,302541.47912987036,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KY,21,500k_1m,500000.0,1000000.0,12010.0,8063977000.0,0.006063053739556251,0.055191174210705955,1975890.0,139288462000.0,11979.9272534518,8612652897.24233,24,13063.82602219843,8766625656.914425,671061.1150223466,507905.37236372224,931916.2428299778,0.07602010925902072,723.38,0.13637092931937023,26127.65204439686,17533251313.82885,1446.76,10,5004.718709375211,3426964446.348623,992887.48,8,3936.0231091447367,2549562509.5710306,34,18068.54473157364,12193590103.263046,1.5082349290866948,1.4157763291688312,16999.849131343166,11316188166.485455,1.4190277429643794,1.313902731423063,90342.72365786819,60967950516.31523,507905.37236372224,992887.48,718923.6391031297,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,KY,21,1m_plus,1000000.0,inf,4810.0,12629941000.0,0.0024282504985233613,0.08644137675515912,1975890.0,139288462000.0,4797.955877527324,13489286731.057106,9,4513.199266664901,7873612227.040142,1744574.4718598411,1106568.1488193297,2777707.0692796027,0.20821342199232354,599.0749999999999,0.310073033421616,9026.398533329802,15747224454.080284,1198.1499999999999,8,3950.5880523930173,4899587691.457986,1623080.0,6,2954.345382064018,3457964152.1932836,17,8463.787319057918,12773199918.498127,1.7640402569562221,0.9469144049766327,7467.544648728919,11331576379.233425,1.556401275740242,0.8400426653504318,42318.93659528959,63865999592.49063,1018499.0,2777707.0692796027,2811465.3563694186,True,True,False,False,mean_out_of_range,False,False,False,False,False,2777707.0692796027,586.1333726906497,puf,16.0,7877.653946367267,11145093105.634613,0.8262181187070974,False,mean_out_of_range,False +current,LA,22,100k_200k,100000.0,200000.0,282520.0,38919889000.0,0.1461910232129736,0.27466789367064565,1970500.0,140655941000.0,288069.41124116443,43283078822.52269,679,160158.3921362587,21934393969.53286,136954.3842003086,100022.8089622065,199745.87862902423,0.0038396199790769778,581.0566666666666,0.006407747315185883,320316.7842725174,43868787939.06572,1162.1133333333332,643,150847.6107965033,20362126917.837067,199959.83,633,148409.45950273113,20017343684.4487,1322,311006.002932762,42296520887.36992,1.0796217536349102,0.9772068447533957,308567.8516389899,41951737653.98156,1.0711579903937272,0.9692410705347431,1555030.0146638101,211482604436.8496,100000.0,199959.83,150252.2556492025,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,LA,22,200k_500k,200000.0,500000.0,87420.0,24600044000.0,0.04523580365736285,0.17360898099388733,1970500.0,140655941000.0,89137.1511068335,27357879758.84326,260,62726.43829464358,17831081879.2617,284267.4056432813,200022.8612490445,499589.0132763756,0.012067513517596575,455.8883333333333,0.023458944820005448,125452.87658928716,35662163758.5234,911.7766666666666,203,49676.17541415269,13767850356.788845,489280.0,185,44940.538829973004,12339902984.455593,463,112402.61370879627,31598932236.05054,1.261007473461637,1.1550212412142935,107666.97712461659,30170984863.717293,1.2078799444192978,1.102826137466472,562013.0685439813,157994661180.25272,200000.0,499589.0132763756,306918.93805371947,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,LA,22,500k_1m,500000.0,1000000.0,12570.0,8472356000.0,0.0065043931820298675,0.05979164475386497,1970500.0,140655941000.0,12816.906765189853,9422165940.927351,31,7843.982146231313,5490980682.709696,700024.6278413407,505878.11565128766,975201.229713439,0.07800731950742419,567.9583333333333,0.11245461402938073,15687.964292462626,10981961365.419392,1135.9166666666665,13,3653.5785283536916,2270411229.3165565,842372.4,11,3264.795917321522,1950367411.2790713,44,11497.560674585004,7761391912.026252,0.8970620513376805,0.8237375525634564,11108.778063552836,7441348093.988768,0.8667284756821186,0.7897704350191452,57487.80337292502,38806959560.131256,505878.11565128766,975201.229713439,735135.7167173544,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,LA,22,1m_plus,1000000.0,inf,5660.0,15655732000.0,0.002928788019911619,0.11048661861065752,1970500.0,140655941000.0,5771.176793235845,17410848272.981735,15,3695.0804177980735,5356784134.457938,1449707.0506655134,1047228.0213784353,2513333.4823540393,0.16274302688417483,346.8617557230341,0.31589115642040816,7390.160835596147,10713568268.915876,693.7235114460682,9,2193.627312757084,2595677022.991792,1335409.0399999998,9,2193.627312757084,2561082394.9514256,24,5888.7077305551575,7952461157.449732,1.0203651597464602,0.4567532283760356,5888.7077305551575,7917866529.409364,1.0203651597464602,0.45476627015906856,29443.538652775787,39762305787.24866,1029302.92,2513333.4823540393,3016862.746847101,True,True,False,False,mean_out_of_range,False,False,False,False,False,2513333.4823540393,346.8617557230341,puf,23.0,5541.845974832124,7080681893.042921,0.4066821892894655,False,mean_out_of_range,False +current,MA,25,100k_200k,100000.0,200000.0,700180.0,98269106000.0,0.19472541041735614,0.22552595106228232,3567790.0,422208182000.0,694739.3720329391,106678115746.86644,915,353255.5489001124,49967054687.61447,141447.33138146205,100022.9793017205,199550.66214680093,0.0027517848730131845,756.3871391159697,0.0042854878021520385,706511.0978002248,99934109375.22894,1512.7742782319394,926,354457.62711418327,50001493504.55617,198768.16,897,341432.0264249782,48019467406.215164,1841,707713.1760142957,99968548192.17064,1.0186743468178474,0.9371045550652887,694687.5753250907,97986522093.82964,0.9999254444041412,0.9185250546263786,3538565.8800714784,499842740960.8532,100000.0,199550.66214680093,153551.27410543332,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MA,25,200k_500k,200000.0,500000.0,368850.0,108127103000.0,0.1025800046165869,0.2481498889354337,3567790.0,422208182000.0,365983.91467101255,117379673823.50407,610,223120.5306164979,65322386825.095764,292767.26191267726,200022.8612490445,499803.70271637384,0.004148589882392309,556.6775680650592,0.007774507284849233,446241.0612329958,130644773650.19153,1113.3551361301184,574,208996.42190605734,60194350034.020294,492552.04,554,200765.82346895617,57422848223.63899,1184,432116.95252255525,125516736859.11606,1.1806993018012568,1.069322590279533,423886.3540854541,122745235048.73476,1.1582103395623022,1.0457111614852375,2160584.7626127764,627583684295.5803,200000.0,499803.70271637384,320723.5867975731,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MA,25,500k_1m,500000.0,1000000.0,66250.0,44351516000.0,0.01842463143784433,0.10178598579042769,3567790.0,422208182000.0,65735.21579762662,48146730442.393555,104,39859.74792853043,27827114393.410408,698125.6992218102,500493.9984578896,994293.4035741941,0.02100575552499077,614.9566666666666,0.03567383882052045,79719.49585706086,55654228786.820816,1229.9133333333332,68,26378.64011458181,17967451934.519325,959000.0,67,26133.767839499196,17770644682.330177,172,66238.38804311224,45794566327.92973,1.0076545309752187,0.951145922207986,65993.51576802963,45597759075.740585,1.0039294002045756,0.9470582666105904,331191.9402155612,228972831639.64868,500000.0,994293.4035741941,732434.3558956096,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MA,25,1m_plus,1000000.0,inf,27450.0,86021156000.0,0.007634054837265312,0.197417111115033,3567790.0,422208182000.0,27236.704507846807,93382093416.49301,59,21394.14170482656,37846950080.93406,1769033.3458152104,1000116.3271681498,13407072.314569894,0.11419719548563174,322.36833333333334,0.2430981466606188,42788.28340965312,75693900161.86812,644.7366666666667,33,11448.731351926657,13093022402.569166,1602093.2799999998,30,10163.253045717212,11425566969.617464,92,32842.87305675322,50939972483.50323,1.2058313826950426,0.5455004339676356,31557.394750543775,49272517050.55152,1.1586348393012154,0.5276441686822271,164214.3652837661,254699862417.51614,1000116.3271681498,13407072.314569894,3428538.6247660737,True,True,True,True,,False,False,False,False,False,13407072.314569894,322.36833333333334,puf,91.0,32520.504723419883,46617956926.57585,0.49921730409978426,True,,False +current,MD,24,100k_200k,100000.0,200000.0,624880.0,87558352000.0,0.20155988929817883,0.28072111339962047,3095140.0,295351996000.0,623856.0757623652,92889613494.59271,524,313139.65574345295,44324104625.972275,141547.40165610274,100030.42681786275,198994.900902133,0.005551687901852989,1364.8844544361211,0.00842305755026962,626279.3114869059,88648209251.94455,2729.7689088722423,533,319689.03600272216,44882167930.06517,199973.28,518,309993.31778749294,43518492436.12248,1057,632828.691746175,89206272556.03745,1.0143825095761791,0.9603471174011324,623132.9735309458,87842597062.09476,0.9988409149810142,0.945666514881217,3164143.4587308755,446031362780.18726,100000.0,199973.28,148895.90260234245,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MD,24,200k_500k,200000.0,500000.0,284340.0,80616057000.0,0.0917160717626491,0.25846339911613764,3095140.0,295351996000.0,283874.0823554458,85524615358.08778,314,183140.88188568823,53836697309.41739,293963.29620723816,200022.8612490445,497290.3522044612,0.007760751724204338,882.8774527978507,0.014018505823905191,366281.76377137646,107673394618.83478,1765.7549055957013,293,169110.56510708347,48279130387.76268,481441.36,278,159007.93961341726,45125331531.30245,607,352251.4469927717,102115827697.18005,1.2408721644116454,1.1939934166277812,342148.8214991055,98962028840.71985,1.2052837605325746,1.157117496832581,1761257.2349638585,510579138485.90027,200000.0,497290.3522044612,301276.58942460374,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MD,24,500k_1m,500000.0,1000000.0,33480.0,22263897000.0,0.010799233602776577,0.07138035163629473,3095140.0,295351996000.0,33425.13989329789,23619503336.625412,47,28430.48789744338,18410045064.534725,647545.871563824,505102.24012740917,981667.1451812948,0.048242312551644476,929.8649999999999,0.10088932381031793,56860.97579488676,36820090129.06945,1859.7299999999998,24,14349.299746093257,9302786856.077919,986351.36,23,13825.443435746954,8825300785.583239,71,42779.787643536634,27712831920.61264,1.2798686192518958,1.1733029067397847,42255.93133319034,27235345850.117966,1.2641960951571998,1.1530871526788489,213898.93821768317,138564159603.0632,505000.0,986351.36,706638.8775641709,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MD,24,1m_plus,1000000.0,inf,13290.0,37103420000.0,0.004286792550206114,0.11895739395978748,3095140.0,295351996000.0,13268.223093844952,39362576663.47513,19,11951.044229227253,18821927701.776955,1574919.089977627,1008466.8442928717,4534222.058596091,0.1655356613723337,1431.0118041626388,0.24519240545758958,23902.088458454506,37643855403.55391,2862.0236083252776,9,5481.166716522772,6390315793.421815,1737229.24,9,5481.166716522772,6287755805.684367,28,17432.210945750026,25212243495.198772,1.3138316127527825,0.6405130362970732,17432.210945750026,25109683507.461323,1.3138316127527825,0.6379075161195129,87161.05472875014,126061217475.99387,1007937.3200000001,4534222.058596091,2966680.34484099,True,True,True,True,,False,False,False,False,False,4534222.058596091,331.69908519724885,puf,27.0,17100.51186055277,23708246186.28126,0.6023042238563703,True,,False +current,ME,23,100k_200k,100000.0,200000.0,121480.0,16599287000.0,0.1705940176941441,0.28817562204511815,710860.0,54409847000.0,121268.46341805927,17566567623.817863,274,67036.28555101092,9197994586.82236,137209.19217433655,100051.49237993041,199412.42634606175,0.011032552888318328,513.045096293916,0.02011447056211288,134072.57110202184,18395989173.64472,1026.090192587832,271,65324.50880750058,8741707679.875284,199375.8,257,61842.359773125776,8306798966.109192,545,132360.7943585115,17939702266.697643,1.0914692132464208,1.0212411810246789,128878.6453241367,17504793552.93155,1.0627548308239232,0.9964834296483419,661803.9717925575,89698511333.48822,100000.0,199412.42634606175,144856.85007205143,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ME,23,200k_500k,200000.0,500000.0,36740.0,10449572000.0,0.051593877264429155,0.18141212397889436,710860.0,54409847000.0,36676.02359219211,11058493848.437809,135,29643.697258714856,8269462948.260485,278961.9282672094,200038.92481577396,492306.61385428696,0.015582184775400245,300.37602187165896,0.02938454515500035,59287.39451742971,16538925896.52097,600.7520437433179,106,23165.522222652075,6250686146.172866,488958.16000000003,100,21390.444159144095,5891584999.905234,241,52809.219481366934,14520149094.43335,1.4398839980190596,1.3130313488834247,51034.14141785895,14161047948.165718,1.391485128958296,1.2805584686531426,264046.09740683465,72600745472.16675,200006.8,492306.61385428696,301518.3426480299,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ME,23,500k_1m,500000.0,1000000.0,5300.0,3531289000.0,0.007442774891166971,0.06130572983020796,710860.0,54409847000.0,5290.770959134953,3737065755.760724,21,4612.741565007833,3111463635.8683376,674536.7352621356,506653.94648768334,936851.8979041673,0.09501589086813966,400.8546125947651,0.14335253229054498,9225.483130015666,6222927271.736675,801.7092251895302,9,1997.3849975888597,1168399985.2613864,704689.3200000001,5,1266.2313907931666,758437874.2582055,30,6610.126562596692,4279863621.129725,1.249369253300176,1.145247073732185,5878.972955800999,3869901510.126543,1.111175101173198,1.0355454688376975,33050.63281298346,21399318105.648624,503285.24,936851.8979041673,706336.7105900458,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ME,23,1m_plus,1000000.0,inf,2060.0,5352577000.0,0.0028928521275101812,0.09292460613033514,710860.0,54409847000.0,2056.4128633618875,5664484615.043534,9,2296.8036651420935,3698062203.9770403,1610090.692600953,1103152.7890726235,4230760.9155691145,0.3391395579979028,296.4382072951093,0.6834719985411797,4593.607330284187,7396124407.954081,592.8764145902186,6,1499.4285774949976,1689945957.7689548,1387557.96,6,1499.4285774949976,1689945957.7689548,15,3796.2322426370915,5388008161.745995,1.8460457577720524,0.951191242966168,3796.232242637091,5388008161.745995,1.8460457577720522,0.951191242966168,18981.161213185456,26940040808.729973,1099999.0,4230760.9155691145,2754546.3831533613,True,True,True,True,,False,False,False,False,False,4230760.9155691145,296.4382072951093,puf,14.0,3499.794035341982,4133848980.4404716,0.7297837775853331,False,mean_out_of_range,False +current,MI,26,100k_200k,100000.0,200000.0,820010.0,112767563000.0,0.16829935574971316,0.28325472260908835,4871390.0,379740366000.0,819851.7986055952,120508059164.18417,787,437546.29646272736,60799121342.4567,138954.71595572267,100022.8089622065,199843.69597122248,0.003900027814842813,1238.0719270625057,0.006647958394247846,875092.5929254547,121598242684.9134,2476.1438541250113,770,425316.1646107923,58295770359.265,199887.36,735,403793.4193757032,55113534321.98343,1557,862862.4610735197,119094891701.7217,1.0524615089471987,0.9882732534880747,841339.7158384306,115912655664.44012,1.0262095140480048,0.9618664217844292,4314312.305367598,595474458508.6085,100000.0,199887.36,146987.61333346393,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MI,26,200k_500k,200000.0,500000.0,263110.0,74339641000.0,0.05400085790576582,0.18672971047812933,4871390.0,379740366000.0,263059.2391935686,79442400079.81915,388,216241.1646767265,62901689150.21361,290886.7478782293,200022.8612490445,499881.11215125135,0.006735755341114375,856.5683333333333,0.01284134043563655,432482.329353453,125803378300.42722,1713.1366666666665,304,170793.05883017572,47922915239.88069,494455.36,299,167988.04497626628,46665948793.08563,692,387034.2235069022,110824604390.0943,1.4712816196587124,1.3950309189896593,384229.2096529928,109567637943.29924,1.4606185695316443,1.3792085565543335,1935171.1175345113,554123021950.4714,200000.0,499881.11215125135,301994.33528112096,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MI,26,500k_1m,500000.0,1000000.0,35290.0,23646431000.0,0.007242941262188727,0.05939618694783665,4871390.0,379740366000.0,35283.19163521354,25269549417.945644,57,29107.549107419964,19848179639.915184,681891.1330069895,500048.5404968634,999305.0672653557,0.03785552478845231,758.3052577381669,0.07030263484469496,58215.09821483993,39696359279.83037,1516.6105154763338,32,17226.333755319356,10704645668.72068,927408.0,28,14854.184461039593,9299250066.246132,89,46333.882862739316,30552825308.635868,1.313199875503805,1.209076774710443,43961.73356845956,29147429706.161316,1.245968165889636,1.1534606028812577,231669.4143136966,152764126543.17935,500000.0,999305.0672653557,716192.2787258843,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MI,26,1m_plus,1000000.0,inf,15920.0,47835791000.0,0.0032674305722313556,0.12015612779085529,4871390.0,379740366000.0,15916.928615262103,51119295111.42799,33,17234.882391675997,26538233503.705482,1539797.771786523,1010259.9885344346,3234399.1242800346,0.11384197178069012,934.0729803439781,0.22433764179829355,34469.764783351995,53076467007.410965,1868.1459606879562,13,6358.716970190776,7213467109.094053,1344900.0,11,5175.751032052512,5698563228.238285,46,23593.599361866774,33751700612.79953,1.4822959838648657,0.6602536388506295,22410.63342372851,32236796731.943768,1.4079747396894056,0.6306189602512156,117967.99680933387,168758503063.99765,1010000.6799999999,3234399.1242800346,3211630.6070765285,True,True,True,True,,False,False,False,False,False,3234399.1242800346,934.0729803439781,puf,45.0,22659.5263815228,30730535783.16133,0.6011533554243269,False,mean_out_of_range,False +current,MN,27,100k_200k,100000.0,200000.0,578700.0,80251831000.0,0.19936954162575576,0.2912260823516967,2871840.0,264184944000.0,572557.4244225104,86196672199.31816,535,284627.56824782956,40148197268.975174,141055.19544760865,100002.59973293605,199764.4072893202,0.0046418980365818185,987.3485981038411,0.00749898805126543,569255.1364956591,80296394537.95035,1974.6971962076823,525,275243.4328414205,38186960490.65746,199600.0,502,261299.01746209883,36305907949.91876,1060,559871.0010892501,78335157759.63263,0.9778425310857578,0.9087956154327299,545926.5857099284,76454105218.89394,0.9534879165361584,0.8869728177220595,2799355.0054462506,391675788798.16315,100000.0,199764.4072893202,150546.77229320246,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MN,27,200k_500k,200000.0,500000.0,208180.0,59153904000.0,0.0717206690438048,0.21466375910760668,2871840.0,264184944000.0,205970.28618676035,63535867142.993095,279,144859.6276060056,41756935093.40708,288257.9210197826,200022.8612490445,499576.44866662665,0.009573554762513977,969.4692946889912,0.016563881763601195,289719.2552120112,83513870186.81416,1938.9385893779825,245,129277.31735776871,35128874794.16213,496653.44,223,115735.65126537715,31656496392.294914,524,274136.9449637743,76885809887.56921,1.3309538479506937,1.2101166371827567,260595.27887138276,73413431485.702,1.2652081215010405,1.1554643823539634,1370684.7248188714,384429049437.84607,200000.0,499576.44866662665,308471.0339499307,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MN,27,500k_1m,500000.0,1000000.0,28980.0,19405098000.0,0.009983980156064286,0.07041921159644003,2871840.0,264184944000.0,28672.39357139166,20842575807.41858,43,21795.04328035512,15035369684.147266,689852.7105793518,505129.9837183531,999136.5524512394,0.05990131001600984,901.4166666666666,0.1087352659017514,43590.08656071024,30070739368.294533,1802.8333333333333,22,10418.458700992489,6592376676.174978,959690.0,22,10418.458700992489,6532204977.927658,65,32213.501981347603,21627746360.322247,1.1235023647795188,1.0376714740135045,32213.50198134761,21567574662.074924,1.123502364779519,1.0347845132653084,161067.509906738,108138731801.61124,501092.0,999136.5524512394,726921.3766727376,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MN,27,1m_plus,1000000.0,inf,11400.0,31825471000.0,0.003927445610045993,0.11549153611619822,2871840.0,264184944000.0,11278.995400754484,34183016850.742085,20,10864.622269287387,21355821685.533054,1965629.4674783745,1049698.666966232,10250716.33209483,0.22679027259923074,472.4833333333333,0.41661673893464035,21729.244538574774,42711643371.06611,944.9666666666666,9,4864.997779372694,5550190027.900057,1469620.0,8,4496.542779372694,5008701190.800056,29,15729.620048660081,26906011713.43311,1.3945940653196722,0.787116357544346,15361.165048660081,26364522876.33311,1.3619267056029236,0.7712754842983017,78648.1002433004,134530058567.16554,1000065.96,10250716.33209483,3030679.208225893,True,True,True,True,,False,False,False,False,False,10250716.33209483,472.4833333333333,puf,28.0,15257.136715326746,22062719091.7905,0.6454292547707514,True,,False +current,MO,29,100k_200k,100000.0,200000.0,480730.0,65811105000.0,0.16748540212104743,0.27495853683603544,2880050.0,225671354000.0,482366.33237872267,69517766529.639,497,259801.65416414005,35561960111.34671,136881.19202227643,100002.21144975066,199037.38356867517,0.004835830650352446,864.0166666666667,0.00893047208281849,519603.3083282801,71123920222.69342,1728.0333333333333,483,249330.87649236,33729168823.4028,199974.12,468,240301.14165968972,32371157753.64464,980,509132.5306565,69291128934.74951,1.0554893583592029,0.9967398608125181,500102.7958238298,67933117864.99135,1.03676969608895,0.9772051269228846,2545662.6532825,346455644673.74756,100000.0,199974.12,144118.19785767756,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MO,29,200k_500k,200000.0,500000.0,150640.0,42660430000.0,0.05248268461613501,0.17823510809605933,2880050.0,225671354000.0,151152.75582869965,45063182160.42729,253,130125.53760154037,38551627358.97986,296264.88443052163,200022.8612490445,499254.7551839112,0.012179391236411857,1119.2010541078903,0.019613998520585787,260251.07520308075,77103254717.95972,2238.4021082157806,215,107422.67175129171,30415418077.43879,493921.36,199,99107.4770788207,27845938146.195568,468,237548.20935283208,68967045436.41864,1.5715770979527743,1.5304521813593266,229233.01468036108,66397565505.17543,1.5165652351065915,1.4734326854414457,1187741.0467641605,344835227182.0932,200000.0,499254.7551839112,298130.07320552645,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MO,29,500k_1m,500000.0,1000000.0,20830.0,13922543000.0,0.007257131708404755,0.05816832968108934,2880050.0,225671354000.0,20900.902176791114,14706698721.63459,27,13672.939474426787,8984748452.619383,657119.010101963,500102.02672912914,959641.3820149854,0.06926731136015714,997.6096016070517,0.11180422714951621,27345.878948853573,17969496905.238766,1995.2192032141033,12,6529.225038742228,3784324208.703922,680557.36,10,5300.181867285831,3038958402.402944,39,20202.164513169013,12769072661.323305,0.9665690189967973,0.8682487418158026,18973.121341712616,12023706855.022327,0.907765663952097,0.8175666805042118,101010.82256584507,63845363306.61652,500000.0,959641.3820149854,703639.4217454056,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MO,29,1m_plus,1000000.0,inf,9210.0,31535414000.0,0.0032087461850411805,0.13175483517498493,2880050.0,225671354000.0,9241.349450227852,33311574815.033253,26,12191.381924645782,17782406166.98819,1458604.6337404735,1000114.3062452227,2640482.4920435417,0.10648455493148162,717.1233333333333,0.21041373136246022,24382.763849291565,35564812333.97638,1434.2466666666667,9,4812.2676073104785,6059924826.146305,1781699.7999999998,8,3587.937400333035,4706315817.633341,35,17003.64953195626,23842330993.1345,1.839953095977452,0.7157371311780385,15779.319324978816,22488721984.62153,1.707469175358342,0.675102336334833,85018.24765978131,119211654965.67249,1000000.0,2640482.4920435417,3604622.354607739,True,True,False,False,mean_out_of_range,False,False,False,False,False,2640482.4920435417,717.1233333333333,puf,34.0,16286.526198622929,21948779386.831924,0.65889347797891,False,mean_out_of_range,False +current,MS,28,100k_200k,100000.0,200000.0,162360.0,22062994000.0,0.13204401467155719,0.27243644312770704,1245240.0,78974586000.0,164426.48882960988,24104866326.33833,473,92608.36827859363,12605083883.970646,136111.71558547267,100097.45404506061,199285.40739767582,0.005286512622312241,372.54840932345996,0.008952126254830117,185216.73655718725,25210167767.94129,745.0968186469199,413,81081.77890260139,10942421246.80062,199515.47999999998,393,77333.48340686673,10461173847.1835,886,173690.14718119503,23547505130.771263,1.0563392091963042,0.9768776483544295,169941.85168546037,23066257731.154144,1.0335430312664882,0.9569129079114891,868450.7359059751,117737525653.85632,100000.0,199515.47999999998,146599.65372925685,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MS,28,200k_500k,200000.0,500000.0,42400.0,11880308000.0,0.034483039061801085,0.146699439558459,1245240.0,78974586000.0,42939.65956131718,12979799398.745605,147,29002.85163509848,7858352433.318535,270951.02689173387,200022.8612490445,496715.8101668031,0.01992191055757617,344.418260138615,0.04260399680335647,58005.70327019696,15716704866.63707,688.83652027723,100,20294.092403553062,5605253524.540446,482814.0,94,18891.126365415614,5154217033.262748,247,49296.944038651534,13463605957.858982,1.14805158080623,1.0372738086507047,47893.97800051409,13012569466.581284,1.1153786147773765,1.0025246975572555,246484.72019325767,67318029789.29491,200000.0,496715.8101668031,302279.9791929102,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MS,28,500k_1m,500000.0,1000000.0,5720.0,3850091000.0,0.004651957156450524,0.04754137619572379,1245240.0,78974586000.0,5792.803129498451,4206406841.212859,20,4089.4090253246923,2679169913.9222293,655148.4327761779,500502.85073070985,846470.2823207797,0.10892921979935584,377.8664916951129,0.16219425422025127,8178.8180506493845,5358339827.844459,755.7329833902259,9,1947.0453976215065,1218424951.270633,807936.64,9,1947.0453976215065,1209815404.724741,29,6036.454422946197,3897594865.192863,1.0420610347013195,0.9265853286005605,6036.454422946199,3888985318.6469703,1.0420610347013197,0.9245385587870609,30182.272114730986,19487974325.964314,500000.0,846470.2823207797,726143.5866502606,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MS,28,1m_plus,1000000.0,inf,2590.0,7062788000.0,0.0021063931879732266,0.08721213636213887,1245240.0,78974586000.0,2622.9650533917807,7716430536.6382475,10,1902.027764462748,3317115692.7137675,1743989.1018892298,1014131.9465437671,3641972.458922861,0.16323343396361328,148.67333333333332,0.2775734597131328,3804.055528925496,6634231385.427535,297.34666666666664,4,621.6448047105655,677558768.0642955,1143187.0799999998,4,621.6448047105655,677503951.0162289,14,2523.672569173313,3994674460.778064,0.962144945816159,0.5176842377846882,2523.6725691733136,3994619643.7299967,0.9621449458161591,0.5176771338461759,12618.362845866566,19973372303.89032,1012006.8,3641972.458922861,2941873.177707823,True,True,True,True,,False,False,False,False,False,3641972.458922861,148.67333333333332,puf,13.0,2374.99923583998,3453210275.401805,0.44751394560032365,False,mean_out_of_range,False +current,MT,30,100k_200k,100000.0,200000.0,96230.0,13150795000.0,0.17372544771808204,0.2788484167530567,550380.0,47309400000.0,95615.011915078,14779773926.386997,652,55320.93636005122,7699064050.505949,139170.8918373561,100023.66529500371,199741.33721835958,0.003851508898315573,153.42578839827627,0.00660389028093587,110641.87272010244,15398128101.011898,306.85157679655254,636,53764.699769056075,7469080245.367098,199739.44,604,50952.35986741696,7085161823.481863,1288,109085.6361291073,15168144295.873045,1.1408839882380966,1.0262771522365894,106273.29622746818,14784225873.987812,1.1114708255420864,1.000301218924118,545428.1806455365,75840721479.36522,100000.0,199741.33721835958,154575.87287144712,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MT,30,200k_500k,200000.0,500000.0,29200.0,8358106000.0,0.05271519352975159,0.17722461837130182,550380.0,47309400000.0,29013.38821490468,9393418202.684988,290,24330.0370644928,6989303887.13266,287270.58115882747,200022.8612490445,499879.0912283243,0.00959009844758941,143.2071087834638,0.018078818039235604,48660.0741289856,13978607774.26532,286.4142175669276,215,17478.942604281634,5028347854.268615,497141.76,191,15595.270763067787,4444206138.162575,505,41808.97966877444,12017651741.401274,1.4410236873781064,1.279369392705861,39925.30782756059,11433510025.295235,1.376099459043886,1.217183114665023,209044.8983438722,60088258707.00637,200000.0,499879.0912283243,323761.50393422256,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MT,30,500k_1m,500000.0,1000000.0,4760.0,3207814000.0,0.008593298671288272,0.0680182342693571,550380.0,47309400000.0,4729.579722703639,3605163468.6647606,46,3707.5595374459363,2548285985.7341743,687321.6626723781,501450.93357377255,995391.9569918995,0.04770669613254512,158.72666666666666,0.08303180537885912,7415.1190748918725,5096571971.4683485,317.4533333333333,21,1737.87837084078,1144483214.480428,914885.6799999999,21,1664.8522187000667,1107444584.663544,67,5445.437908286716,3692769200.2146025,1.1513576739486402,1.0243000719138786,5372.4117561460025,3655730570.3977184,1.135917369223431,1.0140262992711635,27227.18954143358,18463846001.073013,500000.0,995391.9569918995,762258.7375700029,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,MT,30,1m_plus,1000000.0,inf,2250.0,6468084000.0,0.004061958405545928,0.1371487414126506,550380.0,47309400000.0,2235.6206672443677,7269280621.960948,15,1193.3386244367293,1593855566.3420389,1335627.2341342831,1000114.3062452227,2709860.630130855,0.13923152756479784,81.8916451835171,0.34960643454889184,2386.6772488734587,3187711132.6840777,163.7832903670342,5,321.9222125233948,383313020.0209942,1410540.6800000002,4,274.87887919006147,311216598.2011844,20,1515.2608369601242,1977168586.3630333,0.6777808324825692,0.2719895804255904,1468.2175036267909,1905072164.5432234,0.6567382048031073,0.26207162216132945,7576.3041848006205,9885842931.815166,1000114.3062452227,2709860.630130855,3251571.578518767,True,True,False,False,mean_out_of_range,False,False,False,False,False,2709860.630130855,81.8916451835171,puf,19.0,1433.369191776607,1755253641.1435754,0.24146180790446378,False,mean_out_of_range,False +current,NC,37,100k_200k,100000.0,200000.0,803940.0,110812148000.0,0.16327931580048377,0.26518004968331077,4943390.0,412484508000.0,807153.3369349535,122546428205.20479,834,435218.6791113942,60675145773.01545,139413.00933337386,100016.5132753994,199914.42780727363,0.0035701046343401973,1226.481953463598,0.005478161347575377,870437.3582227884,121350291546.0309,2452.963906927196,784,406249.08215141855,55743885405.59236,199091.52,763,393177.3841954069,54006976497.13619,1618,841467.7612628127,116419031178.60782,1.0425128940904378,0.9499993829576444,828396.0633068011,114682122270.15164,1.0263180803445773,0.9358259065544994,4207338.806314063,582095155893.0391,100000.0,199914.42780727363,151825.46190115114,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NC,37,200k_500k,200000.0,500000.0,307130.0,88280880000.0,0.06237775985994301,0.21126138755550877,4943390.0,412484508000.0,308357.5943140437,97629246594.98793,392,200302.5904282432,57539498778.691895,287262.8789057272,200024.88217197155,499602.61951483,0.008566634975294649,1034.8410797530018,0.01635974498568306,400605.1808564864,115078997557.38379,2069.6821595060037,328,166875.7680534527,46885805870.98432,480943.44,314,158405.2655125269,44466371830.25885,720,367178.3584816959,104425304649.67621,1.190755036529915,1.069610882924064,358707.8559407701,102005870608.95074,1.1632852978332933,1.0448290257950992,1835891.7924084794,522126523248.38104,200000.68,499602.61951483,316610.48210007243,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NC,37,500k_1m,500000.0,1000000.0,44590.0,29794970000.0,0.00905617918195832,0.07130113229925616,4943390.0,412484508000.0,44768.22560630093,32950062045.37458,64,30849.410624672913,20244134323.47068,656224.3463828029,500557.5079715778,981033.308383831,0.028219754225644083,590.9583333333333,0.05722780184445384,61698.82124934583,40488268646.94136,1181.9166666666665,38,19678.698267721502,12072142363.560331,941209.3600000001,32,15536.958516434934,9415665533.889324,102,50528.10889239441,32316276687.03101,1.1286600754907472,0.9807652757232808,46386.36914110785,29659799857.360004,1.036144911103628,0.9001439759511333,252640.54446197205,161581383435.15506,500000.68,981033.308383831,736014.4745325132,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NC,37,1m_plus,1000000.0,inf,17210.0,43980820000.0,0.003495331772179921,0.10524871364024771,4943390.0,412484508000.0,17278.7881292765,48638100585.6509,43,21530.438646380055,30648498770.860252,1423496.2544998233,1000114.3062452227,3441838.650499381,0.06371204776822814,790.4716666666666,0.12746208460794922,43060.87729276011,61296997541.720505,1580.9433333333332,25,12313.88347641405,14555788117.499462,2212866.08,25,12313.88347641405,14399648977.876219,68,33844.32212279411,45204286888.35972,1.9587208240287186,0.9294007443558719,33844.3221227941,45048147748.73647,1.9587208240287182,0.9261905215522843,169221.61061397055,226021434441.79858,1000000.0,3441838.650499381,2814902.3080640947,True,True,True,True,,False,False,False,False,False,3441838.650499381,326.35166666666663,puf,67.0,33517.97045612744,44081037108.37149,0.9063067138229525,True,,False +current,ND,38,100k_200k,100000.0,200000.0,78140.0,10797859000.0,0.21043843585047936,0.29603770645150473,368090.0,33720657000.0,77460.28385220295,11183950248.057602,557,39228.21206444794,5508912747.436175,140432.41987133128,100093.54126465309,199015.28027635784,0.004482615707732132,127.05414615106892,0.007558784527394073,78456.42412889587,11017825494.87235,254.10829230213784,590,41244.95908437393,5670405371.084368,199728.76,562,38785.83516962436,5340595397.034937,1147,80473.17114882186,11179318118.520544,1.0388958979593672,0.9995858234850551,78014.04723407229,10849508144.471111,1.007148997580824,0.9700962454080502,402365.85574410926,55896590592.60272,100000.0,199728.76,144383.02691217847,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ND,38,200k_500k,200000.0,500000.0,24570.0,6989129000.0,0.0661693418076053,0.19161629349426576,368090.0,33720657000.0,24356.273025961433,7239034239.4039955,235,15431.608825897809,4393031293.5933075,284677.465788323,200214.8489271138,493644.37158523366,0.010361513686018245,116.90726559383495,0.017967061325263455,30863.217651795618,8786062587.186615,233.8145311876699,193,12676.431383740906,3486243548.9477863,487860.0,173,11443.919413807882,3151135327.305376,428,28108.04020963871,7879274842.541096,1.1540369981761274,1.0884428201281464,26875.52823970569,7544166620.898684,1.1034335265932917,1.0421509791781023,140540.20104819356,39396374212.705475,200000.0,493644.37158523366,297214.3657483181,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ND,38,500k_1m,500000.0,1000000.0,3730.0,2517673000.0,0.010045243994398363,0.0690253633164574,368090.0,33720657000.0,3697.5538618980936,2607695615.6658397,37,2622.365029754589,1793016777.8328538,683740.3479258,508783.5437221706,986679.3027982432,0.05457035000031825,158.2702044592407,0.09004032026410816,5244.730059509178,3586033555.6657076,316.5404089184814,16,1194.0329682522215,782695963.4230337,965381.8,13,983.0959466061404,630788637.642693,53,3816.3979980068098,2575712741.2558875,1.0321412859818921,0.9877351964631862,3605.4609763607295,2423805415.475547,0.9750935648331329,0.9294817236008817,19081.98999003405,12878563706.279438,508783.5437221706,986679.3027982432,705248.8518253014,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,ND,38,1m_plus,1000000.0,inf,1720.0,5381091000.0,0.004632123236022838,0.14752978695562094,368090.0,33720657000.0,1705.0382419476464,5573498785.663948,16,1007.7008184483105,1362059244.883832,1351650.4303144,1010142.9233462916,2894677.5449687885,0.11768408154110009,55.37497311827401,0.2960779546737679,2015.401636896621,2724118489.767664,110.74994623654803,7,545.5551413215528,621705258.0461743,1239999.0,6,448.72654944461453,503069357.99352634,23,1553.2559597698632,1983764502.930006,0.9109801302729703,0.35592804075468876,1456.427367892925,1865128602.8773584,0.8541904410479757,0.33464232694816554,7766.279798849317,9918822514.65003,1008840.68,2894677.5449687885,3268840.9259943645,True,True,False,False,mean_out_of_range,False,False,False,False,False,2894677.5449687885,55.37497311827401,puf,22.0,1497.8809866515894,1823471811.691288,0.32716824418829854,False,mean_out_of_range,False +current,NE,31,100k_200k,100000.0,200000.0,176950.0,24298200000.0,0.18598124947448078,0.29194016056937117,940690.0,79864152000.0,174950.70156814932,26121486943.112747,476,92006.04718347391,12831182708.684715,139460.21051309165,100022.8089622065,199774.0785222284,0.005451614256519827,353.29345327476415,0.009536033476582379,184012.09436694783,25662365417.36943,706.5869065495283,484,93473.63739917599,13021661766.463778,199892.0,458,87644.7137247546,12149836875.698349,960,185479.6845826499,25852844475.14849,1.0601825709764254,0.9897156517716887,179650.76090822852,24981019584.383064,1.026865049970939,0.9563398760103746,927398.4229132496,129264222375.74246,100000.0,199892.0,149307.7004491893,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NE,31,200k_500k,200000.0,500000.0,54430.0,15383215000.0,0.05720802152526697,0.18482761098242498,940690.0,79864152000.0,53815.013768603385,16537539808.117315,239,44604.455174335766,12903120304.527914,289278.7335726058,200050.6883339712,489704.6558505362,0.011653151392267662,365.6089845817243,0.019396225630058127,89208.91034867153,25806240609.05583,731.2179691634486,186,33031.83366763688,9185808848.83794,492103.04,174,31048.939069414075,8603427861.386396,425,77636.28884197264,22088929153.365856,1.4426511005980083,1.335684110796437,75653.39424374985,21506548165.91431,1.4058046062953413,1.3004684140114964,388181.4442098632,110444645766.82928,200025.0,492103.04,307303.4577158392,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NE,31,500k_1m,500000.0,1000000.0,7650.0,5150065000.0,0.008040443958631127,0.061877456068461796,940690.0,79864152000.0,7563.565227444715,5536515283.176611,41,7343.875530209159,4758366373.388276,647936.6859929275,502954.0592417388,999013.6375383695,0.0444543365711957,301.19666666666666,0.09108542072866499,14687.751060418317,9516732746.776552,602.3933333333333,23,4432.9839755718995,2735921986.6794987,815561.3600000001,21,3948.271661062823,2521043474.0593705,64,11776.859505781058,7494288360.067775,1.5570513576121785,1.3536110670262396,11292.147191271983,7279409847.447647,1.4929661940770935,1.314799919286241,58884.29752890529,37471441800.338875,502954.0592417388,999013.6375383695,731998.0877651629,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NE,31,1m_plus,1000000.0,inf,3280.0,10269299000.0,0.003447406037164719,0.12338448111361675,940690.0,79864152000.0,3242.9403851004795,11039886071.537018,23,4476.264908153319,7321827065.833071,1635700.124113898,1027453.8627333817,8693214.579718677,0.1729063613026819,145.62972815536517,0.393722113875332,8952.529816306638,14643654131.666142,291.25945631073034,13,2589.045575786963,3162584092.0768623,1780519.0,11,2065.1746798686304,2460296078.011916,36,7065.310483940281,10484411157.909931,2.1786741798897946,0.9496847240969987,6541.439588021949,9782123143.844986,2.0171322353245382,0.8860710228763329,35326.55241970141,52422055789.54965,1000000.68,8693214.579718677,3404282.7682738784,True,True,True,True,,False,False,True,False,True,8693214.579718677,145.62972815536517,puf,35.0,6919.680755784915,9218420681.869246,0.8350104903379514,False,mean_out_of_range,False +current,NH,33,100k_200k,100000.0,200000.0,159640.0,22293532000.0,0.2180070192688489,0.28003047615525734,731910.0,76794934000.0,159561.5174730632,24092953269.440628,494,74178.36521207512,10551713565.213982,142247.85805196367,100002.59973293605,199719.34143610642,0.005900088732899496,353.63940838949685,0.008581097823025052,148356.73042415024,21103427130.427963,707.2788167789937,494,74683.76987168481,10529110549.63192,199923.28,472,71112.39375476527,10033736610.342756,988,148862.1350837599,21080824114.8459,0.9329450950407918,0.8749788321544086,145290.7589668404,20585450175.55674,0.9105626548792884,0.854417884986612,744310.6754187995,105404120574.2295,100000.0,199923.28,150994.7614625058,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NH,33,200k_500k,200000.0,500000.0,63870.0,18227814000.0,0.08722192633864558,0.2289607332606366,731910.0,76794934000.0,63838.60010651808,19699071053.70543,260,37990.15395371898,11346655548.729527,298673.5869128734,200022.8612490445,499980.13737467653,0.012547541464087717,354.43039917804526,0.019070073895368463,75980.30790743796,22693311097.459053,708.8607983560905,237,34772.789358941634,9857205459.366861,499192.28,228,33333.533841586286,9510445339.528057,497,72762.94331266062,21203861008.09639,1.1397954089101545,1.0763888789622853,71323.68779530528,20857100888.257584,1.1172501852530903,1.0587860123655084,363814.7165633031,106019305040.48195,200000.0,499980.13737467653,308576.1752425098,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NH,33,500k_1m,500000.0,1000000.0,8670.0,5789741000.0,0.011839895120652219,0.07272530566469305,731910.0,76794934000.0,8665.737637756565,6257059642.014753,39,5829.367045876163,3707973548.258481,636085.1047939403,501825.07217428,978001.6622612216,0.05435080909013221,221.89356553468843,0.11418847681681951,11658.734091752325,7415947096.516962,443.78713106937687,21,3028.950338809614,1869794103.671434,985004.0800000001,19,2688.936108460945,1679228955.0538583,60,8858.317384685775,5577767651.929915,1.0222231222521834,0.8914359093649125,8518.303154337107,5387202503.31234,0.9829865050636789,0.8609798869645547,44291.58692342888,27888838259.64958,500102.68,985004.0800000001,722045.8203988064,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NH,33,1m_plus,1000000.0,inf,3690.0,12262696000.0,0.005039124912941948,0.15403250592266715,731910.0,76794934000.0,3688.1859150313408,13252478866.307795,22,3353.8682917511355,6208010906.952921,1851000.2083926704,1021637.4892126623,5780900.516183994,0.18007584103673435,193.38038807364012,0.3239264892499996,6707.736583502271,12416021813.905842,386.76077614728024,6,870.579198770596,990968205.7400928,1420579.0,6,870.579198770596,963781946.9847448,28,4224.447490521731,7198979112.693013,1.145399821984254,0.5432175508685556,4224.447490521731,7171792853.937666,1.145399821984254,0.5411661415413193,21122.237452608657,35994895563.465065,1021637.4892126623,5780900.516183994,3593224.195205783,True,True,True,True,,False,False,False,False,False,5780900.516183994,193.38038807364012,puf,27.0,4031.0671024480907,6081066327.458246,0.4588625561153195,True,,False +current,NJ,34,100k_200k,100000.0,200000.0,880310.0,123592362000.0,0.18914801636413642,0.2373921948340216,4638510.0,504015160000.0,877364.9653852105,134048575515.1745,714,416598.08824126166,58121904383.13623,139515.53313292327,100025.09041367954,199820.45130824417,0.0036274702033819196,1121.04,0.005997503535301849,833196.1764825233,116243808766.27246,2242.08,697,405934.0199321633,56688070975.90026,199917.36000000002,677,392725.6087061443,54715146326.08694,1411,822532.108173425,114809975359.0365,0.9375027960140727,0.8564803834565168,809323.696947406,112837050709.22318,0.9224481588366927,0.8417624004997342,4112660.5408671247,574049876795.1825,100000.0,199917.36000000002,152785.42089530546,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NJ,34,200k_500k,200000.0,500000.0,461890.0,135262843000.0,0.09924410409790979,0.2598084756990054,4638510.0,504015160000.0,460344.76929919556,146706407506.66043,489,276783.5625807471,81160824341.37593,293228.4836015093,200022.8612490445,498979.9508653032,0.005627327974463265,944.2442572037847,0.0103808930770519,553567.1251614942,162321648682.75186,1888.4885144075695,474,264483.58282447164,75760689558.06033,494727.88,457,253329.49595512846,72617028570.34183,963,541267.1454052187,156921513899.43625,1.1757864572442414,1.0696295858264544,530113.0585358755,153777852911.71777,1.1515566025500659,1.0482013398408403,2706335.7270260938,784607569497.1813,200000.0,498979.9508653032,318688.11658270494,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NJ,34,500k_1m,500000.0,1000000.0,81250.0,54361330000.0,0.017457800467546754,0.10441547708908212,4638510.0,504015160000.0,80978.18204672029,58960430334.76714,101,58316.80957454626,40571449378.97844,695707.6300121672,500107.1523672831,993581.6483309965,0.022319636971462796,964.29,0.037097464935218996,116633.61914909253,81142898757.95688,1928.58,60,33665.31128845201,22601804060.382217,996347.2,55,31056.210667323878,20723265062.691147,161,91982.12086299827,63173253439.36066,1.135887698861025,1.071451702110616,89373.02024187014,61294714441.669586,1.1036679014392599,1.0395906897837885,459910.6043149914,315866267196.8033,500055.07999999996,996347.2,728102.6672190538,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NJ,34,1m_plus,1000000.0,inf,32050.0,84867370000.0,0.006886430830583059,0.16301048793040301,4638510.0,504015160000.0,31942.778271967825,92047355290.60652,42,24008.963635322543,40342881645.93451,1680325.8257503929,1001301.3855404691,4723464.539888776,0.07945201779672802,678.5958322404506,0.15469206571393615,48017.92727064509,80685763291.86902,1357.1916644809012,18,11146.094701491296,15436208488.279058,2200598.0,17,10137.669701491297,14190415397.612408,60,35155.05833681385,55779090134.21357,1.100563577704355,0.6059825397276336,34146.633336813844,54533297043.54692,1.0689938441196916,0.5924482769915288,175775.29168406923,278895450671.0679,1000000.0,4723464.539888776,2881632.7279642094,True,True,True,True,,False,False,False,False,False,4723464.539888776,678.5958322404506,puf,59.0,34476.4625045734,52573766783.70949,0.5711599927855251,True,,False +current,NM,35,100k_200k,100000.0,200000.0,140990.0,19278068000.0,0.14377492020435842,0.28269407056190976,987790.0,64857077000.0,142019.4284286632,20541220244.143734,571,79940.70213474534,11000445775.468174,137607.5701327491,100003.36712954857,198529.1504269944,0.005846023938421336,428.5920093845521,0.008117482842584805,159881.40426949068,22000891550.936348,857.1840187691042,514,72902.13746996969,10009672895.834215,199862.0,494,69901.5962732988,9544792372.148193,1085,152842.83960471503,21010118671.30239,1.0762107783125494,1.0228271943723664,149842.29840804415,20545238147.616367,1.0550830971926521,1.0001956019859033,764214.1980235751,105050593356.51196,100000.0,199862.0,144636.69141198983,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NM,35,200k_500k,200000.0,500000.0,42330.0,11809183000.0,0.0431661278973721,0.17317015440969008,987790.0,64857077000.0,42639.069475745186,12582953276.562672,218,30254.827024988626,8290651469.172991,274027.3961019649,200043.07047831497,495829.4333200209,0.013598454138704093,227.37666666666667,0.03003309773013417,60509.65404997725,16581302938.345982,454.75333333333333,174,22848.743780593235,6080581451.06657,471060.0,168,21802.698574526577,5828519160.354329,392,53103.57080558186,14371232920.239563,1.2454204901396664,1.1421192310240702,52057.525599515204,14119170629.52732,1.2208879377428161,1.1220871856709542,265517.8540279093,71856164601.19781,200000.0,495829.4333200209,295103.843289084,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NM,35,500k_1m,500000.0,1000000.0,4770.0,3201822000.0,0.004864219940242497,0.04695159776356609,987790.0,64857077000.0,4804.827814772136,3411614218.0090227,36,4740.285520402397,3193285640.8707457,673648.375636173,501920.2233846399,973489.189821545,0.06560566449290717,215.20282770000577,0.1237892168272154,9480.571040804794,6386571281.741491,430.40565540001154,14,1946.011305372048,1152267771.7884505,840000.0,11,1631.546137354175,978172564.1595473,50,6686.296825774444,4345553412.659197,1.3915788626634762,1.273752873264554,6371.831657756572,4171458205.030293,1.3261311129957214,1.222722716715815,33431.484128872224,21727767063.295982,501920.2233846399,973489.189821545,710038.8087831645,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NM,35,1m_plus,1000000.0,inf,2070.0,5372992000.0,0.0021108878985958007,0.07878968886179759,987790.0,64857077000.0,2085.113957353946,5725045271.238917,19,2705.355638917659,5252395995.349629,1941480.7871437464,1009867.7113847615,9483030.982302524,0.18093193005272465,100.21333333333332,0.33376495561199526,5410.711277835318,10504791990.699259,200.42666666666665,6,716.4550295530461,800827464.6775199,1171059.28,5,626.1883333333333,702277335.6777333,25,3421.810668470705,6053223460.027149,1.6410665020980704,1.0573232478067747,3331.543972250992,5954673331.027363,1.5977754887213897,1.0401093875959435,17109.053342353523,30266117300.135746,1009867.7113847615,9483030.982302524,2745675.003060323,True,True,True,True,,False,False,False,False,False,9483030.982302524,100.21333333333332,puf,24.0,3321.597335137372,5102897315.187339,0.8913287272718904,False,mean_out_of_range,False +current,NV,32,100k_200k,100000.0,200000.0,253300.0,34760786000.0,0.16189544864788857,0.23257198885347005,1553270.0,145994535000.0,251467.34352130588,38040496257.510925,517,132230.03239254878,18147961717.39367,137245.3850991896,100093.54126465309,199843.79845491512,0.004941644289637585,483.4483333333333,0.00866007903154111,264460.06478509755,36295923434.78734,966.8966666666666,493,125808.06340363578,17089085895.221548,199405.52000000002,485,124724.69981774088,16861526813.995483,1010,258038.09579618456,35237047612.61522,1.0261296444415733,0.9263035732783802,256954.73221028966,35009488531.38915,1.021821476348156,0.9203215513908204,1290190.4789809228,176185238063.0761,100000.0,199843.79845491512,151274.10074337505,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NV,32,200k_500k,200000.0,500000.0,83380.0,23745722000.0,0.053291916732179034,0.1588741345578779,1553270.0,145994535000.0,82776.73550259173,25986151431.46921,210,55778.25301946997,15773786478.397839,282794.55925039167,200022.8612490445,494836.1856156825,0.01286983985531143,645.84366440954,0.024413934647707976,111556.50603893994,31547572956.795677,1291.68732881908,173,45212.917961939616,12381233627.383072,481998.0,162,41473.268639018905,11346057038.651564,383,100991.1709814096,28155020105.780914,1.2200429307609935,1.0834624811616085,97251.52165848887,27119843517.0494,1.174865390233273,1.0436267790007292,504955.854907048,140775100528.90457,200000.0,494836.1856156825,313930.6143651387,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NV,32,500k_1m,500000.0,1000000.0,13530.0,9181639000.0,0.008647632926197918,0.06143106324363856,1553270.0,145994535000.0,13432.108795275439,10047934589.77931,41,9932.45439428219,6659346235.542843,670463.3085832667,501193.11300958827,976242.6000231099,0.060666244024976335,464.2632429093443,0.10150845771589319,19864.90878856438,13318692471.085686,928.5264858186886,31,7343.966342817983,4654831434.306921,907838.6799999999,30,7188.964412815764,4527904435.804379,72,17276.420737100172,11314177669.849762,1.2862031569590113,1.1260202351793238,17121.418807097954,11187250671.347221,1.2746634998311046,1.1133880870131077,86382.10368550086,56570888349.24881,501193.11300958827,976242.6000231099,748053.3952579013,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NV,32,1m_plus,1000000.0,inf,8490.0,36071403000.0,0.005426341725308228,0.24134085853078885,1553270.0,145994535000.0,8428.573811669512,39474771106.28822,19,4881.129299330515,11823404158.57036,2422268.1747422735,1029163.937201363,7555970.288568098,0.24525323196444654,383.76647498183513,0.3624116962728428,9762.25859866103,23646808317.14072,767.5329499636703,8,2002.5555227846125,2782165061.1249094,2771052.68,8,2002.5555227846125,2781313369.458243,27,6883.684822115129,14605569219.69527,0.8167081378090969,0.3699975657963636,6883.684822115128,14604717528.028603,0.8167081378090968,0.3699759902015521,34418.424110575645,73027846098.47635,1003002.04,7555970.288568098,4683446.095190469,True,True,True,True,,False,False,False,False,False,7555970.288568098,383.76647498183513,puf,26.0,6499.918347133293,11705841136.98401,0.2965398103377299,True,,False +current,NY,36,100k_200k,100000.0,200000.0,1689140.0,234086438000.0,0.17254909171516333,0.22254413651002117,9767160.0,1018899559000.0,1685314.5866366746,254038592796.2696,1311,814671.8216983038,113347641086.65048,139132.8852523223,100035.19502831477,199781.38394988913,0.0019839446822394005,1195.0833333333333,0.003305068999157834,1629343.6433966076,226695282173.30096,2390.1666666666665,1316,815433.2674740725,113082422743.32288,199722.96000000002,1256,775901.4321971858,107593365371.98003,2627,1630105.0891723763,226430063829.9734,0.9672408356860673,0.8913215166939721,1590573.2538954895,220941006458.6305,0.9437841851649447,0.8697143375999479,8150525.445861882,1132150319149.867,100000.0,199781.38394988913,150736.60123196692,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NY,36,200k_500k,200000.0,500000.0,716560.0,207028428000.0,0.07319806360598734,0.19682029909945953,9767160.0,1018899559000.0,714937.1989298553,224674316749.37024,782,474681.10610095604,136476540946.7938,287512.05639469397,200022.8612490445,499091.1016262907,0.004847093878963261,1325.4385904491876,0.009543183364127359,949362.2122019121,272953081893.5876,2650.877180898375,700,419839.57185073243,118180009081.14862,499490.0,673,403304.3527697989,112999348399.57431,1482,894520.6779516884,254656550027.94244,1.2511877676677623,1.1334475329105735,877985.4588707549,249475889346.3681,1.2280595556993767,1.1103889975313228,4472603.389758442,1273282750139.7122,200000.0,499490.0,314257.4160159398,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NY,36,500k_1m,500000.0,1000000.0,128400.0,86985377000.0,0.013116321546009788,0.082696314142999,9767160.0,1018899559000.0,128109.21115132495,94399500268.92628,131,78341.61894300021,53677446003.61563,685171.5183811847,500767.7694513679,988361.4136925482,0.022140582153160004,1411.2316666666666,0.03328366769323867,156683.23788600042,107354892007.23126,2822.463333333333,81,51311.14765987056,33416644636.122402,996134.04,75,46239.25154537231,30286285137.25468,212,129652.76660287079,87094090639.73804,1.0120487468283803,0.9226117764566918,124580.87048837251,83963731140.87032,0.9724583374509683,0.8894510129997888,648263.833014354,435470453198.6902,500020.4,996134.04,736867.3916617897,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,NY,36,1m_plus,1000000.0,inf,71680.0,254646534000.0,0.007322258009485838,0.24209045815930502,9767160.0,1018899559000.0,71517.6655399297,276351110771.3443,72,41626.02455139547,80200002190.60068,1926679.356362222,1000910.4568507039,8648376.407284494,0.06331446262348057,904.4116666666666,0.10819232627416359,83252.04910279094,160400004381.20135,1808.8233333333333,34,19193.190343368315,24257024429.4765,2237291.2800000003,33,18630.4688527839,23624965711.94137,106,60819.21489476379,104457026620.07718,0.8504082793475305,0.377986635655342,60256.493404179375,103824967902.54205,0.8425399927314043,0.37569947742474563,304096.07447381894,522285133100.38586,1000000.0,8648376.407284494,3864095.796262423,True,True,True,True,,False,False,False,False,False,8648376.407284494,444.455,puf,105.0,60374.75989476379,100613212483.97754,0.3640774672594891,True,,False +current,OH,39,100k_200k,100000.0,200000.0,929850.0,126466789000.0,0.16373827233539007,0.27668137746727534,5692070.0,438525537000.0,932009.7078121038,135933652407.5176,865,498832.45195207174,69737464381.0322,139801.3784149966,100157.95038435851,199799.01407117903,0.002808842580934428,1120.24,0.004223664433991521,997664.9039041435,139474928762.0644,2240.48,866,491389.2395942964,68655634403.24841,199810.04,834,471346.90245620545,65708691028.531586,1731,990221.6915463682,138393098784.28058,1.0624585594402416,1.0180929911997787,970179.3544082772,135446155409.56378,1.0409541298510472,0.996413713680757,4951108.457731841,691965493921.4028,100000.0,199810.04,145850.03918749123,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OH,39,200k_500k,200000.0,500000.0,279500.0,79492606000.0,0.04921745132843096,0.17391224921938517,5692070.0,438525537000.0,280149.178183022,85443145654.40378,425,232878.75238812141,67124257307.42396,288236.9328205307,200338.88701122918,489976.89163117734,0.007061419855490764,996.8596223046392,0.01336450580810713,465757.50477624283,134248514614.84792,1993.7192446092783,335,183412.83062288054,51485879407.49599,489280.0,313,168641.0950648868,47281504049.112144,760,416291.58301100193,118610136714.91995,1.4859639628820822,1.3881761469160836,401519.8474530082,114405761356.5361,1.4332358569001207,1.3389694454752272,2081457.9150550095,593050683574.5997,200000.0,489976.89163117734,304991.59843540075,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OH,39,500k_1m,500000.0,1000000.0,40440.0,27159266000.0,0.0071211224748541965,0.05941847015567176,5692070.0,438525537000.0,40533.92760544333,29192314071.382893,77,41280.0921878485,27525218312.871326,666791.5901838476,500453.27696167195,972803.8071367044,0.028620158537618654,1060.6129418763105,0.05240952123995389,82560.184375697,55050436625.74265,2121.225883752621,42,22240.536817877564,14663861607.927067,955284.88,40,20911.790789021652,13617502190.11503,119,63520.62900572606,42189079920.7984,1.5670978056712135,1.4452119080945414,62191.882976870154,41142720502.98636,1.5343167230732007,1.409368246805703,317603.14502863033,210945399603.992,500453.27696167195,972803.8071367044,720194.5578908726,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OH,39,1m_plus,1000000.0,inf,17100.0,47138553000.0,0.0030111571295748456,0.10312873347210677,5692070.0,438525537000.0,17139.71716253909,50667180918.89995,33,17537.084096342965,72760442979.13649,4148947.6003772677,1009346.9861974814,121938370.30972688,0.6659514220050751,397.3722163466534,0.8702395005223454,35074.16819268593,145520885958.27298,794.7444326933067,9,5343.782053923079,6487329840.656529,2205198.0,8,4515.991129168616,5624625699.362212,42,22880.866150266043,79247772819.79301,1.334961711052906,1.5640849043218013,22053.07522551158,78385068678.4987,1.2866650608279129,1.5470580217195267,114404.33075133021,396238864098.9651,1009346.9861974814,121938370.30972688,2956127.0141399507,True,True,True,True,,False,False,False,False,False,121938370.30972688,397.3722163466534,puf,41.0,22483.493933919388,30792852352.1179,0.6077474963804727,True,,False +current,OK,40,100k_200k,100000.0,200000.0,263390.0,35943824000.0,0.15466871803303717,0.27309948262651323,1713370.0,125419368000.0,265004.7414162649,38374051433.322784,510,154258.71127246454,21689753196.255997,140606.34253546793,100012.70434757129,199520.51864240924,0.0057730281647092405,686.5984330587439,0.00902885976438034,308517.4225449291,43379506392.51199,1373.1968661174878,507,156268.8061800277,21448410862.408295,199060.12,476,145181.29627372028,19997135030.67754,1017,310527.51745249226,43138164058.66429,1.1717809869851383,1.1241493261043713,299440.0075461848,41686888226.93353,1.1299420755488656,1.0863301285601026,1552637.5872624614,215690820293.32147,100000.0,199520.51864240924,144805.15038425475,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OK,40,200k_500k,200000.0,500000.0,77660.0,22012020000.0,0.045603753530679476,0.16724629170130764,1713370.0,125419368000.0,78136.10318686029,23500292779.95936,183,54485.26675676838,15740081093.914215,288886.92358212447,200022.8612490445,488067.09456405864,0.012228282745836075,449.2389064980956,0.021283470110238272,108970.53351353676,31480162187.82843,898.4778129961912,133,37177.17070219559,10597265597.811459,490723.16000000003,119,33400.28543430779,9451462607.301952,316,91662.43745896398,26337346691.725674,1.173112475800794,1.1207241943038984,87885.55219107617,25191543701.216167,1.1247752141017366,1.071967227689141,458312.18729481986,131686733458.62837,200000.0,490723.16000000003,300761.0031915601,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OK,40,500k_1m,500000.0,1000000.0,11380.0,7671779000.0,0.006682599989429982,0.0582898156780689,1713370.0,125419368000.0,11449.766343889649,8190481956.8192215,32,8990.269041346844,6538015781.70101,727232.4945596445,501941.9468620085,998163.8268728611,0.07495714187699432,511.57899564549547,0.11468188738605255,17980.53808269369,13076031563.40202,1023.1579912909909,18,4905.229525856743,3219150999.623665,943006.2,17,4629.173789540224,3151986175.1528077,50,13895.498567203587,9757166781.324675,1.2136054265089125,1.1912811520451572,13619.442830887068,9690001956.853817,1.189495263207297,1.183080801342359,69477.49283601793,48785833906.623375,501941.9468620085,998163.8268728611,715340.5327952568,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OK,40,1m_plus,1000000.0,inf,5250.0,15861834000.0,0.003082921787742303,0.12051746800528616,1713370.0,125419368000.0,5282.18570346403,16934281498.34108,19,5861.7838204179825,7938966338.9499,1354360.1371474324,1070443.7982636588,2308452.8248579963,0.0836325312710072,420.87833333333333,0.15181060525306547,11723.567640835965,15877932677.8998,841.7566666666667,14,4420.2896379531885,5077095376.219342,1425610.0,13,4156.847971286521,4779161131.279702,33,10282.073458371171,13016061715.169239,1.9465566028146721,0.7686220237005226,10018.631791704503,12718127470.229603,1.8966829933931209,0.7510284668100916,51410.36729185586,65080308575.84619,1007755.4,2308452.8248579963,3205923.163064045,True,True,False,False,mean_out_of_range,False,False,False,False,False,2308452.8248579963,226.83999999999997,puf,32.0,10055.23345837117,12492412276.378452,0.7376995757158187,False,mean_out_of_range,False +current,OR,41,100k_200k,100000.0,200000.0,386310.0,53351259000.0,0.18684071793730866,0.293447158369056,2030990.0,174318031000.0,379471.6297234945,57309205534.6456,599,202715.66441236454,28509717051.24951,140638.94437508786,100002.59973293607,199950.93826526785,0.004103340465158433,623.9810866516748,0.006626119082490955,405431.3288247291,57019434102.49902,1247.9621733033496,591,199244.93403675576,27854737204.21956,199851.16,558,187367.26895683387,26101937344.19194,1190,401960.5984491203,56364454255.46907,1.0592639000233366,0.9835148425045712,390082.9333691984,54611654395.44145,1.027963364885633,0.9529298807401304,2009802.9922456015,281822271277.34534,100000.0,199950.93826526785,151023.68937673807,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OR,41,200k_500k,200000.0,500000.0,137800.0,39131297000.0,0.06664764290792662,0.2152333070142837,2030990.0,174318031000.0,135360.6962695699,42034313428.48463,275,89021.2069109907,25424870829.885715,285604.65210617945,200053.17509295017,499093.35311382415,0.008609087284723687,527.9223924449368,0.01607874547977816,178042.4138219814,50849741659.77143,1055.8447848898736,250,78952.41337474264,22381859564.44615,490278.8,229,71589.48241068375,20266763355.26853,525,167973.62028573334,47806730394.33186,1.240933483019436,1.1373263054639438,160610.68932167446,45691634185.15425,1.1865385872559298,1.0870079812982323,839868.1014286667,239033651971.6593,200019.04,499093.35311382415,310535.58815014944,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OR,41,500k_1m,500000.0,1000000.0,17580.0,11686918000.0,0.00850265284703447,0.06428138607173584,2030990.0,174318031000.0,17268.802905798537,12553930277.981806,49,14501.704310864334,9970607058.884531,687547.2596289795,503000.55244302604,996271.464995443,0.043714637548628706,449.0156546752878,0.07771054888549227,29003.408621728668,19941214117.769062,898.0313093505756,21,5872.211493245651,3761882627.9280076,938535.48,18,4853.860604826048,2913375247.372345,70,20373.915804109984,13732489686.812538,1.1798105471033438,1.0938797159721203,19355.564915690382,12883982306.256876,1.1208399922840715,1.0262907329391453,101869.57902054992,68662448434.06269,503000.55244302604,996271.464995443,726971.6578771325,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,OR,41,1m_plus,1000000.0,inf,6320.0,16704586000.0,0.00305669886196006,0.09187999281200684,2030990.0,174318031000.0,6208.124821652262,17943841820.961777,20,6381.271735559696,10041731320.875908,1573625.4052492809,1065974.5320301708,4051297.856923506,0.11427881208495277,283.25666666666666,0.23611801737311988,12762.543471119392,20083462641.751816,566.5133333333333,10,3140.5112530588513,3900138877.223988,2250998.0,9,2701.27607327741,3321743867.524803,30,9521.782988618548,13941870198.099894,1.533761524157688,0.7769724196862442,9082.547808837106,13363475188.400711,1.463009857205131,0.7447387979529368,47608.91494309274,69709350990.49947,1000172.56,4051297.856923506,2890380.321990065,True,True,True,True,,False,False,False,False,False,4051297.856923506,283.25666666666666,puf,29.0,9238.526321951882,12794313071.473932,0.7130197200316252,False,mean_out_of_range,False +current,PA,42,100k_200k,100000.0,200000.0,1120820.0,154512752000.0,0.17787574946755666,0.26988994658326626,6325490.0,549715592000.0,1125151.2744995349,166217570670.44208,1035,611586.59180774,84691971596.10585,138479.11764345848,100014.33565911409,199922.8966237266,0.002490456102528217,1330.9516666666666,0.0038723145382239016,1223173.18361548,169383943192.2117,2661.903333333333,963,553329.6253069221,76494125597.2237,199815.71999999997,930,534475.892972745,73674789870.0392,1998,1164916.217114662,161186097193.32956,1.0353418633710516,0.9697295932264083,1146062.484780485,158366761466.14505,1.0185852433844964,0.9527678742227393,5824581.08557331,805930485966.6478,100000.0,199922.8966237266,147729.08713486133,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,PA,42,200k_500k,200000.0,500000.0,405170.0,116054874000.0,0.064301062982254,0.2027149431950296,6325490.0,549715592000.0,406735.7308836179,124846389511.8783,496,281953.2288937286,83112907528.66936,294775.51243080664,200022.8612490445,499853.3135445599,0.005460495072524228,928.0731653235216,0.010037435882818675,563906.4577874572,166225815057.3387,1856.1463306470432,419,237997.5332961773,68620083011.87828,495471.6,399,224170.15890120086,64101423832.20688,915,519950.76218990586,151732990540.54764,1.2783503457154666,1.215357457542745,506123.38779492944,147214331360.87622,1.2443543789364058,1.1791637061868718,2599753.8109495295,758664952702.7382,200000.0,499853.3135445599,306947.1896178245,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,PA,42,500k_1m,500000.0,1000000.0,61070.0,40814233000.0,0.009691897021808752,0.07129088713795599,6325490.0,549715592000.0,61305.99769248105,43906037334.9469,78,42952.21368873756,28708253971.990047,668376.5865952935,504956.2897256236,998116.4419337735,0.04226064282119469,1403.9599999999998,0.07069121494747173,85904.42737747512,57416507943.980095,2807.9199999999996,45,24961.210563093166,17178209176.198032,999999.0,40,22270.934768834653,14670024162.302727,123,67913.42425183071,45886463148.18808,1.1077778163319907,1.045106002122967,65223.14845757221,43378278134.29277,1.0638950659402056,0.9879798034008853,339567.1212591536,229432315740.9404,502114.16,999999.0,716178.4978230901,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,PA,42,1m_plus,1000000.0,inf,25310.0,77084708000.0,0.004016733479973465,0.13464511799328174,6325490.0,549715592000.0,25407.807460237356,82924112953.47581,43,23563.440388308598,39078090441.44594,1658420.4087971465,1001463.0593746327,4290874.53601252,0.0673385283283313,892.4949999999999,0.11208542211731996,47126.880776617196,78156180882.89188,1784.9899999999998,14,8601.058638541275,10497604666.46077,2100075.6,13,8054.240772261293,9584501949.45888,57,32164.49902684987,49575695107.9067,1.2659297374315586,0.5978441413744264,31617.68116056989,48662592390.904816,1.2444080903104624,0.5868328361643945,160822.49513424936,247878475539.5335,1000017.0,4290874.53601252,3263725.6513868887,True,True,True,True,,False,False,False,False,False,4290874.53601252,366.05592484320715,puf,56.0,31798.443102006662,48004995061.24048,0.5789027262573608,True,,False +current,RI,44,100k_200k,100000.0,200000.0,101150.0,13995857000.0,0.17718569902079281,0.280723473261187,568360.0,47930497000.0,100705.2638954578,15074496968.727064,314,49380.20137390369,6870088562.116194,139126.37800110062,100022.8089622065,199100.2530047842,0.008025909553832294,278.18370070523565,0.014140461593494412,98760.40274780738,13740177124.232388,556.3674014104713,297,46615.42693433666,6529460185.011171,199001.36,293,46151.01898367345,6457546149.504407,611,95995.62830824035,13399548747.127365,0.9532334715680153,0.8888886159800571,95531.22035757714,13327634711.620602,0.9486219156999396,0.8841180398436889,479978.14154120174,66997743735.636826,100000.0,199100.2530047842,149689.26534342743,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,RI,44,200k_500k,200000.0,500000.0,35060.0,9898504000.0,0.06141503319494806,0.1985403554044424,568360.0,47930497000.0,34905.84826668068,10661367041.899094,158,22864.224771416255,6662591996.454368,291398.11487436114,200025.6439575372,497612.1644613938,0.01627993562869328,251.26166666666666,0.027857072800883037,45728.44954283251,13325183992.908735,502.5233333333333,151,22016.163093001553,6368029736.603348,494532.0,144,20756.847614691393,6009746331.478523,309,44880.387864417804,13030621733.057714,1.285755542209765,1.2222280390354696,43621.07238610765,12672338327.932892,1.2496780497308833,1.1886222731222644,224401.93932208902,65153108665.288574,200000.0,497612.1644613938,305432.11442524614,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,RI,44,500k_1m,500000.0,1000000.0,4770.0,3191742000.0,0.008355667665142678,0.06401872354037395,568360.0,47930497000.0,4749.027274160492,3437724828.4230723,46,7064.825755636004,4988511483.858623,706105.3812797874,500394.42657472077,983742.7165854553,0.04423850374919508,259.57666666666665,0.06721991736067516,14129.651511272008,9977022967.717245,519.1533333333333,21,2915.3578241470577,1931955042.3940325,936119.68,23,3188.0849076220793,2160259982.94195,67,9980.183579783064,6920466526.252653,2.10152163877545,2.0130949600835732,10252.910663258084,7148771466.800572,2.1589496272308817,2.079506599159597,49900.91789891532,34602332631.26327,500394.42657472077,983742.7165854553,723879.7821035414,True,True,True,True,,False,True,True,True,True,,,,,,,,,, +current,RI,44,1m_plus,1000000.0,inf,1900.0,5648283000.0,0.0033282533676668945,0.11329107047336347,568360.0,47930497000.0,1891.6460840471561,6083587804.734831,13,1900.2468940873343,3893332916.5658255,2048856.3505510932,1099602.9674187214,4855839.771984622,0.24045399834123354,192.79208347502157,0.37297706912938294,3800.4937881746687,7786665833.131651,385.58416695004314,5,619.7195713413516,765915251.7716842,1625904.0,3,346.9924878663301,423532649.30806947,18,2519.9664654286858,4659248168.33751,1.3321553575377298,0.765871771376627,2247.2393819536646,4316865565.873895,1.1879808812575132,0.7095920539708651,12599.83232714343,23296240841.68755,1017360.4,4855839.771984622,3216028.545740999,True,True,True,True,,False,False,False,False,False,4855839.771984622,192.79208347502157,puf,17.0,2327.1743819536646,3723080701.6757207,0.6119876660246545,True,,False +current,SC,45,100k_200k,100000.0,200000.0,390410.0,53612230000.0,0.15692414053676007,0.2675120053680605,2481150.0,191369595000.0,389352.33129278227,57354616827.70162,574,217088.8342249439,30278871376.94668,139476.8712313053,100035.6962853344,199504.8452102432,0.005170491713521919,1002.4216666666666,0.008196564673038888,434177.6684498878,60557742753.89336,2004.8433333333332,545,203290.16440855298,27624876493.956005,199379.0,521,193090.70223269562,26264930937.592953,1119,420378.9986334968,57903747870.90269,1.0796878940924675,1.0095743128203734,410179.53645763954,56543802314.53963,1.0534919236150555,0.9858631343384656,2101894.993167484,289518739354.5134,100000.0,199504.8452102432,147307.75243406088,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SC,45,200k_500k,200000.0,500000.0,131330.0,37435945000.0,0.052787703636414794,0.18679627241393276,2481150.0,191369595000.0,130974.21087749056,40049150745.22945,259,93264.07383063203,26308067452.057808,282081.4743717219,200032.96586367974,499524.7798623374,0.00929822093467373,870.5216666666666,0.018290884785476268,186528.14766126405,52616134904.115616,1741.0433333333333,214,76066.525074465,21165633139.60317,494040.0,206,73120.97337747093,20251308892.04447,473,169330.598905097,47473700591.66098,1.2928545075448774,1.1853859497211918,166385.04720810294,46559376344.10228,1.2703649527137417,1.162555896385601,846652.994525485,237368502958.3049,200004.08000000002,499524.7798623374,305778.90469361364,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SC,45,500k_1m,500000.0,1000000.0,19070.0,12762489000.0,0.007665129889183203,0.06368172012016313,2481150.0,191369595000.0,19018.337024546905,13653371000.660797,44,15606.61043971533,10622376516.796186,680633.1559199181,503048.34189577424,928639.819876852,0.04098418617351434,520.7835960486059,0.06206216172511869,31213.22087943066,21244753033.592373,1041.5671920972118,29,10204.039023906127,6607546329.951423,892730.2000000001,25,8611.528514520243,5613667719.115264,73,25810.64946362146,17229922846.747612,1.3571454449622877,1.2619537582267204,24218.138954235576,16236044235.91145,1.2734099160708585,1.1891601154854472,129053.2473181073,86149614233.73807,503048.34189577424,928639.819876852,717905.6183008238,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SC,45,1m_plus,1000000.0,inf,8410.0,23441693000.0,0.0033803745342438772,0.11696835411719354,2481150.0,191369595000.0,8387.216275639195,25078033870.39889,15,5937.138826516318,9106995736.121948,1533903.1143163582,1025578.1481697378,3543269.190361533,0.12554714535008518,577.6283333333333,0.22775365415497814,11874.277653032635,18213991472.243896,1155.2566666666667,12,4949.3897204128425,6578193875.370864,2595198.0,9,3485.994720412843,4877885770.973554,27,10886.52854692916,15685189611.492811,1.297990678808326,0.6254553164954044,9423.13354692916,13984881507.0955,1.1235114532933654,0.5576546223427307,54432.64273464579,78425948057.46405,1025578.1481697378,3543269.190361533,2990030.666460628,True,True,True,True,,False,False,False,False,False,3543269.190361533,283.8655448063136,puf,26.0,10602.663002122845,14679377572.375408,0.5853480240212275,False,mean_out_of_range,False +current,SD,46,100k_200k,100000.0,200000.0,83620.0,11389374000.0,0.1879523488424365,0.2820126738855975,441520.0,38863829000.0,82984.72106091256,12279095605.71681,434,41775.629468871135,5728233215.513945,137119.01623845796,100043.01819147696,199641.77401803195,0.0052057520534059655,152.58333333333331,0.009550885071275172,83551.25893774227,11456466431.02789,305.16666666666663,426,39962.66631323195,5428033323.803623,199632.0,398,37360.12735342505,5077589311.346325,860,81738.29578210309,11156266539.31757,0.9849800630420319,0.908557673752741,79135.75682229619,10805822526.86027,0.9536183987918553,0.8800177858236868,408691.47891051543,55781332696.587845,100000.0,199641.77401803195,147968.14942239417,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SD,46,200k_500k,200000.0,500000.0,24210.0,6924886000.0,0.054416722859069455,0.17146733588807775,441520.0,38863829000.0,24026.071476736346,7465848189.083076,174,16261.941863704129,4718733827.334925,290170.37859832175,200022.8612490445,495882.89876013447,0.021446194410408844,306.4866666666666,0.03388445200213645,32523.883727408258,9437467654.66985,612.9733333333332,161,15014.370327836892,4174566764.329191,487356.83999999997,132,12088.996608636018,3340290546.320983,335,31276.31219154102,8893300591.664116,1.3017655517184672,1.1911976196714433,28350.938472340145,8059024373.655908,1.1800072475348884,1.0794519483318992,156381.5609577051,44466502958.32058,200000.0,495882.89876013447,310739.4480330257,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SD,46,500k_1m,500000.0,1000000.0,4030.0,2733704000.0,0.00905821532928748,0.06768933697776132,441520.0,38863829000.0,3999.3832321870086,2947257046.2371736,25,2149.544503162362,1495854886.3403323,695893.8901426157,501325.03920749534,927723.821471256,0.09095593729489675,146.65666666666667,0.14896969082275752,4299.089006324724,2991709772.6806645,293.31333333333333,16,1370.439673585749,867559025.312661,867619.08,12,992.5211809562761,592072670.1793457,41,3519.9841767481107,2363413911.652993,0.8801317534212032,0.8019028793808177,3142.0656841186383,2087927556.519678,0.7856375600195838,0.7084307624899499,17599.920883740553,11817069558.264965,501325.03920749534,927723.821471256,736927.8899100415,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,SD,46,1m_plus,1000000.0,inf,2080.0,6239959000.0,0.004675207911890312,0.15450783533199444,441520.0,38863829000.0,2064.1977972578106,6727415671.550786,22,2459.337332055243,4629878347.788642,1882571.4908818547,1008492.5795717854,6903860.982391347,0.16751618974234123,112.33997639440817,0.3055641881863314,4918.674664110486,9259756695.577284,224.67995278881634,11,1066.512192970793,1405215908.8870435,2199998.0,10,1016.3998277061869,1344960220.563573,33,3525.8495250260357,6035094256.675685,1.7080967384569252,0.8970895439384216,3475.73715976143,5974838568.352215,1.6838198182261326,0.8881328076127204,17629.247625130178,30175471283.378426,1000358.4,6903860.982391347,3259094.492052961,True,True,True,True,,False,False,False,False,False,6903860.982391347,112.33997639440817,puf,32.0,3413.5095486316277,5259514676.883566,0.7818031371430266,True,,False +current,TN,47,100k_200k,100000.0,200000.0,517050.0,70720057000.0,0.1586247307935378,0.24975703537225308,3247910.0,267534018000.0,515198.8493916394,74859842782.64197,659,305657.5399925761,42449793127.74367,138880.24201455884,100018.35527462994,199903.05257298384,0.004275909464960794,930.0555968572402,0.00744746054585718,611315.0799851522,84899586255.48734,1860.1111937144804,606,280076.2439439662,38329208255.727264,199520.0,596,275980.63214165176,37819321445.16164,1265,585733.7839365423,80779001383.47093,1.1369081756067438,1.0790698775312078,581638.1721342278,80269114572.9053,1.1289586007830603,1.0722586581696323,2928668.919682712,403895006917.3547,100000.0,199903.05257298384,145302.8143813568,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TN,47,200k_500k,200000.0,500000.0,173850.0,49800401000.0,0.05333509225114892,0.17587656234651208,3247910.0,267534018000.0,173227.5794734291,52715599329.5159,270,123855.81887311846,36464696621.20764,294412.46243394626,200022.8612490445,491079.99330877117,0.012909472407182359,1012.9316666666666,0.02293179187611883,247711.63774623693,72929393242.41528,2025.8633333333332,213,98231.95906953052,27798110925.584396,492489.6,206,95094.02824459763,27041928598.6123,483,222087.77794264897,64262807546.79204,1.2820578490892924,1.2190472718539456,218949.8471177161,63506625219.81995,1.2639433500327828,1.2047027071218759,1110438.889713245,321314037733.9602,200000.0,492489.6,304314.12532437884,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TN,47,500k_1m,500000.0,1000000.0,27470.0,18459634000.0,0.008427466115266385,0.06519258690496878,3247910.0,267534018000.0,27371.651470434845,19540217551.93314,43,19238.83994953701,13273977768.951532,689957.2845228112,508819.7529008904,986609.7225382066,0.04322501984473594,672.824754933915,0.06494782361695194,38477.67989907402,26547955537.903065,1345.64950986783,25,11926.247793060207,8146985316.952826,976406.56,20,8929.565811803915,6347996173.296843,68,31165.087742597214,21420963085.90436,1.138589966932021,1.0962499792529259,28168.405761340924,19621973942.248375,1.0291087401783807,1.0041840061451694,155825.43871298607,107104815429.5218,500021.76,986609.7225382066,713885.2243913476,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TN,47,1m_plus,1000000.0,inf,13590.0,46625536000.0,0.004169248798925015,0.16466411564122832,3247910.0,267534018000.0,13541.344866516545,49354885200.62156,21,10448.672905597012,20791403721.794838,1989860.7133789752,1023723.3922253085,11062369.107687714,0.31598161510879447,593.8783333333333,0.5777799984603312,20897.345811194024,41582807443.589676,1187.7566666666667,10,4661.398218130071,5757173856.265249,1533266.8,10,4661.398218130071,5717327801.667108,31,15110.071123727083,26548577578.06008,1.115847153489865,0.537911849458131,15110.071123727083,26508731523.461945,1.115847153489865,0.5371045118574828,75550.35561863541,132742887890.30042,1019461.04,11062369.107687714,3644755.0584625127,True,True,True,True,,False,False,False,False,False,11062369.107687714,593.8783333333333,puf,30.0,14516.192790393749,19978876249.66835,0.4048003793030146,False,mean_out_of_range,False +current,TX,48,100k_200k,100000.0,200000.0,2156120.0,298758539000.0,0.1577097950179352,0.23530574793973377,13641000.0,1252113837000.0,2151319.313839654,330087074707.18256,2237,1230441.683556818,172261542773.6562,139999.76193565104,100001.34620662153,199846.67975078413,0.001690116448076457,1622.5333333333333,0.0026187649179509774,2460883.367113636,344523085547.3124,3245.0666666666666,2189,1199161.0581087437,165802663999.16086,199965.6,2132,1169616.4630495491,162116122195.78027,4426,2429602.7416655617,338064206772.817,1.1293547759440834,1.024166750766327,2400058.146606367,334377664969.43646,1.1156215310142716,1.0129983588907867,12148013.708327807,1690321033864.085,100000.0,199965.6,153434.71914359674,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TX,48,200k_500k,200000.0,500000.0,902260.0,260627984000.0,0.06599597408904988,0.20527367322928622,13641000.0,1252113837000.0,900251.0825487294,287958058415.16174,1104,609971.8886246646,176962000764.63678,290115.0103222662,200022.8612490445,499879.0912283243,0.00285252542616592,1163.862914100993,0.004948659024779727,1219943.7772493293,353924001529.27356,2327.725828201986,951,531349.6157356194,149912242572.2105,497960.48000000004,899,496590.568999551,140394770934.02484,2055,1141321.504360284,326874243336.8474,1.2677813184395763,1.1351453233705948,1106562.4576242156,317356771698.6616,1.2291709269500588,1.1020937335294658,5706607.52180142,1634371216684.237,200000.0,499879.0912283243,319864.16234003805,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TX,48,500k_1m,500000.0,1000000.0,144090.0,96559988000.0,0.010539489622161235,0.07605178507514297,13641000.0,1252113837000.0,143769.17793590142,106685499532.0507,191,98560.4156626492,65844055442.09381,668057.810018412,502365.1531600684,993786.4723737781,0.012066643211263476,962.4471291863716,0.021262415949631075,197120.8313252984,131688110884.18762,1924.8942583727433,87,46537.919815812886,30501595760.487743,986640.0,85,46145.271654110824,30501389631.134293,278,145098.3354784621,96345651202.58154,1.0092450799374626,0.9030810337410208,144705.68731676,96345445073.2281,1.006513978825671,0.903079101619464,725491.6773923105,481728256012.9077,500000.0,993786.4723737781,742060.9971047881,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,TX,48,1m_plus,1000000.0,inf,69410.0,228634677000.0,0.005077007250150679,0.18007536740713692,13641000.0,1252113837000.0,69255.45589930542,252609856642.6299,98,54086.873177709465,93625588339.44711,1731022.3874807488,1001301.3855404691,9096752.894042121,0.06662181908578975,685.685,0.14041483101918986,108173.74635541893,187251176678.89423,1371.37,65,37237.46321261783,46574704291.940186,2293601.72,60,33818.87988999409,42165995385.89578,163,91324.3363903273,140200292631.3873,1.3186590890847518,0.5550072134743748,87905.75306770355,135791583725.3429,1.2692971539385272,0.5375545734046665,456621.6819516365,701001463156.9365,1000000.0,9096752.894042121,3647508.39283932,True,True,True,True,,False,False,False,False,False,9096752.894042121,685.685,puf,162.0,90638.65139032732,133962785623.23602,0.5303149584252159,True,,False +current,UT,49,100k_200k,100000.0,200000.0,301730.0,41562869000.0,0.19560721671539613,0.2850079776839072,1514460.0,141245443000.0,296239.3054267988,45100736037.488304,699,164586.70819406788,22901619317.81398,139146.22613880926,100022.8089622065,199577.48287629482,0.003956123366127194,495.9360301374587,0.006638113674658658,329173.41638813575,45803238635.62796,991.8720602749174,705,164379.25523244395,22729850492.45117,199942.0,692,160490.1344489277,22110623754.057365,1404,328965.96342651185,45631469810.26516,1.1104737197265668,1.0117677408265733,325076.8426429956,45012243071.871346,1.0973454119285415,0.9980378820083246,1644829.8171325591,228157349051.3258,100000.0,199942.0,152244.2674259941,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,UT,49,200k_500k,200000.0,500000.0,97900.0,27797383000.0,0.06346716109249091,0.1906142695234783,1514460.0,141245443000.0,96118.47678813379,30163520069.222477,331,73947.08990000651,21225888431.558903,287041.5652632334,200022.8612490445,499949.82353077084,0.00840365802728015,367.69809171304945,0.016287729455208358,147894.17980001302,42451776863.117805,735.3961834260989,273,61665.77584593896,16954846208.931282,497287.60000000003,257,57403.44450825064,15613666922.409111,604,135612.86574594548,38180734640.49019,1.410892788541229,1.2657917429023187,131350.53440825717,36839555353.96802,1.3665482308649415,1.2213281231575313,678064.3287297274,190903673202.45093,200000.0,499949.82353077084,313816.0432536763,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,UT,49,500k_1m,500000.0,1000000.0,14130.0,9472981000.0,0.009160275651040823,0.0649588255673129,1514460.0,141245443000.0,13872.871062475284,10279329263.077147,59,12538.37832673637,8170828788.565315,651665.5165159712,502263.35443345265,962217.1234539783,0.030212912939579523,329.63367944342656,0.05803442956314425,25076.75665347274,16341657577.13063,659.2673588868531,35,7529.408400513259,4871610711.047146,945070.0399999999,34,7334.830067179926,4708556376.384028,94,20067.786727249633,13042439499.612461,1.4465489253721222,1.2688025809680281,19873.2083939163,12879385164.949345,1.432523109630228,1.2529402293991567,100338.93363624817,65212197498.0623,500000.68,962217.1234539783,740966.2510943171,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,UT,49,1m_plus,1000000.0,inf,7210.0,22499384000.0,0.004674139238783038,0.15428443914624032,1514460.0,141245443000.0,7078.79691156736,24414550852.831833,29,6608.266974530539,9004237854.544617,1362571.7437338086,1000114.3062452227,2424096.757810547,0.06488175971391327,385.90244259079606,0.11842388605673412,13216.533949061079,18008475709.089233,771.8048851815921,18,4237.74671267726,5486175125.810253,2450075.52,17,3886.2586702206427,5081238884.701215,47,10846.013687207796,14490412980.35487,1.5321831976115152,0.5935154436262805,10494.525644751182,14085476739.24583,1.4825295563434273,0.5769295869562172,54230.068436038986,72452064901.77435,1000000.0,2450075.52,3448968.9643357852,True,True,False,False,mean_out_of_range,False,False,False,False,False,2450075.52,141.91317396069655,survey,46.0,10704.1005132471,14142714986.868265,0.5792740186833237,False,mean_out_of_range,False +current,VA,51,100k_200k,100000.0,200000.0,818340.0,114540074000.0,0.1963354742122853,0.26835489542282787,4160340.0,410639684000.0,816822.326784339,123458958011.66893,768,429368.6289443888,60647714448.86057,141248.5923761225,100012.70434757129,199864.2458795209,0.0042817201538324955,1390.0959482770402,0.006813164575462482,858737.2578887776,121295428897.72115,2780.1918965540804,783,437435.57384457043,61200039288.399284,199804.32,755,415645.15877548954,58156533577.9763,1551,866804.2027889593,121847753737.25986,1.061190633955108,0.986949474543137,845013.7877198784,118804248026.83688,1.034513577813823,0.9622975111745873,4334021.013944796,609238768686.2993,100000.0,199864.2458795209,151145.42534323392,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VA,51,200k_500k,200000.0,500000.0,388790.0,111756124000.0,0.0932781839076599,0.2618324043415633,4160340.0,410639684000.0,388068.95963839383,120458230369.77316,457,233681.04275999946,68034195912.12231,291141.27148943086,200022.8612490445,494215.4344831103,0.006726070617915509,976.2717000765768,0.012317993324286116,467362.0855199989,136068391824.24461,1952.5434001531537,411,206752.23902885645,58005991976.16076,495701.36,389,194715.49673494988,54599807801.16942,868,440433.2817888559,126040187888.28307,1.1349356109266138,1.0463393617968224,428396.53949494933,122634003713.29172,1.103918591927922,1.0180624714213344,2202166.4089442794,630200939441.4153,200000.0,495701.36,310404.18816804426,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VA,51,500k_1m,500000.0,1000000.0,49620.0,32900926000.0,0.011904790466570859,0.07708327965672694,4160340.0,410639684000.0,49527.975969693405,35462820126.85819,71,34335.189975669055,22478628004.264217,654681.917303887,501160.7743548385,983158.7860654357,0.0307976391008252,779.5433333333333,0.05696010647166535,68670.37995133811,44957256008.528435,1559.0866666666666,39,19462.708864964014,11985054746.005154,952827.36,36,17533.167567932913,10982244366.665905,110,53797.89884063306,34463682750.26937,1.0862123433744286,0.971825777729614,51868.35754360197,33460872370.930122,1.0472537293940836,0.9435479821185493,268989.4942031653,172318413751.34686,501160.7743548385,983158.7860654357,716015.9371050858,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VA,51,1m_plus,1000000.0,inf,19040.0,53174870000.0,0.004568061476894582,0.12458291827166504,4160340.0,410639684000.0,19004.688884783605,57315433920.58533,36,19903.353001686744,41459233276.53853,2083027.5819870648,1006963.7091236128,13503190.231190326,0.21719172531743142,666.8499999999999,0.3867971198279722,39806.70600337349,82918466553.07706,1333.6999999999998,20,10815.364876892696,14309887001.860022,2276810.92,19,10347.77055787162,13131013594.202648,56,30718.717878579446,55769120278.39855,1.6163757304743283,0.9730209903962465,30251.123559558364,54590246870.74118,1.5917715750547954,0.9524528235515046,153593.58939289724,278845601391.99274,1006963.7091236128,13503190.231190326,3015857.5216917023,True,True,True,True,,False,False,False,False,False,13503190.231190326,666.8499999999999,puf,55.0,30051.867878579447,46764517872.729294,0.8159149233263228,True,,False +current,VT,50,100k_200k,100000.0,200000.0,59930.0,8224299000.0,0.17881545576607488,0.2929571967124302,336880.0,27149664000.0,60239.3507384753,8910884168.531477,523,33886.587578974766,4720318991.674651,139297.5607435732,100010.25990273057,199816.61093147082,0.0043952453932020324,123.80499999999999,0.007200466645013234,67773.17515794953,9440637983.349302,247.60999999999999,504,32417.078216913775,4482181330.835603,199950.96,482,30956.385218745727,4283266229.023574,1027,66303.66579588855,9202500322.510254,1.1006703256769985,1.0327258382516755,64842.97279772049,9003585220.698225,1.0764221725966383,1.0104031261560014,331518.3289794427,46012501612.55127,100000.0,199950.96,147924.6382853199,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VT,50,200k_500k,200000.0,500000.0,19010.0,5397017000.0,0.05672087125167835,0.1922467764035974,336880.0,27149664000.0,19108.1271072654,5847573555.21671,247,15498.596432498465,4575343193.144066,295210.1639055643,200022.8612490445,499889.1958429595,0.011007813206450449,113.26706793339629,0.018779249586618127,30997.19286499693,9150686386.288132,226.53413586679258,188,11589.941874414439,3266965346.935578,489495.48,179,11088.045597124106,3131604516.8332133,435,27088.538306912906,7842308540.079643,1.417644866754793,1.3411218287426927,26586.64202962257,7706947709.97728,1.3913787510610416,1.3179736239660966,135442.69153456454,39211542700.39822,200000.0,499889.1958429595,306025.46876471804,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VT,50,500k_1m,500000.0,1000000.0,2650.0,1772000000.0,0.00790690735491571,0.06312029178102915,336880.0,27149664000.0,2663.6789497240043,1919931017.4201806,34,2078.2628615276885,1423453306.1403036,684924.5745044745,505622.81933958456,984478.662277113,0.050616975145378135,123.42999999999999,0.07355264637963572,4156.525723055377,2846906612.280607,246.85999999999999,22,1359.0448353982717,836699618.0567997,892668.0,18,1060.4397316603752,627984343.8827521,56,3437.307696925961,2260152924.197103,1.2904361831151294,1.1772052764864855,3138.7025931880635,2051437650.0230556,1.1783336702470388,1.0684954987495232,17186.538484629804,11300764620.985516,500013.6,984478.662277113,720781.6909087761,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,VT,50,1m_plus,1000000.0,inf,1060.0,2725790000.0,0.0031627629419662836,0.09709518066242181,336880.0,27149664000.0,1065.4715798896016,2953345805.8542633,18,1091.4991515261283,1719892257.3979218,1575715.6155304175,1102546.4566354712,4277047.810939148,0.2094226841454338,84.21333333333332,0.4391695533785714,2182.9983030522567,3439784514.7958436,168.42666666666665,8,513.567801873538,622904708.3528328,1599176.36,8,513.567801873538,620863412.3748012,26,1605.066953399666,2342796965.7507544,1.506438072769594,0.7932687601657585,1605.0669533996663,2340755669.772723,1.5064380727695943,0.7925775793450145,8025.33476699833,11713984828.753773,1057341.72,4277047.810939148,2771867.2760471688,True,True,True,True,,False,False,False,False,False,4277047.810939148,84.21333333333332,puf,25.0,1520.853620066333,1982612512.7655323,0.6713106568270817,False,mean_out_of_range,False +current,WA,53,100k_200k,100000.0,200000.0,798150.0,111566500000.0,0.211045271015286,0.25686316119269464,3757410.0,416412736000.0,792983.6117655458,119833431275.18062,759,377324.35459295096,52766736623.941795,139844.50243309993,100022.8089622065,199995.1149964993,0.0036542758100511184,1142.937983677023,0.00603015032678394,754648.7091859019,105533473247.88359,2285.875967354046,746,368620.69386813755,51694695033.08523,199796.28,732,361742.2159918736,50496311806.59975,1505,745945.0484610886,104461431657.02702,0.9406815442254503,0.8717219439135148,739066.5705848245,103263048430.54153,0.9320073701640855,0.8617215357324824,3729725.2423054427,522307158285.13513,100000.0,199995.1149964993,151117.15992260716,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WA,53,200k_500k,200000.0,500000.0,381320.0,111273945000.0,0.10082789293184095,0.25618960235448845,3757410.0,416412736000.0,378851.7331810285,119519198333.51166,481,225350.66083103084,65442282248.48668,290401.99841062666,200024.88217197155,498364.1429649174,0.005910453740029853,911.3738325183641,0.010296460632430237,450701.3216620617,130884564496.97336,1822.7476650367282,417,193972.28634243505,55538200661.93635,484726.0,400,186020.11220781592,53036467270.23448,898,419322.94717346586,120980482910.42303,1.1068259966837708,1.012226358587461,411370.7730388468,118478749518.72116,1.0858357954041076,0.9912947139095831,2096614.7358673294,604902414552.1152,200000.68,498364.1429649174,315477.5017919774,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WA,53,500k_1m,500000.0,1000000.0,67020.0,44630153000.0,0.01772129808111817,0.10275344466388767,3757410.0,416412736000.0,66586.18262297423,47937188782.71072,93,45233.849020205904,29806525016.79259,658942.9301821751,500596.75952317537,994059.3467315907,0.022007401723313277,764.538720021424,0.03819003476359896,90467.69804041181,59613050033.58518,1529.077440042848,70,34690.899234443474,21593022340.288876,861992.72,63,31151.06159815639,19503119684.53119,163,79924.74825464938,51399547357.08147,1.2003203233199458,1.072226984149298,76384.9106183623,49309644701.32378,1.1471585786929797,1.0286302962994789,399623.74127324694,256997736785.40735,500596.75952317537,994059.3467315907,719926.9712477998,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WA,53,1m_plus,1000000.0,inf,23370.0,60595722000.0,0.006179449957560902,0.1395114905251461,3757410.0,416412736000.0,23218.72706503891,65085785498.845535,42,18785.132001870938,27057826451.566616,1440385.217887835,1020214.2434189179,2925122.89599132,0.050858629186781384,491.17105230104187,0.10697275418313361,37570.264003741875,54115652903.13323,982.3421046020837,17,7699.3236149253735,10077246685.38643,2091029.2000000002,16,7116.543987151381,9374510006.370962,59,26484.455616796306,37135073136.95306,1.1406506283746578,0.5705558111088902,25901.67598902232,36432336457.93758,1.1155510772174586,0.5597587273273946,132422.27808398154,185675365684.7653,1000510.0,2925122.89599132,2803159.07571208,True,True,True,True,,False,False,False,False,False,2925122.89599132,385.4030207076997,puf,58.0,26099.05259608861,36007721936.89674,0.5532348063546907,False,mean_out_of_range,False +current,WI,55,100k_200k,100000.0,200000.0,562410.0,76968654000.0,0.1909951335142276,0.3019089530541686,2940980.0,245188540000.0,561712.8677626731,82933181778.6864,536,280757.1735331486,39645597351.24869,141209.56145958562,100022.8089622065,199311.65100220373,0.00479820491964292,958.4733333333332,0.008157419691169225,561514.3470662972,79291194702.49738,1916.9466666666665,509,262332.80067422707,36672569924.523605,199485.68,503,257753.52460501314,36151966029.289986,1045,543089.9742073757,76318167275.77231,0.9668462400915379,0.9202368176278733,538510.6981381618,75797563380.53867,0.9586938969069259,0.9139594279984375,2715449.8710368783,381590836378.8616,100000.0,199485.68,147643.3717977886,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WI,55,200k_500k,200000.0,500000.0,159080.0,44879178000.0,0.05402376529479086,0.17603823036728272,2940980.0,245188540000.0,158882.813256674,48356997735.10427,249,124055.69012783337,35094758835.20778,282895.19649638265,200154.22123930245,493536.56459451315,0.011334653036992229,983.2066666666666,0.019830787948268216,248111.38025566674,70189517670.41556,1966.4133333333332,211,105892.10390831027,29208426723.495865,487209.0,191,94672.8404446072,26070817675.54723,460,229947.7940361436,64303185558.70364,1.4472792199661308,1.3297596743071458,218728.53057244056,61165576510.755005,1.3766657707595236,1.2648753929227594,1149738.970180718,321515927793.5182,200010.2,493536.56459451315,304356.37904386735,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WI,55,500k_1m,500000.0,1000000.0,21750.0,14544149000.0,0.007386326974866112,0.05704931253772261,2940980.0,245188540000.0,21723.039906541737,15671217958.849848,50,23859.8970000063,15549657873.733858,651706.8314976278,503280.6061425887,873526.1766181096,0.038830129140020285,723.601763029781,0.0668546330159963,47719.7940000126,31099315747.467716,1447.203526059562,30,13219.268070358648,8426669935.003896,997674.0,28,11984.59516697495,7605452570.823157,80,37079.16507036495,23976327808.73775,1.7069049833673982,1.529959437211314,35844.49216698125,23155110444.557014,1.6500679610769824,1.4775565310468333,185395.82535182475,119881639043.68875,502000.0,997674.0,721409.9880252291,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WI,55,1m_plus,1000000.0,inf,9770.0,29043605000.0,0.003317904116985835,0.11392331712685033,2940980.0,245188540000.0,9757.889649973002,31294279525.44637,18,9448.520571904113,14467396597.578827,1531181.1502637481,1007824.1994646289,3309200.834355031,0.15761045052163672,825.5545304915129,0.28983747709379265,18897.041143808226,28934793195.157654,1651.1090609830258,5,2780.210648504565,3187676257.0233493,1393019.0,5,2780.210648504565,3165957463.180747,23,12228.731220408677,17655072854.602177,1.2532147481748281,0.5641629435899388,12228.731220408677,17633354060.759575,1.2532147481748281,0.5634689255722067,61143.65610204339,88275364273.01088,1000000.0,3309200.834355031,3207074.546649844,True,True,True,True,,False,False,False,False,False,3309200.834355031,362.28666666666663,puf,22.0,11866.44455374201,16456193514.993141,0.5258530876741255,False,mean_out_of_range,False +current,WV,54,100k_200k,100000.0,200000.0,122970.0,16583210000.0,0.15816280595248813,0.3129470084179094,776010.0,50488126000.0,122735.91904719031,17701587788.770992,619,66140.28379574249,9139273079.362259,138180.13100135143,100006.19287242476,199984.85895635295,0.004287808375984143,227.8210264687401,0.0064965383412542484,132280.56759148499,18278546158.724518,455.6420529374802,581,61039.185359035786,8332981181.819972,199480.36,561,58899.26647113211,8077281496.148703,1200,127179.46915477829,17472254261.18223,1.0362041539435534,0.9870444657097801,125039.5502668746,17216554575.510963,1.018769006152132,0.9725994515832241,635897.3457738914,87361271305.91116,100000.0,199984.85895635295,144224.99889347772,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WV,54,200k_500k,200000.0,500000.0,27070.0,7502011000.0,0.03481716806647031,0.14157282574171398,776010.0,50488126000.0,27018.470591261626,8007949384.276364,198,20231.067014856024,5603462663.582577,276973.1650568829,200066.16783271145,480012.07791994937,0.012542688617788119,172.04024055303486,0.023037056537774003,40462.13402971205,11206925327.165154,344.0804811060697,148,14913.172244125082,3921841837.104858,470001.36,130,12935.396552710954,3375164513.321848,346,35144.239258981106,9525304500.687435,1.3007486541576314,1.1894811072845195,33166.46356756698,8978627176.904425,1.2275477790476323,1.1212142767203286,175721.19629490553,47626522503.43718,200006.8,480012.07791994937,296387.96012629644,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WV,54,500k_1m,500000.0,1000000.0,3290.0,2204033000.0,0.004231565679301341,0.041593004840700325,776010.0,50488126000.0,3283.7372827946338,2352673797.1025085,35,3919.7193904597925,2586388968.0747023,659840.3381552557,501283.6569079612,976992.9912297912,0.06245444110656889,204.67663133717923,0.09447788695959904,7839.438780919585,5172777936.149405,409.35326267435846,15,1939.3128633399647,1280315476.432811,894483.4,14,1819.7969743261638,1177254571.5037978,50,5859.032253799758,3866704444.5075135,1.7842573108690998,1.6435361541704785,5739.516364785956,3763643539.5785,1.7478610103367724,1.5997302916425153,29295.16126899879,19333522222.537567,501283.6569079612,976992.9912297912,716462.2484964019,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WV,54,1m_plus,1000000.0,inf,1240.0,3107850000.0,0.0015948758183384996,0.05864922171953438,776010.0,50488126000.0,1237.639583788859,3317444548.3915315,17,1852.5881194858393,4013109918.7761726,2166218.101349995,1059124.7992797098,9744778.5647615,0.20103108107369116,82.78893358916176,0.33509076005980026,3705.1762389716787,8026219837.552345,165.57786717832352,10,1125.4217730367222,1404638051.3549938,2847267.6,10,1125.4217730367222,1399482056.1813345,27,2978.009892522562,5417747970.131166,2.406201233000164,1.6331088255138946,2978.0098925225616,5412591974.957507,2.4062012330001634,1.6315546186240886,14890.04946261281,27088739850.65583,1030774.8,9744778.5647615,2680460.9288882334,True,True,True,True,,False,False,True,False,True,9744778.5647615,82.78893358916176,puf,26.0,2895.2209589333997,4610988144.6920395,1.3899216934696572,True,,False +current,WY,56,100k_200k,100000.0,200000.0,57590.0,7888421000.0,0.20396670798654154,0.25240162301452307,280750.0,30549840000.0,57263.65326722154,8638796649.596874,552,28977.921773840862,4024545650.9698887,138883.17051787174,100022.8089622065,199601.43357941834,0.004391049761799673,96.98333333333332,0.007517532775052554,57955.843547681725,8049091301.939777,193.96666666666664,519,26628.192802618512,3672510198.0456214,199516.0,495,25375.451553345956,3487391854.7910833,1071,55606.11457645938,7697055849.015511,0.9710542622380861,0.8909870391930906,54353.37332718682,7511937505.760972,0.9491775362907102,0.8695583204995934,278030.5728822969,38485279245.07755,100000.0,199601.43357941834,150860.03348902354,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WY,56,200k_500k,200000.0,500000.0,15500.0,4381357000.0,0.054896405170887196,0.14018795622166233,280750.0,30549840000.0,15412.16575172658,4798127809.391488,188,9817.82465887261,2732435256.5009413,278313.71525173576,200022.8612490445,485982.043249832,0.012853587327688324,76.04666666666667,0.026571758528712353,19635.64931774522,5464870513.001883,152.09333333333333,145,7556.659264736294,1979158844.0043168,474648.8,127,6683.721965653912,1709998609.3852253,333,17374.483923608906,4711594100.505258,1.127322675053796,0.9819651096586348,16501.546624526523,4442433865.886167,1.0706831791422893,0.925868180749768,86872.41961804453,23557970502.526287,200000.0,485982.043249832,311320.8024546432,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WY,56,500k_1m,500000.0,1000000.0,2410.0,1634199000.0,0.008535505578183106,0.05228859868517547,280750.0,30549840000.0,2396.343191074907,1789650025.7750647,29,1368.1537158267536,857851910.7073076,627014.2753578835,512171.0322905025,920105.1617456047,0.061924781229265674,83.75166666666667,0.09969891822235843,2736.307431653507,1715703821.4146152,167.50333333333333,12,542.3280103876401,350237381.0480898,920000.0,13,610.9396011223125,395973712.8128186,41,1910.4817262143933,1208089291.7553973,0.7972487969711155,0.675042200629252,1979.093316949066,1253825623.520126,0.8258805851850133,0.7005982205806508,9552.408631071967,6040446458.776987,512171.0322905025,920105.1617456047,746825.4265251118,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +current,WY,56,1m_plus,1000000.0,inf,1730.0,9317608000.0,0.006127147157782894,0.29813056146637007,280750.0,30549840000.0,1720.1965645475475,10203933179.106064,10,510.4780601956929,735453252.7438661,1440714.7144814187,1000397.5186330611,2679498.995954483,0.25593532389582,70.24763462700443,0.5244170723355129,1020.9561203913858,1470906505.4877322,140.49526925400886,9,475.35215386488744,524089151.1764771,1462336.0,6,289.3538964635483,326262896.31856245,19,985.8302140605804,1259542403.9203432,0.5730916073070272,0.12343695140021368,799.8319566592412,1061716149.0624285,0.4649654424054823,0.10404969636967402,4929.151070302902,6297712019.601716,1000397.5186330611,2679498.995954483,5931841.3891786495,True,False,False,False,amount_cap|mean_out_of_range,False,False,False,False,False,2679498.995954483,70.24763462700443,puf,18.0,915.582579433576,1071313937.4691075,0.10499029331775397,False,amount_cap|mean_out_of_range,False +demographic_midrank6_earn,AK,02,100k_200k,100000.0,200000.0,72120.0,10028423000.0,0.20727711674426624,0.3199851628615256,348250.0,30289519000.0,72184.25590619072,10858613770.685642,480,34092.88072450682,4716524912.240611,138343.39639273295,100034.3888173803,199957.1373796083,0.0054041324925502236,129.45999999999998,0.00959483786593535,68185.76144901363,9433049824.481222,258.91999999999996,477,34446.28783107328,4829864871.900757,199808.68,457,32954.97155840823,4601843387.096263,957,68539.16855558008,9546389784.141369,0.9495030141289019,0.8791536365270853,67047.85228291505,9318368299.336874,0.9288431589576701,0.8581545026026363,342695.8427779004,47731948920.70685,100000.0,199957.1373796083,150429.11552343614,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AK,02,200k_500k,200000.0,500000.0,24460.0,6808021000.0,0.07029947692130827,0.21722914045904193,348250.0,30289519000.0,24481.7928378456,7371614717.659699,157,11909.734849751916,3280221506.999077,275423.5546282884,201106.5356483012,494099.19167168206,0.01782243618016887,179.73601038200735,0.029288422528845448,23819.469699503832,6560443013.998154,359.4720207640147,223,16290.245853620207,4437560538.973768,497843.36,203,14718.662144223279,3990690407.561447,380,28199.980703372123,7717782045.972844,1.1518756363209925,1.0469594982336576,26628.396993975195,7270911914.560524,1.087681656745793,0.9863391119915792,140999.90351686062,38588910229.86422,200000.0,497843.36,301106.00013999635,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AK,02,500k_1m,500000.0,1000000.0,2870.0,1915583000.0,0.00824854860033339,0.06112208651647122,348250.0,30289519000.0,2872.5570500661033,2074162203.0394325,14,1136.1650627955185,787985075.9485289,693548.0607102127,522851.5625951146,982860.6002249272,0.14661489510365483,117.54499999999999,0.2581045588598689,2272.330125591037,1575970151.8970578,235.08999999999997,14,1290.4213372674158,899698798.2563313,993613.0,14,1290.4213372674158,859768797.745878,28,2426.586400062934,1687683874.2048602,0.8447478527909805,0.8136701516071234,2426.5864000629344,1647753873.694407,0.8447478527909807,0.7944190050709747,12132.93200031467,8438419371.024302,503222.8,993613.0,722061.2739411744,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AK,02,1m_plus,1000000.0,inf,1080.0,2528808000.0,0.0031039834454216243,0.08068876230345777,348250.0,30289519000.0,1080.9622348680807,2738152286.976728,13,1005.3331649292764,2222364117.103596,2210574.7573342375,1029464.6820943941,9019612.873113945,0.2841605434730095,70.015,0.4613631184218627,2010.666329858553,4444728234.207192,140.03,10,802.0532521890672,935870221.1120284,1950003.4,8,637.5125607349346,760796045.8711413,23,1807.3864171183438,3158234338.215625,1.6720162451733709,1.1534180743842855,1642.845725664211,2983160162.9747376,1.519799371959282,1.0894792729985554,9036.93208559172,15791171691.078125,1000895.04,9019612.873113945,2533069.3327236255,True,True,True,True,,False,False,False,False,False,9019612.873113945,70.015,puf,22.0,1737.3714171183437,2526726142.904552,0.9227851039995961,True,,False +demographic_midrank6_earn,AL,01,100k_200k,100000.0,200000.0,337310.0,46273164000.0,0.15755964948338036,0.2777399863679626,2149560.0,159215844000.0,338683.9201434951,49542379432.97288,678,198984.76815837016,27250655121.315853,136948.44773056853,100063.38499946671,199993.75000161887,0.00398082561617923,664.6133333333333,0.005715146026852228,397969.5363167403,54501310242.63171,1329.2266666666667,620,179324.70705922286,24438373441.8444,199618.36,605,174844.95602389995,23703453288.31297,1298,378309.475217593,51689028563.16025,1.1169986312232043,1.04332955249135,373829.7241822701,50954108409.62882,1.1037716937488036,1.0284953809811639,1891547.376087965,258445142815.80124,100000.0,199993.75000161887,146279.10121030413,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AL,01,200k_500k,200000.0,500000.0,102970.0,28835057000.0,0.04809794286354889,0.17307328148339768,2149560.0,159215844000.0,103389.41406177015,30872263994.42667,210,59530.73411554198,16915066112.88686,284140.05579129525,200079.338317216,497286.47443977586,0.013641211723661208,564.8266666666666,0.023513388421455773,119061.46823108396,33830132225.77372,1129.6533333333332,225,64525.55820799478,17794868985.238434,485893.0,220,62892.02590178503,17162150745.562168,435,124056.29232353676,34709935098.12529,1.1998935621147748,1.1243080554244882,122422.760017327,34077216858.449028,1.1840937597749162,1.1038133408227186,620281.4616176838,173549675490.62646,200000.0,497286.47443977586,298601.78892185225,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AL,01,500k_1m,500000.0,1000000.0,13670.0,9198596000.0,0.006385344070551746,0.05521165415972842,2149560.0,159215844000.0,13725.680200295212,9848480066.81857,20,5523.557433531112,3474257930.7783213,628989.1926691327,506652.9063668878,982622.0572780576,0.09723295402799506,343.78666666666663,0.23287560544672925,11047.114867062224,6948515861.556643,687.5733333333333,21,6033.990834712825,3631929795.856325,940814.92,17,5131.529249652672,2941327691.302324,41,11557.548268243936,7106187726.634646,0.8420382887833389,0.7215517194959621,10655.086683183785,6415585622.080645,0.7762884263436806,0.6514290102181342,57787.74134121968,35530938633.17323,500000.0,982622.0572780576,717522.1863763625,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AL,01,1m_plus,1000000.0,inf,6570.0,19010645000.0,0.0030688888473683227,0.11410536532894479,2149560.0,159215844000.0,6596.760710749052,20353753805.457275,22,5371.213719528707,17525487938.24563,3262854.3292787443,1055690.03208747,36855448.37377946,0.36156907011826056,171.93317831695256,0.507207677558397,10742.427439057414,35050975876.49126,343.8663566339051,19,4938.266470688135,5932706378.396601,2073417.4,18,4561.2808249050295,5395832280.355074,41,10309.480190216844,23458194316.64223,1.5628094821475218,1.1525242243203604,9932.494544433735,22921320218.6007,1.5056623970381844,1.1261470703480263,51547.400951084215,117290971583.21115,1014300.0,36855448.37377946,3085416.4184388216,True,True,True,True,,False,False,False,False,False,36855448.37377946,171.93317831695256,puf,40.0,10137.54701189989,17121519939.441965,0.8411971621102796,True,,False +demographic_midrank6_earn,AR,05,100k_200k,100000.0,200000.0,184970.0,25143019000.0,0.14314458400080485,0.24477600092236568,1295860.0,95807833000.0,185495.34062328297,26273747409.574898,613,121191.62057475785,16364426494.965279,135029.3561333374,100028.73711609327,198903.35687548007,0.0038167519780601344,378.7497054515345,0.00660535777540221,242383.2411495157,32728852989.930557,757.499410903069,562,109613.62239580293,15256715047.44149,199068.0,541,104588.39383016556,14477698667.500599,1175,230805.2429705608,31621141542.40677,1.2442643690942963,1.2035261300747349,225780.01440492342,30842125162.465878,1.217173507681001,1.1738761388573802,1154026.2148528039,158105707712.03384,100000.0,199068.0,141641.010072234,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AR,05,200k_500k,200000.0,500000.0,55710.0,15903490000.0,0.043112854920715996,0.1548259850143228,1295860.0,95807833000.0,55868.22417755903,16618699575.842514,153,30185.547912342437,8490408080.572322,281273.9429222259,200129.2187691291,488669.1167505768,0.01633736404470748,425.3669290886247,0.031339838241504964,60371.095824684875,16980816161.144644,850.7338581772494,155,29173.615403372918,8115371081.516266,499681.36,145,27370.85486000207,7536663000.7138195,308,59359.163315715356,16605779162.088587,1.062485235382845,0.9992225376182436,57556.4027723445,16027071081.28614,1.0302171515138936,0.9643998321375047,296795.8165785768,83028895810.44293,200000.0,499681.36,297462.4631530325,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AR,05,500k_1m,500000.0,1000000.0,8210.0,5514101000.0,0.006353554817789954,0.05368168363003732,1295860.0,95807833000.0,8233.31754618129,5762080395.551717,19,3606.1394896481347,2588847330.9779296,717899.9421429851,546150.0313253157,966990.665846648,0.09446636659202454,353.87,0.12051324987517738,7212.278979296269,5177694661.955859,707.74,12,2535.7066967808414,1625777309.0600111,827513.08,11,2357.9666967808416,1497737954.6442604,31,6141.846186428977,4214624640.037941,0.7459746514061805,0.7314414847962899,5964.106186428977,4086585285.62219,0.7243867557610723,0.7092204559965882,30709.230932144885,21073123200.189705,500000.68,966990.665846648,699849.1632603479,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AR,05,1m_plus,1000000.0,inf,3420.0,17657157000.0,0.002646669607410675,0.17189854082830527,1295860.0,95807833000.0,3429.7132774591973,18451232248.172237,14,2570.109686137893,6004077512.730783,2336117.2268694565,1033413.4803480797,18367522.455692887,0.3873983216236325,126.63490990365885,0.6404645449484518,5140.219372275786,12008155025.461567,253.2698198073177,10,1969.3470381924483,2290176546.512284,2200012.96,10,1969.3470381924483,2289030225.0917234,24,4539.456724330341,8294254059.243068,1.3235674113531917,0.4495230425634412,4539.456724330341,8293107737.822507,1.3235674113531917,0.4494609154705109,22697.283621651703,41471270296.21534,1010880.0,18367522.455692887,5379817.715211837,True,True,True,True,,False,False,False,False,False,18367522.455692887,126.63490990365885,puf,23.0,4412.821814426683,5968284507.91297,0.3234626515800419,False,mean_out_of_range,False +demographic_midrank6_earn,AZ,04,100k_200k,100000.0,200000.0,567820.0,78260266000.0,0.1674481424468154,0.258134759792734,3373850.0,287127454000.0,564944.9153941881,83037330213.79538,625,312934.8527695419,43150491335.30071,137889.69478282597,100144.64496746776,199282.61079643155,0.004344480767834303,983.0152684952828,0.007520022545364252,625869.7055390838,86300982670.60143,1966.0305369905657,590,295863.2625008974,40663017765.7142,198917.68,571,282692.03165020427,38753822651.60279,1215,608798.1152704393,83813509101.01492,1.0776238508946536,1.009347348779412,595626.8844197462,81904313986.9035,1.054309664870866,0.9863553389303978,3043990.5763521967,419067545505.0746,100000.0,199282.61079643155,146983.05613717472,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AZ,04,200k_500k,200000.0,500000.0,204990.0,58519083000.0,0.06045083780101562,0.19302016470907551,3373850.0,287127454000.0,203952.05911495656,62091130879.615204,185,92418.79233236346,25446044873.018936,275334.09851870756,201169.28933982362,497934.39031910297,0.016823391092742043,969.0483333333333,0.03364973577865381,184837.58466472692,50892089746.03787,1938.0966666666666,224,112003.32488096142,31133604561.709717,491090.0,209,104137.43431787501,28781969664.678772,409,204422.11721332488,56579649434.72865,1.0023047479903273,0.9112356085835764,196556.22665023847,54228014537.69771,0.9637373974216683,0.8733616825700465,1022110.5860666244,282898247173.64325,200000.0,497934.39031910297,304439.83330718835,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AZ,04,500k_1m,500000.0,1000000.0,29880.0,20029953000.0,0.008811508041828122,0.06606707810467641,3373850.0,287127454000.0,29728.706406921807,21252596067.432247,31,17030.48951087482,10845365224.323654,636820.5222403235,501285.4210636946,886803.9583904942,0.058504023154640324,847.1571611486024,0.10517932086632664,34060.97902174964,21690730448.64731,1694.3143222972049,30,14928.496649956216,9077654664.113232,910480.08,29,14403.5719671015,8576789146.570451,61,31958.986160831028,19923019888.43689,1.075021083103365,0.9374393521254178,31434.06147797632,19422154370.894104,1.0573639178143805,0.9138720892859232,159794.93080415513,99615099442.18445,500268.68,910480.08,714884.6564842106,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,AZ,04,1m_plus,1000000.0,inf,14180.0,45796317000.0,0.004181632665097817,0.15105521476488337,3373850.0,287127454000.0,14108.201367140271,48591757882.661064,22,10599.015290125353,34990060778.26507,3301255.8073072885,1037870.0922781207,11365735.468112998,0.21466119895919777,660.8466666666666,0.2808474009439998,21198.030580250706,69980121556.53014,1321.6933333333332,11,5876.469823582646,8199709878.210753,2155028.3200000003,10,5559.174823582646,7764055815.179177,33,16475.485113707997,43189770656.47583,1.1677948651967371,0.8888291458969255,16158.190113707999,42754116593.444244,1.1453047552427484,0.8798635500425092,82377.42556853998,215948853282.37915,1037870.0922781207,11365735.468112998,3444220.6074430733,True,True,True,True,,False,False,False,False,False,11365735.468112998,660.8466666666666,puf,32.0,15814.638447041332,35678762258.15825,0.7342554336954633,True,,False +demographic_midrank6_earn,CA,06,100k_200k,100000.0,200000.0,3252990.0,453934849000.0,0.17600569193228116,0.22134471029512734,18487690.0,1987000701000.0,3253938.670679515,492741720846.0508,3661,1726793.2795508697,239473808529.67456,138681.22569480957,100008.49325183225,199980.2349844821,0.0008897756432160718,1341.3933333333332,0.0015023612724190175,3453586.5591017394,478947617059.3491,2682.7866666666664,3428,1639418.2520879824,227725359541.59036,199986.0,3324,1583764.675215677,218892508698.46567,7089,3366211.5316388514,467199168071.2649,1.0345036807150056,0.9481623907735505,3310557.9547665464,458366317228.14026,1.0174002308639725,0.9302364663603337,16831057.65819426,2335995840356.324,100000.0,199986.0,151429.32019156718,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CA,06,200k_500k,200000.0,500000.0,1626920.0,477270483000.0,0.08802584093970989,0.23272347788404874,18487690.0,1987000701000.0,1627394.459282665,518072317251.07275,1518,722888.0976048999,211969037100.75153,293225.2416425935,200022.8612490445,499933.15533837216,0.002784248746653476,1261.3316666666665,0.005014113141985694,1445776.1952097998,423938074201.50305,2522.663333333333,1783,851007.2026135796,243845460102.59082,497219.2,1704,810585.8703272371,231738400172.2893,3301,1573895.3002184795,455814497203.34235,0.9671258810308551,0.8798279352618672,1533473.967932137,443707437273.04083,0.9422878142328646,0.8564584952683496,7869476.501092398,2279072486016.712,200000.0,499933.15533837216,318344.64858595654,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CA,06,500k_1m,500000.0,1000000.0,317160.0,213715326000.0,0.017160201922920847,0.10421045448109822,18487690.0,1987000701000.0,317252.4934883645,231985840559.27975,255,116625.26789518281,79783122740.86862,684098.0876680503,500930.68074849487,994329.5817083254,0.009009371231907237,760.6274813681191,0.015831778570725562,233250.53579036563,159566245481.73724,1521.2549627362382,269,129606.66803546494,86044428882.48149,991818.6799999999,240,114702.5010677051,75571412149.70258,524,246231.93593064777,165827551623.3501,0.7761386938939174,0.7148175562075991,231327.76896288793,155354534890.5712,0.7291598134322372,0.6696724874071492,1231159.679653239,829137758116.7505,500000.0,994329.5817083254,731234.0968812213,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CA,06,1m_plus,1000000.0,inf,132720.0,400221114000.0,0.007180924452043306,0.19515317391356118,18487690.0,1987000701000.0,132758.70518279652,434436000817.56104,140,68407.88631255171,322802373205.07153,4718788.879548273,1010421.9416061614,239981461.1298356,0.28913538935887007,388.91999999999996,0.3653564627046506,136815.77262510342,645604746410.1431,777.8399999999999,108,53507.29216257929,69490312656.51846,3160005.48,102,50344.335864136316,64588769577.8262,248,121915.17847513099,392292685861.58997,0.9183215391206551,0.9029930418366297,118752.22217668802,387391142782.8977,0.8944966886591516,0.8917104983331721,609575.892375655,1961463429307.9497,1000000.68,239981461.1298356,3272372.988418218,True,True,True,True,,False,False,False,False,False,239981461.1298356,388.91999999999996,puf,247.0,121526.258475131,298959095998.9743,0.6881545162840234,True,,False +demographic_midrank6_earn,CO,08,100k_200k,100000.0,200000.0,581520.0,81135957000.0,0.18838743954153614,0.25829961207762075,2972380.0,297676269000.0,559959.0575444712,86143028408.32648,569,312760.40747765184,43038877283.11988,137609.73657190034,100153.89538640706,199122.30999819026,0.0054660092839552655,1206.235898209532,0.009744870009462808,625520.8149553037,86077754566.23976,2412.471796419064,565,309786.1441913132,43285888407.5609,199191.36,554,301955.6431578521,42273761845.70089,1134,622546.551668965,86324765690.68079,1.1117715541542486,1.002109715501211,614716.050635504,85312639128.82077,1.0977874941985093,0.9903603426203038,3112732.7583448254,431623828453.40393,100000.0,199191.36,153838.0837807684,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CO,08,200k_500k,200000.0,500000.0,257510.0,74198170000.0,0.08342215152761895,0.23621288558745118,2972380.0,297676269000.0,247962.334757664,78777095907.74701,220,114548.711319934,32015062999.008972,279488.63527229964,200853.78562150232,499785.29412644776,0.010841806591928158,934.9126862897944,0.019198784841835154,229097.422639868,64030125998.017944,1869.8253725795887,283,148922.4648858587,41937931417.28938,496561.36,265,138821.98294622503,38977830955.05299,503,263471.1762057927,73952994416.29837,1.062545150106308,0.9387626386088417,253370.69426615903,70992893954.06197,1.021811213843347,0.9011869901525585,1317355.8810289635,369764972081.4918,200000.0,499785.29412644776,317697.8309416897,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CO,08,500k_1m,500000.0,1000000.0,38030.0,25370899000.0,0.012320082414645446,0.08076928666485682,2972380.0,297676269000.0,36619.96656764383,26936590805.255203,21,12867.099387218406,9091127451.634668,706540.5479548392,510721.3072911734,954473.9081067834,0.11732055946184522,1394.3763504611175,0.13899423353415213,25734.198774436813,18182254903.269337,2788.752700922235,17,8404.345746841505,5973596769.111459,980514.24,15,7530.3213818583345,5517635468.550416,38,21271.44513405991,15064724220.746126,0.5808701407405065,0.5592661792154882,20397.42076907674,14608762920.185085,0.5570027141176915,0.5423389702803438,106357.22567029955,75323621103.73064,507878.08,980514.24,735571.1468359304,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CO,08,1m_plus,1000000.0,inf,15610.0,47266883000.0,0.005056967827836324,0.15047604039499143,2972380.0,297676269000.0,15031.230032104131,50183822260.727684,15,7423.608717939905,71661566549.08746,9653198.231731962,1006729.1472210533,125397728.4296138,0.7587054726183184,433.5806030785683,0.8396350683483795,14847.21743587981,143323133098.17493,867.1612061571366,13,7617.498400192488,9824303047.565695,2027867.6,12,6978.775056734023,9017215747.798136,28,15041.107118132391,81485869596.65315,1.0006571043093058,1.623747772206293,14402.383774673926,80678782296.8856,0.9581640187737732,1.6076651530790698,75205.53559066195,407429347983.26575,1000067.68,125397728.4296138,3338637.1011250336,True,True,True,True,,False,False,False,False,False,125397728.4296138,433.5806030785683,puf,27.0,14607.526515053823,27115846879.458687,0.5403304423202279,True,,False +demographic_midrank6_earn,CT,09,100k_200k,100000.0,200000.0,346700.0,48601609000.0,0.1902415469540501,0.21907630202483674,1823240.0,217323692000.0,346855.9980685023,53340200502.92582,467,187275.69600970944,26012443073.173203,138899.19315437798,100183.89787502098,199910.91699217993,0.0059199320109075155,877.0000633170466,0.00909993678710283,374551.3920194189,52024886146.346405,1754.0001266340932,459,185776.04340216832,25801077183.39982,199435.0,449,182354.50644972283,25519256539.22057,926,373051.7394118777,51813520256.57302,1.0755233915205407,0.9713784306778326,369630.2024594323,51531699612.39377,1.0656589608302873,0.9660949738943547,1865258.6970593885,259067601282.8651,100000.35999999999,199910.91699217993,153781.97522878472,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CT,09,200k_500k,200000.0,500000.0,164030.0,47639359000.0,0.0900066943953644,0.21473887007637185,1823240.0,217323692000.0,164103.80548940419,52284132422.259186,174,64582.98734392067,19052324550.979523,295005.31540173414,200366.51440020083,495933.89537498687,0.012331672690964371,510.1683333333333,0.02166220268885893,129165.97468784134,38104649101.959045,1020.3366666666666,227,85390.16696983099,24679510270.717487,499145.6,207,75957.89480489532,22381042480.62805,401,149973.15431375167,43731834821.69701,0.9138919957796781,0.8364265178679494,140540.882148816,41433367031.607574,0.8564145220745073,0.7924654213821848,749865.7715687584,218659174108.48505,200000.0,499145.6,318604.0218039615,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CT,09,500k_1m,500000.0,1000000.0,30840.0,20858997000.0,0.01692255352772687,0.09402388152843177,1823240.0,217323692000.0,30853.876493892738,22892721149.82712,34,13135.161077551358,8865273431.832596,674926.8912266168,512253.1660839974,984282.1694202507,0.15164843986707033,1440.483383892624,0.2716477884717155,26270.322155102716,17730546863.66519,2880.966767785248,32,11135.513305922732,7194801114.931974,984077.32,28,9773.603153426993,6363961131.912221,66,24270.674383474085,16060074546.76457,0.7866329013237042,0.7015362849027604,22908.76423097835,15229234563.744816,0.7424922516790701,0.6652435271487952,121353.37191737042,80300372733.82285,500097.04,984282.1694202507,741972.281971069,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,CT,09,1m_plus,1000000.0,inf,16460.0,54752381000.0,0.009031946532632434,0.24680148257097687,1823240.0,217323692000.0,16467.406196156757,60090664499.452805,16,6179.089611251984,16603010083.713982,2686967.0337002836,1007826.2187769552,7674629.74696965,0.1889406370318825,408.74718459249914,0.2617284086614693,12358.179222503968,33206020167.427963,817.4943691849983,14,6861.844757823652,8533555853.885227,1900719.0,13,6415.855937351987,7909842146.203199,30,13040.934369075638,25136565937.599213,0.7919240112094396,0.4183106668395739,12594.945548603971,24512852229.917183,0.7648408862072912,0.4079311226478516,65204.67184537819,125682829687.99606,1007826.2187769552,7674629.74696965,3649066.755484361,True,True,True,True,,False,False,False,False,False,7674629.74696965,408.74718459249914,puf,29.0,12632.187184483138,21999582635.735523,0.3661064962251475,True,,False +demographic_midrank6_earn,DC,11,100k_200k,100000.0,200000.0,70930.0,9850931000.0,0.20344184712462354,0.19717523234354584,348690.0,46825089000.0,70938.13767388498,10343872070.191944,736,42897.02912054044,5935776409.469141,138372.66895079467,100006.35170579643,199770.5887593509,0.004213992703815703,130.85,0.0072465284810890335,85794.05824108089,11871552818.938282,261.7,749,44703.740416827386,6291486834.312745,199360.0,732,43723.6999656141,6136675175.55497,1485,87600.76953736783,12227263243.781887,1.23488961523185,1.1820779646934472,86620.72908615455,12072451585.02411,1.2210741912110123,1.1671114552753832,438003.8476868392,61136316218.90944,100000.0,199770.5887593509,145815.38801800142,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DC,11,200k_500k,200000.0,500000.0,39740.0,11892240000.0,0.11398250394378316,0.2380338655387201,348690.0,46825089000.0,39744.55930015775,12487328272.629202,475,24338.70905048401,7262764029.695391,298403.8313055458,200174.15784836916,497155.7580438242,0.007198945205196084,105.50949314392214,0.01301964608265222,48677.41810096802,14525528059.390781,211.01898628784429,565,29736.40816410325,9007774261.582886,499004.0,550,28895.857880358042,8766832321.177399,1040,54075.11721458726,16270538291.278278,1.3605665320428557,1.3029639275954201,53234.56693084205,16029596350.87279,1.3394177182543512,1.2836690123705512,270375.5860729363,81352691456.39139,200000.0,499004.0,314189.6272725721,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DC,11,500k_1m,500000.0,1000000.0,7580.0,5053560000.0,0.02174100100387208,0.1011515426472939,348690.0,46825089000.0,7580.869640040155,5306440390.155936,78,3818.1028578365713,2664034790.83831,697737.8268818604,500514.6589712257,994890.3107053452,0.036560663599097584,106.00333333333333,0.058805551720447144,7636.205715673143,5328069581.67662,212.00666666666666,92,4798.331639168806,3157532318.5834823,999276.08,83,4290.029278889504,2833157333.908137,170,8616.434497005375,5821567109.421793,1.1366023828579823,1.0970757572668632,8108.132136726075,5497192124.746447,1.0695517165868489,1.0359472114196133,43082.17248502688,29107835547.108963,500514.6589712257,999276.08,699977.7917468356,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DC,11,1m_plus,1000000.0,inf,3370.0,13410961000.0,0.009665854008317798,0.2684324305109062,348690.0,46825089000.0,3370.386634160333,14082046145.926048,44,2198.3869206352915,5627088708.025835,2559644.3716103053,1017087.984947781,22694329.41520695,0.28691788991657896,71.14166666666667,0.45013268797229405,4396.773841270583,11254177416.05167,142.28333333333333,31,1486.619741959795,1744852275.947395,1397627.4,29,1384.8288182107954,1618982538.2589602,75,3685.0066625950863,7371940983.973228,1.093348349191141,0.5234992775610198,3583.215738846087,7246071246.284796,1.063146792278559,0.5145609644505456,18425.033312975433,36859704919.86614,1001373.6,22694329.41520695,4178169.3539840183,True,True,True,True,,False,False,False,False,False,22694329.41520695,71.14166666666667,puf,74.0,3613.8649959284194,5757428565.493048,0.4088488637113775,True,,False +demographic_midrank6_earn,DE,10,100k_200k,100000.0,200000.0,96120.0,13335670000.0,0.18944007568142848,0.2987687403274699,503140.0,42387377000.0,95314.87967835393,14188087771.962938,404,41873.7312494528,5726232054.950653,136749.9834404053,100352.98701543483,198363.80137257266,0.006454767994643747,237.21666666666664,0.010346447909443024,83747.4624989056,11452464109.901306,474.4333333333333,421,44734.70315344065,6206422753.347822,198540.0,407,43185.319498549936,5944968520.112755,825,86608.43440289344,11932654808.298475,0.9086559695103122,0.8410333372675195,85059.05074800274,11671200575.063408,0.8924005468510255,0.8226056084969288,433042.1720144672,59663274041.49238,100000.0,198540.0,148854.90932624092,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DE,10,200k_500k,200000.0,500000.0,33790.0,9489115000.0,0.06659571532746014,0.21259156348143737,503140.0,42387377000.0,33506.96820985829,10095660472.870888,139,14561.712190676793,4093619754.814141,281122.1442376193,200277.81244584205,475740.1297349499,0.020396868558837402,189.1829129623759,0.03865344812063737,29123.424381353587,8187239509.628282,378.3658259247518,142,13873.901748808064,3838078236.9062347,494469.99999999994,129,12681.743888077443,3554916794.9167633,281,28435.613939484858,7931697991.720376,0.848647772648038,0.7856541940009252,27243.456078754236,7648536549.730904,0.8130683715734917,0.757606356739521,142178.0696974243,39658489958.60188,200251.6,494469.99999999994,301300.3268347203,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DE,10,500k_1m,500000.0,1000000.0,3930.0,2611383000.0,0.007745521196712588,0.058504717754906156,503140.0,42387377000.0,3897.0815349139716,2778302943.1751003,20,1897.479905535379,1409630205.9134958,742895.9863033516,508564.120243329,971808.4366870015,0.09368615533728232,135.89389580682516,0.13911313181023352,3794.959811070758,2819260411.8269916,271.7877916136503,22,2330.1882000196833,1672728530.491612,987894.04,20,2099.1573298548387,1485163557.852753,42,4227.6681055550625,3082358736.405108,1.084829267152705,1.1094393950007937,3996.637235390218,2894793763.7662487,1.025546219545146,1.0419287683790237,21138.34052777531,15411793682.02554,502851.36,987894.04,712918.8646129858,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,DE,10,1m_plus,1000000.0,inf,1660.0,4274659000.0,0.003271645085634325,0.0957683029618671,503140.0,42387377000.0,1646.0955083860542,4547895762.808417,4,423.0753952976581,556545418.7327228,1315475.7400655758,1225648.60121899,1347215.3720501827,0.3061023750794122,126.45333333333332,0.32896181517253065,846.1507905953162,1113090837.4654455,252.90666666666664,3,300.74242827208656,332685138.92891496,1110687.2,3,300.74242827208656,332685138.92891496,7,723.8178235697446,889230557.6616377,0.4397179992790489,0.19552571211801914,723.8178235697446,889230557.6616378,0.4397179992790489,0.19552571211801917,3619.089117848723,4446152788.308188,1099999.0,1347215.3720501827,2762838.3284196486,True,False,False,False,amount_cap|mean_out_of_range,False,False,False,False,False,1347215.3720501827,126.45333333333332,puf,6.0,597.3644902364113,718870683.1479852,0.15806665777758902,False,amount_cap|mean_out_of_range,False +demographic_midrank6_earn,FL,12,100k_200k,100000.0,200000.0,1654530.0,228173416000.0,0.14748833129494993,0.20737743283796525,11130320.0,1121782194000.0,1641592.323578807,260628679766.27945,1656,921711.5154005699,125798884741.92,136484.01114664236,100070.78458928458,199970.95046714763,0.0016094015549115838,1082.3947096801235,0.0028178283597704665,1843423.0308011398,251597769483.84,2164.789419360247,1521,841240.0879100991,114870119698.90913,199720.0,1489,824152.7265724783,112083992411.82726,3177,1762951.6033106688,240669004440.82916,1.0739277821836353,0.9234171951323651,1745864.241973048,237882877153.74725,1.0635187658327492,0.9127271694238345,8814758.016553344,1203345022204.1458,100000.0,199970.95046714763,158765.77638843204,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,FL,12,200k_500k,200000.0,500000.0,653190.0,189337847000.0,0.05822674905776767,0.17208138151346888,11130320.0,1121782194000.0,648082.3495726526,216269160353.89426,547,300992.4459698708,86994429717.45358,289025.2924359493,200128.81664747745,497938.6990091946,0.00546977290441212,990.5749999999999,0.010364434652329559,601984.8919397416,173988859434.90717,1981.1499999999999,570,312084.2207247651,87291108727.91214,499187.0,531,287911.28375601093,80046701681.14584,1117,613076.6666946359,174285538445.36572,0.9459857487229831,0.8058732838291497,588903.7297258817,167041131398.59943,0.9086865737266361,0.7723761035797243,3065383.3334731795,871427692226.8286,200000.0,499187.0,333706.29596146656,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,FL,12,500k_1m,500000.0,1000000.0,120680.0,81928683000.0,0.010757672463282356,0.07446161018308743,11130320.0,1121782194000.0,119736.33697152088,93582174731.87158,96,53238.83907429842,36684091655.194534,689047.5504922147,504510.54682561336,997910.7228898109,0.03587195146377826,1373.5649999999998,0.06251047703977454,106477.67814859684,73368183310.38907,2747.1299999999997,67,36908.20610611791,23854214887.512848,990880.0,63,34629.17862378518,22305230036.673477,163,90147.04518041633,60538306542.70738,0.7528795974596891,0.6468999755152052,87868.0176980836,58989321691.86801,0.7338458810459759,0.6303478398624758,450735.22590208164,302691532713.5369,500000.0,997910.7228898109,781568.7125465511,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,FL,12,1m_plus,1000000.0,inf,72950.0,290759506000.0,0.006502918513394497,0.2642593558204649,11130320.0,1121782194000.0,72379.56398800504,332116981490.41,64,34642.27131501388,88915833450.59607,2566686.018998418,1003509.3657837842,48330579.9025057,0.18686769262823888,343.7884806792528,0.29980910620352585,69284.54263002776,177831666901.19214,687.5769613585056,54,30008.071801161317,36469087480.217674,2289205.6,53,29591.052835820312,34715032797.49151,118,64650.343116175194,125384920930.81374,0.8932126632717661,0.3775323994820611,64233.32415083419,123630866248.08759,0.8874511065233707,0.37225096317954304,323251.715580876,626924604654.0687,1000000.0,48330579.9025057,4588546.313230754,True,True,True,True,,False,False,False,False,False,48330579.9025057,343.7884806792528,puf,117.0,64306.55463549594,108769424295.78409,0.32750335080028076,True,,False +demographic_midrank6_earn,GA,13,100k_200k,100000.0,200000.0,745870.0,103159160000.0,0.15278460580436884,0.25090203433030794,4932040.0,405672589000.0,753539.7872113793,114033384485.3369,810,461839.8052074164,62713303024.97791,135790.16429043573,100012.50466157004,199777.235066327,0.0037902655086923835,1345.9083333333333,0.0062379589987422955,923679.6104148328,125426606049.95583,2691.8166666666666,781,448684.922117173,61051557246.18608,198791.87999999998,755,432160.23786974885,58819163510.420456,1591,910524.7273245894,123764860271.164,1.2083299950148132,1.0853388315162955,894000.0430771653,121532466535.39838,1.1864005832864997,1.0657621632814533,4552623.636622947,618824301355.8201,100000.0,199777.235066327,151330.2766763513,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,GA,13,200k_500k,200000.0,500000.0,295600.0,85038313000.0,0.06055093980957999,0.20682880441947638,4932040.0,405672589000.0,298639.6571784409,94002380809.55121,288,162208.8604075425,45810910002.6804,282419.2826925887,200150.21160227276,498387.11416409875,0.00839270088061909,927.5316666666666,0.01488285426938606,324417.720815085,91621820005.3608,1855.0633333333333,314,179992.70963018353,50308444633.98255,493148.68,302,172485.23402965543,47911419304.88381,602,342201.570037726,96119354636.66293,1.1458678102930462,1.0225204277687467,334694.0944371979,93722329307.56421,1.120728899836682,0.9970208041586267,1711007.8501886302,480596773183.3147,200000.0,498387.11416409875,314768.5799591701,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,GA,13,500k_1m,500000.0,1000000.0,46120.0,30879362000.0,0.009447257591399964,0.07510428298002819,4932040.0,405672589000.0,46594.25233108828,34134420633.203114,30,17148.940579886174,11888969752.271845,693277.2142330648,504987.0767546874,986398.2524075554,0.0587871551953806,860.339687888059,0.09273935231915417,34297.88115977235,23777939504.54369,1720.679375776118,22,12141.545032925364,8040918646.224129,950002.72,21,11540.338099378281,7661431959.566891,52,29290.48561281154,19929888398.495975,0.6286287288114408,0.5838648504585967,28689.278679264455,19550401711.838737,0.615725701002881,0.5727474305751579,146452.4280640577,99649441992.47987,504987.0767546874,986398.2524075554,732588.6547261579,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,GA,13,1m_plus,1000000.0,inf,19740.0,54395277000.0,0.004043557347229733,0.13229930970027876,4932040.0,405672589000.0,19942.986578830933,60129197798.11509,21,12070.442970612354,27405434106.43422,2270458.0248759417,1001718.7295897113,9951077.265147153,0.25294470042722217,696.613958009246,0.4066155178632616,24140.885941224707,54810868212.86844,1393.227916018492,13,7714.510364479574,9881904400.343311,2204688.0,13,7714.510364479574,9677976068.38448,34,19784.953335091926,37287338506.777534,0.9920757483782918,0.6201203387407641,19784.953335091926,37083410174.818695,0.9920757483782918,0.6167288361193,98924.76667545963,186436692533.88766,1001718.7295897113,9951077.265147153,3015054.8194191228,True,True,True,True,,False,False,False,False,False,9951077.265147153,696.613958009246,puf,33.0,19088.339377082684,30355279186.64755,0.5048342618600362,True,,False +demographic_midrank6_earn,HI,15,100k_200k,100000.0,200000.0,131140.0,18094971000.0,0.1885658413136629,0.3085593459561336,689960.0,57676242000.0,130102.88787277487,19938286333.829025,711,63289.22963397915,8661036661.571964,136848.50821634853,100049.87526235322,199958.07397488118,0.005335338301765343,233.29833333333332,0.009810725488238123,126578.4592679583,17322073323.14393,466.59666666666664,657,58025.108337394835,7989147287.035843,199097.44,622,55609.94836761913,7662519665.630491,1368,121314.33797137399,16650183948.607807,0.9324492327180698,0.8350860083876748,118899.17800159828,16323556327.202456,0.9138857710665694,0.8187040778678404,606571.6898568699,83250919743.03903,100000.0,199958.07397488118,153250.1442498824,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,HI,15,200k_500k,200000.0,500000.0,41940.0,11726380000.0,0.06030540936933828,0.1999607594415645,689960.0,57676242000.0,41608.32024846864,12920933783.164724,208,18783.4281154143,5325564384.495544,283524.62350177765,200176.84949444057,492737.7432466265,0.013931899993231307,169.10932848303818,0.025733897168283955,37566.8562308286,10651128768.991089,338.21865696607637,234,21411.062785571296,5897939337.57342,484280.8,209,18954.235139513068,5198869283.318352,442,40194.490900985606,11223503722.068962,0.9660205137087919,0.8686294590173179,37737.66325492736,10524433667.813896,0.9069739664945082,0.8145257799809068,200972.45450492803,56117518610.34481,200000.0,492737.7432466265,310537.2604807393,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,HI,15,500k_1m,500000.0,1000000.0,5180.0,3457928000.0,0.007448307594973111,0.0589653336301783,689960.0,57676242000.0,5139.034308227648,3810183425.315505,31,2974.169024830131,1946914302.0506852,654607.8201328462,500450.6836462433,963008.5438664235,0.07089125915114267,143.3208533930572,0.14431161514741545,5948.338049660262,3893828604.1013703,286.6417067861144,25,2397.838828531912,1490610622.8952136,838873.24,21,2009.546823551051,1235271722.55535,56,5372.0078533620435,3437524924.945899,1.0453341097103406,0.9021940786646648,4983.715848381182,3182186024.606035,0.9697767225259035,0.8351792208907979,26860.039266810218,17187624624.729496,500015.64,963008.5438664235,741420.118409282,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,HI,15,1m_plus,1000000.0,inf,1960.0,4917011000.0,0.0028182785494492856,0.08384593145902883,689960.0,57676242000.0,1944.499467978029,5417901649.28073,13,1041.4217735022723,2394579817.948511,2299337.1935134465,1072424.9737480786,6386811.738517932,0.2242385239349526,84.32442228863398,0.33450092795169484,2082.8435470045447,4789159635.897022,168.64884457726797,7,613.4321207713836,753113714.0236222,1636020.3599999999,6,477.0269612482046,591362644.8267184,20,1654.8538942736561,3147693531.972134,0.851043634377767,0.5809801904377528,1518.448734750477,2985942462.7752295,0.7808943945505024,0.5511252614140083,8274.269471368281,15738467659.86067,1052201.36,6386811.738517932,2786270.574254509,True,True,True,True,,False,False,False,False,False,6386811.738517932,64.33833333333332,puf,19.0,1590.515560940323,2736776709.402121,0.5051359154453182,True,,False +demographic_midrank6_earn,IA,19,100k_200k,100000.0,200000.0,289160.0,39515430000.0,0.19511470985155197,0.3096123710966054,1485900.0,122342275000.0,289920.94736842107,42437229693.794754,417,137924.2156816767,18574535286.25294,134672.03851368776,100066.42917929149,199879.81507081285,0.006007213036430867,568.2662123024107,0.01144986767669467,275848.4313633534,37149070572.50588,1136.5324246048215,445,146627.90501195047,19789247044.10143,199273.72,421,137885.79036792502,18649186669.65093,862,284552.12069362716,38363782330.35437,0.9814817565839029,0.9040124109695122,275810.0060496017,37223721955.90387,0.9513283139873033,0.8771477833141117,1422760.603468136,191818911651.77185,100000.0,199879.81507081285,146375.17598846368,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IA,19,200k_500k,200000.0,500000.0,81450.0,22945776000.0,0.05495951417004048,0.17978536774145143,1485900.0,122342275000.0,81664.34210526316,24642403400.75669,112,37671.77858509093,10513685130.90092,279086.5078789203,200037.22131023425,498968.2730252205,0.026288456838577893,601.9777435513239,0.052358429497907796,75343.55717018186,21027370261.80184,1203.9554871026478,152,48783.32315618465,13399748213.324036,496521.56,130,40493.122869561616,10983917063.350037,264,86455.10174127556,23913433344.22496,1.058664032703983,0.9704180617175779,78164.90145465254,21497602194.250957,0.9571484865928396,0.8723825287914422,432275.5087063778,119567166721.1248,200000.0,498968.2730252205,301752.30419407884,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IA,19,500k_1m,500000.0,1000000.0,10560.0,7062917000.0,0.007125506072874494,0.055339559236190085,1485900.0,122342275000.0,10587.78947368421,7585154230.567849,23,7702.920986193789,5023951884.48151,652213.867114321,522984.86141086783,878795.4783713992,0.06671310281643736,478.39166666666665,0.08503589483877423,15405.841972387578,10047903768.96302,956.7833333333333,22,7578.885975491559,5061501432.872723,862924.7200000001,21,7167.081798304885,4768488031.921668,45,15281.806961685348,10085453317.354233,1.4433425409211287,1.3296306193366885,14870.002784498673,9792439916.40318,1.4044482865340153,1.2910007652764741,76409.03480842675,50427266586.771164,506009.51999999996,878795.4783713992,716405.8417879044,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IA,19,1m_plus,1000000.0,inf,4310.0,12915938000.0,0.0029082321187584347,0.10119930845031289,1485900.0,122342275000.0,4321.342105263158,13870951869.10055,7,1836.5660179329836,2363822337.010253,1287088.1383674326,1066089.8662698723,1470277.8599598904,0.22649895714433757,413.255,0.23206071671560558,3673.1320358659673,4727644674.020506,826.51,6,1505.166018302784,1629998873.7575648,1135009.8800000001,5,1183.9390253177269,1288789383.3043323,13,3341.7320362357677,3993821210.767818,0.7733088366611199,0.2879269749082327,3020.5050432507105,3652611720.314585,0.6989738302764552,0.263328123028909,16708.66018117884,19969106053.83909,1000000.0,1470277.8599598904,3209871.2694388367,True,True,False,False,mean_out_of_range,False,False,False,False,False,1470277.8599598904,260.1769926152568,puf,12.0,3081.5550436205112,3611288738.8546576,0.26034902095647083,False,mean_out_of_range,False +demographic_midrank6_earn,ID,16,100k_200k,100000.0,200000.0,159150.0,21677262000.0,0.17990165602215566,0.28481408744373965,869500.0,72860958000.0,156424.48991126433,23249226666.845253,630,82906.34335063717,11208746651.674635,135197.6965655004,100106.1678501211,199995.4009862171,0.004022925553291999,237.02393276200064,0.007329930355127556,165812.68670127433,22417493303.34927,474.0478655240013,632,81669.12376420545,11175965740.006195,199703.8,618,79452.94270355158,10815357806.358294,1262,164575.46711484264,22384712391.68083,1.0521080631824478,0.9628153534931434,162359.28605418873,22024104458.03293,1.0379403260083575,0.9473048189357877,822877.3355742132,111923561958.40414,100000.0,199995.4009862171,148629.07131763033,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ID,16,200k_500k,200000.0,500000.0,47390.0,13485953000.0,0.053569208161419773,0.17718978517693623,869500.0,72860958000.0,46578.42649635449,14463910530.556015,155,20027.983885614733,5734527176.877388,286325.73351510736,200038.35221555457,497226.73376798874,0.01637149011201849,202.8787125580323,0.03083236460491072,40055.967771229465,11469054353.754776,405.7574251160646,192,23925.113311583416,6406951213.829483,468017.68,175,21541.322914306416,5740160904.614752,347,43953.09719719815,12141478390.706871,0.9436363678072762,0.8394326254339831,41569.30679992115,11474688081.49214,0.8924583745475948,0.7933323465497844,219765.48598599073,60707391953.534355,200038.35221555457,497226.73376798874,310528.1053598504,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ID,16,500k_1m,500000.0,1000000.0,7030.0,4728593000.0,0.007946645566043067,0.062128229118043374,869500.0,72860958000.0,6909.608319674447,5071495213.383397,23,2611.843264670732,1737083899.3688478,665079.6863906906,501034.36037724675,994395.7294516955,0.07592290788621815,146.495,0.13599743151424734,5223.686529341464,3474167798.7376957,292.99,23,2642.522801931784,1659554053.6353104,838496.3200000001,21,2421.985951036863,1478866288.4481232,46,5254.366066602515,3396637953.0041585,0.760443403375154,0.6697507953947422,5033.829215707595,3215950187.816971,0.7285259862522524,0.6341226901546224,26271.83033301258,16983189765.020792,501034.36037724675,994395.7294516955,733977.2355753945,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ID,16,1m_plus,1000000.0,inf,3230.0,9952358000.0,0.003651161476290058,0.13076244415385124,869500.0,72860958000.0,3174.6849036342055,10674070692.672844,10,1076.2233913084426,1567020487.4471788,1456036.4512631886,1087475.1422240478,2415255.222298391,0.15210895012705636,165.7166455890547,0.24376199351782313,2152.4467826168852,3134040974.8943577,331.4332911781094,6,557.0538948074108,611984226.6540214,1227125.0799999998,5,455.44222814074413,506114453.9941895,16,1633.2772861158535,2179004714.1012,0.514469100302259,0.20413999277679187,1531.6656194491868,2073134941.4413683,0.4824622493072682,0.19422158622806013,8166.386430579268,10895023570.506,1022090.68,2415255.222298391,3362245.7083705384,True,True,False,False,mean_out_of_range,False,False,False,False,False,2415255.222298391,84.53434877508805,puf,15.0,1548.7429373407654,1974832686.7585752,0.1850121423792132,False,amount_cap|mean_out_of_range,False +demographic_midrank6_earn,IL,17,100k_200k,100000.0,200000.0,1124270.0,156259052000.0,0.18429870202253673,0.2580538337054279,6112890.0,580846466000.0,1126597.6926065446,167928278048.45697,1016,570523.5901274787,79017682556.9837,138500.28977649787,100044.99772436282,199667.09200010795,0.0030267824228047443,1310.8466666666666,0.004920695375595337,1141047.1802549574,158035365113.9674,2621.693333333333,978,555068.2338948403,77864770637.98871,199999.0,944,531713.0237536278,74373891884.4015,1994,1125591.8240223192,156882453194.9724,0.9991071625738038,0.9342229612436257,1102236.6138811065,153391574441.3852,0.9783764169895686,0.9134350463423611,5627959.120111596,784412265974.862,100000.0,199999.0,149057.89276021943,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IL,17,200k_500k,200000.0,500000.0,447940.0,128317099000.0,0.07342965709658276,0.2119091272031327,6112890.0,580846466000.0,448867.4165691298,137899655753.98077,431,245145.54620230725,71495072272.10909,291643.36607244547,200034.9755448185,495855.17702466005,0.0063092239833707235,958.5283333333333,0.011545143096691234,490291.0924046145,142990144544.21817,1917.0566666666666,500,269212.6072215666,76953903012.37225,496893.39999999997,479,256675.23631648495,73209603898.05162,931,514358.1534238738,148448975284.48135,1.145902185004462,1.0764999700167566,501820.7825187922,144704676170.1607,1.1179710622669068,1.0493476243937867,2571790.767119369,742244876422.4067,200007.4,496893.39999999997,307216.898940899,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IL,17,500k_1m,500000.0,1000000.0,68110.0,45643960000.0,0.011165097881073921,0.07537866582921034,6112890.0,580846466000.0,68251.01518623796,49052592525.08871,55,33073.34884246679,21948702222.613075,663637.1274997874,502583.77328526875,988147.9660365044,0.04216596173721122,1190.0849999999998,0.07683014453542227,66146.69768493358,43897404445.22615,2380.1699999999996,57,35179.73768955142,23345894588.96895,967990.64,52,32299.56879911755,21153391995.56748,112,68253.0865320182,45294596811.58203,1.0000303489372957,0.9233884384075196,65372.91764158434,43102094218.18056,0.9578306998540594,0.8786914615396796,341265.432660091,226472984057.91016,500000.0,988147.9660365044,718708.6139486406,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IL,17,1m_plus,1000000.0,inf,30430.0,100562853000.0,0.004988311973588011,0.16607440921250047,6112890.0,580846466000.0,30493.00238022642,108072758178.0677,25,13061.254556513682,27544761819.608772,2108890.9721824634,1047244.9945800311,18701692.467423104,0.23230587960910162,342.15139267601825,0.41817624836521144,26122.509113027365,55089523639.217545,684.3027853520365,16,8210.685328902198,9906596365.950151,2212967.96,14,7103.068518632262,8613522720.815596,41,21271.939885415883,37451358185.55892,0.6976007026192327,0.3465383767096203,20164.323075145945,36158284540.42437,0.6612770636263013,0.3345735331455835,106359.69942707941,187256790927.79462,1044246.72,18701692.467423104,3544182.26288366,True,True,True,True,,False,False,False,False,False,18701692.467423104,342.15139267601825,puf,40.0,20929.788492739863,31052548062.431507,0.2873300227173559,False,mean_out_of_range,False +demographic_midrank6_earn,IN,18,100k_200k,100000.0,200000.0,544590.0,74363014000.0,0.16798326922543053,0.2906339906727545,3246780.0,246316586000.0,545404.7188557433,80203298479.47289,594,295580.5939602,40786045607.81267,137986.2089772528,100070.78458928458,199595.6904238321,0.004481033273509059,950.2271620677257,0.007814483345601232,591161.1879204,81572091215.62534,1900.4543241354513,570,289102.28181436524,39368718092.246445,199933.96000000002,559,282294.831222997,38461947866.13081,1164,584682.8757745653,80154763700.05911,1.072016532972482,0.9993948530754481,577875.425183197,79247993473.94348,1.0595350667217862,0.9880889561446914,2923414.378872826,400773818500.29553,100000.0,199933.96000000002,147052.8136385381,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IN,18,200k_500k,200000.0,500000.0,153020.0,43024986000.0,0.047200278846242824,0.16815514470432025,3246780.0,246316586000.0,153248.9213524043,46404060414.13467,165,83545.6671934853,24181637133.701378,289442.14518867363,201039.6352994187,499182.91430568707,0.017652437172608303,872.8549999999999,0.03376295824412165,167091.3343869706,48363274267.402756,1745.7099999999998,204,101039.34454922189,27006558097.418324,474605.68,186,91002.36855179993,24321364082.601013,369,184585.01174270717,51188195231.1197,1.2044783748803283,1.103097331877617,174548.03574528522,48503001216.30239,1.1389837801461744,1.0452318349608989,922925.0587135358,255940976155.59848,200000.0,499182.91430568707,302801.87295691296,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IN,18,500k_1m,500000.0,1000000.0,20910.0,14090422000.0,0.006449861656482404,0.05506979015298082,3246780.0,246316586000.0,20941.281829033942,15197048379.019861,23,11511.544550248296,8208854394.475688,713097.565547677,504104.25871800724,995132.089067733,0.06975579130405818,604.1413407262296,0.11028756905001169,23023.089100496592,16417708788.951376,1208.2826814524592,21,11282.35322345437,7795386119.12309,960002.7200000001,21,10860.394978208626,7581034197.820257,44,22793.897773702665,16004240513.59878,1.0884671702426627,1.0531150598752637,22371.939528456922,15789888592.295944,1.0683175801320552,1.0390102208330483,113969.48886851332,80021202567.9939,504104.25871800724,995132.089067733,725698.0973318445,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,IN,18,1m_plus,1000000.0,inf,9520.0,27067715000.0,0.002936522380187111,0.10578912292127882,3246780.0,246316586000.0,9534.242133543908,29193545400.167686,7,3419.143269994638,6280283721.700287,1836800.3987472965,1339413.005899969,3230438.2266493253,0.28286802658477134,549.9227467328591,0.4286992326034724,6838.286539989276,12560567443.400574,1099.8454934657182,4,2045.8786765715263,2518870474.7219377,1509979.0,3,1697.6552551506034,2138553358.177967,11,5465.021946566165,8799154196.422224,0.5731994079884772,0.30140752264956766,5116.798525145241,8418837079.878254,0.5366759574044204,0.2883800841753841,27325.109732830824,43995770982.11112,1065173.08,3230438.2266493253,3061968.1135910433,True,True,True,True,,False,False,False,False,False,3230438.2266493253,549.9227467328591,puf,10.0,4915.099199833306,7022662733.672401,0.24055532267184182,False,mean_out_of_range,False +demographic_midrank6_earn,KS,20,100k_200k,100000.0,200000.0,242000.0,33272131000.0,0.1771466217700022,0.28385483932929817,1361370.0,112582214000.0,241162.0964790279,35802904142.43161,484,136025.86755579145,18496143020.824158,135975.1887870732,100080.89759444346,197886.11851760073,0.004944404358871309,533.0571843695162,0.007795290310329869,272051.7351115829,36992286041.648315,1066.1143687390324,462,129546.18255843362,17861790953.25487,199944.2,452,126394.43947768642,17366356245.908684,946,265572.0501142251,36357933974.079025,1.1012180354690186,1.0155023690100498,262420.3070334779,35862499266.73284,1.0881490535404208,1.0016645332474747,1327860.2505711254,181789669870.39514,100000.0,199944.2,148459.91416211263,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KS,20,200k_500k,200000.0,500000.0,79430.0,22503048000.0,0.05814362052558378,0.19198046180028217,1361370.0,112582214000.0,79154.98067491398,24214693986.884617,154,43264.65053265623,12703198282.917953,293616.1075270805,200169.38077115305,472797.98925310693,0.016604949019383194,473.28166666666664,0.028709117883984135,86529.30106531247,25406396565.835907,946.5633333333333,185,50806.19715892726,14130555077.575089,496663.0,170,46412.426523912145,12908869932.99216,339,94070.84769158349,26833753360.493042,1.188438767712272,1.108159920378386,89677.07705656838,25612068215.910114,1.132930313316204,1.0577076972264179,470354.23845791747,134168766802.46521,200000.0,496663.0,305914.9756644285,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KS,20,500k_1m,500000.0,1000000.0,11280.0,7597910000.0,0.008257082204816631,0.06482011994628381,1361370.0,112582214000.0,11240.944001171218,8175828696.178868,28,7206.956302851187,5037384230.45356,698961.3949040722,504845.0580236572,951558.6290066135,0.07334475955656941,388.27427329661987,0.1222734188052362,14413.912605702373,10074768460.90712,776.5485465932397,32,8733.820875123278,6018510313.03398,954750.0,29,8038.456878923409,5444078842.401502,60,15940.777177974463,11055894543.487543,1.4180995098199547,1.3522659236555101,15245.413181774595,10481463072.85506,1.3562395809627859,1.2820061992925287,79703.88588987231,55279472717.43771,504845.0580236572,954750.0,727325.8095874343,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KS,20,1m_plus,1000000.0,inf,4950.0,13690751000.0,0.0036234536271136813,0.1168000307946139,1361370.0,112582214000.0,4932.861064343752,14732108553.278406,14,4500.418160679259,11712640272.23517,2602567.106890208,1007502.650708799,15208012.690568037,0.495024594648673,381.2493532849869,0.7510577968840969,9000.836321358518,23425280544.47034,762.4987065699738,11,3610.33745853609,4428177298.975367,2204149.4,9,2971.522695478685,3714064120.705836,25,8110.75561921535,16140817571.210535,1.6442294873947298,1.0956216832666932,7471.940856157944,15426704392.941006,1.514727611156018,1.047148433447297,40553.77809607675,80704087856.05267,1000000.0,15208012.690568037,2986524.120812291,True,True,True,True,,False,False,False,False,False,15208012.690568037,381.2493532849869,puf,24.0,7729.506265930362,10342772568.181597,0.7020564999760316,False,mean_out_of_range,False +demographic_midrank6_earn,KY,21,100k_200k,100000.0,200000.0,307990.0,41822750000.0,0.15548375697301664,0.2862417243031326,1975890.0,139288462000.0,307218.80056541384,44668384961.681015,353,180465.11658051948,24289833377.17569,134595.7259631288,100082.49711116414,199123.7208860234,0.007649132107244993,994.885,0.013823994381167172,360930.23316103895,48579666754.35138,1989.77,313,159783.4234977507,22074359978.401188,199723.47999999998,304,154040.99598495517,21199810263.109367,666,340248.54007827013,46364193355.57687,1.1075121035954423,1.0379643991013021,334506.11256547464,45489643640.28506,1.0888204496269125,1.0183856810428351,1701242.7003913508,231820966777.88437,100000.0,199723.47999999998,145396.00076385983,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KY,21,200k_500k,200000.0,500000.0,83860.0,23695359000.0,0.04233536108236363,0.16217490284932848,1975890.0,139288462000.0,83650.01660903147,25307599754.134605,98,50967.91889410999,14197346809.756992,278554.5715384836,200884.50660067616,450844.38169868337,0.022587489731552265,714.4119995583718,0.04440822895741574,101935.83778821999,28394693619.513985,1428.8239991167436,96,47407.887953878075,12762765505.992966,490000.0,90,44522.38000524137,11883294650.45689,194,98375.80684798807,26960112315.749954,1.1760404939042977,1.065297087739242,95490.29889935136,26080641460.213882,1.1415454864242254,1.030545832619033,491879.03423994035,134800561578.74977,200000.0,490000.0,302541.47912987036,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KY,21,500k_1m,500000.0,1000000.0,12010.0,8063977000.0,0.006063053739556251,0.055191174210705955,1975890.0,139288462000.0,11979.9272534518,8612652897.24233,13,6532.520031965432,3884999931.3472524,594716.8799080402,504836.2246826363,764225.1450802769,0.12339743382111854,652.1287996959154,0.24781756965715768,13065.040063930865,7769999862.694505,1304.2575993918308,10,5004.718709375211,3426964446.348623,992887.48,8,3936.0231091447367,2549562509.5710306,23,11537.238741340645,7311964377.695876,0.9630474791085561,0.848979340620714,10468.543141110169,6434562440.918283,0.8738402929862406,0.7471057428749456,57686.19370670323,36559821888.47938,504836.2246826363,992887.48,718923.6391031297,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,KY,21,1m_plus,1000000.0,inf,4810.0,12629941000.0,0.0024282504985233613,0.08644137675515912,1975890.0,139288462000.0,4797.955877527324,13489286731.057106,8,3901.4084102351094,8222006132.402483,2107445.637024964,1192662.2415131298,4886663.291355625,0.292149396154822,491.55302576541294,0.44218444387801903,7802.816820470219,16444012264.804966,983.1060515308259,8,3950.5880523930173,4899587691.457986,1623080.0,6,2954.345382064018,3457964152.1932836,16,7851.996462628126,13121593823.860466,1.636529526960705,0.972741856961934,6855.753792299127,11679970284.595766,1.4288905457447245,0.8658701173357333,39259.98231314063,65607969119.30233,1018499.0,4886663.291355625,2811465.3563694186,True,True,True,True,,False,False,False,False,False,4886663.291355625,491.55302576541294,puf,15.0,7360.443436862713,10719539697.09784,0.7946706086703361,False,mean_out_of_range,False +demographic_midrank6_earn,LA,22,100k_200k,100000.0,200000.0,282520.0,38919889000.0,0.1461910232129736,0.27466789367064565,1970500.0,140655941000.0,288069.41124116443,43283078822.52269,710,166912.0115185576,22735114052.740345,136210.17352734142,100020.7540152294,199767.47474400513,0.003629973899423569,493.424021077774,0.006163212959686893,333824.0230371152,45470228105.48069,986.848042155548,643,150847.6107965033,20362126917.837067,199959.83,633,148409.45950273113,20017343684.4487,1353,317759.62231506093,43097240970.57741,1.1030661705662341,0.9957064548779607,315321.4710212888,42752457737.18904,1.0946024073250513,0.987740680659308,1588798.1115753045,215486204852.88702,100000.0,199959.83,150252.2556492025,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,LA,22,200k_500k,200000.0,500000.0,87420.0,24600044000.0,0.04523580365736285,0.17360898099388733,1970500.0,140655941000.0,89137.1511068335,27357879758.84326,184,45637.07053701867,13236149720.77216,290030.66071113414,201264.80630038265,498551.86543825455,0.020235164130981722,567.9583333333333,0.03754050148506719,91274.14107403734,26472299441.54432,1135.9166666666665,203,49676.17541415269,13767850356.788845,489280.0,185,44940.538829973004,12339902984.455593,387,95313.24595117135,27004000077.561005,1.0692875503384176,0.9870647987197229,90577.60936699167,25576052705.227753,1.0161600212960784,0.9348696949719013,476566.2297558568,135020000387.80502,200000.0,498551.86543825455,306918.93805371947,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,LA,22,500k_1m,500000.0,1000000.0,12570.0,8472356000.0,0.0065043931820298675,0.05979164475386497,1970500.0,140655941000.0,12816.906765189853,9422165940.927351,26,6716.797397249907,4575565486.958141,681212.3719604136,502430.3337572321,978136.5604644474,0.10192884047120596,479.39166666666665,0.1862409107981063,13433.594794499813,9151130973.916283,958.7833333333333,13,3653.5785283536916,2270411229.3165565,842372.4,11,3264.795917321522,1950367411.2790713,39,10370.375925603597,6845976716.274697,0.8091169043820367,0.726582057585891,9981.59331457143,6525932898.237213,0.7787833287264749,0.6926149400415799,51851.87962801799,34229883581.373486,502430.3337572321,978136.5604644474,735135.7167173544,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,LA,22,1m_plus,1000000.0,inf,5660.0,15655732000.0,0.002928788019911619,0.11048661861065752,1970500.0,140655941000.0,5771.176793235845,17410848272.981735,21,4697.40896173586,9749207204.850586,2075443.565647711,1103015.256503519,3559412.3171674986,0.1136786546968335,321.1128107550717,0.15581856415700554,9394.81792347172,19498414409.70117,642.2256215101434,9,2193.627312757084,2595677022.991792,1335409.0399999998,9,2193.627312757084,2561082394.9514256,30,6891.036274492944,12344884227.842375,1.1940435237696478,0.7090340478699848,6891.036274492944,12310289599.802011,1.1940435237696478,0.7070470896530181,34455.18137246472,61724421139.211876,1029302.92,3559412.3171674986,3016862.746847101,True,True,True,True,,False,False,False,False,False,3559412.3171674986,250.70668437599758,puf,29.0,6640.329590116948,11452515767.478226,0.6577804589366454,True,,False +demographic_midrank6_earn,MA,25,100k_200k,100000.0,200000.0,700180.0,98269106000.0,0.19472541041735614,0.22552595106228232,3567790.0,422208182000.0,694739.3720329391,106678115746.86644,961,362558.51604153676,50655499071.50015,139716.75420719333,100027.42363767595,199666.73746047055,0.002485220605446384,686.2583333333333,0.003976781853040843,725117.0320830735,101310998143.0003,1372.5166666666667,926,354457.62711418327,50001493504.55617,198768.16,897,341432.0264249782,48019467406.215164,1887,717016.14315572,100656992576.05632,1.0320649325769387,0.9435580284798292,703990.542466515,98674966477.71532,1.0133160301632325,0.9249785280409192,3585080.7157786,503284962880.2816,100000.0,199666.73746047055,153551.27410543332,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MA,25,200k_500k,200000.0,500000.0,368850.0,108127103000.0,0.1025800046165869,0.2481498889354337,3567790.0,422208182000.0,365983.91467101255,117379673823.50407,446,163921.73259617965,46817023410.61609,285605.9576063022,200959.58484059008,499295.61148796947,0.005337659470841604,562.0339076000586,0.009797599413746217,327843.4651923593,93634046821.23218,1124.0678152001171,574,208996.42190605734,60194350034.020294,492552.04,554,200765.82346895617,57422848223.63899,1020,372918.154502237,107011373444.6364,1.018946843162377,0.91166868980691,364687.5560651358,104239871634.25508,0.9964578809234224,0.8880572610126143,1864590.772511185,535056867223.182,200000.0,499295.61148796947,320723.5867975731,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MA,25,500k_1m,500000.0,1000000.0,66250.0,44351516000.0,0.01842463143784433,0.10178598579042769,3567790.0,422208182000.0,65735.21579762662,48146730442.393555,73,28242.64896158545,20348013810.760765,720471.1512166348,502941.84907707525,992370.2081362162,0.02491555237712562,533.4943062122924,0.038581473723143384,56485.2979231709,40696027621.52153,1066.9886124245847,68,26378.64011458181,17967451934.519325,959000.0,67,26133.767839499196,17770644682.330177,141,54621.28907616726,38315465745.28009,0.830928877518637,0.795806182335136,54376.41680108465,38118658493.09094,0.8272037467479938,0.7917185267377405,273106.4453808363,191577328726.40045,500000.0,992370.2081362162,732434.3558956096,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MA,25,1m_plus,1000000.0,inf,27450.0,86021156000.0,0.007634054837265312,0.197417111115033,3567790.0,422208182000.0,27236.704507846807,93382093416.49301,40,14720.083386326827,27369837020.23521,1859353.3950805245,1044458.5031931738,5763022.924778389,0.06803818092440167,518.0427010359515,0.10625908305558812,29440.166772653654,54739674040.47042,1036.085402071903,33,11448.731351926657,13093022402.569166,1602093.2799999998,30,10163.253045717212,11425566969.617464,73,26168.81473825348,40462859422.804375,0.9607922548307681,0.4333042657582774,24883.336432044038,38795403989.85268,0.9135957114369408,0.4154480004728689,130844.0736912674,202314297114.02188,1000133.96,5763022.924778389,3428538.6247660737,True,True,True,True,,False,False,False,False,False,5763022.924778389,268.8433333333333,puf,72.0,25899.97140492015,38913509129.63054,0.4167127519413448,True,,False +demographic_midrank6_earn,MD,24,100k_200k,100000.0,200000.0,624880.0,87558352000.0,0.20155988929817883,0.28072111339962047,3095140.0,295351996000.0,623856.0757623652,92889613494.59271,548,318629.76236209844,44518943075.0893,139719.97701990223,100076.94450343952,199831.1544507232,0.004448944309150072,1360.1729591796561,0.006730342291212659,637259.5247241969,89037886150.1786,2720.3459183593122,533,319689.03600272216,44882167930.06517,199973.28,518,309993.31778749294,43518492436.12248,1081,638318.7983648205,89401111005.15448,1.0231827871272738,0.9624446441512936,628623.0801495914,88037435511.21179,1.007641192532109,0.9477640416313782,3191593.9918241026,447005555025.7724,100000.0,199973.28,148895.90260234245,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MD,24,200k_500k,200000.0,500000.0,284340.0,80616057000.0,0.0917160717626491,0.25846339911613764,3095140.0,295351996000.0,283874.0823554458,85524615358.08778,245,145432.97220265967,41665055577.989624,286489.7481427369,200045.2567787945,497424.63216745714,0.011175604459437952,937.1287650863135,0.02211768394103241,290865.94440531934,83330111155.97925,1874.257530172627,293,169110.56510708347,48279130387.76268,481441.36,278,159007.93961341726,45125331531.30245,538,314543.5373097432,89944185965.75229,1.1080389400110695,1.051676006833354,304440.91181607696,86790387109.29208,1.0724505361319987,1.0148000870381535,1572717.686548716,449720929828.7615,200000.0,497424.63216745714,301276.58942460374,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MD,24,500k_1m,500000.0,1000000.0,33480.0,22263897000.0,0.010799233602776577,0.07138035163629473,3095140.0,295351996000.0,33425.13989329789,23619503336.625412,23,12933.415739589813,8549424485.544591,661033.7638319619,501277.32441774395,933834.9423040044,0.08974300847631739,929.8649999999999,0.14515588524511894,25866.831479179626,17098848971.089182,1859.7299999999998,24,14349.299746093257,9302786856.077919,986351.36,23,13825.443435746954,8825300785.583239,47,27282.71548568307,17852211341.62251,0.8162333971608464,0.7558250098316042,26758.859175336765,17374725271.12783,0.8005608730661502,0.735609255770668,136413.57742841536,89261056708.11255,501277.32441774395,986351.36,706638.8775641709,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MD,24,1m_plus,1000000.0,inf,13290.0,37103420000.0,0.004286792550206114,0.11895739395978748,3095140.0,295351996000.0,13268.223093844952,39362576663.47513,12,6523.563045642859,11184429255.807604,1714466.3395684932,1014334.7902655562,5063906.82496489,0.19495530712169346,1225.889419026026,0.28499826808928697,13047.126091285718,22368858511.615208,2451.778838052052,9,5481.166716522772,6390315793.421815,1737229.24,9,5481.166716522772,6287755805.684367,21,12004.72976216563,17574745049.229416,0.9047729810734455,0.4464836029277822,12004.72976216563,17472185061.49197,0.9047729810734455,0.443878082750222,60023.648810828156,87873725246.14708,1007937.3200000001,5063906.82496489,2966680.34484099,True,True,True,True,,False,False,False,False,False,5063906.82496489,306.5,puf,20.0,11698.22976216563,16022657607.377678,0.40705306830803173,False,mean_out_of_range,False +demographic_midrank6_earn,ME,23,100k_200k,100000.0,200000.0,121480.0,16599287000.0,0.1705940176941441,0.28817562204511815,710860.0,54409847000.0,121268.46341805927,17566567623.817863,282,67075.83277526175,9347353983.51207,139355.01948712993,100126.89110820816,198747.5181003582,0.009285832162301525,503.67628035813533,0.013800566895485058,134151.6655505235,18694707967.02414,1007.3525607162707,271,65324.50880750058,8741707679.875284,199375.8,257,61842.359773125776,8306798966.109192,553,132400.34158276234,18089061663.387352,1.0917953262615951,1.0297436614117523,128918.19254838752,17654152949.62126,1.0630809438390976,1.0049859100354155,662001.7079138117,90445308316.93677,100000.0,199375.8,144856.85007205143,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ME,23,200k_500k,200000.0,500000.0,36740.0,10449572000.0,0.051593877264429155,0.18141212397889436,710860.0,54409847000.0,36676.02359219211,11058493848.437809,78,16940.667261366547,4831674141.779121,285211.5602788462,205355.88117830074,495943.99478545453,0.029519583058053626,287.5909530861445,0.05895976202070691,33881.334522733094,9663348283.558243,575.181906172289,106,23165.522222652075,6250686146.172866,488958.16000000003,100,21390.444159144095,5891584999.905234,184,40106.189484018614,11082360287.951988,1.0935261120444024,1.0021581998273255,38331.11142051064,10723259141.684357,1.045127242983639,0.9696853195970435,200530.94742009306,55411801439.75994,200006.8,495943.99478545453,301518.3426480299,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ME,23,500k_1m,500000.0,1000000.0,5300.0,3531289000.0,0.007442774891166971,0.06130572983020796,710860.0,54409847000.0,5290.770959134953,3737065755.760724,17,3999.567172061515,2412848010.1153173,603277.2813443341,521666.32717093115,770804.4791421902,0.09253837541076575,424.47329207792023,0.1724880050375015,7999.13434412303,4825696020.230635,848.9465841558405,9,1997.3849975888597,1168399985.2613864,704689.3200000001,5,1266.2313907931666,758437874.2582055,26,5996.952169650373,3581247995.3767037,1.1334741601875886,0.958304784938872,5265.798562854681,3171285884.3735228,0.9952800080606107,0.8486031800443848,29984.760848251866,17906239976.88352,503285.24,770804.4791421902,706336.7105900458,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ME,23,1m_plus,1000000.0,inf,2060.0,5352577000.0,0.0028928521275101812,0.09292460613033514,710860.0,54409847000.0,2056.4128633618875,5664484615.043534,11,2518.4467451293062,3723893926.405193,1478647.0802319841,1001491.6921502809,2754259.6673034932,0.19465403694131758,263.1817887474989,0.383002427928744,5036.8934902586125,7447787852.810386,526.3635774949978,6,1499.4285774949976,1689945957.7689548,1387557.96,6,1499.4285774949976,1689945957.7689548,17,4017.8753226243034,5413839884.174147,1.953827168760147,0.9557515382416726,4017.875322624304,5413839884.174148,1.9538271687601472,0.9557515382416728,20089.376613121516,27069199420.870735,1001491.6921502809,2754259.6673034932,2754546.3831533613,True,True,False,False,mean_out_of_range,False,False,False,False,False,2754259.6673034932,263.1817887474989,puf,16.0,3754.6935338768044,4688968898.258123,0.8277838527101528,False,mean_out_of_range,False +demographic_midrank6_earn,MI,26,100k_200k,100000.0,200000.0,820010.0,112767563000.0,0.16829935574971316,0.28325472260908835,4871390.0,379740366000.0,819851.7986055952,120508059164.18417,823,459992.9937419209,63189760561.546585,137371.1369982283,100163.16353446226,199855.1446373064,0.003839948433094142,1353.7312633654808,0.006240222094696768,919985.9874838418,126379521123.09317,2707.4625267309616,770,425316.1646107923,58295770359.265,199887.36,735,403793.4193757032,55113534321.98343,1593,885309.1583527131,121485530920.81158,1.0798404783138218,1.008111256321004,863786.4131176241,118303294883.53001,1.053588483414628,0.9817044246173584,4426545.7917635655,607427654604.0579,100000.0,199887.36,146987.61333346393,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MI,26,200k_500k,200000.0,500000.0,263110.0,74339641000.0,0.05400085790576582,0.18672971047812933,4871390.0,379740366000.0,263059.2391935686,79442400079.81915,264,148434.38283482735,41736219968.48448,281176.2286567197,200222.72594789637,494590.2641565362,0.009769926777600278,1029.7481805947907,0.016748645152026485,296868.7656696547,83472439936.96896,2059.4963611895814,304,170793.05883017572,47922915239.88069,494455.36,299,167988.04497626628,46665948793.08563,568,319227.4416650031,89659135208.36519,1.2135192158375547,1.1286055698000168,316422.4278110936,88402168761.57011,1.2028561657104864,1.1127832073646906,1596137.2083250154,448295676041.8259,200000.0,494590.2641565362,301994.33528112096,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MI,26,500k_1m,500000.0,1000000.0,35290.0,23646431000.0,0.007242941262188727,0.05939618694783665,4871390.0,379740366000.0,35283.19163521354,25269549417.945644,40,21999.52233771608,14361767122.840149,652821.7705080928,514256.7068046208,970375.6636081532,0.04294027884971338,1126.84,0.07144103432536435,43999.04467543216,28723534245.680298,2253.68,32,17226.333755319356,10704645668.72068,927408.0,28,14854.184461039593,9299250066.246132,72,39225.856093035436,25066412791.56083,1.1117434187525999,0.9919612090019875,36853.70679875567,23661017189.08628,1.0445117091384306,0.9363450371728024,196129.28046517717,125332063957.80414,500000.0,970375.6636081532,716192.2787258843,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MI,26,1m_plus,1000000.0,inf,15920.0,47835791000.0,0.0032674305722313556,0.12015612779085529,4871390.0,379740366000.0,15916.928615262103,51119295111.42799,17,8648.466256809907,13176052853.557835,1523513.2406492135,1036729.4676919538,2832221.268351101,0.13472519258835433,705.2049999999999,0.2363160229819638,17296.932513619813,26352105707.11567,1410.4099999999999,13,6358.716970190776,7213467109.094053,1344900.0,11,5175.751032052512,5698563228.238285,30,15007.18322700068,20389519962.651886,0.9428441623223023,0.39886152417022863,13824.217288862419,18874616081.79612,0.8685229181468423,0.3692268455708146,75035.9161350034,101947599813.25943,1010000.6799999999,2832221.268351101,3211630.6070765285,True,True,False,False,mean_out_of_range,False,False,False,False,False,2832221.268351101,575.5183333333333,puf,29.0,14431.664893667348,18759524698.65925,0.3669754181423651,False,mean_out_of_range,False +demographic_midrank6_earn,MN,27,100k_200k,100000.0,200000.0,578700.0,80251831000.0,0.19936954162575576,0.2912260823516967,2871840.0,264184944000.0,572557.4244225104,86196672199.31816,513,275863.5293981126,38213659010.997314,138523.78056052944,100070.78458928458,199960.8759475456,0.0045571200620551635,1061.2066666666667,0.00734329231649158,551727.0587962252,76427318021.99463,2122.4133333333334,525,275243.4328414205,38186960490.65746,199600.0,502,261299.01746209883,36305907949.91876,1038,551106.9622395332,76400619501.65479,0.9625357016292078,0.8863523098083029,537162.5468602114,74519566960.91608,0.9381810870796081,0.8645295120976323,2755534.811197666,382003097508.2739,100000.0,199960.8759475456,150546.77229320246,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MN,27,200k_500k,200000.0,500000.0,208180.0,59153904000.0,0.0717206690438048,0.21466375910760668,2871840.0,264184944000.0,205970.28618676035,63535867142.993095,198,105669.95321996053,28471918637.227325,269441.9536456189,200128.30314503793,488127.47063069505,0.013266077706747245,986.0196280081441,0.02937795850567898,211339.90643992106,56943837274.45465,1972.0392560162882,245,129277.31735776871,35128874794.16213,496653.44,223,115735.65126537715,31656496392.294914,443,234947.2705777292,63600793431.38945,1.1406852654692845,1.0010218840367793,221405.60448533768,60128415029.52224,1.0749395390196312,0.9463696292079861,1174736.352888646,318003967156.94727,200000.0,496653.44,308471.0339499307,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MN,27,500k_1m,500000.0,1000000.0,28980.0,19405098000.0,0.009983980156064286,0.07041921159644003,2871840.0,264184944000.0,28672.39357139166,20842575807.41858,26,13725.70384044557,9387810492.565079,683958.4040056285,505682.4263905716,992289.3289359831,0.08272592158307412,901.4166666666666,0.12907417368398105,27451.40768089114,18775620985.130157,1802.8333333333333,22,10418.458700992489,6592376676.174978,959690.0,22,10418.458700992489,6532204977.927658,48,24144.16254143806,15980187168.740059,0.8420700030264751,0.7667088423424214,24144.16254143806,15920015470.492737,0.8420700030264751,0.7638218815942253,120720.81270719031,79900935843.70029,501092.0,992289.3289359831,726921.3766727376,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MN,27,1m_plus,1000000.0,inf,11400.0,31825471000.0,0.003927445610045993,0.11549153611619822,2871840.0,264184944000.0,11278.995400754484,34183016850.742085,9,4076.6204142957245,8412256642.708278,2063536.897673505,1082333.69375479,4952062.638449825,0.4286898250735055,728.2316666666666,0.6638050358351062,8153.240828591449,16824513285.416555,1456.4633333333331,9,4864.997779372694,5550190027.900057,1469620.0,8,4496.542779372694,5008701190.800056,18,8941.618193668417,13962446670.608334,0.7927672523982311,0.4084615097483773,8573.163193668419,13420957833.508335,0.7600998926814826,0.3926206365023331,44708.09096834208,69812233353.04167,1000065.96,4952062.638449825,3030679.208225893,True,True,True,True,,False,False,False,False,False,4952062.638449825,728.2316666666666,puf,17.0,8213.38652700175,10356197841.972286,0.3029632488902881,False,mean_out_of_range,False +demographic_midrank6_earn,MO,29,100k_200k,100000.0,200000.0,480730.0,65811105000.0,0.16748540212104743,0.27495853683603544,2880050.0,225671354000.0,482366.33237872267,69517766529.639,496,256608.66433210732,35132626655.041985,136911.30323476816,100061.70502322435,199651.49633421528,0.005071250246566585,999.1133333333332,0.008756239900366464,513217.32866421464,70265253310.08397,1998.2266666666665,483,249330.87649236,33729168823.4028,199974.12,468,240301.14165968972,32371157753.64464,979,505939.5408244673,68861795478.4448,1.0488699290630352,0.9905639797717819,496909.805991797,67503784408.68663,1.0301502667927822,0.9710292458821486,2529697.7041223366,344308977392.224,100000.0,199974.12,144118.19785767756,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MO,29,200k_500k,200000.0,500000.0,150640.0,42660430000.0,0.05248268461613501,0.17823510809605933,2880050.0,225671354000.0,151152.75582869965,45063182160.42729,177,90340.36459983683,26055139952.823093,288410.8346057102,200323.6228120558,499549.1682964798,0.013982745860096613,1071.4969530167396,0.021101296529279515,180680.72919967366,52110279905.64619,2142.993906033479,215,107422.67175129171,30415418077.43879,493921.36,199,99107.4770788207,27845938146.195568,392,197763.03635112854,56470558030.26189,1.3083654033754568,1.2531418182857956,189447.8416786575,53901078099.01866,1.2533535405292737,1.1961223223679143,988815.1817556426,282352790151.30945,200000.0,499549.1682964798,298130.07320552645,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MO,29,500k_1m,500000.0,1000000.0,20830.0,13922543000.0,0.007257131708404755,0.05816832968108934,2880050.0,225671354000.0,20900.902176791114,14706698721.63459,16,8327.610178974403,5609898059.68171,673650.4157994346,504360.45796588145,992978.0142387846,0.09861304869791376,668.5092031574399,0.15141111497247206,16655.220357948805,11219796119.36342,1337.0184063148797,12,6529.225038742228,3784324208.703922,680557.36,10,5300.181867285831,3038958402.402944,28,14856.835217716633,9394222268.385633,0.7108226760763483,0.6387716540739405,13627.792046260234,8648856462.084654,0.652019321031648,0.5880895927623496,74284.17608858316,46971111341.92817,500000.0,992978.0142387846,703639.4217454056,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MO,29,1m_plus,1000000.0,inf,9210.0,31535414000.0,0.0032087461850411805,0.13175483517498493,2880050.0,225671354000.0,9241.349450227852,33311574815.033253,10,4099.713150263644,8719141989.057632,2126768.793201281,1008082.4875006172,3646692.280868605,0.2591280513081569,619.5681178137332,0.3549802826528677,8199.426300527288,17438283978.115265,1239.1362356274665,9,4812.2676073104785,6059924826.146305,1781699.7999999998,8,3587.937400333035,4706315817.633341,19,8911.980757574122,14779066815.203936,0.9643592427244909,0.44366160703198754,7687.650550596679,13425457806.690973,0.8318753221053808,0.40302681218878217,44559.90378787061,73895334076.01968,1000000.0,3646692.280868605,3604622.354607739,True,True,True,True,,False,False,False,False,False,3646692.280868605,619.5681178137332,puf,18.0,8292.412639760389,12519692542.500303,0.37583610537831025,False,mean_out_of_range,False +demographic_midrank6_earn,MS,28,100k_200k,100000.0,200000.0,162360.0,22062994000.0,0.13204401467155719,0.27243644312770704,1245240.0,78974586000.0,164426.48882960988,24104866326.33833,467,90361.66626997896,12385006164.7768,137060.40045535876,100045.8593991741,199948.84348234994,0.00862956386646336,545.99,0.015610841037835155,180723.33253995792,24770012329.5536,1091.98,413,81081.77890260139,10942421246.80062,199515.47999999998,393,77333.48340686673,10461173847.1835,880,171443.44517258037,23327427411.577423,1.0426753401651843,0.967747636338832,167695.1496768457,22846180011.9603,1.0198791622353685,0.9477828958958915,857217.2258629019,116637137057.88712,100000.0,199948.84348234994,146599.65372925685,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MS,28,200k_500k,200000.0,500000.0,42400.0,11880308000.0,0.034483039061801085,0.146699439558459,1245240.0,78974586000.0,42939.65956131718,12979799398.745605,116,21825.106668834556,6359424231.353289,291381.1294418236,200406.94756157295,485848.07323886704,0.020231153020342493,307.98585700561887,0.033658908335641044,43650.21333766911,12718848462.706577,615.9717140112377,100,20294.092403553062,5605253524.540446,482814.0,94,18891.126365415614,5154217033.262748,216,42119.19907238761,11964677755.893734,0.9808927109038215,0.9217921932637899,40716.23303425017,11513641264.616035,0.9482197448749682,0.8870430821703406,210595.99536193802,59823388779.46867,200000.0,485848.07323886704,302279.9791929102,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MS,28,500k_1m,500000.0,1000000.0,5720.0,3850091000.0,0.004651957156450524,0.04754137619572379,1245240.0,78974586000.0,5792.803129498451,4206406841.212859,21,4238.40661251074,2694925222.541966,635834.5172893996,505866.4225290227,777475.1392746523,0.08248856695526491,377.8664916951129,0.11156056805196161,8476.81322502148,5389850445.083932,755.7329833902259,9,1947.0453976215065,1218424951.270633,807936.64,9,1947.0453976215065,1209815404.724741,30,6185.452010132247,3913350173.8125997,1.0677821897026547,0.9303308789513663,6185.452010132247,3904740627.266707,1.0677821897026547,0.9282841091378667,30927.260050661236,19566750869.063,500000.0,807936.64,726143.5866502606,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MS,28,1m_plus,1000000.0,inf,2590.0,7062788000.0,0.0021063931879732266,0.08721213636213887,1245240.0,78974586000.0,2622.9650533917807,7716430536.6382475,7,1263.9637455618417,2246417944.835542,1777280.3632409503,1138665.710057627,3952930.6195439924,0.3497147238937705,198.73999999999998,0.5973463513739627,2527.9274911236835,4492835889.671084,397.47999999999996,4,621.6448047105655,677558768.0642955,1143187.0799999998,4,621.6448047105655,677503951.0162289,11,1885.608550272407,2923976712.8998384,0.7188843586894568,0.37892866384483814,1885.6085502724072,2923921895.8517714,0.7188843586894569,0.3789215599063258,9428.042751362034,14619883564.499191,1012006.8,3952930.6195439924,2941873.177707823,True,True,True,True,,False,False,False,False,False,3952930.6195439924,198.73999999999998,puf,10.0,1686.8685502724072,2138371281.5716646,0.27711922908117964,False,mean_out_of_range,False +demographic_midrank6_earn,MT,30,100k_200k,100000.0,200000.0,96230.0,13150795000.0,0.17372544771808204,0.2788484167530567,550380.0,47309400000.0,95615.011915078,14779773926.386997,633,53838.84924066994,7348234032.240387,136485.71869343598,100071.9995957009,199930.63572491021,0.0041855231761059215,173.42128623302614,0.006828763363027293,107677.69848133987,14696468064.480774,346.8425724660523,636,53764.699769056075,7469080245.367098,199739.44,604,50952.35986741696,7085161823.481863,1269,107603.549009726,14817314277.607483,1.125383418926892,1.002539981423766,104791.2091080869,14433395855.72225,1.0959702562308824,0.9765640481112947,538017.74504863,74086571388.03741,100000.0,199930.63572491021,154575.87287144712,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MT,30,200k_500k,200000.0,500000.0,29200.0,8358106000.0,0.05271519352975159,0.17722461837130182,550380.0,47309400000.0,29013.38821490468,9393418202.684988,186,15081.724333191125,4410626451.345885,292448.41994885117,200065.99935361434,498299.83138944453,0.01261191888948552,143.2071087834638,0.02152556829812653,30163.44866638225,8821252902.69177,286.4142175669276,215,17478.942604281634,5028347854.268615,497141.76,191,15595.270763067787,4444206138.162575,401,32560.666937472757,9438974305.6145,1.1222635114621249,1.0048497897087654,30676.995096258914,8854832589.508461,1.0573392831279047,0.9426635116679273,162803.3346873638,47194871528.0725,200000.0,498299.83138944453,323761.50393422256,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MT,30,500k_1m,500000.0,1000000.0,4760.0,3207814000.0,0.008593298671288272,0.0680182342693571,550380.0,47309400000.0,4729.579722703639,3605163468.6647606,17,1410.593806149862,1035959829.8351687,734413.9931131301,508555.4054034057,991426.6096567793,0.12159989039894908,146.75654556695437,0.15905722935891517,2821.187612299724,2071919659.6703374,293.51309113390874,21,1737.87837084078,1144483214.480428,914885.6799999999,21,1664.8522187000667,1107444584.663544,38,3148.472176990642,2180443044.3155966,0.6656980876919936,0.6048111447005105,3075.446024849929,2143404414.4987125,0.6502577829667847,0.5945373720577953,15742.36088495321,10902215221.577984,500000.0,991426.6096567793,762258.7375700029,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,MT,30,1m_plus,1000000.0,inf,2250.0,6468084000.0,0.004061958405545928,0.1371487414126506,550380.0,47309400000.0,2235.6206672443677,7269280621.960948,9,686.7258361029948,1182759363.9024794,1722316.6826143553,1065029.9023074787,3078331.015061289,0.23201216456717685,89.1439415834388,0.37350422544938544,1373.4516722059896,2365518727.804959,178.2878831668776,5,321.9222125233948,383313020.0209942,1410540.6800000002,4,274.87887919006147,311216598.2011844,14,1008.6480486263895,1566072383.9234738,0.45117137419813347,0.21543705152780482,961.6047152930562,1493975962.103664,0.4301287465186716,0.2055190932635438,5043.240243131948,7830361919.617369,1008000.0,3078331.015061289,3251571.578518767,True,True,False,False,mean_out_of_range,False,False,False,False,False,3078331.015061289,89.1439415834388,puf,13.0,919.5041070429507,1291657823.7423623,0.17768715928233444,False,amount_cap|mean_out_of_range,False +demographic_midrank6_earn,NC,37,100k_200k,100000.0,200000.0,803940.0,110812148000.0,0.16327931580048377,0.26518004968331077,4943390.0,412484508000.0,807153.3369349535,122546428205.20479,845,441808.9069602552,60555448593.23322,137062.53459186314,100186.26617409232,199652.4312121782,0.0030400808539776947,971.6266666666666,0.005308894063055967,883617.8139205104,121110897186.46645,1943.253333333333,784,406249.08215141855,55743885405.59236,199091.52,763,393177.3841954069,54006976497.13619,1629,848057.9891116738,116299333998.82559,1.0506776721410207,0.9490226333164244,834986.2911556622,114562425090.36942,1.0344828583951597,0.9348491569132794,4240289.945558369,581496669994.1279,100000.0,199652.4312121782,151825.46190115114,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NC,37,200k_500k,200000.0,500000.0,307130.0,88280880000.0,0.06237775985994301,0.21126138755550877,4943390.0,412484508000.0,308357.5943140437,97629246594.98793,304,153787.40282901883,44116309834.458984,286865.5626072806,200351.30286352607,494567.1824833431,0.008822930154125753,1209.6285811035154,0.014692990950776136,307574.80565803766,88232619668.91797,2419.257162207031,328,166875.7680534527,46885805870.98432,480943.44,314,158405.2655125269,44466371830.25885,632,320663.1708824715,91002115705.4433,1.039906838019677,0.9321194096986419,312192.66834154574,88582681664.71783,1.012437099323055,0.9073375525696772,1603315.8544123573,455010578527.2165,200000.68,494567.1824833431,316610.48210007243,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NC,37,500k_1m,500000.0,1000000.0,44590.0,29794970000.0,0.00905617918195832,0.07130113229925616,4943390.0,412484508000.0,44768.22560630093,32950062045.37458,44,20301.223396561894,13870760435.322323,683247.5149094414,502261.05694624456,992309.8466679214,0.05252245010814971,771.5651164733135,0.09213173690529382,40602.44679312379,27741520870.644646,1543.130232946627,38,19678.698267721502,12072142363.560331,941209.3600000001,32,15536.958516434934,9415665533.889324,82,39979.9216642834,25942902798.88265,0.893042355885921,0.7873400287731606,35838.18191299683,23286425969.211647,0.8005271914988018,0.7067187290010132,199899.608321417,129714513994.41324,500000.68,992309.8466679214,736014.4745325132,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NC,37,1m_plus,1000000.0,inf,17210.0,43980820000.0,0.003495331772179921,0.10524871364024771,4943390.0,412484508000.0,17278.7881292765,48638100585.6509,24,12375.654897700406,34464015057.899,2784823.538049931,1027166.5625592396,22573859.247816764,0.4034274296728341,615.9216666666666,0.6015750942114261,24751.30979540081,68928030115.798,1231.8433333333332,25,12313.88347641405,14555788117.499462,2212866.08,25,12313.88347641405,14399648977.876219,49,24689.538374114458,49019803175.39847,1.4288929402566997,1.0078478103616606,24689.538374114454,48863664035.77522,1.4288929402566994,1.004637587558073,123447.6918705723,245099015876.99234,1000000.0,22573859.247816764,2814902.3080640947,True,True,True,True,,False,False,False,False,False,22573859.247816764,615.9216666666666,puf,48.0,24073.616707447793,35116074164.384415,0.7219869555256497,True,,False +demographic_midrank6_earn,ND,38,100k_200k,100000.0,200000.0,78140.0,10797859000.0,0.21043843585047936,0.29603770645150473,368090.0,33720657000.0,77460.28385220295,11183950248.057602,568,39355.05096006457,5294423266.895606,134529.7017215937,100070.78458928458,199261.25563639577,0.0038272206666582573,109.77854517547591,0.006915476776583709,78710.10192012913,10588846533.791212,219.55709035095182,590,41244.95908437393,5670405371.084368,199728.76,562,38785.83516962436,5340595397.034937,1158,80600.0100444385,10964828637.979973,1.0405333680189743,0.9804074942021773,78140.88612968894,10635018663.930542,1.008786467640431,0.9509179161251726,403000.05022219254,54824143189.899864,100000.0,199728.76,144383.02691217847,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ND,38,200k_500k,200000.0,500000.0,24570.0,6989129000.0,0.0661693418076053,0.19161629349426576,368090.0,33720657000.0,24356.273025961433,7239034239.4039955,135,9143.66960144408,2585055262.3001413,282715.29648139054,200636.61012593826,498312.64390087954,0.01780587305126874,134.49644164879157,0.030414844142814645,18287.33920288816,5170110524.600283,268.99288329758315,193,12676.431383740906,3486243548.9477863,487860.0,173,11443.919413807882,3151135327.305376,328,21820.100985184985,6071298811.247927,0.8958719161148697,0.8386890585763812,20587.589015251964,5736190589.605517,0.8452684445320343,0.7923972176263376,109100.50492592492,30356494056.23963,200000.0,498312.64390087954,297214.3657483181,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ND,38,500k_1m,500000.0,1000000.0,3730.0,2517673000.0,0.010045243994398363,0.0690253633164574,368090.0,33720657000.0,3697.5538618980936,2607695615.6658397,22,1652.6963474523718,1113957562.363592,674024.3385185399,505122.88979576295,955760.2333226282,0.08696921512829964,110.39333333333333,0.1449304155744363,3305.3926949047436,2227915124.727184,220.78666666666666,16,1194.0329682522215,782695963.4230337,965381.8,13,983.0959466061404,630788637.642693,38,2846.7293157045924,1896653525.7866256,0.7698952934909403,0.7273293379765647,2635.792294058512,1744746200.006285,0.7128475723421811,0.6690758651142602,14233.646578522963,9483267628.933128,505122.88979576295,965381.8,705248.8518253014,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,ND,38,1m_plus,1000000.0,inf,1720.0,5381091000.0,0.004632123236022838,0.14752978695562094,368090.0,33720657000.0,1705.0382419476464,5573498785.663948,10,683.9213224244897,1441347699.7126703,2107475.8929917794,1286301.8909797429,6327097.858429211,0.24764264686242632,56.41435732345862,0.39677097483510926,1367.8426448489795,2882695399.4253407,112.82871464691723,7,545.5551413215528,621705258.0461743,1239999.0,6,448.72654944461453,503069357.99352634,17,1229.4764637460426,2063052957.7588444,0.7210843918325405,0.3701540158338944,1132.6478718691042,1944417057.7061968,0.6642947026075456,0.3488683020273712,6147.382318730213,10315264788.794222,1008840.68,6327097.858429211,3268840.9259943645,True,True,True,True,,False,False,False,False,False,6327097.858429211,56.41435732345862,puf,16.0,1173.0621064225838,1706113798.352929,0.30611180946901145,False,mean_out_of_range,False +demographic_midrank6_earn,NE,31,100k_200k,100000.0,200000.0,176950.0,24298200000.0,0.18598124947448078,0.29194016056937117,940690.0,79864152000.0,174950.70156814932,26121486943.112747,473,90634.54923365035,12316097405.282501,135887.44589585095,100048.8147378646,199488.61566224793,0.00548087635162948,353.29345327476415,0.009891545678434026,181269.0984673007,24632194810.565002,706.5869065495283,484,93473.63739917599,13021661766.463778,199892.0,458,87644.7137247546,12149836875.698349,957,184108.18663282634,25337759171.74628,1.052343231450889,0.9699968162963591,178279.26295840496,24465934280.98085,1.0190257104454026,0.9366210405350449,920540.9331641317,126688795858.7314,100000.0,199892.0,149307.7004491893,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NE,31,200k_500k,200000.0,500000.0,54430.0,15383215000.0,0.05720802152526697,0.18482761098242498,940690.0,79864152000.0,53815.013768603385,16537539808.117315,164,30454.469769748102,8397572807.92713,275741.8819443327,201719.08727257696,495622.5283877945,0.013954836704065516,334.34666666666664,0.0265769895158147,60908.939539496205,16795145615.85426,668.6933333333333,186,33031.83366763688,9185808848.83794,492103.04,174,31048.939069414075,8603427861.386396,350,63486.30343738497,17583381656.765068,1.1797135964763794,1.0632404735397467,61503.40883916218,17001000669.313526,1.1428671021737122,1.0280247767548063,317431.5171869249,87916908283.82535,200025.0,495622.5283877945,307303.4577158392,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NE,31,500k_1m,500000.0,1000000.0,7650.0,5150065000.0,0.008040443958631127,0.061877456068461796,940690.0,79864152000.0,7563.565227444715,5536515283.176611,23,4135.168212920556,2777127817.2597303,671587.629393756,522965.54849450267,860908.0940974769,0.10000738461917551,359.3670575207877,0.1381870623395947,8270.336425841111,5554255634.519461,718.7341150415754,23,4432.9839755718995,2735921986.6794987,815561.3600000001,21,3948.271661062823,2521043474.0593705,46,8568.152188492455,5513049803.939228,1.1328192368068108,0.9957616879865417,8083.439873983379,5298171291.319101,1.068734073271726,0.9569505402465432,42840.76094246228,27565249019.69614,503203.6,860908.0940974769,731998.0877651629,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NE,31,1m_plus,1000000.0,inf,3280.0,10269299000.0,0.003447406037164719,0.12338448111361675,940690.0,79864152000.0,3242.9403851004795,11039886071.537018,16,2789.384242207533,8238435699.771124,2953496.1785154357,1065029.9023074787,11628268.006221866,0.4208281446014968,298.1497853419243,0.5815353092716707,5578.768484415066,16476871399.542248,596.2995706838486,13,2589.045575786963,3162584092.0768623,1780519.0,11,2065.1746798686304,2460296078.011916,29,5378.429817994494,11401019791.847988,1.658504067082272,1.0327117252814813,4854.558922076163,10698731777.78304,1.496962122517016,0.9690980240608151,26892.149089972474,57005098959.239944,1000000.68,11628268.006221866,3404282.7682738784,True,True,True,True,,False,False,False,False,False,11628268.006221866,298.1497853419243,puf,28.0,5080.28003265257,7934054181.89457,0.7186717444802362,True,,False +demographic_midrank6_earn,NH,33,100k_200k,100000.0,200000.0,159640.0,22293532000.0,0.2180070192688489,0.28003047615525734,731910.0,76794934000.0,159561.5174730632,24092953269.440628,512,76464.04620009799,10600520352.981623,138634.04933138416,100065.22721036721,199502.31365516482,0.004930959355431085,353.63940838949685,0.0067159388880810985,152928.09240019598,21201040705.963245,707.2788167789937,494,74683.76987168481,10529110549.63192,199923.28,472,71112.39375476527,10033736610.342756,1006,151147.81607178279,21129630902.61354,0.9472698584563111,0.8770046023960977,147576.43995486328,20634256963.32438,0.9248874182948078,0.8564436552283011,755739.0803589139,105648154513.0677,100000.0,199923.28,150994.7614625058,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NH,33,200k_500k,200000.0,500000.0,63870.0,18227814000.0,0.08722192633864558,0.2289607332606366,731910.0,76794934000.0,63838.60010651808,19699071053.70543,210,31667.341435186034,9234786424.806662,291618.6205181645,201027.294804706,493341.0490164172,0.01296776839520472,354.43039917804526,0.020721213353014578,63334.68287037207,18469572849.613323,708.8607983560905,237,34772.789358941634,9857205459.366861,499192.28,228,33333.533841586286,9510445339.528057,447,66440.13079412766,19091991884.173523,1.0407516875882112,0.9691823453056831,65000.87527677232,18745231764.334717,1.018206463931147,0.9515794787089062,332200.6539706383,95459959420.86761,200000.0,499192.28,308576.1752425098,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NH,33,500k_1m,500000.0,1000000.0,8670.0,5789741000.0,0.011839895120652219,0.07272530566469305,731910.0,76794934000.0,8665.737637756565,6257059642.014753,15,2126.1365166257247,1364309902.184585,641684.9960085381,510421.65358915064,916164.6831546761,0.10654723508622274,204.66166666666666,0.185294912188177,4252.273033251449,2728619804.36917,409.3233333333333,21,3028.950338809614,1869794103.671434,985004.0800000001,19,2688.936108460945,1679228955.0538583,36,5155.086855435339,3234104005.8560195,0.5948814827920312,0.5168728110148952,4815.07262508667,3043538857.2384434,0.5556448656035268,0.4864167886145374,25775.434277176697,16170520029.280098,500102.68,985004.0800000001,722045.8203988064,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NH,33,1m_plus,1000000.0,inf,3690.0,12262696000.0,0.005039124912941948,0.15403250592266715,731910.0,76794934000.0,3688.1859150313408,13252478866.307795,14,2015.0912715068134,3741722819.3731046,1856850.2937215234,1126141.959755845,4298004.432203211,0.12467602330852245,164.76520457786773,0.20328981718951497,4030.182543013627,7483445638.746209,329.53040915573547,6,870.579198770596,990968205.7400928,1420579.0,6,870.579198770596,963781946.9847448,20,2885.670470277409,4732691025.113197,0.7824091672051429,0.3571174172663856,2885.6704702774095,4705504766.357849,0.782409167205143,0.3550660079391491,14428.352351387046,23663455125.565987,1037900.0,4298004.432203211,3593224.195205783,True,True,True,True,,False,False,False,False,False,4298004.432203211,106.42999999999999,puf,19.0,2779.2404702774093,4275254413.39381,0.3226003569990915,True,,False +demographic_midrank6_earn,NJ,34,100k_200k,100000.0,200000.0,880310.0,123592362000.0,0.18914801636413642,0.2373921948340216,4638510.0,504015160000.0,877364.9653852105,134048575515.1745,742,428983.5631203643,60177668802.81444,140279.6609853552,100003.96426905834,199446.76932554645,0.003220816309234875,1109.21,0.005276184485521303,857967.1262407287,120355337605.62888,2218.42,697,405934.0199321633,56688070975.90026,199917.36000000002,677,392725.6087061443,54715146326.08694,1439,834917.5830525276,116865739778.7147,0.9516194696536051,0.8718163496298051,821709.1718265086,114892815128.90137,0.936564832476225,0.8570983666730224,4174587.915262638,584328698893.5735,100000.0,199917.36000000002,152785.42089530546,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NJ,34,200k_500k,200000.0,500000.0,461890.0,135262843000.0,0.09924410409790979,0.2598084756990054,4638510.0,504015160000.0,460344.76929919556,146706407506.66043,385,219706.07302536565,62254190844.5627,283352.1622198185,200122.90392405092,495334.3311494272,0.006848274665549416,867.2181662305014,0.013809342699504625,439412.1460507313,124508381689.1254,1734.4363324610028,474,264483.58282447164,75760689558.06033,494727.88,457,253329.49595512846,72617028570.34183,859,484189.6558498373,138014880402.62302,1.0517978874549654,0.9407556407947429,473035.5689804941,134871219414.90453,1.0275680327607901,0.9193273948091286,2420948.2792491866,690074402013.1151,200000.0,495334.3311494272,318688.11658270494,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NJ,34,500k_1m,500000.0,1000000.0,81250.0,54361330000.0,0.017457800467546754,0.10441547708908212,4638510.0,504015160000.0,80978.18204672029,58960430334.76714,61,35107.43155053412,23666735792.511295,674123.2481916277,503520.0654863835,984001.8722089143,0.03013298224054902,851.6074232337841,0.04867228836181378,70214.86310106824,47333471585.02259,1703.2148464675681,60,33665.31128845201,22601804060.382217,996347.2,55,31056.210667323878,20723265062.691147,121,68772.74283898613,46268539852.89352,0.8492749664262376,0.7847388424777216,66163.642217858,44390000855.20244,0.8170551690044726,0.752877830150894,343863.7141949306,231342699264.4676,500055.07999999996,996347.2,728102.6672190538,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NJ,34,1m_plus,1000000.0,inf,32050.0,84867370000.0,0.006886430830583059,0.16301048793040301,4638510.0,504015160000.0,31942.778271967825,92047355290.60652,26,14494.514071226802,46356797218.71269,3198230.516105125,1021186.9315610932,13437258.968477761,0.2097610413253943,723.6483333333333,0.28247196480281583,28989.028142453604,92713594437.42538,1447.2966666666666,18,11146.094701491296,15436208488.279058,2200598.0,17,10137.669701491297,14190415397.612408,44,25640.6087727181,61793005706.991745,0.802704403305446,0.6713175572714989,24632.183772718097,60547212616.3251,0.7711346697207825,0.6577832945353942,128203.0438635905,308965028534.95874,1000000.0,13437258.968477761,2881632.7279642094,True,True,True,True,,False,False,False,False,False,13437258.968477761,723.6483333333333,puf,43.0,24916.960439384766,52069155649.88444,0.5656779109567542,True,,False +demographic_midrank6_earn,NM,35,100k_200k,100000.0,200000.0,140990.0,19278068000.0,0.14377492020435842,0.28269407056190976,987790.0,64857077000.0,142019.4284286632,20541220244.143734,568,80346.81150862623,10987524436.279287,136751.21924532924,100190.71700561358,199692.94994508557,0.00492975992837265,287.89666666666665,0.008593815708623874,160693.62301725245,21975048872.558575,575.7933333333333,514,72902.13746996969,10009672895.834215,199862.0,494,69901.5962732988,9544792372.148193,1082,153248.9489785959,20997197332.113503,1.0790703122395209,1.0221981499906154,150248.40778192502,20532316808.427483,1.0579426311196236,0.9995665576041526,766244.7448929795,104985986660.5675,100000.0,199862.0,144636.69141198983,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NM,35,200k_500k,200000.0,500000.0,42330.0,11809183000.0,0.0431661278973721,0.17317015440969008,987790.0,64857077000.0,42639.069475745186,12582953276.562672,161,22361.565364924587,6120006119.043949,273684.15489568247,200397.03875221478,491441.6569469475,0.017286710333697768,235.30571702703497,0.03564597772348638,44723.130729849174,12240012238.087898,470.61143405406995,174,22848.743780593235,6080581451.06657,471060.0,168,21802.698574526577,5828519160.354329,335,45210.30914551782,12200587570.11052,1.0603024339270646,0.9696124035392902,44164.263939451164,11948525279.398277,1.0357698815302143,0.9495803581861743,226051.5457275891,61002937850.5526,200000.0,491441.6569469475,295103.843289084,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NM,35,500k_1m,500000.0,1000000.0,4770.0,3201822000.0,0.004864219940242497,0.04695159776356609,987790.0,64857077000.0,4804.827814772136,3411614218.0090227,20,2871.307635755206,1940672769.5217445,675884.6545578571,513537.38193105866,984247.7118523091,0.09774250145933677,255.34001870511796,0.13515429069552348,5742.615271510412,3881345539.043489,510.6800374102359,14,1946.011305372048,1152267771.7884505,840000.0,11,1631.546137354175,978172564.1595473,34,4817.318941127253,3092940541.3101945,1.0025997032228116,0.9065915263758039,4502.853773109381,2918845333.6812916,0.9371519535550566,0.8555613698270653,24086.594705636267,15464702706.550972,502040.0,984247.7118523091,710038.8087831645,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NM,35,1m_plus,1000000.0,inf,2070.0,5372992000.0,0.0021108878985958007,0.07878968886179759,987790.0,64857077000.0,2085.113957353946,5725045271.238917,15,2087.337784370288,4063270361.670152,1946628.0887048512,1069374.7773752934,3514605.0676725153,0.11561769935509025,134.69166666666666,0.16958792433356815,4174.675568740576,8126540723.340304,269.3833333333333,6,716.4550295530461,800827464.6775199,1171059.28,5,626.1883333333333,702277335.6777333,21,2803.7928139233336,4864097826.347673,1.344671260788742,0.8496173560030326,2713.526117703621,4765547697.347885,1.3013802474120617,0.8324034957922012,14018.964069616668,24320489131.738365,1069374.7773752934,3514605.0676725153,2745675.003060323,True,True,True,True,,False,False,False,False,False,3514605.0676725153,101.94301055095231,puf,20.0,2701.8498033723818,4505808404.851503,0.7870345458205316,True,,False +demographic_midrank6_earn,NV,32,100k_200k,100000.0,200000.0,253300.0,34760786000.0,0.16189544864788857,0.23257198885347005,1553270.0,145994535000.0,251467.34352130588,38040496257.510925,511,130835.54266256889,17736337622.207733,135562.07480982898,100030.42681786275,199945.6033411371,0.005583748882933601,542.1099605737533,0.00963385911158548,261671.08532513777,35472675244.41547,1084.2199211475065,493,125808.06340363578,17089085895.221548,199405.52000000002,485,124724.69981774088,16861526813.995483,1004,256643.60606620467,34825423517.429276,1.020584233612267,0.9154828917499506,255560.24248030977,34597864436.20322,1.0162760655188499,0.909500869862391,1283218.0303310233,174127117587.14636,100000.0,199945.6033411371,151274.10074337505,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NV,32,200k_500k,200000.0,500000.0,83380.0,23745722000.0,0.053291916732179034,0.1588741345578779,1553270.0,145994535000.0,82776.73550259173,25986151431.46921,168,43039.41832106553,12166134941.052284,282674.241791451,200497.69296714314,493182.32239572855,0.014751512877034838,434.86999999999995,0.0287369235315042,86078.83664213106,24332269882.10457,869.7399999999999,173,45212.917961939616,12381233627.383072,481998.0,162,41473.268639018905,11346057038.651564,341,88252.33628300515,24547368568.435356,1.066149030245847,0.9446327068928149,84512.68696008444,23512191979.70385,1.0209714897181268,0.9047970047319358,441261.6814150257,122736842842.17679,200000.0,493182.32239572855,313930.6143651387,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NV,32,500k_1m,500000.0,1000000.0,13530.0,9181639000.0,0.008647632926197918,0.06143106324363856,1553270.0,145994535000.0,13432.108795275439,10047934589.77931,33,8486.99233942447,5785655975.02812,681708.6364214232,507202.74123141647,983894.4969961275,0.06675336332371908,464.2632429093443,0.09991206707716366,16973.98467884894,11571311950.05624,928.5264858186886,31,7343.966342817983,4654831434.306921,907838.6799999999,30,7188.964412815764,4527904435.804379,64,15830.958682242455,10440487409.335041,1.1785907130093214,1.0390680110472685,15675.956752240236,10313560410.8325,1.1670510558814144,1.0264358628810526,79154.79341121227,52202437046.6752,503030.68,983894.4969961275,748053.3952579013,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NV,32,1m_plus,1000000.0,inf,8490.0,36071403000.0,0.005426341725308228,0.24134085853078885,1553270.0,145994535000.0,8428.573811669512,39474771106.28822,13,2778.208751173831,37536637817.03716,13511093.362288713,1044754.8082443604,113407693.2000385,0.784075672486457,259.52,0.8392797178490496,5556.417502347662,75073275634.07433,519.04,8,2002.5555227846125,2782165061.1249094,2771052.68,8,2002.5555227846125,2781313369.458243,21,4780.764273958444,40318802878.16208,0.567209160266164,1.0213815494864111,4780.7642739584435,40317951186.49541,0.5672091602661639,1.0213599738915995,23903.821369792222,201594014390.8104,1003002.04,113407693.2000385,4683446.095190469,True,True,True,True,,False,False,False,False,False,113407693.2000385,259.52,puf,20.0,4521.244273958443,10887238338.888083,0.2758024437829805,True,,False +demographic_midrank6_earn,NY,36,100k_200k,100000.0,200000.0,1689140.0,234086438000.0,0.17254909171516333,0.22254413651002117,9767160.0,1018899559000.0,1685314.5866366746,254038592796.2696,1448,882654.0926359996,122780858483.11768,139104.16266970357,100032.83046241337,199783.6137302083,0.0018716609863134593,1214.0083333333332,0.0031407184842401634,1765308.185271999,245561716966.23535,2428.0166666666664,1316,815433.2674740725,113082422743.32288,199722.96000000002,1256,775901.4321971858,107593365371.98003,2764,1698087.3601100722,235863281226.44055,1.0075788660317049,0.9284545258664496,1658555.5248331854,230374223855.09772,0.9841222155105823,0.9068473467724256,8490436.80055036,1179316406132.2026,100000.0,199783.6137302083,150736.60123196692,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NY,36,200k_500k,200000.0,500000.0,716560.0,207028428000.0,0.07319806360598734,0.19682029909945953,9767160.0,1018899559000.0,714937.1989298553,224674316749.37024,568,343449.9699032408,99208355626.86725,288858.2452192875,200081.15051378525,499208.41472739924,0.005861319540402932,1325.4385904491876,0.010367665177608301,686899.9398064816,198416711253.7345,2650.877180898375,700,419839.57185073243,118180009081.14862,499490.0,673,403304.3527697989,112999348399.57431,1268,763289.5417539732,217388364708.01587,1.0676315946302606,0.9675710506355649,746754.3226730397,212207704026.44156,1.044503382661875,0.9445125152563143,3816447.7087698663,1086941823540.0793,200000.0,499490.0,314257.4160159398,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NY,36,500k_1m,500000.0,1000000.0,128400.0,86985377000.0,0.013116321546009788,0.082696314142999,9767160.0,1018899559000.0,128109.21115132495,94399500268.92628,82,47167.72161632082,32493496789.72025,688892.6510810511,501408.1379603538,986706.8833374399,0.02917499614176002,1411.2316666666666,0.03309886836481246,94335.44323264164,64986993579.4405,2822.463333333333,81,51311.14765987056,33416644636.122402,996134.04,75,46239.25154537231,30286285137.25468,163,98478.8692761914,65910141425.84265,0.7687102932814592,0.6982043468246881,93406.97316169314,62779781926.97493,0.7291198839040474,0.6650435833677851,492394.346380957,329550707129.21326,500020.4,996134.04,736867.3916617897,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,NY,36,1m_plus,1000000.0,inf,71680.0,254646534000.0,0.007322258009485838,0.24209045815930502,9767160.0,1018899559000.0,71517.6655399297,276351110771.3443,49,28729.318491628754,95491962118.56807,3323850.5865147077,1005576.1554145028,33188420.04527938,0.31966324615759273,919.7566666666667,0.4434443023488452,57458.63698325751,190983924237.13614,1839.5133333333333,34,19193.190343368315,24257024429.4765,2237291.2800000003,33,18630.4688527839,23624965711.94137,83,47922.50883499707,119748986548.04457,0.6700793219857127,0.433321893347214,47359.78734441265,119116927830.50943,0.6622110353695866,0.43103473511661755,239612.54417498535,598744932740.2229,1000000.0,33188420.04527938,3864095.796262423,True,True,True,True,,False,False,False,False,False,33188420.04527938,919.7566666666667,puf,82.0,47002.75216833041,89223715955.26523,0.3228636053107448,True,,False +demographic_midrank6_earn,OH,39,100k_200k,100000.0,200000.0,929850.0,126466789000.0,0.16373827233539007,0.27668137746727534,5692070.0,438525537000.0,932009.7078121038,135933652407.5176,892,505686.6381350656,69626409091.3659,137686.86740101117,100327.85195399894,199374.99693921188,0.0027134100575529918,1633.3008617006844,0.004531104925412614,1011373.2762701312,139252818182.7318,3266.601723401369,866,491389.2395942964,68655634403.24841,199810.04,834,471346.90245620545,65708691028.531586,1758,997075.877729362,138282043494.61432,1.0698127598584797,1.0172760096231097,977033.5405912711,135335100119.89749,1.0483083302692855,0.9955967321040878,4985379.38864681,691410217473.0715,100000.0,199810.04,145850.03918749123,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OH,39,200k_500k,200000.0,500000.0,279500.0,79492606000.0,0.04921745132843096,0.17391224921938517,5692070.0,438525537000.0,280149.178183022,85443145654.40378,302,170413.9033383591,49346374093.489075,289567.7707440994,200735.10882619245,499588.234458957,0.009105664376336938,975.6360288559105,0.016654290233080325,340827.8066767182,98692748186.97815,1951.272057711821,335,183412.83062288054,51485879407.49599,489280.0,313,168641.0950648868,47281504049.112144,637,353826.7339612397,100832253500.98506,1.2629940100344823,1.1801093315176665,339054.9984032459,96627878142.60123,1.2102659040525208,1.1309026300768104,1769133.6698061984,504161267504.9253,200000.0,499588.234458957,304991.59843540075,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OH,39,500k_1m,500000.0,1000000.0,40440.0,27159266000.0,0.0071211224748541965,0.05941847015567176,5692070.0,438525537000.0,40533.92760544333,29192314071.382893,43,21735.683028827403,14159830141.85299,651455.4947766408,502517.64092600346,912414.4504479688,0.052431977282076526,923.5631123769873,0.08525130791399751,43471.366057654806,28319660283.70598,1847.1262247539746,42,22240.536817877564,14663861607.927067,955284.88,40,20911.790789021652,13617502190.11503,85,43976.21984670496,28823691749.780052,1.0849237279636175,0.9873726241536912,42647.47381784905,27777332331.968018,1.0521426453656046,0.951528962864853,219881.09923352482,144118458748.90027,501091.0,955284.88,720194.5578908726,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OH,39,1m_plus,1000000.0,inf,17100.0,47138553000.0,0.0030111571295748456,0.10312873347210677,5692070.0,438525537000.0,17139.71716253909,50667180918.89995,20,11209.126330530931,23621364385.33454,2107333.2290845625,1074633.9148873403,7015361.268342408,0.15482480866487516,715.68,0.23698330698905204,22418.252661061862,47242728770.66908,1431.36,9,5343.782053923079,6487329840.656529,2205198.0,8,4515.991129168616,5624625699.362212,29,16552.90838445401,30108694225.99107,0.9657632169469155,0.5942445125215143,15725.117459699548,29245990084.696754,0.9174665667219223,0.5772176299192397,82764.54192227006,150543471129.95535,1017455.48,7015361.268342408,2956127.0141399507,True,True,True,True,,False,False,False,False,False,7015361.268342408,282.7828279423794,puf,28.0,16270.125556511635,28124870527.491768,0.5550904948216803,True,,False +demographic_midrank6_earn,OK,40,100k_200k,100000.0,200000.0,263390.0,35943824000.0,0.15466871803303717,0.27309948262651323,1713370.0,125419368000.0,265004.7414162649,38374051433.322784,501,152923.76483156116,20623386284.688354,134860.57126179253,100189.49251880925,199350.5133565126,0.006096525888975841,748.5860000064508,0.009542733984035254,305847.5296631223,41246772569.37671,1497.1720000129017,507,156268.8061800277,21448410862.408295,199060.12,476,145181.29627372028,19997135030.67754,1008,309192.57101158885,42071797147.09665,1.1667435433765105,1.0963605763701787,298105.06110528146,40620521315.36589,1.1249046319402383,1.0585413788259102,1545962.8550579443,210358985735.48325,100000.0,199350.5133565126,144805.15038425475,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OK,40,200k_500k,200000.0,500000.0,77660.0,22012020000.0,0.045603753530679476,0.16724629170130764,1713370.0,125419368000.0,78136.10318686029,23500292779.95936,126,35435.706337258816,10141899504.236568,286205.6539161711,201781.58544286728,475780.3395984328,0.01892964618450944,435.8971125220464,0.03430816405947335,70871.41267451763,20283799008.473137,871.7942250440929,133,37177.17070219559,10597265597.811459,490723.16000000003,119,33400.28543430779,9451462607.301952,259,72612.8770394544,20739165102.048027,0.9293127514409408,0.882506669011972,68835.99177156661,19593362111.53852,0.8809754897418838,0.8337497023972144,363064.385197272,103695825510.24014,200000.0,490723.16000000003,300761.0031915601,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OK,40,500k_1m,500000.0,1000000.0,11380.0,7671779000.0,0.006682599989429982,0.0582898156780689,1713370.0,125419368000.0,11449.766343889649,8190481956.8192215,31,8662.033451631787,6118276066.086573,706332.5373020798,502248.8278122779,984923.443592408,0.07633262807228156,511.57899564549547,0.11818911157089783,17324.066903263574,12236552132.173145,1023.1579912909909,18,4905.229525856743,3219150999.623665,943006.2,17,4629.173789540224,3151986175.1528077,49,13567.26297748853,9337427065.71024,1.1849379777718274,1.140033897264873,13291.207241172011,9270262241.23938,1.160827814470212,1.1318335465620746,67836.31488744266,46687135328.55119,502054.72,984923.443592408,715340.5327952568,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OK,40,1m_plus,1000000.0,inf,5250.0,15861834000.0,0.003082921787742303,0.12051746800528616,1713370.0,125419368000.0,5282.18570346403,16934281498.34108,13,3934.8124812588185,7196560094.146005,1828946.1387099426,1078096.2179593032,5203888.930608097,0.1642418910761162,227.13333333333333,0.29273978832682435,7869.624962517637,14393120188.29201,454.26666666666665,14,4420.2896379531885,5077095376.219342,1425610.0,13,4156.847971286521,4779161131.279702,27,8355.102119212006,12273655470.365345,1.5817509243820742,0.7247815900289422,8091.6604525453395,11975721225.425707,1.531877314960523,0.7071880331385111,41775.510596060034,61368277351.82672,1007755.4,5203888.930608097,3205923.163064045,True,True,True,True,,False,False,False,False,False,5203888.930608097,227.13333333333333,puf,26.0,8127.968785878672,11091678831.259893,0.6549837282642584,True,,False +demographic_midrank6_earn,OR,41,100k_200k,100000.0,200000.0,386310.0,53351259000.0,0.18684071793730866,0.293447158369056,2030990.0,174318031000.0,379471.6297234945,57309205534.6456,588,196123.08402721124,27241276681.73536,138898.87983790704,100051.55272812123,199735.11632331501,0.0042582851102321365,583.3966666666666,0.00755822466446689,392246.1680544225,54482553363.47072,1166.7933333333333,591,199244.93403675576,27854737204.21956,199851.16,558,187367.26895683387,26101937344.19194,1179,395368.018063967,55096013885.95492,1.041890847945749,0.9613815681434857,383490.3529840451,53343214025.9273,1.0105903128080453,0.9307966063790448,1976840.090319835,275480069429.7746,100000.0,199851.16,151023.68937673807,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OR,41,200k_500k,200000.0,500000.0,137800.0,39131297000.0,0.06664764290792662,0.2152333070142837,2030990.0,174318031000.0,135360.6962695699,42034313428.48463,204,64343.42458351386,18396553271.095142,285911.9387905369,200036.14618423325,495945.6312963364,0.01145342401990902,434.9422855997876,0.022380248599885185,128686.84916702771,36793106542.190285,869.8845711995752,250,78952.41337474264,22381859564.44615,490278.8,229,71589.48241068375,20266763355.26853,454,143295.83795825648,40778412835.54129,1.058622199112243,0.9701220148372336,135932.9069941976,38663316626.36368,1.004227303348737,0.919803690671522,716479.1897912824,203892064177.70645,200019.04,495945.6312963364,310535.58815014944,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OR,41,500k_1m,500000.0,1000000.0,17580.0,11686918000.0,0.00850265284703447,0.06428138607173584,2030990.0,174318031000.0,17268.802905798537,12553930277.981806,24,7414.200352108601,5373830331.667805,724802.4165059804,504439.06318276,976111.1074638759,0.08678805088914085,477.7983333333333,0.13648585697064608,14828.400704217202,10747660663.33561,955.5966666666666,21,5872.211493245651,3761882627.9280076,938535.48,18,4853.860604826048,2913375247.372345,45,13286.41184535425,9135712959.595814,0.7693881224906982,0.727717356820026,12268.060956934649,8287205579.04015,0.7104175676714259,0.6601283737870509,66432.05922677125,45678564797.979065,503594.92,976111.1074638759,726971.6578771325,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,OR,41,1m_plus,1000000.0,inf,6320.0,16704586000.0,0.00305669886196006,0.09187999281200684,2030990.0,174318031000.0,6208.124821652262,17943841820.961777,14,4166.097494515254,11002413802.253422,2640940.0684305415,1051400.5553561458,15875050.993229922,0.39378223548396607,272.9159802144042,0.5938343019560697,8332.194989030508,22004827604.506844,545.8319604288084,10,3140.5112530588513,3900138877.223988,2250998.0,9,2701.27607327741,3321743867.524803,24,7306.608747574105,14902552679.47741,1.1769429509681617,0.8305107026784214,6867.373567792663,14324157669.778225,1.106191284015605,0.798277080945114,36533.043737870525,74512763397.38705,1000172.56,15875050.993229922,2890380.321990065,True,True,True,True,,False,False,False,False,False,15875050.993229922,272.9159802144042,puf,23.0,7033.6927673597,10569997576.706415,0.5890598948748351,False,mean_out_of_range,False +demographic_midrank6_earn,PA,42,100k_200k,100000.0,200000.0,1120820.0,154512752000.0,0.17787574946755666,0.26988994658326626,6325490.0,549715592000.0,1125151.2744995349,166217570670.44208,999,586628.0457162841,79471747012.26767,135472.12342231465,100110.91774433482,199870.84342043148,0.0027907309280902908,1245.4752216210832,0.004672834307258866,1173256.0914325682,158943494024.53534,2490.9504432421663,963,553329.6253069221,76494125597.2237,199815.71999999997,930,534475.892972745,73674789870.0392,1962,1139957.6710232063,155965872609.4914,1.013159471849914,0.9383236199422225,1121103.938689029,153146536882.3069,0.9964028518633585,0.9213619009385536,5699788.355116032,779829363047.457,100000.0,199870.84342043148,147729.08713486133,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,PA,42,200k_500k,200000.0,500000.0,405170.0,116054874000.0,0.064301062982254,0.2027149431950296,6325490.0,549715592000.0,406735.7308836179,124846389511.8783,355,204533.7044881595,58267222528.75622,284878.3415651151,200224.62220796032,499294.1825186709,0.007287231750703714,962.4113407262269,0.013370855188456706,409067.408976319,116534445057.51244,1924.8226814524537,419,237997.5332961773,68620083011.87828,495471.6,399,224170.15890120086,64101423832.20688,774,442531.23778433684,126887305540.63449,1.0880067920832885,1.0163474173080673,428703.86338936037,122368646360.9631,1.0540108253042277,0.9801536659521944,2212656.1889216844,634436527703.1725,200000.0,499294.1825186709,306947.1896178245,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,PA,42,500k_1m,500000.0,1000000.0,61070.0,40814233000.0,0.009691897021808752,0.07129088713795599,6325490.0,549715592000.0,61305.99769248105,43906037334.9469,59,31513.94236482138,21366440598.574905,677999.6089104356,504278.4010368119,996857.9830022147,0.03389509691341157,728.5346346390156,0.06416832515863435,63027.88472964276,42732881197.14981,1457.0692692780312,45,24961.210563093166,17178209176.198032,999999.0,40,22270.934768834653,14670024162.302727,104,56475.15292791455,38544649774.772934,0.9212011068020024,0.8778895139346455,53784.87713365603,36036464760.87763,0.877318356410217,0.8207633152125642,282375.7646395727,192723248873.8647,502114.16,999999.0,716178.4978230901,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,PA,42,1m_plus,1000000.0,inf,25310.0,77084708000.0,0.004016733479973465,0.13464511799328174,6325490.0,549715592000.0,25407.807460237356,82924112953.47581,27,16105.685896616376,31594531697.45794,1961700.476481762,1011688.1770092001,6481370.8226429075,0.15823351784178702,808.6777496434318,0.27055832302117,32211.371793232753,63189063394.91588,1617.3554992868635,14,8601.058638541275,10497604666.46077,2100075.6,13,8054.240772261293,9584501949.45888,41,24706.74453515765,42092136363.91871,0.972407578805182,0.5075982710545762,24159.92666887767,41179033646.91682,0.950885931684086,0.49658696584454415,123533.72267578825,210460681819.59354,1000017.0,6481370.8226429075,3263725.6513868887,True,True,True,True,,False,False,False,False,False,6481370.8226429075,484.07185525218296,puf,40.0,24222.672679905467,38954687165.224594,0.46976308552230084,True,,False +demographic_midrank6_earn,RI,44,100k_200k,100000.0,200000.0,101150.0,13995857000.0,0.17718569902079281,0.280723473261187,568360.0,47930497000.0,100705.2638954578,15074496968.727064,325,49411.12995527996,6755137748.520632,136712.8773342046,100056.36078865596,199310.61367189657,0.008239931375635296,329.00220702852846,0.012547596575168168,98822.25991055992,13510275497.041264,658.0044140570569,297,46615.42693433666,6529460185.011171,199001.36,293,46151.01898367345,6457546149.504407,622,96026.55688961662,13284597933.531803,0.9535405913766519,0.8812631002607575,95562.14893895341,13212683898.02504,0.9489290355085762,0.8764925241243893,480132.78444808314,66422989667.65901,100000.0,199310.61367189657,149689.26534342743,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,RI,44,200k_500k,200000.0,500000.0,35060.0,9898504000.0,0.06141503319494806,0.1985403554044424,568360.0,47930497000.0,34905.84826668068,10661367041.899094,117,17003.97765361099,5065025719.817973,297872.9931900585,200096.31192567802,499113.70203606534,0.023183381642594182,260.1700208490974,0.040239929913601945,34007.95530722198,10130051439.635946,520.3400416981948,151,22016.163093001553,6368029736.603348,494532.0,144,20756.847614691393,6009746331.478523,268,39020.14074661255,11433055456.421322,1.1178682852368658,1.0723817509977378,37760.82526830238,11074772051.296497,1.0817907927579835,1.0387759850845324,195100.70373306278,57165277282.10661,200000.0,499113.70203606534,305432.11442524614,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,RI,44,500k_1m,500000.0,1000000.0,4770.0,3191742000.0,0.008355667665142678,0.06401872354037395,568360.0,47930497000.0,4749.027274160492,3437724828.4230723,19,3042.751058696145,2069270437.3005126,680065.6371103917,501268.62227174535,869611.5522547867,0.1160297110249123,276.09666666666664,0.1862556414703847,6085.50211739229,4138540874.601025,552.1933333333333,21,2915.3578241470577,1931955042.3940325,936119.68,23,3188.0849076220793,2160259982.94195,40,5958.108882843204,4001225479.694545,1.2545956337756445,1.1639167412738958,6230.835966318224,4229530420.242462,1.3120236222310764,1.2303283803499192,29790.54441421602,20006127398.472725,500473.0,936119.68,723879.7821035414,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,RI,44,1m_plus,1000000.0,inf,1900.0,5648283000.0,0.0033282533676668945,0.11329107047336347,568360.0,47930497000.0,1891.6460840471561,6083587804.734831,8,934.7536488466942,1586993060.87801,1697766.104295023,1000286.3594652904,3076101.7258405657,0.22112029422131307,114.07827303001089,0.3631152842802233,1869.5072976933884,3173986121.75602,228.15654606002178,5,619.7195713413516,765915251.7716842,1625904.0,3,346.9924878663301,423532649.30806947,13,1554.473220188046,2352908312.649694,0.8217568990824476,0.3867632699931503,1281.7461367130243,2010525710.1860795,0.6775824228022308,0.3304835525873886,7772.36610094023,11764541563.24847,1000286.3594652904,3076101.7258405657,3216028.545740999,True,True,False,False,mean_out_of_range,False,False,False,False,False,3076101.7258405657,114.07827303001089,puf,12.0,1440.3949471580352,2001991940.1011662,0.3290807997450163,False,mean_out_of_range,False +demographic_midrank6_earn,SC,45,100k_200k,100000.0,200000.0,390410.0,53612230000.0,0.15692414053676007,0.2675120053680605,2481150.0,191369595000.0,389352.33129278227,57354616827.70162,562,211917.64358146995,28918767902.154823,136462.2945660362,100162.14044372637,199449.24733129574,0.004452225278671675,719.2433333333333,0.007354537347501161,423835.2871629399,57837535804.30965,1438.4866666666667,545,203290.16440855298,27624876493.956005,199379.0,521,193090.70223269562,26264930937.592953,1107,415207.80799002293,56543644396.11083,1.0664063744305619,0.9858603809693817,405008.34581416554,55183698839.74777,1.0402104039531495,0.962149202487474,2076039.0399501147,282718221980.55414,100000.0,199449.24733129574,147307.75243406088,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SC,45,200k_500k,200000.0,500000.0,131330.0,37435945000.0,0.052787703636414794,0.18679627241393276,2481150.0,191369595000.0,130974.21087749056,40049150745.22945,212,77493.64373766762,22407683510.18438,289155.11556069204,200880.19576409602,493870.1604002072,0.014069335105229386,681.2766666666666,0.02590925560419964,154987.28747533524,44815367020.36876,1362.5533333333333,214,76066.525074465,21165633139.60317,494040.0,206,73120.97337747093,20251308892.04447,426,153560.16881213262,43573316649.787544,1.1724458409279388,1.0879960208638852,150614.61711513856,42658992402.22885,1.1499562860968031,1.0651659675282947,767800.8440606631,217866583248.9377,200004.08000000002,494040.0,305778.90469361364,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SC,45,500k_1m,500000.0,1000000.0,19070.0,12762489000.0,0.007665129889183203,0.06368172012016313,2481150.0,191369595000.0,19018.337024546905,13653371000.660797,30,9403.671281008379,6300078421.448274,669959.4480904378,505102.24012740917,992729.3659758468,0.060900978571596626,613.8249220666929,0.11227085328637937,18807.342562016758,12600156842.896547,1227.6498441333858,29,10204.039023906127,6607546329.951423,892730.2000000001,25,8611.528514520243,5613667719.115264,59,19607.710304914504,12907624751.399698,1.030989737935914,0.9453800640717221,18015.19979552862,11913746140.563538,0.9472542090444849,0.8725864213304491,98038.55152457253,64538123756.99849,505102.24012740917,992729.3659758468,717905.6183008238,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SC,45,1m_plus,1000000.0,inf,8410.0,23441693000.0,0.0033803745342438772,0.11696835411719354,2481150.0,191369595000.0,8387.216275639195,25078033870.39889,14,5623.236720050452,44365684386.452515,7889705.981656497,1005069.5133787508,61780176.29283324,0.5554119042473725,398.8533333333333,0.6257316554629425,11246.473440100905,88731368772.90503,797.7066666666666,12,4949.3897204128425,6578193875.370864,2595198.0,9,3485.994720412843,4877885770.973554,26,10572.626440463293,50943878261.82338,1.2605644224498724,2.0314143654601047,9109.231440463296,49243570157.42607,1.0860851969349121,1.963613671307431,52863.13220231647,254719391309.11688,1005069.5133787508,61780176.29283324,2990030.666460628,True,True,True,True,,False,True,False,True,False,61780176.29283324,398.8533333333333,puf,25.0,10173.77310712996,26302649013.505867,1.048832183154217,True,,False +demographic_midrank6_earn,SD,46,100k_200k,100000.0,200000.0,83620.0,11389374000.0,0.1879523488424365,0.2820126738855975,441520.0,38863829000.0,82984.72106091256,12279095605.71681,410,38616.3093322156,5242410468.512088,135756.3827089663,100189.49251880925,197497.00919205757,0.007396012432997639,202.79166666666666,0.013393714104717278,77232.6186644312,10484820937.024176,405.5833333333333,426,39962.66631323195,5428033323.803623,199632.0,398,37360.12735342505,5077589311.346325,836,78578.97564544754,10670443792.315712,0.9469089567436022,0.8689926469297825,75976.43668564066,10319999779.858414,0.9155472924934257,0.8404527590007285,392894.8782272377,53352218961.57856,100000.0,199632.0,147968.14942239417,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SD,46,200k_500k,200000.0,500000.0,24210.0,6924886000.0,0.054416722859069455,0.17146733588807775,441520.0,38863829000.0,24026.071476736346,7465848189.083076,121,11592.475541232061,3297111449.037244,284418.2364077538,200034.79793327415,481600.1277977312,0.03801074801787213,306.4866666666666,0.06542741672504725,23184.951082464122,6594222898.074488,612.9733333333332,161,15014.370327836892,4174566764.329191,487356.83999999997,132,12088.996608636018,3340290546.320983,282,26606.845869068955,7471678213.366434,1.1074155795645362,1.0007808924231654,23681.47214986808,6637401995.358227,0.9856572753809574,0.8890352210836214,133034.22934534476,37358391066.83217,200000.0,487356.83999999997,310739.4480330257,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SD,46,500k_1m,500000.0,1000000.0,4030.0,2733704000.0,0.00905821532928748,0.06768933697776132,441520.0,38863829000.0,3999.3832321870086,2947257046.2371736,23,2246.464568323962,1495857988.0873802,665872.059225669,507102.62715522153,963888.8534745398,0.08180945638669748,126.96,0.15805492808654603,4492.929136647924,2991715976.1747603,253.92,16,1370.439673585749,867559025.312661,867619.08,12,992.5211809562761,592072670.1793457,39,3616.9042419097104,2363417013.400041,0.9043655063613034,0.8019039317990491,3238.985749280238,2087930658.266726,0.8098713129596842,0.7084318149081812,18084.52120954855,11817085067.000206,501446.48,963888.8534745398,736927.8899100415,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,SD,46,1m_plus,1000000.0,inf,2080.0,6239959000.0,0.004675207911890312,0.15450783533199444,441520.0,38863829000.0,2064.1977972578106,6727415671.550786,9,893.7767951095274,3069102324.5388975,3433857.6939254683,1247583.8320141237,10578569.710010583,0.3120910640253551,131.5174783948371,0.37986127616033544,1787.5535902190547,6138204649.077795,263.0349567896742,11,1066.512192970793,1405215908.8870435,2199998.0,10,1016.3998277061869,1344960220.563573,20,1960.28898808032,4474318233.4259405,0.9496614087489442,0.6650872269342817,1910.1766228157144,4414062545.10247,0.9253844885181517,0.6561304906085805,9801.4449404016,22371591167.129704,1000358.4,10578569.710010583,3259094.492052961,True,True,True,True,,False,False,False,False,False,10578569.710010583,73.07666666666667,puf,19.0,1887.2123214136536,3701271620.9174013,0.5501773343023107,True,,False +demographic_midrank6_earn,TN,47,100k_200k,100000.0,200000.0,517050.0,70720057000.0,0.1586247307935378,0.24975703537225308,3247910.0,267534018000.0,515198.8493916394,74859842782.64197,653,302027.5314982383,40377211266.314224,133687.18760842417,100229.8103251304,199598.55260412203,0.004353915186806776,1001.2145525850882,0.007437988068587853,604055.0629964767,80754422532.62845,2002.4291051701764,606,280076.2439439662,38329208255.727264,199520.0,596,275980.63214165176,37819321445.16164,1259,582103.7754422047,78706419522.04149,1.1298623359302304,1.051383713836645,578008.16363989,78196532711.47586,1.1219127611065467,1.0445724944750696,2910518.877211023,393532097610.20746,100000.0,199598.55260412203,145302.8143813568,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TN,47,200k_500k,200000.0,500000.0,173850.0,49800401000.0,0.05333509225114892,0.17587656234651208,3247910.0,267534018000.0,173227.5794734291,52715599329.5159,199,94113.63199397584,26787803217.99234,284632.55163403973,200093.90095858832,496538.0832702803,0.014142637730822371,786.6267108985709,0.027812017305721037,188227.26398795168,53575606435.98468,1573.2534217971418,213,98231.95906953052,27798110925.584396,492489.6,206,95094.02824459763,27041928598.6123,412,192345.59106350638,54585914143.57673,1.110363555550401,1.0354793426964535,189207.66023857347,53829731816.604645,1.0922490564938911,1.021134777964384,961727.955317532,272929570717.88364,200000.0,496538.0832702803,304314.12532437884,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TN,47,500k_1m,500000.0,1000000.0,27470.0,18459634000.0,0.008427466115266385,0.06519258690496878,3247910.0,267534018000.0,27371.651470434845,19540217551.93314,29,12917.742858923335,8915976072.122852,690211.6081343006,509468.78958421113,967968.8288447079,0.06579302798966555,620.02,0.11257113696582113,25835.48571784667,17831952144.245705,1240.04,25,11926.247793060207,8146985316.952826,976406.56,20,8929.565811803915,6347996173.296843,54,24843.990651983542,17062961389.075678,0.9076540624090028,0.8732226928245032,21847.308670727252,15263972245.419695,0.7981728356553625,0.7811567197167469,124219.9532599177,85314806945.37839,500021.76,976406.56,713885.2243913476,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TN,47,1m_plus,1000000.0,inf,13590.0,46625536000.0,0.004169248798925015,0.16466411564122832,3247910.0,267534018000.0,13541.344866516545,49354885200.62156,19,7658.596568303811,15557101914.097063,2031325.4230523563,1043981.0367808942,4485527.79911944,0.11414570393826752,486.5083272078957,0.1632293662626623,15317.193136607622,31114203828.194126,973.0166544157914,10,4661.398218130071,5757173856.265249,1533266.8,10,4661.398218130071,5717327801.667108,29,12319.994786433883,21314275770.362312,0.9098058507391925,0.43185746828753413,12319.994786433883,21274429715.76417,0.9098058507391925,0.43105013068688586,61599.973932169414,106571378851.81155,1019461.04,4485527.79911944,3644755.0584625127,True,True,True,True,,False,False,False,False,False,4485527.79911944,312.1282030463486,puf,28.0,12007.866583387535,19914216038.708717,0.4034902716875922,True,,False +demographic_midrank6_earn,TX,48,100k_200k,100000.0,200000.0,2156120.0,298758539000.0,0.1577097950179352,0.23530574793973377,13641000.0,1252113837000.0,2151319.313839654,330087074707.18256,2274,1243452.478402,171620465522.88342,138019.32000122618,100035.75238685704,199904.3107130963,0.001619991119675253,1392.4406916942892,0.002935566830462403,2486904.956804,343240931045.76685,2784.8813833885783,2189,1199161.0581087437,165802663999.16086,199965.6,2132,1169616.4630495491,162116122195.78027,4463,2442613.5365107437,337423129522.0443,1.1354025972793367,1.022224604890602,2413068.941451549,333736587718.6637,1.121669352349525,1.0110562130150615,12213067.682553718,1687115647610.2217,100000.0,199965.6,153434.71914359674,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TX,48,200k_500k,200000.0,500000.0,902260.0,260627984000.0,0.06599597408904988,0.20527367322928622,13641000.0,1252113837000.0,900251.0825487294,287958058415.16174,788,436682.81803256174,123118389262.84341,281940.081401744,200008.46636784426,499897.22276349354,0.004094128183202776,1028.5910203834433,0.008337871469732036,873365.6360651235,246236778525.68683,2057.1820407668865,951,531349.6157356194,149912242572.2105,497960.48000000004,899,496590.568999551,140394770934.02484,1739,968032.4337681812,273030631835.05396,1.0752916075674732,0.9481611083841027,933273.3870321128,263513160196.86826,1.0366812160779557,0.9151095185429741,4840162.168840907,1365153159175.2698,200000.0,499897.22276349354,319864.16234003805,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TX,48,500k_1m,500000.0,1000000.0,144090.0,96559988000.0,0.010539489622161235,0.07605178507514297,13641000.0,1252113837000.0,143769.17793590142,106685499532.0507,129,67406.55352407478,43739373723.024155,648889.0387698326,503577.40904639574,992063.7679731587,0.01655792145986662,846.8555155559537,0.0299723446476184,134813.10704814957,87478747446.04831,1693.7110311119075,87,46537.919815812886,30501595760.487743,986640.0,85,46145.271654110824,30501389631.134293,216,113944.47333988767,74240969483.5119,0.7925514701815232,0.6958862245492721,113551.82517818561,74240763354.15845,0.7898203690697319,0.6958842924277152,569722.3666994383,371204847417.5595,500000.0,992063.7679731587,742060.9971047881,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,TX,48,1m_plus,1000000.0,inf,69410.0,228634677000.0,0.005077007250150679,0.18007536740713692,13641000.0,1252113837000.0,69255.45589930542,252609856642.6299,80,43272.293387910715,122451938950.56812,2829800.0721352655,1001961.1239574697,28258483.831495717,0.19073847626686014,826.5233333333333,0.28453995667601306,86544.58677582143,244903877901.13623,1653.0466666666666,65,37237.46321261783,46574704291.940186,2293601.72,60,33818.87988999409,42165995385.89578,145,80509.75660052855,169026643242.5083,1.1625041746542888,0.6691213299789495,77091.1732779048,164617934336.4639,1.1131422395080641,0.6516686899092413,402548.78300264274,845133216212.5415,1000000.0,28258483.831495717,3647508.39283932,True,True,True,True,,False,False,False,False,False,28258483.831495717,826.5233333333333,puf,144.0,79683.2332671952,145670346991.15436,0.5766613738957774,True,,False +demographic_midrank6_earn,UT,49,100k_200k,100000.0,200000.0,301730.0,41562869000.0,0.19560721671539613,0.2850079776839072,1514460.0,141245443000.0,296239.3054267988,45100736037.488304,704,162036.52294850047,21957251694.254997,135508.04037700561,100041.448113486,199517.36599925903,0.004434065860067538,495.9360301374587,0.008301985207659818,324073.04589700093,43914503388.509995,991.8720602749174,705,164379.25523244395,22729850492.45117,199942.0,692,160490.1344489277,22110623754.057365,1409,326415.7781809444,44687102186.70617,1.1018651887219004,0.9908286673982811,322526.6573974282,44067875448.31236,1.0887368809238753,0.9770988085800326,1632078.8909047218,223435510933.53085,100000.0,199942.0,152244.2674259941,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,UT,49,200k_500k,200000.0,500000.0,97900.0,27797383000.0,0.06346716109249091,0.1906142695234783,1514460.0,141245443000.0,96118.47678813379,30163520069.222477,217,50906.69727596002,14736465246.967823,289479.89234270976,200293.7963259559,494758.9532256541,0.012051684434449815,378.16166666666663,0.022385088834749295,101813.39455192004,29472930493.935646,756.3233333333333,273,61665.77584593896,16954846208.931282,497287.60000000003,257,57403.44450825064,15613666922.409111,490,112572.47312189899,31691311455.899105,1.1711845306291466,1.0506503015288167,108310.14178421066,30350132169.376934,1.1268399729528586,1.0061866817840293,562862.365609495,158456557279.4955,200000.0,497287.60000000003,313816.0432536763,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,UT,49,500k_1m,500000.0,1000000.0,14130.0,9472981000.0,0.009160275651040823,0.0649588255673129,1514460.0,141245443000.0,13872.871062475284,10279329263.077147,32,6943.469019577515,5010898452.406787,721670.7438714376,501180.71675907,934477.7472349092,0.06836446257550562,384.07,0.09816579836962154,13886.93803915503,10021796904.813574,768.14,35,7529.408400513259,4871610711.047146,945070.0399999999,34,7334.830067179926,4708556376.384028,67,14472.877420090774,9882509163.453934,1.0432503376491724,0.9613963042269138,14278.29908675744,9719454828.790815,1.0292245219072784,0.9455339526580423,72364.38710045387,49412545817.26967,500000.68,945070.0399999999,740966.2510943171,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,UT,49,1m_plus,1000000.0,inf,7210.0,22499384000.0,0.004674139238783038,0.15428443914624032,1514460.0,141245443000.0,7078.79691156736,24414550852.831833,21,4310.342454114527,18294729780.553337,4244379.646236628,1055055.013557345,51266384.31190235,0.39767601940338,141.91317396069655,0.5101018710876049,8620.684908229054,36589459561.106674,283.8263479213931,18,4237.74671267726,5486175125.810253,2450075.52,17,3886.2586702206427,5081238884.701215,39,8548.089166791786,23780904906.363594,1.2075624253075372,0.9740463811811331,8196.60112433517,23375968665.25455,1.157908784039449,0.9574605245110697,42740.44583395893,118904524531.81796,1000000.0,51266384.31190235,3448968.9643357852,True,True,True,True,,False,False,False,False,False,51266384.31190235,141.91317396069655,puf,38.0,8406.175992831088,16505529591.172668,0.6760529690128704,True,,False +demographic_midrank6_earn,VA,51,100k_200k,100000.0,200000.0,818340.0,114540074000.0,0.1963354742122853,0.26835489542282787,4160340.0,410639684000.0,816822.326784339,123458958011.66893,800,438517.63518631086,61038206553.35635,139192.136542977,100030.76886502102,199295.12066699172,0.0034289884545899703,1390.0959482770402,0.005024862640133873,877035.2703726217,122076413106.7127,2780.1918965540804,783,437435.57384457043,61200039288.399284,199804.32,755,415645.15877548954,58156533577.9763,1583,875953.2090308813,122238245841.75565,1.072391363834689,0.9901124050488268,854162.7939618004,119194740131.33266,1.045714307693404,0.965460441680277,4379766.045154407,611191229208.7782,100000.0,199804.32,151145.42534323392,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VA,51,200k_500k,200000.0,500000.0,388790.0,111756124000.0,0.0932781839076599,0.2618324043415633,4160340.0,410639684000.0,388068.95963839383,120458230369.77316,331,172346.10877377348,48762406754.60157,282933.02994504233,200056.61012593826,493004.19900761195,0.0070408423846605684,731.1855081556948,0.013789181251542616,344692.21754754696,97524813509.20314,1462.3710163113897,411,206752.23902885645,58005991976.16076,495701.36,389,194715.49673494988,54599807801.16942,742,379098.3478026299,106768398730.76233,0.9768839748375577,0.8863520442149376,367061.60550872335,103362214555.771,0.945866955838866,0.8580751538394499,1895491.7390131496,533841993653.81165,200000.0,495701.36,310404.18816804426,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VA,51,500k_1m,500000.0,1000000.0,49620.0,32900926000.0,0.011904790466570859,0.07708327965672694,4160340.0,410639684000.0,49527.975969693405,35462820126.85819,42,20810.19789175393,14086825182.340958,676919.3284761065,502553.165480088,998365.818909402,0.04416710382872003,657.0914661693224,0.07975295242017422,41620.39578350786,28173650364.681915,1314.1829323386448,39,19462.708864964014,11985054746.005154,952827.36,36,17533.167567932913,10982244366.665905,81,40272.906756717945,26071879928.34611,0.813134515760573,0.7351891314644844,38343.365459686844,25069069549.006863,0.7741759017802278,0.7069113358534197,201364.53378358972,130359399641.73056,501468.68,998365.818909402,716015.9371050858,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VA,51,1m_plus,1000000.0,inf,19040.0,53174870000.0,0.004568061476894582,0.12458291827166504,4160340.0,410639684000.0,19004.688884783605,57315433920.58533,24,12007.625212403664,59138461094.23238,4925075.528935014,1005684.3722648126,44223527.79687524,0.4821329990383947,644.7383333333333,0.5912873122474961,24015.250424807327,118276922188.46477,1289.4766666666667,20,10815.364876892696,14309887001.860022,2276810.92,19,10347.77055787162,13131013594.202648,44,22822.990089296363,73448348096.0924,1.200913639137231,1.2814759144606738,22355.39577027528,72269474688.43503,1.1763094837176982,1.2609077476159318,114114.95044648182,367241740480.46204,1005684.3722648126,44223527.79687524,3015857.5216917023,True,True,True,True,,False,False,False,False,False,44223527.79687524,644.7383333333333,puf,43.0,22178.251755963032,44935744490.21472,0.784007751777234,True,,False +demographic_midrank6_earn,VT,50,100k_200k,100000.0,200000.0,59930.0,8224299000.0,0.17881545576607488,0.2929571967124302,336880.0,27149664000.0,60239.3507384753,8910884168.531477,494,31409.092494730357,4264540541.0237246,135774.07694091147,100166.78237809196,199378.00934753657,0.004425942584880991,102.65066596496683,0.007662251001473865,62818.184989460715,8529081082.047449,205.30133192993367,504,32417.078216913775,4482181330.835603,199950.96,482,30956.385218745727,4283266229.023574,998,63826.17071164413,8746721871.859325,1.0595428059764578,0.9815773279545159,62365.47771347608,8547806770.047298,1.0352946528960978,0.959254615858842,319130.85355822067,43733609359.29663,100000.0,199950.96,147924.6382853199,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VT,50,200k_500k,200000.0,500000.0,19010.0,5397017000.0,0.05672087125167835,0.1922467764035974,336880.0,27149664000.0,19108.1271072654,5847573555.21671,180,11292.069148611416,3202597584.3798633,283614.7691119733,200468.9316979951,498352.38691797614,0.014019397903231836,113.26706793339629,0.02356011333910167,22584.13829722283,6405195168.759727,226.53413586679258,188,11589.941874414439,3266965346.935578,489495.48,179,11088.045597124106,3131604516.8332133,368,22882.011023025858,6469562931.315441,1.197501507844038,1.1063670888831907,22380.114745735522,6334202101.213077,1.171235392150287,1.0832188841065946,114410.05511512929,32347814656.577206,200000.0,498352.38691797614,306025.46876471804,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VT,50,500k_1m,500000.0,1000000.0,2650.0,1772000000.0,0.00790690735491571,0.06312029178102915,336880.0,27149664000.0,2663.6789497240043,1919931017.4201806,24,1424.9918334183217,920975382.7802033,646302.2181474082,503695.39118325384,910628.6731729561,0.0709105001020278,111.8985853859561,0.11216659271003158,2849.9836668366434,1841950765.5604067,223.7971707719122,22,1359.0448353982717,836699618.0567997,892668.0,18,1060.4397316603752,627984343.8827521,46,2784.0366688165936,1757675000.8370028,1.045184769397626,0.9154886216687087,2485.4315650786966,1548959726.6629553,0.9330822565295354,0.8067788439317466,13920.183344082969,8788375004.185013,500013.6,910628.6731729561,720781.6909087761,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,VT,50,1m_plus,1000000.0,inf,1060.0,2725790000.0,0.0031627629419662836,0.09709518066242181,336880.0,27149664000.0,1065.4715798896016,2953345805.8542633,12,738.981735110403,1330425966.1779099,1800350.2697927249,1035576.9152560786,2824993.424552462,0.1637565945039328,77.12089648329483,0.2379685549110372,1477.963470220806,2660851932.3558197,154.24179296658966,8,513.567801873538,622904708.3528328,1599176.36,8,513.567801873538,620863412.3748012,20,1252.549536983941,1953330674.5307422,1.1755823061124946,0.6613958550531931,1252.549536983941,1951289378.552711,1.1755823061124946,0.6607046742324492,6262.747684919705,9766653372.653711,1035576.9152560786,2824993.424552462,2771867.2760471688,True,True,True,True,,False,False,False,False,False,2824993.424552462,77.12089648329483,puf,19.0,1175.4286405006462,1735464649.0698435,0.587626632015026,False,mean_out_of_range,False +demographic_midrank6_earn,WA,53,100k_200k,100000.0,200000.0,798150.0,111566500000.0,0.211045271015286,0.25686316119269464,3757410.0,416412736000.0,792983.6117655458,119833431275.18062,778,376912.20630106964,52461780885.41109,139188.330885484,100107.8308164714,199826.71878282807,0.003287241389401375,900.8083333333333,0.005576884202839596,753824.4126021393,104923561770.82217,1801.6166666666666,746,368620.69386813755,51694695033.08523,199796.28,732,361742.2159918736,50496311806.59975,1524,745532.9001692072,104156475918.4963,0.9401618004555082,0.8691771136830391,738654.4222929432,102958092692.01083,0.9314876263941435,0.8591767055020069,3727664.5008460362,520782379592.48157,100000.0,199826.71878282807,151117.15992260716,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WA,53,200k_500k,200000.0,500000.0,381320.0,111273945000.0,0.10082789293184095,0.25618960235448845,3757410.0,416412736000.0,378851.7331810285,119519198333.51166,343,159683.45706218836,46826303120.34384,293244.54756830225,200115.7628817928,495881.6754790639,0.007681759086227596,824.4913544149551,0.01366120239910931,319366.9141243767,93652606240.68768,1648.9827088299103,417,193972.28634243505,55538200661.93635,484726.0,400,186020.11220781592,53036467270.23448,760,353655.74340462335,102364503782.2802,0.9334937983130048,0.8564691297262366,345703.5692700043,99862770390.57832,0.9125035970333416,0.8355374850483588,1768278.7170231168,511822518911.401,200000.68,495881.6754790639,315477.5017919774,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WA,53,500k_1m,500000.0,1000000.0,67020.0,44630153000.0,0.01772129808111817,0.10275344466388767,3757410.0,416412736000.0,66586.18262297423,47937188782.71072,59,28951.95004508515,19694249044.275543,680239.1208055713,502696.2256031625,991779.9046291009,0.033868243659545376,703.0370313125261,0.06045890046269674,57903.9000901703,39388498088.55109,1406.0740626250522,70,34690.899234443474,21593022340.288876,861992.72,63,31151.06159815639,19503119684.53119,129,63642.84927952863,41287271384.564415,0.9557966348647525,0.8612785278609267,60103.01164324154,39197368728.80673,0.9026348902377863,0.8176818400111078,318214.2463976431,206436356922.82208,500757.88,991779.9046291009,719926.9712477998,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WA,53,1m_plus,1000000.0,inf,23370.0,60595722000.0,0.006179449957560902,0.1395114905251461,3757410.0,416412736000.0,23218.72706503891,65085785498.845535,22,9792.113063891762,27029000361.58568,2760282.707647098,1054269.6464906957,6097816.479506066,0.14484938380678064,642.0550799531555,0.18988805291856142,19584.226127783524,54058000723.17136,1284.110159906311,17,7699.3236149253735,10077246685.38643,2091029.2000000002,16,7116.543987151381,9374510006.370962,39,17491.436678817136,37106247046.972115,0.7533331448283607,0.5701129173224819,16908.65705104314,36403510367.95664,0.7282335936711613,0.5593158335409865,87457.18339408567,185531235234.86057,1000510.0,6097816.479506066,2803159.07571208,True,True,True,True,,False,False,False,False,False,6097816.479506066,642.0550799531555,puf,38.0,16849.38159886398,33191112999.683174,0.5099594749497477,True,,False +demographic_midrank6_earn,WI,55,100k_200k,100000.0,200000.0,562410.0,76968654000.0,0.1909951335142276,0.3019089530541686,2940980.0,245188540000.0,561712.8677626731,82933181778.6864,530,272575.29947883997,36807301051.22448,135035.3503109031,100189.49251880925,199814.61555179674,0.004397292789281142,957.0311503665877,0.0076030398685286976,545150.5989576799,73614602102.44896,1914.0623007331753,509,262332.80067422707,36672569924.523605,199485.68,503,257753.52460501314,36151966029.289986,1039,534908.100153067,73479870975.7481,0.9522803034290979,0.8860129251019792,530328.824083853,72959267080.51447,0.9441279602444858,0.8797355354725435,2674540.5007653353,367399354878.7405,100000.0,199814.61555179674,147643.3717977886,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WI,55,200k_500k,200000.0,500000.0,159080.0,44879178000.0,0.05402376529479086,0.17603823036728272,2940980.0,245188540000.0,158882.813256674,48356997735.10427,177,91023.7656781354,25090597724.398182,275648.86529875937,200442.18524183115,498257.9354858368,0.01279017525978449,983.2066666666666,0.025061515809325884,182047.5313562708,50181195448.796364,1966.4133333333332,211,105892.10390831027,29208426723.495865,487209.0,191,94672.8404446072,26070817675.54723,388,196915.86958644565,54299024447.89405,1.239378039387618,1.1228783214652762,185696.60612274258,51161415399.94541,1.1687645901810102,1.05799404008089,984579.3479322282,271495122239.47025,200010.2,498257.9354858368,304356.37904386735,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WI,55,500k_1m,500000.0,1000000.0,21750.0,14544149000.0,0.007386326974866112,0.05704931253772261,2940980.0,245188540000.0,21723.039906541737,15671217958.849848,26,11294.950022987705,7326184698.338689,648624.7998820972,513610.9497656262,993944.5539104908,0.07858715680578944,760.0916666666666,0.1377785122020988,22589.90004597541,14652369396.677378,1520.1833333333332,30,13219.268070358648,8426669935.003896,997674.0,28,11984.59516697495,7605452570.823157,56,24514.218093346353,15752854633.342583,1.1284892997855274,1.0052093382088807,23279.545189962657,14931637269.161846,1.071652277495112,0.9528064320443999,122571.09046673177,78764273166.71292,502000.0,997674.0,721409.9880252291,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WI,55,1m_plus,1000000.0,inf,9770.0,29043605000.0,0.003317904116985835,0.11392331712685033,2940980.0,245188540000.0,9757.889649973002,31294279525.44637,8,4330.3627321447175,5736919411.692484,1324812.6696423732,1049667.8538431944,2507873.0672642677,0.2697241553042401,617.0111887102926,0.6614554302611487,8660.725464289435,11473838823.384968,1234.0223774205851,5,2780.210648504565,3187676257.0233493,1393019.0,5,2780.210648504565,3165957463.180747,13,7110.573380649282,8924595668.715834,0.7286999172683774,0.28518297286438443,7110.573380649283,8902876874.87323,0.7286999172683775,0.2844889548466524,35552.86690324641,44622978343.57917,1000000.0,2507873.0672642677,3207074.546649844,True,True,False,False,mean_out_of_range,False,False,False,False,False,2507873.0672642677,617.0111887102926,puf,12.0,6493.56219193899,7377209926.348581,0.23573669176022852,False,mean_out_of_range,False +demographic_midrank6_earn,WV,54,100k_200k,100000.0,200000.0,122970.0,16583210000.0,0.15816280595248813,0.3129470084179094,776010.0,50488126000.0,122735.91904719031,17701587788.770992,641,68282.56124699938,9331269336.614227,136656.69778935367,100045.09927919024,199973.7507295691,0.004809435240751029,232.6096530294629,0.00863645872207481,136565.12249399876,18662538673.228455,465.2193060589258,581,61039.185359035786,8332981181.819972,199480.36,561,58899.26647113211,8077281496.148703,1222,129321.74660603517,17664250518.4342,1.053658518304757,0.9978907389109762,127181.82771813149,17408550832.76293,1.036223370513336,0.9834457247844203,646608.7330301759,88321252592.171,100000.0,199973.7507295691,144224.99889347772,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WV,54,200k_500k,200000.0,500000.0,27070.0,7502011000.0,0.03481716806647031,0.14157282574171398,776010.0,50488126000.0,27018.470591261626,8007949384.276364,130,13532.24058206932,3794620704.133602,280413.33444526576,200335.99854278372,495851.6943721262,0.017921701583785674,137.14999999999998,0.03728825770934379,27064.48116413864,7589241408.267204,274.29999999999995,148,14913.172244125082,3921841837.104858,470001.36,130,12935.396552710954,3375164513.321848,278,28445.4128261944,7716462541.23846,1.0528135828455916,0.9636003140066993,26467.637134780274,7169785217.45545,0.9796127077355924,0.8953334834425087,142227.064130972,38582312706.1923,200006.8,495851.6943721262,296387.96012629644,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WV,54,500k_1m,500000.0,1000000.0,3290.0,2204033000.0,0.004231565679301341,0.041593004840700325,776010.0,50488126000.0,3283.7372827946338,2352673797.1025085,27,3075.79812373248,2087661320.925394,678738.0825865184,500310.39595329104,993961.5518710039,0.10229845769528478,232.6096530294629,0.1769123020057516,6151.59624746496,4175322641.850788,465.2193060589258,15,1939.3128633399647,1280315476.432811,894483.4,14,1819.7969743261638,1177254571.5037978,42,5015.110987072445,3367976797.358205,1.5272570717972664,1.4315528151442487,4895.595098058644,3264915892.4291916,1.4908607712649393,1.3877469526162856,25075.554935362226,16839883986.791023,500310.39595329104,993961.5518710039,716462.2484964019,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WV,54,1m_plus,1000000.0,inf,1240.0,3107850000.0,0.0015948758183384996,0.05864922171953438,776010.0,50488126000.0,1237.639583788859,3317444548.3915315,16,1738.0496031200755,7565945857.198999,4353124.239732239,1018249.2033383404,76984912.10283597,0.642919175345316,63.184999999999995,0.823814711502013,3476.099206240151,15131891714.397999,126.36999999999999,10,1125.4217730367222,1404638051.3549938,2847267.6,10,1125.4217730367222,1399482056.1813345,26,2863.4713761567978,8970583908.553993,2.313655294856265,2.704064462178696,2863.4713761567978,8965427913.380333,2.313655294856265,2.7025102552888898,14317.35688078399,44852919542.769966,1018249.2033383404,76984912.10283597,2680460.9288882334,True,True,True,True,,False,True,True,True,True,76984912.10283597,63.184999999999995,puf,25.0,2800.286376156798,4106292237.3363028,1.237787754230058,True,,False +demographic_midrank6_earn,WY,56,100k_200k,100000.0,200000.0,57590.0,7888421000.0,0.20396670798654154,0.25240162301452307,280750.0,30549840000.0,57263.65326722154,8638796649.596874,525,26751.109691147132,3670681581.8877373,137216.04913842108,100165.03693732661,198927.9754366209,0.004920624760589895,108.32545292137031,0.00828249942822246,53502.219382294265,7341363163.775475,216.65090584274063,519,26628.192802618512,3672510198.0456214,199516.0,495,25375.451553345956,3487391854.7910833,1044,53379.302493765645,7343191779.933359,0.9321672552861844,0.850024844638058,52126.56124449309,7158073436.678821,0.9102905293388085,0.8285961259445607,266896.51246882824,36715958899.666794,100000.0,199516.0,150860.03348902354,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WY,56,200k_500k,200000.0,500000.0,15500.0,4381357000.0,0.054896405170887196,0.14018795622166233,280750.0,30549840000.0,15412.16575172658,4798127809.391488,122,6388.063445213021,1779973239.9230192,278640.5074384265,201084.5346343524,478624.37987098144,0.01967056795994504,74.35649069410069,0.04009428369458864,12776.126890426041,3559946479.8460383,148.71298138820137,145,7556.659264736294,1979158844.0043168,474648.8,127,6683.721965653912,1709998609.3852253,267,13944.722709949314,3759132083.9273357,0.9047867077595586,0.7834580972539953,13071.785410866933,3489971849.3082447,0.8481472118480519,0.7273611683451284,69723.61354974657,18795660419.63668,200000.0,478624.37987098144,311320.8024546432,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WY,56,500k_1m,500000.0,1000000.0,2410.0,1634199000.0,0.008535505578183106,0.05228859868517547,280750.0,30549840000.0,2396.343191074907,1789650025.7750647,20,1031.4803021522553,720679596.8554745,698684.7886011264,523422.30711693177,996908.5264949067,0.09598425398568315,70.44702747638239,0.16566054231081465,2062.9606043045105,1441359193.710949,140.89405495276478,12,542.3280103876401,350237381.0480898,920000.0,13,610.9396011223125,395973712.8128186,32,1573.8083125398953,1070916977.9035645,0.6567541403925311,0.5983946372083391,1642.4199032745678,1116653309.668293,0.6853859286064288,0.6239506571597376,7869.041562699476,5354584889.517822,523422.30711693177,996908.5264949067,746825.4265251118,True,True,True,True,,False,False,False,False,False,,,,,,,,,, +demographic_midrank6_earn,WY,56,1m_plus,1000000.0,inf,1730.0,9317608000.0,0.006127147157782894,0.29813056146637007,280750.0,30549840000.0,1720.1965645475475,10203933179.106064,9,368.67386702299257,563704801.4682378,1529006.669282263,1042525.2027245201,2232384.069851913,0.1777325485666584,62.20257230076873,0.2598548842693386,737.3477340459851,1127409602.9364755,124.40514460153746,9,475.35215386488744,524089151.1764771,1462336.0,6,289.3538964635483,326262896.31856245,18,844.0260208878799,1087793952.6447148,0.4906567297498811,0.1066053583016518,658.0277634865408,889967697.7868001,0.38253056484833625,0.08721810327111212,4220.1301044393995,5438969763.223574,1008381.56,2232384.069851913,5931841.3891786495,True,False,False,False,amount_cap|mean_out_of_range,False,False,False,False,False,2232384.069851913,41.12333333333333,puf,17.0,802.9026875545467,995990878.4121714,0.09760852613692117,False,amount_cap|mean_out_of_range,False diff --git a/experiments/940-state-agi-bands/support_oracle.py b/experiments/940-state-agi-bands/support_oracle.py new file mode 100644 index 0000000000..42b8232ee7 --- /dev/null +++ b/experiments/940-state-agi-bands/support_oracle.py @@ -0,0 +1,686 @@ +"""Support oracle for microcosm#940: state x AGI-band SOI targets vs frame support. + +Analysis only. Reads the offline #982 predictions (pre-calibration, PUF-clone +half) and SOI Historic Table 2 (TY2023 shares, TY2022 controls), derives the +state x band targets the #940 compiler rule would produce, and measures the +pre-calibration support each cell has under the solver's hard weight cap. + +AGI here is a PROXY everywhere: the sum of the 15 imputed income items on the +PUF half (no adjustments, no Social Security), and the saved survey income +total on the survey half. Nothing here is calibrated, aged, or engine-computed. + +Usage (deterministic, no side effects outside OUT):: + + PYTHONDONTWRITEBYTECODE=1 python support_oracle.py + +Inputs are absolute paths pinned below. +""" + +from __future__ import annotations + +import json +import os +from pathlib import Path + +import numpy as np +import pandas as pd + +OUT = Path(__file__).resolve().parent +# Inputs (override with environment variables): +# - the #982 offline predictions, archived with the tail lane's evidence; +# - SOI Historic Table 2 state files as registered in Chronicle +# (packages/irs_soi/historic_table_2_state_agi_2023 and _2022 read them). +LANE = Path( + os.environ.get( + "MICROCOSM_940_PREDICTIONS_DIR", + "/Users/maxghenis/PolicyEngine/_recovered/" + "lane958-958-964-982-archive-20260926/982", + ) +) +SOI_DIR = Path( + os.environ.get( + "MICROCOSM_940_SOI_DIR", + str(Path.home() / "PolicyEngine/chronicle/db/data/irs_soi/historic_table_2"), + ) +) +SOI_2023 = SOI_DIR / "23in55cmcsv.csv" +SOI_2022 = SOI_DIR / "22in55cmcsv.csv" + +VARIANTS = { + "current": "old design (QRF copied the unit's own survey income)", + "demographic_midrank6_earn": "chosen #1033 design (demographics + mid-rank + earnings flag)", +} + +# The 15 imputed income items whose sum is PROXY AGI (score_variants.py INCOME). +INCOME = [ + "employment_income_before_lsr", + "self_employment_income_before_lsr", + "taxable_interest_income", + "qualified_dividend_income", + "non_qualified_dividend_income", + "short_term_capital_gains", + "long_term_capital_gains_before_response", + "taxable_private_pension_income", + "taxable_ira_distributions", + "rental_income", + "estate_income", + "farm_income", + "miscellaneous_income", + "partnership_income", + "s_corp_income", +] +SIX_SURVEY = [ + "survey_puf_predictor_employment_income", + "survey_puf_predictor_self_employment_income", + "survey_puf_predictor_taxable_interest_income", + "survey_puf_predictor_dividend_income", + "survey_puf_predictor_short_term_capital_gains", + "survey_puf_predictor_long_term_capital_gains", +] + +# Historic Table 2 AGI_STUB -> band label for the four #940 bands. +BANDS = { + "100k_200k": (7, 1e5, 2e5), + "200k_500k": (8, 2e5, 5e5), + "500k_1m": (9, 5e5, 1e6), + "1m_plus": (10, 1e6, np.inf), +} +ALL_STUBS = list(range(1, 11)) + +# Solver contract, read from the worktree at +# packages/microcosm-build/src/microcosm/build/us/spec/calibration.yaml +# (hard_constraints.max_weight_ratio: 5.0, mass: conserve, solver.loss.params +# target_loss_cap: 1.0 with target_scale = max(abs(target), 1)) and +# packages/microcosm-calibrate/src/microcosm/calibrate/solve.py (log-weights, +# Adam, upper clamp only: log_w.clamp_(max=log(max_weight_ratio * w0))). +MAX_WEIGHT_RATIO = 5.0 +TARGET_LOSS_CAP = 1.0 + +# CBO AGI 2022->2024 chained factor supplied by the caller (fiscal_targets.py +# documents "x1.1203 over 2022->2024" for the CBO AGI default). +AGI_AGING_2022_TO_2024 = 1.1203460 + +# SOI Table 1.1 TY2023 $1M+ sub-bands (score_variants.py SOI_TABLE_1_1): +# band -> (returns, AGI $bn). +SOI_TABLE_1_1_1M_PLUS = { + "1m_to_1_5m": (368_931, 443.658), + "1_5m_to_2m": (147_290, 252.903), + "2m_to_5m": (203_229, 602.653), + "5m_to_10m": (49_262, 336.335), + "10m_plus": (30_382, 907.901), +} + +# Standard state postal -> FIPS for the 50 states + DC. +STATE_FIPS = { + "AL": "01", + "AK": "02", + "AZ": "04", + "AR": "05", + "CA": "06", + "CO": "08", + "CT": "09", + "DE": "10", + "DC": "11", + "FL": "12", + "GA": "13", + "HI": "15", + "ID": "16", + "IL": "17", + "IN": "18", + "IA": "19", + "KS": "20", + "KY": "21", + "LA": "22", + "ME": "23", + "MD": "24", + "MA": "25", + "MI": "26", + "MN": "27", + "MS": "28", + "MO": "29", + "MT": "30", + "NE": "31", + "NV": "32", + "NH": "33", + "NJ": "34", + "NM": "35", + "NY": "36", + "NC": "37", + "ND": "38", + "OH": "39", + "OK": "40", + "OR": "41", + "PA": "42", + "RI": "44", + "SC": "45", + "SD": "46", + "TN": "47", + "TX": "48", + "UT": "49", + "VT": "50", + "VA": "51", + "WA": "53", + "WV": "54", + "WI": "55", + "WY": "56", +} +FIPS_STATE = {v: k for k, v in STATE_FIPS.items()} +assert len(STATE_FIPS) == 51 and len(FIPS_STATE) == 51 +# Spot checks requested by the brief. +assert STATE_FIPS["CO"] == "08" and STATE_FIPS["CA"] == "06" +assert STATE_FIPS["DC"] == "11" and STATE_FIPS["WY"] == "56" + + +def read_ht2(path: Path) -> pd.DataFrame: + """Read Historic Table 2: STATE, AGI_STUB, N1 (returns), A00100 (AGI $).""" + raw = pd.read_csv( + path, + encoding="latin-1", + thousands=",", + usecols=["STATE", "AGI_STUB", "N1", "A00100"], + dtype={"STATE": str}, + ) + raw = raw[raw["STATE"].isin(STATE_FIPS)].copy() + raw["AGI_STUB"] = raw["AGI_STUB"].astype(int) + raw["returns"] = raw["N1"].astype(float) + raw["agi"] = raw["A00100"].astype(float) * 1_000.0 # $ thousands -> $ + assert raw.groupby("STATE").size().eq(11).all(), "expected stubs 0..10 per state" + return raw[["STATE", "AGI_STUB", "returns", "agi"]] + + +def build_targets() -> tuple[pd.DataFrame, dict]: + """State x band targets at 2024 under the #940 compiler rule.""" + t23 = read_ht2(SOI_2023) + t22 = read_ht2(SOI_2022) + rows = [] + stub0_check = {} + for st in sorted(STATE_FIPS): + s23 = t23[t23["STATE"] == st].set_index("AGI_STUB") + s22 = t22[t22["STATE"] == st].set_index("AGI_STUB") + denom_n = float(s23.loc[ALL_STUBS, "returns"].sum()) + denom_a = float(s23.loc[ALL_STUBS, "agi"].sum()) + stub0_check[st] = { + "ty2023_stub0_returns": float(s23.loc[0, "returns"]), + "ty2023_sum_stubs_1_10_returns": denom_n, + "ty2023_stub0_agi": float(s23.loc[0, "agi"]), + "ty2023_sum_stubs_1_10_agi": denom_a, + } + control_n = float(s22.loc[0, "returns"]) + control_a = float(s22.loc[0, "agi"]) + for band, (stub, low, high) in BANDS.items(): + v_n = float(s23.loc[stub, "returns"]) + v_a = float(s23.loc[stub, "agi"]) + share_n = v_n / denom_n + share_a = v_a / denom_a + rows.append( + { + "state": st, + "fips": STATE_FIPS[st], + "band": band, + "band_low": low, + "band_high": high, + "soi2023_returns": v_n, + "soi2023_agi": v_a, + "soi2023_share_returns": share_n, + "soi2023_share_agi": share_a, + "ty2022_control_returns": control_n, + "ty2022_control_agi": control_a, + "target_returns_2024": share_n * control_n, + "target_agi_2024": share_a * control_a * AGI_AGING_2022_TO_2024, + } + ) + targets = pd.DataFrame(rows) + return targets, stub0_check + + +def load_variant(name: str) -> pd.DataFrame: + d = pd.read_parquet(LANE / f"imputed_{name}.parquet") + assert len(d) == 231_007, len(d) + assert d["tax_unit_id"].is_unique + out = pd.DataFrame( + { + "fips": d["state_fips"].astype(int).map(lambda x: f"{x:02d}"), + "w": d["w"].astype(float), + "proxy_agi": d[INCOME].sum(axis=1).astype(float), + "survey_total": d["survey_total"].astype(float), + "survey_six": d[SIX_SURVEY].sum(axis=1).astype(float), + } + ) + assert set(out["fips"]) == set(FIPS_STATE), "state_fips must be the 50 states + DC" + assert (out["w"] > 0).all() + return out + + +def band_mask(values: np.ndarray, low: float, high: float) -> np.ndarray: + return (values >= low) & (values < high) + + +def cell_stats(w: np.ndarray, a: np.ndarray, low: float) -> dict: + """PUF-half style stats for one cell's records (weights w, income a).""" + n = int(len(w)) + if n == 0: + return { + "n": 0, + "N": 0.0, + "A": 0.0, + "mean_agi": np.nan, + "max_agi": np.nan, + "largest_share_of_A": np.nan, + "largest_w": np.nan, + "largest_share_above_low": np.nan, + "min_agi": np.nan, + } + contrib = w * a + amount = float(contrib.sum()) + i = int(np.argmax(contrib)) # largest single-record contribution to A + above = w * np.maximum(a - low, 0.0) if np.isfinite(low) else contrib + return { + "n": n, + "N": float(w.sum()), + "A": amount, + "mean_agi": amount / float(w.sum()), + "max_agi": float(a.max()), + "min_agi": float(a.min()), + "largest_share_of_A": float(contrib[i] / amount) if amount else np.nan, + "largest_w": float(w[i]), + "largest_share_above_low": float(above.max() / above.sum()) + if above.sum() > 0 + else np.nan, + } + + +def feasibility(w: np.ndarray, a: np.ndarray, target_n: float, target_a: float) -> dict: + """Necessary conditions for (target_n, target_a) under the 5x upper cap. + + Weights may rise to MAX_WEIGHT_RATIO * w0 and fall to ~0 (no lower bound), + so within one cell: N <= 5*sum(w0), A <= 5*sum(w0*a) (all a > 0 in these + bands), and the target mean must lie inside [min(a), max(a)]. These are + per-cell NECESSARY conditions only: every record's weight is shared across + all targets it enters, and mass is conserved frame-wide. + """ + n = int(len(w)) + cap_n = MAX_WEIGHT_RATIO * float(w.sum()) if n else 0.0 + cap_a = MAX_WEIGHT_RATIO * float((w * a).sum()) if n else 0.0 + target_mean = target_a / target_n if target_n > 0 else np.nan + failing = [] + if n == 0: + failing.append("empty_support") + c1 = c2 = c3 = False + else: + c1 = target_n <= cap_n + c2 = target_a <= cap_a + c3 = bool(a.min() <= target_mean <= a.max()) + if not c1: + failing.append("count_cap") + if not c2: + failing.append("amount_cap") + if not c3: + failing.append("mean_out_of_range") + return { + "cap_N_5x": cap_n, + "cap_A_5x": cap_a, + "frame_min_agi": float(a.min()) if n else np.nan, + "frame_max_agi": float(a.max()) if n else np.nan, + "target_mean_agi": target_mean, + "c1_count_reachable": bool(c1), + "c2_amount_reachable": bool(c2), + "c3_mean_in_range": bool(c3), + "feasible_necessary": bool(c1 and c2 and c3), + "failing_conditions": "|".join(failing) if failing else "", + } + + +def analyze_variant(name: str, targets: pd.DataFrame) -> pd.DataFrame: + d = load_variant(name) + rows = [] + for st in sorted(STATE_FIPS): + fips = STATE_FIPS[st] + s = d[d["fips"] == fips] + w_all = s["w"].to_numpy() + agi = s["proxy_agi"].to_numpy() + svy = s["survey_total"].to_numpy() + svy6 = s["survey_six"].to_numpy() + for band, (_stub, low, high) in BANDS.items(): + tgt = targets[(targets["state"] == st) & (targets["band"] == band)].iloc[0] + m_puf = band_mask(agi, low, high) + m_svy = band_mask(svy, low, high) + m_svy6 = band_mask(svy6, low, high) + puf = cell_stats(w_all[m_puf], agi[m_puf], low) + svy_c = cell_stats(w_all[m_svy], svy[m_svy], low) + svy6_c = cell_stats(w_all[m_svy6], svy6[m_svy6], low) + # Frame view: PUF clone at w with proxy AGI + survey twin at w with + # survey income. Each channel carries half the population. + fw = np.concatenate([w_all[m_puf], w_all[m_svy]]) + fa = np.concatenate([agi[m_puf], svy[m_svy]]) + frame_n = int(len(fw)) + frame_count = float(fw.sum()) + frame_amount = float((fw * fa).sum()) + tn, ta = float(tgt["target_returns_2024"]), float(tgt["target_agi_2024"]) + feas = feasibility(fw, fa, tn, ta) + frame6_count = puf["N"] + svy6_c["N"] + frame6_amount = puf["A"] + svy6_c["A"] + row = { + "variant": name, + "state": st, + "fips": fips, + "band": band, + **{k: tgt[k] for k in tgt.index if k not in ("state", "fips", "band")}, + # PUF half (weight w = half-population weight). + "puf_n": puf["n"], + "puf_N": puf["N"], + "puf_A": puf["A"], + "puf_mean_agi": puf["mean_agi"], + "puf_min_agi": puf["min_agi"], + "puf_max_agi": puf["max_agi"], + "puf_largest_share_of_A": puf["largest_share_of_A"], + "puf_largest_w": puf["largest_w"], + "puf_largest_share_above_low": puf["largest_share_above_low"], + # x2 view (as if the PUF half were the whole population). + "puf_N_x2": 2 * puf["N"], + "puf_A_x2": 2 * puf["A"], + "puf_largest_w_x2": 2 * puf["largest_w"] if puf["n"] else np.nan, + # Survey half, income = survey_total (broad saved survey total). + "svy_n": svy_c["n"], + "svy_N": svy_c["N"], + "svy_A": svy_c["A"], + "svy_max_income": svy_c["max_agi"], + # Survey half, income = six predictor items only (sensitivity). + "svy6_n": svy6_c["n"], + "svy6_N": svy6_c["N"], + "svy6_A": svy6_c["A"], + # Frame view. + "frame_n": frame_n, + "frame_N": frame_count, + "frame_A": frame_amount, + "ratio_N": frame_count / tn if tn else np.nan, + "ratio_A": frame_amount / ta if ta else np.nan, + "frame6_N": frame6_count, + "frame6_A": frame6_amount, + "ratio6_N": frame6_count / tn if tn else np.nan, + "ratio6_A": frame6_amount / ta if ta else np.nan, + **feas, + "zero_support": frame_n == 0, + # Loss cap 1.0 on |est-target|/|target|: a start beyond 2x the + # target (either direction past 0) sits on the clamp with zero + # gradient. Only the over-2x side is reachable for a positive + # estimate; under-target starts always have gradient. + "over2x_A": bool(frame_amount > 2.0 * ta), + "over2x_N": bool(frame_count > 2.0 * tn), + "start_loss_A_capped": bool( + abs(frame_amount - ta) / max(abs(ta), 1) >= TARGET_LOSS_CAP + ), + "start_loss_N_capped": bool( + abs(frame_count - tn) / max(abs(tn), 1) >= TARGET_LOSS_CAP + ), + } + # Sensitivity: 1m_plus with the single largest proxy-AGI record removed. + if band == "1m_plus" and frame_n > 0: + j = int(np.argmax(fa)) + keep = np.ones(frame_n, dtype=bool) + keep[j] = False + fw2, fa2 = fw[keep], fa[keep] + feas2 = feasibility(fw2, fa2, tn, ta) + row.update( + { + "drop1_removed_agi": float(fa[j]), + "drop1_removed_w": float(fw[j]), + "drop1_removed_channel": "puf" + if j < int(m_puf.sum()) + else "survey", + "drop1_frame_n": int(len(fw2)), + "drop1_frame_N": float(fw2.sum()), + "drop1_frame_A": float((fw2 * fa2).sum()), + "drop1_ratio_A": float((fw2 * fa2).sum() / ta) + if ta + else np.nan, + "drop1_feasible_necessary": feas2["feasible_necessary"], + "drop1_failing_conditions": feas2["failing_conditions"], + "drop1_over2x_A": bool((fw2 * fa2).sum() > 2.0 * ta), + } + ) + rows.append(row) + return pd.DataFrame(rows) + + +def colorado_reproduction(chosen: pd.DataFrame) -> dict: + """Check the #982 README Colorado $1M+ figures against the x2 view.""" + co = chosen[(chosen["state"] == "CO") & (chosen["band"] == "1m_plus")].iloc[0] + readme = { + "records": 15, + "returns_x2": 14_847, + "largest_share_of_income_above_1m": 0.840, + "largest_proxy_agi": 125.4e6, + "largest_weight_x2": 867, + } + got = { + "records": int(co["puf_n"]), + "returns_x2": float(co["puf_N_x2"]), + "largest_share_of_income_above_1m": float(co["puf_largest_share_above_low"]), + "largest_proxy_agi": float(co["puf_max_agi"]), + "largest_weight_x2": float(co["puf_largest_w_x2"]), + } + reproduces = ( + got["records"] == readme["records"] + and abs(got["returns_x2"] - readme["returns_x2"]) < 1.0 + and abs( + got["largest_share_of_income_above_1m"] + - readme["largest_share_of_income_above_1m"] + ) + < 0.0015 + and abs(got["largest_proxy_agi"] - readme["largest_proxy_agi"]) < 0.05e6 + and abs(got["largest_weight_x2"] - readme["largest_weight_x2"]) < 1.0 + ) + return {"readme_982": readme, "computed": got, "reproduces": bool(reproduces)} + + +def summarize(all_rows: pd.DataFrame, targets: pd.DataFrame, stub0_check: dict) -> dict: + summary: dict = { + "labels": { + "agi": "PROXY AGI: sum of 15 imputed income items on the PUF half; " + "saved survey_total (broad survey income list from compare_predictors.py " + "SURVEY, up to 14 items, NOT the six predictor items) on the survey half", + "status": "pre-calibration, offline #982 predictions, 8-tree fits", + "targets": "share(TY2023 HT2 stub b / sum stubs 1..10) x TY2022 HT2 stub-0 " + "control; AGI aged x1.1203460 to 2024; counts not aged", + "solver": "max_weight_ratio 5.0 (upper clamp only), mass conserve, " + "target_loss_cap 1.0 on |est-target|/max(|target|,1)", + }, + "stub0_consistency": { + "max_abs_rel_diff_returns": max( + abs(v["ty2023_stub0_returns"] / v["ty2023_sum_stubs_1_10_returns"] - 1) + for v in stub0_check.values() + ), + "max_abs_rel_diff_agi": max( + abs(v["ty2023_stub0_agi"] / v["ty2023_sum_stubs_1_10_agi"] - 1) + for v in stub0_check.values() + ), + }, + "targets_national_sums": {}, + "variants": {}, + } + # National sums of the derived targets (sum over 51 states). + for band in BANDS: + t = targets[targets["band"] == band] + summary["targets_national_sums"][band] = { + "soi2023_returns_51": float(t["soi2023_returns"].sum()), + "soi2023_agi_51": float(t["soi2023_agi"].sum()), + "target_returns_2024_51": float(t["target_returns_2024"].sum()), + "target_agi_2024_51": float(t["target_agi_2024"].sum()), + } + t11_returns = sum(v[0] for v in SOI_TABLE_1_1_1M_PLUS.values()) + t11_agi = sum(v[1] for v in SOI_TABLE_1_1_1M_PLUS.values()) * 1e9 + summary["soi_table_1_1_ty2023_1m_plus"] = {"returns": t11_returns, "agi": t11_agi} + + for name in VARIANTS: + v = all_rows[all_rows["variant"] == name] + per_band = {} + for band in BANDS: + b = v[v["band"] == band] + per_band[band] = { + "states": int(len(b)), + "zero_support": int(b["zero_support"].sum()), + "fail_count_cap": int((~b["c1_count_reachable"]).sum()), + "fail_amount_cap": int((~b["c2_amount_reachable"]).sum()), + "fail_mean_out_of_range": int((~b["c3_mean_in_range"]).sum()), + "infeasible_any": int((~b["feasible_necessary"]).sum()), + "over2x_A": int(b["over2x_A"].sum()), + "over2x_N": int(b["over2x_N"].sum()), + "start_loss_A_capped": int(b["start_loss_A_capped"].sum()), + "start_loss_N_capped": int(b["start_loss_N_capped"].sum()), + "ratio_A_median": float(b["ratio_A"].median()), + "ratio_A_min": float(b["ratio_A"].min()), + "ratio_A_max": float(b["ratio_A"].max()), + "ratio_N_median": float(b["ratio_N"].median()), + "ratio_N_min": float(b["ratio_N"].min()), + "ratio_N_max": float(b["ratio_N"].max()), + "puf_records_total": int(b["puf_n"].sum()), + "puf_records_min_state": int(b["puf_n"].min()), + "states_puf_n_lt_10": int((b["puf_n"] < 10).sum()), + "states_largest_record_gt_50pct_of_puf_A": int( + (b["puf_largest_share_of_A"] > 0.5).sum() + ), + "national_frame_N": float(b["frame_N"].sum()), + "national_frame_A": float(b["frame_A"].sum()), + "national_puf_N_x2": float(b["puf_N_x2"].sum()), + "national_puf_A_x2": float(b["puf_A_x2"].sum()), + } + top = v[v["band"] == "1m_plus"].copy() + top["abs_log_ratio_A"] = np.abs(np.log(top["ratio_A"].replace(0, np.nan))) + worst = top.sort_values("abs_log_ratio_A", ascending=False).head(10) + cols = [ + "state", + "puf_n", + "svy_n", + "frame_N", + "target_returns_2024", + "ratio_N", + "frame_A", + "target_agi_2024", + "ratio_A", + "puf_largest_share_of_A", + "puf_max_agi", + "failing_conditions", + "over2x_A", + "drop1_ratio_A", + "drop1_feasible_necessary", + ] + drop1 = top.copy() + # These columns are object-dtype (NaN outside 1m_plus); cast before `~`, + # since bitwise-not of a Python bool is an int (~True == -2, truthy). + for c in ("drop1_feasible_necessary", "drop1_over2x_A"): + drop1[c] = drop1[c].fillna(False).astype(bool) + sens = { + "states_with_support": int((drop1["frame_n"] > 0).sum()), + "feasible_before": int(drop1["feasible_necessary"].sum()), + "feasible_after_drop1": int(drop1["drop1_feasible_necessary"].sum()), + "over2x_A_before": int(drop1["over2x_A"].sum()), + "over2x_A_after_drop1": int(drop1["drop1_over2x_A"].sum()), + "ratio_A_median_before": float(drop1["ratio_A"].median()), + "ratio_A_median_after_drop1": float(drop1["drop1_ratio_A"].median()), + "states_flipping_feasible_to_infeasible": sorted( + drop1[drop1["feasible_necessary"] & ~drop1["drop1_feasible_necessary"]][ + "state" + ].tolist() + ), + "states_flipping_infeasible_to_feasible": sorted( + drop1[~drop1["feasible_necessary"] & drop1["drop1_feasible_necessary"]][ + "state" + ].tolist() + ), + "states_flipping_over2x_to_under": sorted( + drop1[drop1["over2x_A"] & ~drop1["drop1_over2x_A"]]["state"].tolist() + ), + } + co = v[v["state"] == "CO"].set_index("band") + summary["variants"][name] = { + "description": VARIANTS[name], + "per_band": per_band, + "worst10_1m_plus_by_abs_log_ratio_A": json.loads( + worst[cols].to_json(orient="records") + ), + "highest10_1m_plus_ratio_A": json.loads( + top.sort_values("ratio_A", ascending=False) + .head(10)[cols] + .to_json(orient="records") + ), + "lowest10_1m_plus_ratio_A": json.loads( + top.sort_values("ratio_A", ascending=True) + .head(10)[cols] + .to_json(orient="records") + ), + "colorado": json.loads(co.to_json(orient="index")), + "sensitivity_1m_plus_drop_largest_record": sens, + "national_1m_plus_vs_table_1_1": { + "puf_x2_returns": float(per_band["1m_plus"]["national_puf_N_x2"]), + "puf_x2_agi": float(per_band["1m_plus"]["national_puf_A_x2"]), + "frame_returns": float(per_band["1m_plus"]["national_frame_N"]), + "frame_agi": float(per_band["1m_plus"]["national_frame_A"]), + "targets_2024_returns_51": summary["targets_national_sums"]["1m_plus"][ + "target_returns_2024_51" + ], + "targets_2024_agi_51": summary["targets_national_sums"]["1m_plus"][ + "target_agi_2024_51" + ], + "table_1_1_ty2023_returns": t11_returns, + "table_1_1_ty2023_agi": t11_agi, + }, + } + return summary + + +def main() -> None: + os.chdir(OUT) + targets, stub0_check = build_targets() + frames = [analyze_variant(name, targets) for name in VARIANTS] + all_rows = pd.concat(frames, ignore_index=True) + all_rows.to_csv(OUT / "support_by_state_band.csv", index=False) + + summary = summarize(all_rows, targets, stub0_check) + chosen = all_rows[all_rows["variant"] == "demographic_midrank6_earn"] + summary["colorado_reproduction_check"] = colorado_reproduction(chosen) + + # Mapping sanity: largest states by PUF-half weight should be CA, TX, FL, NY. + d = load_variant("current") + by_state = d.groupby("fips")["w"].sum().sort_values(ascending=False) + summary["fips_mapping_sanity_top5_by_weight"] = [ + FIPS_STATE[f] for f in by_state.head(5).index + ] + summary["puf_half_weight_total"] = float(d["w"].sum()) + summary["survey_total_vs_six_items"] = { + "rows_differing": int( + (np.abs(d["survey_total"] - d["survey_six"]) > 1e-6).sum() + ), + "rows": int(len(d)), + "note": "survey_total is compare_predictors.py's broad SURVEY list (up to 14 " + "items incl. pension, IRA, rental, farm, UI, alimony, misc), not the six " + "predictor items; the svy6_* columns use the six items.", + } + + def _default(o): + if isinstance(o, (np.integer,)): + return int(o) + if isinstance(o, (np.floating,)): + return None if np.isnan(o) else float(o) + if isinstance(o, (np.bool_,)): + return bool(o) + raise TypeError(type(o)) + + (OUT / "support_summary.json").write_text( + json.dumps(summary, indent=1, default=_default) + "\n" + ) + print( + json.dumps(summary["colorado_reproduction_check"], indent=1, default=_default) + ) + print("top5 by weight:", summary["fips_mapping_sanity_top5_by_weight"]) + print("stub0 consistency:", summary["stub0_consistency"]) + for name in VARIANTS: + print(name) + print( + json.dumps( + summary["variants"][name]["per_band"], indent=1, default=_default + ) + ) + + +if __name__ == "__main__": + main() diff --git a/experiments/940-state-agi-bands/support_summary.json b/experiments/940-state-agi-bands/support_summary.json new file mode 100644 index 0000000000..8c00930904 --- /dev/null +++ b/experiments/940-state-agi-bands/support_summary.json @@ -0,0 +1,1951 @@ +{ + "labels": { + "agi": "PROXY AGI: sum of 15 imputed income items on the PUF half; saved survey_total (broad survey income list from compare_predictors.py SURVEY, up to 14 items, NOT the six predictor items) on the survey half", + "status": "pre-calibration, offline #982 predictions, 8-tree fits", + "targets": "share(TY2023 HT2 stub b / sum stubs 1..10) x TY2022 HT2 stub-0 control; AGI aged x1.1203460 to 2024; counts not aged", + "solver": "max_weight_ratio 5.0 (upper clamp only), mass conserve, target_loss_cap 1.0 on |est-target|/max(|target|,1)" + }, + "stub0_consistency": { + "max_abs_rel_diff_returns": 3.541703559406528e-05, + "max_abs_rel_diff_agi": 0.0 + }, + "targets_national_sums": { + "100k_200k": { + "soi2023_returns_51": 27428520.0, + "soi2023_agi_51": 3794296097000.0, + "target_returns_2024_51": 27367516.33029162, + "target_agi_2024_51": 4115564052965.017 + }, + "200k_500k": { + "soi2023_returns_51": 10874490.0, + "soi2023_agi_51": 3131907690000.0, + "target_returns_2024_51": 10847997.050652409, + "target_agi_2024_51": 3399410855067.1133 + }, + "500k_1m": { + "soi2023_returns_51": 1750590.0, + "soi2023_agi_51": 1175553996000.0, + "target_returns_2024_51": 1746330.9548648724, + "target_agi_2024_51": 1277305081614.9326 + }, + "1m_plus": { + "soi2023_returns_51": 789780.0, + "soi2023_agi_51": 2501367571000.0, + "target_returns_2024_51": 787789.1666508679, + "target_agi_2024_51": 2725601945437.0024 + } + }, + "variants": { + "current": { + "description": "old design (QRF copied the unit's own survey income)", + "per_band": { + "100k_200k": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 0, + "over2x_N": 0, + "start_loss_A_capped": 0, + "start_loss_N_capped": 0, + "ratio_A_median": 0.986949474543137, + "ratio_A_min": 0.8283793985119182, + "ratio_A_max": 1.2079129514470415, + "ratio_N_median": 1.0592639000233366, + "ratio_N_min": 0.9103925231562292, + "ratio_N_max": 1.224965371433842, + "puf_records_total": 37200, + "puf_records_min_state": 274, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 28678110.84933637, + "national_frame_A": 3983518480077.98, + "national_puf_N_x2": 29183442.40088603, + "national_puf_A_x2": 4071154813955.88 + }, + "200k_500k": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 0, + "over2x_N": 0, + "start_loss_A_capped": 0, + "start_loss_N_capped": 0, + "ratio_A_median": 1.1685211523223211, + "ratio_A_min": 0.9090023774146007, + "ratio_A_max": 1.5304521813593266, + "ratio_N_median": 1.264604536387509, + "ratio_N_min": 1.0051793543323466, + "ratio_N_max": 1.5715770979527743, + "puf_records_total": 18154, + "puf_records_min_state": 133, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 13361943.414174126, + "national_frame_A": 3822973051897.482, + "national_puf_N_x2": 14355681.78534065, + "national_puf_A_x2": 4156470824883.228 + }, + "500k_1m": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 1, + "over2x_N": 1, + "start_loss_A_capped": 1, + "start_loss_N_capped": 1, + "ratio_A_median": 1.0938797159721203, + "ratio_A_min": 0.6656810179707069, + "ratio_A_max": 2.0130949600835732, + "ratio_N_median": 1.1798105471033438, + "ratio_N_min": 0.758402285147076, + "ratio_N_max": 2.10152163877545, + "puf_records_total": 3098, + "puf_records_min_state": 20, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 1916818.347694353, + "national_frame_A": 1279080761299.3022, + "national_puf_N_x2": 2394739.8927974463, + "national_puf_A_x2": 1618894589733.3665 + }, + "1m_plus": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 1, + "fail_mean_out_of_range": 12, + "infeasible_any": 12, + "over2x_A": 0, + "over2x_N": 2, + "start_loss_A_capped": 0, + "start_loss_N_capped": 2, + "ratio_A_median": 0.6254553164954044, + "ratio_A_min": 0.12343695140021368, + "ratio_A_max": 1.6331088255138946, + "ratio_N_median": 1.3138316127527825, + "ratio_N_min": 0.5730916073070272, + "ratio_N_max": 2.406201233000164, + "puf_records_total": 1570, + "puf_records_min_state": 9, + "states_puf_n_lt_10": 2, + "states_largest_record_gt_50pct_of_puf_A": 1, + "national_frame_N": 959444.6848368766, + "national_frame_A": 1518801084298.0, + "national_puf_N_x2": 1266403.705284895, + "national_puf_A_x2": 2223001833608.3257 + } + }, + "worst10_1m_plus_by_abs_log_ratio_A": [ + { + "state": "WY", + "puf_n": 10, + "svy_n": 9, + "frame_N": 985.8302140606, + "target_returns_2024": 1720.1965645475, + "ratio_N": 0.5730916073, + "frame_A": 1259542403.9203432, + "target_agi_2024": 10203933179.106064, + "ratio_A": 0.1234369514, + "puf_largest_share_of_A": 0.2559353239, + "puf_max_agi": 2679498.995954483, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1049902933, + "drop1_feasible_necessary": false + }, + { + "state": "MT", + "puf_n": 15, + "svy_n": 5, + "frame_N": 1515.2608369601, + "target_returns_2024": 2235.6206672444, + "ratio_N": 0.6777808325, + "frame_A": 1977168586.3630333, + "target_agi_2024": 7269280621.960948, + "ratio_A": 0.2719895804, + "puf_largest_share_of_A": 0.1392315276, + "puf_max_agi": 2709860.630130855, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2414618079, + "drop1_feasible_necessary": false + }, + { + "state": "FL", + "puf_n": 84, + "svy_n": 54, + "frame_N": 77544.120679386, + "target_returns_2024": 72379.563988005, + "ratio_N": 1.0713537967, + "frame_A": 100190166657.177, + "target_agi_2024": 332116981490.41, + "ratio_A": 0.3016713154, + "puf_largest_share_of_A": 0.0350557404, + "puf_max_agi": 2900503.852608288, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2954956948, + "drop1_feasible_necessary": false + }, + { + "state": "ID", + "puf_n": 17, + "svy_n": 6, + "frame_N": 2447.808949886, + "target_returns_2024": 3174.6849036342, + "ratio_N": 0.7710399691, + "frame_A": 3624370015.88462, + "target_agi_2024": 10674070692.672844, + "ratio_A": 0.3395489987, + "puf_largest_share_of_A": 0.141789964, + "puf_max_agi": 2515624.215820396, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3166609136, + "drop1_feasible_necessary": false + }, + { + "state": "ND", + "puf_n": 16, + "svy_n": 7, + "frame_N": 1553.2559597699, + "target_returns_2024": 1705.0382419476, + "ratio_N": 0.9109801303, + "frame_A": 1983764502.930006, + "target_agi_2024": 5573498785.663948, + "ratio_A": 0.3559280408, + "puf_largest_share_of_A": 0.1176840815, + "puf_max_agi": 2894677.5449687885, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3271682442, + "drop1_feasible_necessary": false + }, + { + "state": "NV", + "puf_n": 19, + "svy_n": 8, + "frame_N": 6883.6848221151, + "target_returns_2024": 8428.5738116695, + "ratio_N": 0.8167081378, + "frame_A": 14605569219.69527, + "target_agi_2024": 39474771106.28822, + "ratio_A": 0.3699975658, + "puf_largest_share_of_A": 0.245253232, + "puf_max_agi": 7555970.288568098, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2965398103, + "drop1_feasible_necessary": true + }, + { + "state": "NY", + "puf_n": 72, + "svy_n": 34, + "frame_N": 60819.2148947638, + "target_returns_2024": 71517.6655399297, + "ratio_N": 0.8504082793, + "frame_A": 104457026620.07718, + "target_agi_2024": 276351110771.3443, + "ratio_A": 0.3779866357, + "puf_largest_share_of_A": 0.0633144626, + "puf_max_agi": 8648376.407284494, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.3640774673, + "drop1_feasible_necessary": true + }, + { + "state": "AR", + "puf_n": 20, + "svy_n": 10, + "frame_N": 5872.4748111748, + "target_returns_2024": 3429.7132774592, + "ratio_N": 1.7122349118, + "frame_A": 7717163259.295657, + "target_agi_2024": 18451232248.172237, + "ratio_A": 0.4182464973, + "puf_largest_share_of_A": 0.0863692055, + "puf_max_agi": 2373968.347917827, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3990113001, + "drop1_feasible_necessary": false + }, + { + "state": "IN", + "puf_n": 14, + "svy_n": 4, + "frame_N": 9354.4344105813, + "target_returns_2024": 9534.2421335439, + "ratio_N": 0.9811408479, + "frame_A": 12499786067.627495, + "target_agi_2024": 29193545400.167686, + "ratio_A": 0.4281695113, + "puf_largest_share_of_A": 0.1372125993, + "puf_max_agi": 2695116.7356674112, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3812582043, + "drop1_feasible_necessary": false + }, + { + "state": "IL", + "puf_n": 38, + "svy_n": 16, + "frame_N": 30405.5974201908, + "target_returns_2024": 30493.0023802264, + "ratio_N": 0.997133606, + "frame_A": 46943784461.44705, + "target_agi_2024": 108072758178.0677, + "ratio_A": 0.4343720402, + "puf_largest_share_of_A": 0.1147694351, + "puf_max_agi": 10734942.579096384, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.3950398604, + "drop1_feasible_necessary": true + } + ], + "highest10_1m_plus_ratio_A": [ + { + "state": "WV", + "puf_n": 17, + "svy_n": 10, + "frame_N": 2978.0098925226, + "target_returns_2024": 1237.6395837889, + "ratio_N": 2.406201233, + "frame_A": 5417747970.131166, + "target_agi_2024": 3317444548.3915315, + "ratio_A": 1.6331088255, + "puf_largest_share_of_A": 0.2010310811, + "puf_max_agi": 9744778.5647615, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 1.3899216935, + "drop1_feasible_necessary": true + }, + { + "state": "OH", + "puf_n": 33, + "svy_n": 9, + "frame_N": 22880.866150266, + "target_returns_2024": 17139.7171625391, + "ratio_N": 1.3349617111, + "frame_A": 79247772819.79301, + "target_agi_2024": 50667180918.89995, + "ratio_A": 1.5640849043, + "puf_largest_share_of_A": 0.665951422, + "puf_max_agi": 121938370.30972688, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.6077474964, + "drop1_feasible_necessary": true + }, + { + "state": "NM", + "puf_n": 19, + "svy_n": 6, + "frame_N": 3421.8106684707, + "target_returns_2024": 2085.1139573539, + "ratio_N": 1.6410665021, + "frame_A": 6053223460.027149, + "target_agi_2024": 5725045271.238917, + "ratio_A": 1.0573232478, + "puf_largest_share_of_A": 0.1809319301, + "puf_max_agi": 9483030.982302524, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.8913287273, + "drop1_feasible_necessary": false + }, + { + "state": "VA", + "puf_n": 36, + "svy_n": 20, + "frame_N": 30718.7178785794, + "target_returns_2024": 19004.6888847836, + "ratio_N": 1.6163757305, + "frame_A": 55769120278.39855, + "target_agi_2024": 57315433920.58533, + "ratio_A": 0.9730209904, + "puf_largest_share_of_A": 0.2171917253, + "puf_max_agi": 13503190.231190326, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.8159149233, + "drop1_feasible_necessary": true + }, + { + "state": "ME", + "puf_n": 9, + "svy_n": 6, + "frame_N": 3796.2322426371, + "target_returns_2024": 2056.4128633619, + "ratio_N": 1.8460457578, + "frame_A": 5388008161.745995, + "target_agi_2024": 5664484615.043534, + "ratio_A": 0.951191243, + "puf_largest_share_of_A": 0.339139558, + "puf_max_agi": 4230760.9155691145, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7297837776, + "drop1_feasible_necessary": false + }, + { + "state": "NE", + "puf_n": 23, + "svy_n": 13, + "frame_N": 7065.3104839403, + "target_returns_2024": 3242.9403851005, + "ratio_N": 2.1786741799, + "frame_A": 10484411157.909931, + "target_agi_2024": 11039886071.537018, + "ratio_A": 0.9496847241, + "puf_largest_share_of_A": 0.1729063613, + "puf_max_agi": 8693214.579718677, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.8350104903, + "drop1_feasible_necessary": false + }, + { + "state": "KY", + "puf_n": 9, + "svy_n": 8, + "frame_N": 8463.7873190579, + "target_returns_2024": 4797.9558775273, + "ratio_N": 1.764040257, + "frame_A": 12773199918.498127, + "target_agi_2024": 13489286731.057106, + "ratio_A": 0.946914405, + "puf_largest_share_of_A": 0.208213422, + "puf_max_agi": 2777707.0692796027, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.8262181187, + "drop1_feasible_necessary": false + }, + { + "state": "NC", + "puf_n": 43, + "svy_n": 25, + "frame_N": 33844.3221227941, + "target_returns_2024": 17278.7881292765, + "ratio_N": 1.958720824, + "frame_A": 45204286888.35972, + "target_agi_2024": 48638100585.6509, + "ratio_A": 0.9294007444, + "puf_largest_share_of_A": 0.0637120478, + "puf_max_agi": 3441838.650499381, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.9063067138, + "drop1_feasible_necessary": true + }, + { + "state": "AK", + "puf_n": 14, + "svy_n": 10, + "frame_N": 1791.6711868917, + "target_returns_2024": 1080.9622348681, + "ratio_N": 1.657478059, + "frame_A": 2531114974.7589903, + "target_agi_2024": 2738152286.976728, + "ratio_A": 0.9243879483, + "puf_largest_share_of_A": 0.1397256334, + "puf_max_agi": 4635470.180416907, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.8429839356, + "drop1_feasible_necessary": false + }, + { + "state": "SD", + "puf_n": 22, + "svy_n": 11, + "frame_N": 3525.849525026, + "target_returns_2024": 2064.1977972578, + "ratio_N": 1.7080967385, + "frame_A": 6035094256.675685, + "target_agi_2024": 6727415671.550786, + "ratio_A": 0.8970895439, + "puf_largest_share_of_A": 0.1675161897, + "puf_max_agi": 6903860.982391347, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7818031371, + "drop1_feasible_necessary": true + } + ], + "lowest10_1m_plus_ratio_A": [ + { + "state": "WY", + "puf_n": 10, + "svy_n": 9, + "frame_N": 985.8302140606, + "target_returns_2024": 1720.1965645475, + "ratio_N": 0.5730916073, + "frame_A": 1259542403.9203432, + "target_agi_2024": 10203933179.106064, + "ratio_A": 0.1234369514, + "puf_largest_share_of_A": 0.2559353239, + "puf_max_agi": 2679498.995954483, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1049902933, + "drop1_feasible_necessary": false + }, + { + "state": "MT", + "puf_n": 15, + "svy_n": 5, + "frame_N": 1515.2608369601, + "target_returns_2024": 2235.6206672444, + "ratio_N": 0.6777808325, + "frame_A": 1977168586.3630333, + "target_agi_2024": 7269280621.960948, + "ratio_A": 0.2719895804, + "puf_largest_share_of_A": 0.1392315276, + "puf_max_agi": 2709860.630130855, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2414618079, + "drop1_feasible_necessary": false + }, + { + "state": "FL", + "puf_n": 84, + "svy_n": 54, + "frame_N": 77544.120679386, + "target_returns_2024": 72379.563988005, + "ratio_N": 1.0713537967, + "frame_A": 100190166657.177, + "target_agi_2024": 332116981490.41, + "ratio_A": 0.3016713154, + "puf_largest_share_of_A": 0.0350557404, + "puf_max_agi": 2900503.852608288, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2954956948, + "drop1_feasible_necessary": false + }, + { + "state": "ID", + "puf_n": 17, + "svy_n": 6, + "frame_N": 2447.808949886, + "target_returns_2024": 3174.6849036342, + "ratio_N": 0.7710399691, + "frame_A": 3624370015.88462, + "target_agi_2024": 10674070692.672844, + "ratio_A": 0.3395489987, + "puf_largest_share_of_A": 0.141789964, + "puf_max_agi": 2515624.215820396, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3166609136, + "drop1_feasible_necessary": false + }, + { + "state": "ND", + "puf_n": 16, + "svy_n": 7, + "frame_N": 1553.2559597699, + "target_returns_2024": 1705.0382419476, + "ratio_N": 0.9109801303, + "frame_A": 1983764502.930006, + "target_agi_2024": 5573498785.663948, + "ratio_A": 0.3559280408, + "puf_largest_share_of_A": 0.1176840815, + "puf_max_agi": 2894677.5449687885, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3271682442, + "drop1_feasible_necessary": false + }, + { + "state": "NV", + "puf_n": 19, + "svy_n": 8, + "frame_N": 6883.6848221151, + "target_returns_2024": 8428.5738116695, + "ratio_N": 0.8167081378, + "frame_A": 14605569219.69527, + "target_agi_2024": 39474771106.28822, + "ratio_A": 0.3699975658, + "puf_largest_share_of_A": 0.245253232, + "puf_max_agi": 7555970.288568098, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2965398103, + "drop1_feasible_necessary": true + }, + { + "state": "NY", + "puf_n": 72, + "svy_n": 34, + "frame_N": 60819.2148947638, + "target_returns_2024": 71517.6655399297, + "ratio_N": 0.8504082793, + "frame_A": 104457026620.07718, + "target_agi_2024": 276351110771.3443, + "ratio_A": 0.3779866357, + "puf_largest_share_of_A": 0.0633144626, + "puf_max_agi": 8648376.407284494, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.3640774673, + "drop1_feasible_necessary": true + }, + { + "state": "AR", + "puf_n": 20, + "svy_n": 10, + "frame_N": 5872.4748111748, + "target_returns_2024": 3429.7132774592, + "ratio_N": 1.7122349118, + "frame_A": 7717163259.295657, + "target_agi_2024": 18451232248.172237, + "ratio_A": 0.4182464973, + "puf_largest_share_of_A": 0.0863692055, + "puf_max_agi": 2373968.347917827, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3990113001, + "drop1_feasible_necessary": false + }, + { + "state": "IN", + "puf_n": 14, + "svy_n": 4, + "frame_N": 9354.4344105813, + "target_returns_2024": 9534.2421335439, + "ratio_N": 0.9811408479, + "frame_A": 12499786067.627495, + "target_agi_2024": 29193545400.167686, + "ratio_A": 0.4281695113, + "puf_largest_share_of_A": 0.1372125993, + "puf_max_agi": 2695116.7356674112, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.3812582043, + "drop1_feasible_necessary": false + }, + { + "state": "IL", + "puf_n": 38, + "svy_n": 16, + "frame_N": 30405.5974201908, + "target_returns_2024": 30493.0023802264, + "ratio_N": 0.997133606, + "frame_A": 46943784461.44705, + "target_agi_2024": 108072758178.0677, + "ratio_A": 0.4343720402, + "puf_largest_share_of_A": 0.1147694351, + "puf_max_agi": 10734942.579096384, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.3950398604, + "drop1_feasible_necessary": true + } + ], + "colorado": { + "100k_200k": { + "variant": "current", + "state": "CO", + "fips": "08", + "band_low": 100000.0, + "band_high": 200000.0, + "soi2023_returns": 581520.0, + "soi2023_agi": 81135957000.0, + "soi2023_share_returns": 0.1883874395, + "soi2023_share_agi": 0.2582996121, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 559959.0575444712, + "target_agi_2024": 86143028408.32648, + "puf_n": 574, + "puf_N": 316971.5852845206, + "puf_A": 44739515146.15635, + "puf_mean_agi": 141146.7690581702, + "puf_min_agi": 100128.7441362407, + "puf_max_agi": 199905.1461059306, + "puf_largest_share_of_A": 0.0044506988, + "puf_largest_w": 1138.1113674441, + "puf_largest_share_above_low": 0.0065410701, + "puf_N_x2": 633943.1705690413, + "puf_A_x2": 89479030292.3127, + "puf_largest_w_x2": 2276.2227348882, + "svy_n": 565, + "svy_N": 309786.1441913132, + "svy_A": 43285888407.5609, + "svy_max_income": 199191.36, + "svy6_n": 554, + "svy6_N": 301955.6431578521, + "svy6_A": 42273761845.70089, + "frame_n": 1139, + "frame_N": 626757.7294758339, + "frame_A": 88025403553.71724, + "ratio_N": 1.1192920644, + "ratio_A": 1.021851741, + "frame6_N": 618927.2284423728, + "frame6_A": 87013276991.85724, + "ratio6_N": 1.1053080044, + "ratio6_A": 1.0101023681, + "cap_N_5x": 3133788.6473791697, + "cap_A_5x": 440127017768.5862, + "frame_min_agi": 100000.0, + "frame_max_agi": 199905.1461059306, + "target_mean_agi": 153838.0837807684, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "200k_500k": { + "variant": "current", + "state": "CO", + "fips": "08", + "band_low": 200000.0, + "band_high": 500000.0, + "soi2023_returns": 257510.0, + "soi2023_agi": 74198170000.0, + "soi2023_share_returns": 0.0834221515, + "soi2023_share_agi": 0.2362128856, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 247962.334757664, + "target_agi_2024": 78777095907.74701, + "puf_n": 309, + "puf_N": 164651.8285019213, + "puf_A": 47314373663.4635, + "puf_mean_agi": 287360.1471295619, + "puf_min_agi": 200022.8612490445, + "puf_max_agi": 492850.4604975258, + "puf_largest_share_of_A": 0.0113523055, + "puf_largest_w": 1394.3763504611, + "puf_largest_share_above_low": 0.0179541027, + "puf_N_x2": 329303.6570038426, + "puf_A_x2": 94628747326.927, + "puf_largest_w_x2": 2788.7527009222, + "svy_n": 283, + "svy_N": 148922.4648858587, + "svy_A": 41937931417.28938, + "svy_max_income": 496561.36, + "svy6_n": 265, + "svy6_N": 138821.982946225, + "svy6_A": 38977830955.05299, + "frame_n": 592, + "frame_N": 313574.29338778, + "frame_A": 89252305080.75288, + "ratio_N": 1.2646045364, + "ratio_A": 1.1329727766, + "frame6_N": 303473.8114481464, + "frame6_A": 86292204618.5165, + "ratio6_N": 1.2238706001, + "ratio6_A": 1.0953971281, + "cap_N_5x": 1567871.4669388998, + "cap_A_5x": 446261525403.7644, + "frame_min_agi": 200000.0, + "frame_max_agi": 496561.36, + "target_mean_agi": 317697.8309416897, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "500k_1m": { + "variant": "current", + "state": "CO", + "fips": "08", + "band_low": 500000.0, + "band_high": 1000000.0, + "soi2023_returns": 38030.0, + "soi2023_agi": 25370899000.0, + "soi2023_share_returns": 0.0123200824, + "soi2023_share_agi": 0.0807692867, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 36619.9665676438, + "target_agi_2024": 26936590805.255203, + "puf_n": 36, + "puf_N": 19368.3205800691, + "puf_A": 13272233771.77945, + "puf_mean_agi": 685254.7548927495, + "puf_min_agi": 500527.9881819055, + "puf_max_agi": 992496.8746961312, + "puf_largest_share_of_A": 0.0635779378, + "puf_largest_w": 934.029387619, + "puf_largest_share_above_low": 0.1050163997, + "puf_N_x2": 38736.6411601382, + "puf_A_x2": 26544467543.5589, + "puf_largest_w_x2": 1868.0587752381, + "svy_n": 17, + "svy_N": 8404.3457468415, + "svy_A": 5973596769.111459, + "svy_max_income": 980514.24, + "svy6_n": 15, + "svy6_N": 7530.3213818583, + "svy6_A": 5517635468.550416, + "frame_n": 53, + "frame_N": 27772.6663269106, + "frame_A": 19245830540.890903, + "ratio_N": 0.7584022851, + "ratio_A": 0.714486502, + "frame6_N": 26898.6419619274, + "frame6_A": 18789869240.329865, + "ratio6_N": 0.7345348585, + "ratio6_A": 0.6975592931, + "cap_N_5x": 138863.331634553, + "cap_A_5x": 96229152704.45451, + "frame_min_agi": 500527.9881819055, + "frame_max_agi": 992496.8746961312, + "target_mean_agi": 735571.1468359304, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "1m_plus": { + "variant": "current", + "state": "CO", + "fips": "08", + "band_low": 1000000.0, + "band_high": null, + "soi2023_returns": 15610.0, + "soi2023_agi": 47266883000.0, + "soi2023_share_returns": 0.0050569678, + "soi2023_share_agi": 0.1504760404, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 15031.2300321041, + "target_agi_2024": 50183822260.727684, + "puf_n": 26, + "puf_N": 13774.8262012514, + "puf_A": 31897551315.930576, + "puf_mean_agi": 2315640.9271452515, + "puf_min_agi": 1059643.2702475048, + "puf_max_agi": 12799359.136161376, + "puf_largest_share_of_A": 0.2032703455, + "puf_largest_w": 749.4883333333, + "puf_largest_share_above_low": 0.3164169795, + "puf_N_x2": 27549.6524025029, + "puf_A_x2": 63795102631.86115, + "puf_largest_w_x2": 1498.9766666667, + "svy_n": 13, + "svy_N": 7617.4984001925, + "svy_A": 9824303047.565695, + "svy_max_income": 2027867.6, + "svy6_n": 12, + "svy6_N": 6978.775056734, + "svy6_A": 9017215747.798136, + "frame_n": 39, + "frame_N": 21392.3246014439, + "frame_A": 41721854363.49627, + "ratio_N": 1.4231918849, + "ratio_A": 0.8313805622, + "frame6_N": 20753.6012579855, + "frame6_A": 40914767063.728714, + "ratio6_N": 1.3806987993, + "ratio6_A": 0.8152979431, + "cap_N_5x": 106961.6230072196, + "cap_A_5x": 208609271817.48135, + "frame_min_agi": 1000067.68, + "frame_max_agi": 12799359.136161376, + "target_mean_agi": 3338637.1011250336, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": 12799359.136161376, + "drop1_removed_w": 450.015, + "drop1_removed_channel": "puf", + "drop1_frame_n": 38.0, + "drop1_frame_N": 20942.3096014439, + "drop1_frame_A": 35961950761.83661, + "drop1_ratio_A": 0.7166044582, + "drop1_feasible_necessary": true, + "drop1_failing_conditions": "", + "drop1_over2x_A": false + } + }, + "sensitivity_1m_plus_drop_largest_record": { + "states_with_support": 51, + "feasible_before": 39, + "feasible_after_drop1": 21, + "over2x_A_before": 0, + "over2x_A_after_drop1": 0, + "ratio_A_median_before": 0.6254553164954044, + "ratio_A_median_after_drop1": 0.5789027262573608, + "states_flipping_feasible_to_infeasible": [ + "AK", + "AZ", + "CT", + "DC", + "DE", + "IA", + "KS", + "ME", + "MI", + "MS", + "NE", + "NM", + "OR", + "SC", + "TN", + "VT", + "WA", + "WI" + ], + "states_flipping_infeasible_to_feasible": [], + "states_flipping_over2x_to_under": [] + }, + "national_1m_plus_vs_table_1_1": { + "puf_x2_returns": 1266403.705284895, + "puf_x2_agi": 2223001833608.3257, + "frame_returns": 959444.6848368766, + "frame_agi": 1518801084298.0, + "targets_2024_returns_51": 787789.1666508679, + "targets_2024_agi_51": 2725601945437.0024, + "table_1_1_ty2023_returns": 799094, + "table_1_1_ty2023_agi": 2543450000000.0 + } + }, + "demographic_midrank6_earn": { + "description": "chosen #1033 design (demographics + mid-rank + earnings flag)", + "per_band": { + "100k_200k": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 0, + "over2x_N": 0, + "start_loss_A_capped": 0, + "start_loss_N_capped": 0, + "ratio_A_median": 0.9713784306778326, + "ratio_A_min": 0.8350860083876748, + "ratio_A_max": 1.2035261300747349, + "ratio_N_median": 1.052343231450889, + "ratio_N_min": 0.9086559695103122, + "ratio_N_max": 1.2442643690942963, + "puf_records_total": 37680, + "puf_records_min_state": 282, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 28801655.633815818, + "national_frame_A": 3972539438435.9155, + "national_puf_N_x2": 29430531.96984493, + "national_puf_A_x2": 4049196730671.751 + }, + "200k_500k": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 0, + "over2x_N": 0, + "start_loss_A_capped": 0, + "start_loss_N_capped": 0, + "ratio_A_median": 0.9870647987197229, + "ratio_A_min": 0.7834580972539953, + "ratio_A_max": 1.3029639275954201, + "ratio_N_median": 1.0692875503384176, + "ratio_N_min": 0.848647772648038, + "ratio_N_max": 1.3605665320428557, + "puf_records_total": 13302, + "puf_records_min_state": 78, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 11505355.40018597, + "national_frame_A": 3268905230261.0977, + "national_puf_N_x2": 10642505.757364333, + "national_puf_A_x2": 3048335181610.4604 + }, + "500k_1m": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 0, + "fail_mean_out_of_range": 0, + "infeasible_any": 0, + "over2x_A": 0, + "over2x_N": 0, + "start_loss_A_capped": 0, + "start_loss_N_capped": 0, + "ratio_A_median": 0.848979340620714, + "ratio_A_min": 0.5168728110148952, + "ratio_A_max": 1.4315528151442487, + "ratio_N_median": 0.9076540624090028, + "ratio_N_min": 0.5808701407405065, + "ratio_N_max": 1.5272570717972664, + "puf_records_total": 1990, + "puf_records_min_state": 13, + "states_puf_n_lt_10": 0, + "states_largest_record_gt_50pct_of_puf_A": 0, + "national_frame_N": 1498407.7699622167, + "national_frame_A": 996879399910.8352, + "national_puf_N_x2": 1557918.7373331732, + "national_puf_A_x2": 1054491866956.4323 + }, + "1m_plus": { + "states": 51, + "zero_support": 0, + "fail_count_cap": 0, + "fail_amount_cap": 2, + "fail_mean_out_of_range": 9, + "infeasible_any": 9, + "over2x_A": 2, + "over2x_N": 1, + "start_loss_A_capped": 2, + "start_loss_N_capped": 1, + "ratio_A_median": 0.5809801904377528, + "ratio_A_min": 0.1066053583016518, + "ratio_A_max": 2.704064462178696, + "ratio_N_median": 0.9607922548307681, + "ratio_N_min": 0.4397179992790489, + "ratio_N_max": 2.313655294856265, + "puf_records_total": 1078, + "puf_records_min_state": 4, + "states_puf_n_lt_10": 11, + "states_largest_record_gt_50pct_of_puf_A": 4, + "national_frame_N": 746242.6512436781, + "national_frame_A": 1758902186832.9365, + "national_puf_N_x2": 839999.638098498, + "national_puf_A_x2": 2703204038678.1987 + } + }, + "worst10_1m_plus_by_abs_log_ratio_A": [ + { + "state": "WY", + "puf_n": 9, + "svy_n": 9, + "frame_N": 844.0260208879, + "target_returns_2024": 1720.1965645475, + "ratio_N": 0.4906567297, + "frame_A": 1087793952.6447148, + "target_agi_2024": 10203933179.106064, + "ratio_A": 0.1066053583, + "puf_largest_share_of_A": 0.1777325486, + "puf_max_agi": 2232384.069851913, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.0976085261, + "drop1_feasible_necessary": false + }, + { + "state": "DE", + "puf_n": 4, + "svy_n": 3, + "frame_N": 723.8178235697, + "target_returns_2024": 1646.0955083861, + "ratio_N": 0.4397179993, + "frame_A": 889230557.6616377, + "target_agi_2024": 4547895762.808417, + "ratio_A": 0.1955257121, + "puf_largest_share_of_A": 0.3061023751, + "puf_max_agi": 1347215.3720501827, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1580666578, + "drop1_feasible_necessary": false + }, + { + "state": "ID", + "puf_n": 10, + "svy_n": 6, + "frame_N": 1633.2772861159, + "target_returns_2024": 3174.6849036342, + "ratio_N": 0.5144691003, + "frame_A": 2179004714.1012, + "target_agi_2024": 10674070692.672844, + "ratio_A": 0.2041399928, + "puf_largest_share_of_A": 0.1521089501, + "puf_max_agi": 2415255.222298391, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1850121424, + "drop1_feasible_necessary": false + }, + { + "state": "MT", + "puf_n": 9, + "svy_n": 5, + "frame_N": 1008.6480486264, + "target_returns_2024": 2235.6206672444, + "ratio_N": 0.4511713742, + "frame_A": 1566072383.9234738, + "target_agi_2024": 7269280621.960948, + "ratio_A": 0.2154370515, + "puf_largest_share_of_A": 0.2320121646, + "puf_max_agi": 3078331.015061289, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1776871593, + "drop1_feasible_necessary": false + }, + { + "state": "WI", + "puf_n": 8, + "svy_n": 5, + "frame_N": 7110.5733806493, + "target_returns_2024": 9757.889649973, + "ratio_N": 0.7286999173, + "frame_A": 8924595668.715834, + "target_agi_2024": 31294279525.44637, + "ratio_A": 0.2851829729, + "puf_largest_share_of_A": 0.2697241553, + "puf_max_agi": 2507873.0672642677, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2357366918, + "drop1_feasible_necessary": false + }, + { + "state": "IA", + "puf_n": 7, + "svy_n": 6, + "frame_N": 3341.7320362358, + "target_returns_2024": 4321.3421052632, + "ratio_N": 0.7733088367, + "frame_A": 3993821210.767818, + "target_agi_2024": 13870951869.10055, + "ratio_A": 0.2879269749, + "puf_largest_share_of_A": 0.2264989571, + "puf_max_agi": 1470277.8599598904, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.260349021, + "drop1_feasible_necessary": false + }, + { + "state": "IN", + "puf_n": 7, + "svy_n": 4, + "frame_N": 5465.0219465662, + "target_returns_2024": 9534.2421335439, + "ratio_N": 0.573199408, + "frame_A": 8799154196.422224, + "target_agi_2024": 29193545400.167686, + "ratio_A": 0.3014075226, + "puf_largest_share_of_A": 0.2828680266, + "puf_max_agi": 3230438.2266493253, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2405553227, + "drop1_feasible_necessary": false + }, + { + "state": "IL", + "puf_n": 25, + "svy_n": 16, + "frame_N": 21271.9398854159, + "target_returns_2024": 30493.0023802264, + "ratio_N": 0.6976007026, + "frame_A": 37451358185.55892, + "target_agi_2024": 108072758178.0677, + "ratio_A": 0.3465383767, + "puf_largest_share_of_A": 0.2323058796, + "puf_max_agi": 18701692.467423104, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2873300227, + "drop1_feasible_necessary": false + }, + { + "state": "NH", + "puf_n": 14, + "svy_n": 6, + "frame_N": 2885.6704702774, + "target_returns_2024": 3688.1859150313, + "ratio_N": 0.7824091672, + "frame_A": 4732691025.113197, + "target_agi_2024": 13252478866.307795, + "ratio_A": 0.3571174173, + "puf_largest_share_of_A": 0.1246760233, + "puf_max_agi": 4298004.432203211, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.322600357, + "drop1_feasible_necessary": true + }, + { + "state": "WV", + "puf_n": 16, + "svy_n": 10, + "frame_N": 2863.4713761568, + "target_returns_2024": 1237.6395837889, + "ratio_N": 2.3136552949, + "frame_A": 8970583908.553993, + "target_agi_2024": 3317444548.3915315, + "ratio_A": 2.7040644622, + "puf_largest_share_of_A": 0.6429191753, + "puf_max_agi": 76984912.10283597, + "failing_conditions": "", + "over2x_A": true, + "drop1_ratio_A": 1.2377877542, + "drop1_feasible_necessary": true + } + ], + "highest10_1m_plus_ratio_A": [ + { + "state": "WV", + "puf_n": 16, + "svy_n": 10, + "frame_N": 2863.4713761568, + "target_returns_2024": 1237.6395837889, + "ratio_N": 2.3136552949, + "frame_A": 8970583908.553993, + "target_agi_2024": 3317444548.3915315, + "ratio_A": 2.7040644622, + "puf_largest_share_of_A": 0.6429191753, + "puf_max_agi": 76984912.10283597, + "failing_conditions": "", + "over2x_A": true, + "drop1_ratio_A": 1.2377877542, + "drop1_feasible_necessary": true + }, + { + "state": "SC", + "puf_n": 14, + "svy_n": 12, + "frame_N": 10572.6264404633, + "target_returns_2024": 8387.2162756392, + "ratio_N": 1.2605644224, + "frame_A": 50943878261.82338, + "target_agi_2024": 25078033870.39889, + "ratio_A": 2.0314143655, + "puf_largest_share_of_A": 0.5554119042, + "puf_max_agi": 61780176.29283324, + "failing_conditions": "", + "over2x_A": true, + "drop1_ratio_A": 1.0488321832, + "drop1_feasible_necessary": true + }, + { + "state": "CO", + "puf_n": 15, + "svy_n": 13, + "frame_N": 15041.1071181324, + "target_returns_2024": 15031.2300321041, + "ratio_N": 1.0006571043, + "frame_A": 81485869596.65315, + "target_agi_2024": 50183822260.727684, + "ratio_A": 1.6237477722, + "puf_largest_share_of_A": 0.7587054726, + "puf_max_agi": 125397728.4296138, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.5403304423, + "drop1_feasible_necessary": true + }, + { + "state": "VA", + "puf_n": 24, + "svy_n": 20, + "frame_N": 22822.9900892964, + "target_returns_2024": 19004.6888847836, + "ratio_N": 1.2009136391, + "frame_A": 73448348096.0924, + "target_agi_2024": 57315433920.58533, + "ratio_A": 1.2814759145, + "puf_largest_share_of_A": 0.482132999, + "puf_max_agi": 44223527.79687524, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7840077518, + "drop1_feasible_necessary": true + }, + { + "state": "AK", + "puf_n": 13, + "svy_n": 10, + "frame_N": 1807.3864171183, + "target_returns_2024": 1080.9622348681, + "ratio_N": 1.6720162452, + "frame_A": 3158234338.215625, + "target_agi_2024": 2738152286.976728, + "ratio_A": 1.1534180744, + "puf_largest_share_of_A": 0.2841605435, + "puf_max_agi": 9019612.873113945, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.922785104, + "drop1_feasible_necessary": true + }, + { + "state": "AL", + "puf_n": 22, + "svy_n": 19, + "frame_N": 10309.4801902168, + "target_returns_2024": 6596.7607107491, + "ratio_N": 1.5628094821, + "frame_A": 23458194316.64223, + "target_agi_2024": 20353753805.457275, + "ratio_A": 1.1525242243, + "puf_largest_share_of_A": 0.3615690701, + "puf_max_agi": 36855448.37377946, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.8411971621, + "drop1_feasible_necessary": true + }, + { + "state": "KS", + "puf_n": 14, + "svy_n": 11, + "frame_N": 8110.7556192153, + "target_returns_2024": 4932.8610643438, + "ratio_N": 1.6442294874, + "frame_A": 16140817571.210535, + "target_agi_2024": 14732108553.278406, + "ratio_A": 1.0956216833, + "puf_largest_share_of_A": 0.4950245946, + "puf_max_agi": 15208012.690568037, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7020565, + "drop1_feasible_necessary": false + }, + { + "state": "NE", + "puf_n": 16, + "svy_n": 13, + "frame_N": 5378.4298179945, + "target_returns_2024": 3242.9403851005, + "ratio_N": 1.6585040671, + "frame_A": 11401019791.847988, + "target_agi_2024": 11039886071.537018, + "ratio_A": 1.0327117253, + "puf_largest_share_of_A": 0.4208281446, + "puf_max_agi": 11628268.006221866, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7186717445, + "drop1_feasible_necessary": true + }, + { + "state": "NV", + "puf_n": 13, + "svy_n": 8, + "frame_N": 4780.7642739584, + "target_returns_2024": 8428.5738116695, + "ratio_N": 0.5672091603, + "frame_A": 40318802878.16208, + "target_agi_2024": 39474771106.28822, + "ratio_A": 1.0213815495, + "puf_largest_share_of_A": 0.7840756725, + "puf_max_agi": 113407693.2000385, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2758024438, + "drop1_feasible_necessary": true + }, + { + "state": "NC", + "puf_n": 24, + "svy_n": 25, + "frame_N": 24689.5383741145, + "target_returns_2024": 17278.7881292765, + "ratio_N": 1.4288929403, + "frame_A": 49019803175.39847, + "target_agi_2024": 48638100585.6509, + "ratio_A": 1.0078478104, + "puf_largest_share_of_A": 0.4034274297, + "puf_max_agi": 22573859.247816764, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.7219869555, + "drop1_feasible_necessary": true + } + ], + "lowest10_1m_plus_ratio_A": [ + { + "state": "WY", + "puf_n": 9, + "svy_n": 9, + "frame_N": 844.0260208879, + "target_returns_2024": 1720.1965645475, + "ratio_N": 0.4906567297, + "frame_A": 1087793952.6447148, + "target_agi_2024": 10203933179.106064, + "ratio_A": 0.1066053583, + "puf_largest_share_of_A": 0.1777325486, + "puf_max_agi": 2232384.069851913, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.0976085261, + "drop1_feasible_necessary": false + }, + { + "state": "DE", + "puf_n": 4, + "svy_n": 3, + "frame_N": 723.8178235697, + "target_returns_2024": 1646.0955083861, + "ratio_N": 0.4397179993, + "frame_A": 889230557.6616377, + "target_agi_2024": 4547895762.808417, + "ratio_A": 0.1955257121, + "puf_largest_share_of_A": 0.3061023751, + "puf_max_agi": 1347215.3720501827, + "failing_conditions": "amount_cap|mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1580666578, + "drop1_feasible_necessary": false + }, + { + "state": "ID", + "puf_n": 10, + "svy_n": 6, + "frame_N": 1633.2772861159, + "target_returns_2024": 3174.6849036342, + "ratio_N": 0.5144691003, + "frame_A": 2179004714.1012, + "target_agi_2024": 10674070692.672844, + "ratio_A": 0.2041399928, + "puf_largest_share_of_A": 0.1521089501, + "puf_max_agi": 2415255.222298391, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1850121424, + "drop1_feasible_necessary": false + }, + { + "state": "MT", + "puf_n": 9, + "svy_n": 5, + "frame_N": 1008.6480486264, + "target_returns_2024": 2235.6206672444, + "ratio_N": 0.4511713742, + "frame_A": 1566072383.9234738, + "target_agi_2024": 7269280621.960948, + "ratio_A": 0.2154370515, + "puf_largest_share_of_A": 0.2320121646, + "puf_max_agi": 3078331.015061289, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.1776871593, + "drop1_feasible_necessary": false + }, + { + "state": "WI", + "puf_n": 8, + "svy_n": 5, + "frame_N": 7110.5733806493, + "target_returns_2024": 9757.889649973, + "ratio_N": 0.7286999173, + "frame_A": 8924595668.715834, + "target_agi_2024": 31294279525.44637, + "ratio_A": 0.2851829729, + "puf_largest_share_of_A": 0.2697241553, + "puf_max_agi": 2507873.0672642677, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.2357366918, + "drop1_feasible_necessary": false + }, + { + "state": "IA", + "puf_n": 7, + "svy_n": 6, + "frame_N": 3341.7320362358, + "target_returns_2024": 4321.3421052632, + "ratio_N": 0.7733088367, + "frame_A": 3993821210.767818, + "target_agi_2024": 13870951869.10055, + "ratio_A": 0.2879269749, + "puf_largest_share_of_A": 0.2264989571, + "puf_max_agi": 1470277.8599598904, + "failing_conditions": "mean_out_of_range", + "over2x_A": false, + "drop1_ratio_A": 0.260349021, + "drop1_feasible_necessary": false + }, + { + "state": "IN", + "puf_n": 7, + "svy_n": 4, + "frame_N": 5465.0219465662, + "target_returns_2024": 9534.2421335439, + "ratio_N": 0.573199408, + "frame_A": 8799154196.422224, + "target_agi_2024": 29193545400.167686, + "ratio_A": 0.3014075226, + "puf_largest_share_of_A": 0.2828680266, + "puf_max_agi": 3230438.2266493253, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2405553227, + "drop1_feasible_necessary": false + }, + { + "state": "IL", + "puf_n": 25, + "svy_n": 16, + "frame_N": 21271.9398854159, + "target_returns_2024": 30493.0023802264, + "ratio_N": 0.6976007026, + "frame_A": 37451358185.55892, + "target_agi_2024": 108072758178.0677, + "ratio_A": 0.3465383767, + "puf_largest_share_of_A": 0.2323058796, + "puf_max_agi": 18701692.467423104, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.2873300227, + "drop1_feasible_necessary": false + }, + { + "state": "NH", + "puf_n": 14, + "svy_n": 6, + "frame_N": 2885.6704702774, + "target_returns_2024": 3688.1859150313, + "ratio_N": 0.7824091672, + "frame_A": 4732691025.113197, + "target_agi_2024": 13252478866.307795, + "ratio_A": 0.3571174173, + "puf_largest_share_of_A": 0.1246760233, + "puf_max_agi": 4298004.432203211, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.322600357, + "drop1_feasible_necessary": true + }, + { + "state": "ND", + "puf_n": 10, + "svy_n": 7, + "frame_N": 1229.476463746, + "target_returns_2024": 1705.0382419476, + "ratio_N": 0.7210843918, + "frame_A": 2063052957.7588444, + "target_agi_2024": 5573498785.663948, + "ratio_A": 0.3701540158, + "puf_largest_share_of_A": 0.2476426469, + "puf_max_agi": 6327097.858429211, + "failing_conditions": "", + "over2x_A": false, + "drop1_ratio_A": 0.3061118095, + "drop1_feasible_necessary": false + } + ], + "colorado": { + "100k_200k": { + "variant": "demographic_midrank6_earn", + "state": "CO", + "fips": "08", + "band_low": 100000.0, + "band_high": 200000.0, + "soi2023_returns": 581520.0, + "soi2023_agi": 81135957000.0, + "soi2023_share_returns": 0.1883874395, + "soi2023_share_agi": 0.2582996121, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 559959.0575444712, + "target_agi_2024": 86143028408.32648, + "puf_n": 569, + "puf_N": 312760.4074776518, + "puf_A": 43038877283.11988, + "puf_mean_agi": 137609.7365719003, + "puf_min_agi": 100153.8953864071, + "puf_max_agi": 199122.3099981903, + "puf_largest_share_of_A": 0.0054660093, + "puf_largest_w": 1206.2358982095, + "puf_largest_share_above_low": 0.00974487, + "puf_N_x2": 625520.8149553037, + "puf_A_x2": 86077754566.23976, + "puf_largest_w_x2": 2412.4717964191, + "svy_n": 565, + "svy_N": 309786.1441913132, + "svy_A": 43285888407.5609, + "svy_max_income": 199191.36, + "svy6_n": 554, + "svy6_N": 301955.6431578521, + "svy6_A": 42273761845.70089, + "frame_n": 1134, + "frame_N": 622546.551668965, + "frame_A": 86324765690.68079, + "ratio_N": 1.1117715542, + "ratio_A": 1.0021097155, + "frame6_N": 614716.050635504, + "frame6_A": 85312639128.82077, + "ratio6_N": 1.0977874942, + "ratio6_A": 0.9903603426, + "cap_N_5x": 3112732.7583448254, + "cap_A_5x": 431623828453.40393, + "frame_min_agi": 100000.0, + "frame_max_agi": 199191.36, + "target_mean_agi": 153838.0837807684, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "200k_500k": { + "variant": "demographic_midrank6_earn", + "state": "CO", + "fips": "08", + "band_low": 200000.0, + "band_high": 500000.0, + "soi2023_returns": 257510.0, + "soi2023_agi": 74198170000.0, + "soi2023_share_returns": 0.0834221515, + "soi2023_share_agi": 0.2362128856, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 247962.334757664, + "target_agi_2024": 78777095907.74701, + "puf_n": 220, + "puf_N": 114548.711319934, + "puf_A": 32015062999.008972, + "puf_mean_agi": 279488.6352722996, + "puf_min_agi": 200853.7856215023, + "puf_max_agi": 499785.2941264478, + "puf_largest_share_of_A": 0.0108418066, + "puf_largest_w": 934.9126862898, + "puf_largest_share_above_low": 0.0191987848, + "puf_N_x2": 229097.422639868, + "puf_A_x2": 64030125998.017944, + "puf_largest_w_x2": 1869.8253725796, + "svy_n": 283, + "svy_N": 148922.4648858587, + "svy_A": 41937931417.28938, + "svy_max_income": 496561.36, + "svy6_n": 265, + "svy6_N": 138821.982946225, + "svy6_A": 38977830955.05299, + "frame_n": 503, + "frame_N": 263471.1762057927, + "frame_A": 73952994416.29837, + "ratio_N": 1.0625451501, + "ratio_A": 0.9387626386, + "frame6_N": 253370.694266159, + "frame6_A": 70992893954.06197, + "ratio6_N": 1.0218112138, + "ratio6_A": 0.9011869902, + "cap_N_5x": 1317355.8810289635, + "cap_A_5x": 369764972081.4918, + "frame_min_agi": 200000.0, + "frame_max_agi": 499785.2941264478, + "target_mean_agi": 317697.8309416897, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "500k_1m": { + "variant": "demographic_midrank6_earn", + "state": "CO", + "fips": "08", + "band_low": 500000.0, + "band_high": 1000000.0, + "soi2023_returns": 38030.0, + "soi2023_agi": 25370899000.0, + "soi2023_share_returns": 0.0123200824, + "soi2023_share_agi": 0.0807692867, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 36619.9665676438, + "target_agi_2024": 26936590805.255203, + "puf_n": 21, + "puf_N": 12867.0993872184, + "puf_A": 9091127451.634668, + "puf_mean_agi": 706540.5479548392, + "puf_min_agi": 510721.3072911734, + "puf_max_agi": 954473.9081067834, + "puf_largest_share_of_A": 0.1173205595, + "puf_largest_w": 1394.3763504611, + "puf_largest_share_above_low": 0.1389942335, + "puf_N_x2": 25734.1987744368, + "puf_A_x2": 18182254903.269337, + "puf_largest_w_x2": 2788.7527009222, + "svy_n": 17, + "svy_N": 8404.3457468415, + "svy_A": 5973596769.111459, + "svy_max_income": 980514.24, + "svy6_n": 15, + "svy6_N": 7530.3213818583, + "svy6_A": 5517635468.550416, + "frame_n": 38, + "frame_N": 21271.4451340599, + "frame_A": 15064724220.746126, + "ratio_N": 0.5808701407, + "ratio_A": 0.5592661792, + "frame6_N": 20397.4207690767, + "frame6_A": 14608762920.185085, + "ratio6_N": 0.5570027141, + "ratio6_A": 0.5423389703, + "cap_N_5x": 106357.2256702996, + "cap_A_5x": 75323621103.73064, + "frame_min_agi": 507878.08, + "frame_max_agi": 980514.24, + "target_mean_agi": 735571.1468359304, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": null, + "drop1_removed_w": null, + "drop1_removed_channel": null, + "drop1_frame_n": null, + "drop1_frame_N": null, + "drop1_frame_A": null, + "drop1_ratio_A": null, + "drop1_feasible_necessary": null, + "drop1_failing_conditions": null, + "drop1_over2x_A": null + }, + "1m_plus": { + "variant": "demographic_midrank6_earn", + "state": "CO", + "fips": "08", + "band_low": 1000000.0, + "band_high": null, + "soi2023_returns": 15610.0, + "soi2023_agi": 47266883000.0, + "soi2023_share_returns": 0.0050569678, + "soi2023_share_agi": 0.1504760404, + "ty2022_control_returns": 2972380.0, + "ty2022_control_agi": 297676269000.0, + "target_returns_2024": 15031.2300321041, + "target_agi_2024": 50183822260.727684, + "puf_n": 15, + "puf_N": 7423.6087179399, + "puf_A": 71661566549.08746, + "puf_mean_agi": 9653198.231731962, + "puf_min_agi": 1006729.1472210533, + "puf_max_agi": 125397728.4296138, + "puf_largest_share_of_A": 0.7587054726, + "puf_largest_w": 433.5806030786, + "puf_largest_share_above_low": 0.8396350683, + "puf_N_x2": 14847.2174358798, + "puf_A_x2": 143323133098.17493, + "puf_largest_w_x2": 867.1612061571, + "svy_n": 13, + "svy_N": 7617.4984001925, + "svy_A": 9824303047.565695, + "svy_max_income": 2027867.6, + "svy6_n": 12, + "svy6_N": 6978.775056734, + "svy6_A": 9017215747.798136, + "frame_n": 28, + "frame_N": 15041.1071181324, + "frame_A": 81485869596.65315, + "ratio_N": 1.0006571043, + "ratio_A": 1.6237477722, + "frame6_N": 14402.3837746739, + "frame6_A": 80678782296.8856, + "ratio6_N": 0.9581640188, + "ratio6_A": 1.6076651531, + "cap_N_5x": 75205.535590662, + "cap_A_5x": 407429347983.26575, + "frame_min_agi": 1000067.68, + "frame_max_agi": 125397728.4296138, + "target_mean_agi": 3338637.1011250336, + "c1_count_reachable": true, + "c2_amount_reachable": true, + "c3_mean_in_range": true, + "feasible_necessary": true, + "failing_conditions": "", + "zero_support": false, + "over2x_A": false, + "over2x_N": false, + "start_loss_A_capped": false, + "start_loss_N_capped": false, + "drop1_removed_agi": 125397728.4296138, + "drop1_removed_w": 433.5806030786, + "drop1_removed_channel": "puf", + "drop1_frame_n": 27.0, + "drop1_frame_N": 14607.5265150538, + "drop1_frame_A": 27115846879.458687, + "drop1_ratio_A": 0.5403304423, + "drop1_feasible_necessary": true, + "drop1_failing_conditions": "", + "drop1_over2x_A": false + } + }, + "sensitivity_1m_plus_drop_largest_record": { + "states_with_support": 51, + "feasible_before": 42, + "feasible_after_drop1": 30, + "over2x_A_before": 2, + "over2x_A_after_drop1": 0, + "ratio_A_median_before": 0.5809801904377528, + "ratio_A_median_after_drop1": 0.5048342618600362, + "states_flipping_feasible_to_infeasible": [ + "AR", + "IL", + "IN", + "KS", + "KY", + "MD", + "MN", + "MO", + "MS", + "ND", + "OR", + "VT" + ], + "states_flipping_infeasible_to_feasible": [], + "states_flipping_over2x_to_under": [ + "SC", + "WV" + ] + }, + "national_1m_plus_vs_table_1_1": { + "puf_x2_returns": 839999.638098498, + "puf_x2_agi": 2703204038678.1987, + "frame_returns": 746242.6512436781, + "frame_agi": 1758902186832.9365, + "targets_2024_returns_51": 787789.1666508679, + "targets_2024_agi_51": 2725601945437.0024, + "table_1_1_ty2023_returns": 799094, + "table_1_1_ty2023_agi": 2543450000000.0 + } + } + }, + "soi_table_1_1_ty2023_1m_plus": { + "returns": 799094, + "agi": 2543450000000.0 + }, + "colorado_reproduction_check": { + "readme_982": { + "records": 15, + "returns_x2": 14847, + "largest_share_of_income_above_1m": 0.84, + "largest_proxy_agi": 125400000.0, + "largest_weight_x2": 867 + }, + "computed": { + "records": 15, + "returns_x2": 14847.21743587981, + "largest_share_of_income_above_1m": 0.8396350683483795, + "largest_proxy_agi": 125397728.4296138, + "largest_weight_x2": 867.1612061571366 + }, + "reproduces": true + }, + "fips_mapping_sanity_top5_by_weight": [ + "CA", + "TX", + "FL", + "NY", + "PA" + ], + "puf_half_weight_total": 91655426.09461409, + "survey_total_vs_six_items": { + "rows_differing": 43343, + "rows": 231007, + "note": "survey_total is compare_predictors.py's broad SURVEY list (up to 14 items incl. pension, IRA, rental, farm, UI, alimony, misc), not the six predictor items; the svy6_* columns use the six items." + } +} From fe7462ac1447895235be1ea0382e481a3dc5cd0e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 26 Sep 2026 07:45:39 -0400 Subject: [PATCH 03/10] Register the TY2023 state AGI Chronicle package as an active SOI source soi-historic-table-2-state-agi-2023 joins the hard-target SOI filer family in source_coverage.py and the fiscal refresh's DIRECT_ACTIVE_ALIASES, so the release's source-coverage receipt and reviewed-exclusion list stay exact. Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/us_runtime/source_coverage.py | 1 + tools/build_us_fiscal_refresh_release.py | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/source_coverage.py b/packages/microcosm-build/src/microcosm/build/us_runtime/source_coverage.py index d37e3878e1..cff3f9086b 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/source_coverage.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/source_coverage.py @@ -95,6 +95,7 @@ class SourceCoverageEntry: "soi-state-2022", "soi-historic-table-2", "soi-historic-table-2-state-agi-2022", + "soi-historic-table-2-state-agi-2023", "soi-historic-table-2-state-broad-2022", "soi-historic-table-2-state-eitc-2022", "soi-congressional-district-2022", diff --git a/tools/build_us_fiscal_refresh_release.py b/tools/build_us_fiscal_refresh_release.py index e25b72281b..72b27f443a 100644 --- a/tools/build_us_fiscal_refresh_release.py +++ b/tools/build_us_fiscal_refresh_release.py @@ -620,6 +620,7 @@ def _automatic_gc_suspended(): "soi-state-2022", "soi-historic-table-2", "soi-historic-table-2-state-agi-2022", + "soi-historic-table-2-state-agi-2023", "soi-historic-table-2-state-broad-2022", "soi-historic-table-2-state-eitc-2022", "soi-w2-statistics-2020", From 8042842f0b640580540906436c8d4728f28ec366 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 00:17:36 -0400 Subject: [PATCH 04/10] Address the #940 review: floor at every period, vintage fallback, contract period Review of the state AGI band rescue (round 1, lens math-and-selection): - The Colorado TY2023 fixture had wrong stubs 1-7; it now carries the published cells and a test that they sum to the file's stub 0. - State HT2 bands below the $100k floor (or not for all filing statuses) are refused at every period, not only across periods, so a same-year vintage cannot bind raw sub-floor levels. - One vintage per state and measure is now the newest one whose published partition is complete; a gapped newest vintage falls back instead of dropping the state. Only requested vintages are validated, identical re-emissions collapse, a conflicting re-emission raises. - find_period_contract_violations reads uprating_to_period for rebased rows, the period _age_spec ages them from. - New release requirement irs_state_agi_top_tail_returns (M+ counts, 51 states) beside the AGI one. Co-Authored-By: Claude Opus 5.5 --- .../build/us_runtime/fiscal_targets.py | 293 +++++++++++------- .../build/us_runtime/target_aging.py | 10 +- .../tests/test_us_fiscal_targets.py | 33 +- .../tests/test_us_soi_state_agi_bands.py | 170 +++++++++- 4 files changed, 362 insertions(+), 144 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index 581e0d6f57..af98cbc5f9 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -2018,11 +2018,13 @@ def _rebase_soi_state_agi_bands( the latest published shares scale onto the level the state total binds at, which keeps the two consistent instead of mixing levels. - One vintage per state and measure: rows from an older vintage than the - state's latest flagged vintage are dropped, so a collapsed ``500k_plus`` - row from one year never binds beside another year's split - ``500k_to_1m``/``1m_plus`` rows. A band with no complete partition or no - control is dropped, never shipped as an unanchored nominal level. + One vintage per state and measure: the newest vintage whose published + partition is complete binds, and every other vintage's rows are dropped, + so a collapsed ``500k_plus`` row from one year never binds beside another + year's split ``500k_to_1m``/``1m_plus`` rows. A newest vintage with a gap + falls back to the next complete one. With no complete partition or no + control a state's bands are dropped, never shipped as unanchored nominal + levels; the ``irs_state_agi_top_tail`` release requirement then fails. """ flagged = [ @@ -2032,42 +2034,36 @@ def _rebase_soi_state_agi_bands( ] if not flagged: return registry - latest_periods: dict[tuple[str, str], tuple[int, int, str]] = {} - for spec in flagged: - key = _soi_state_agi_band_key_from_spec(spec) - period_key = _period_key_from_value(spec.metadata.get("source_period", "")) - if key not in latest_periods or period_key[:2] > latest_periods[key][:2]: - latest_periods[key] = period_key - partitions = _soi_state_agi_band_partition_totals(facts) controls = _soi_state_agi_band_controls(facts, target_period=target_period) + band_rows = _soi_state_agi_band_rows(facts) + candidates: dict[tuple[str, str], set[tuple[str, str]]] = {} + for spec in flagged: + candidates.setdefault(_soi_state_agi_band_key_from_spec(spec), set()).add( + _soi_state_agi_band_vintage_from_spec(spec) + ) + chosen: dict[tuple[str, str], tuple[tuple[str, str], float]] = {} + for key, vintages in candidates.items(): + if key not in controls: + continue + selected = _latest_complete_state_agi_band_vintage(key, vintages, band_rows) + if selected is not None: + chosen[key] = selected specs: list[TargetSpec] = [] - kept_bounds: dict[tuple[str, str], list[tuple[float, float, str]]] = {} for spec in registry.specs: if spec.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) != "true": specs.append(spec) continue key = _soi_state_agi_band_key_from_spec(spec) - source_period = spec.metadata.get("source_period", "") - if _period_key_from_value(source_period)[:2] != latest_periods[key][:2]: + if key not in chosen: continue - partition = partitions.get( - ( - *key, - source_period, - _normalized_record_set_id( - spec.metadata.get("ledger_layout_record_set_id", "") - ), - ) - ) - control = controls.get(key) - if partition is None or partition == 0 or control is None: + vintage, partition = chosen[key] + if _soi_state_agi_band_vintage_from_spec(spec) != vintage: continue + control = controls[key] + source_period = spec.metadata.get("source_period", "") share = spec.value / partition factor = control.value / partition - kept_bounds.setdefault(key, []).append( - (*_bounds_from_metadata(spec), spec.name) - ) specs.append( replace( spec, @@ -2087,7 +2083,6 @@ def _rebase_soi_state_agi_bands( }, ) ) - _check_soi_state_agi_bands_disjoint(kept_bounds) return TargetRegistry(specs, country=registry.country) @@ -2098,65 +2093,124 @@ def _soi_state_agi_band_key_from_spec(spec: TargetSpec) -> tuple[str, str]: ) -def _soi_state_agi_band_partition_totals( +def _soi_state_agi_band_vintage_from_spec(spec: TargetSpec) -> tuple[str, str]: + """(source period, period-free record set) of a flagged band row.""" + return ( + spec.metadata.get("source_period", ""), + _normalized_record_set_id(spec.metadata.get("ledger_layout_record_set_id", "")), + ) + + +def _soi_state_agi_band_rows( facts: tuple[object, ...], -) -> dict[tuple[str, str, str, str], float]: - """Sum of each state's published bands over one complete AGI partition. +) -> dict[tuple[str, str, str, str], dict[str, tuple[float, float, float]]]: + """Every published state HT2 AGI band, as ``(lower, upper, value)``. - Keyed ``(state_fips, measure_id, period, period-free record set)``. Every - band of the record set counts, including those below the binding floor - and negative AGI under $1. A group with a gap in the AGI line has no - total; overlapping or duplicated bands are a packaging error and raise. + Keyed ``(state_fips, measure_id, period, period-free record set)`` and + then by source record id. All bands count, those below the binding floor + and negative AGI under $1 included. An identical re-emission of one id + collapses to one row; one id with two different rows raises. """ - bands: dict[tuple[str, str, str, str], list[tuple[float, float, float]]] = {} + groups: dict[ + tuple[str, str, str, str], dict[str, tuple[float, float, float]] + ] = {} for fact in facts: - if _source_name(fact) != "irs_soi": - continue - measure_id = _measure_id(fact) - if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: - continue - record_set = _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")) - if not record_set.startswith(_SOI_STATE_AGI_BAND_RECORD_SET_PREFIX): - continue - state_fips = _state_fips(fact) - if _geography_level(fact) != "state" or state_fips is None: + if _soi_state_agi_band_status(fact, _measure_id(fact)) is None: continue if _filing_status_label(_dimensions(fact).get("filing_status")) != "All": continue - if _is_all_agi_range_fact(fact): - continue lower, upper = _agi_bounds(fact) - bands.setdefault( - (state_fips, measure_id, str(_period_value(fact)), record_set), [] - ).append( - ( - _bound_from_metadata_value(lower), - _bound_from_metadata_value(upper), - _numeric_value(fact), + row = ( + _bound_from_metadata_value(lower), + _bound_from_metadata_value(upper), + _numeric_value(fact), + ) + key = ( + _state_fips(fact) or "", + _measure_id(fact), + str(_period_value(fact)), + _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")), + ) + rows = groups.setdefault(key, {}) + source_record_id = _source_record_id(fact) + if rows.get(source_record_id, row) != row: + raise ValueError( + f"State AGI band {source_record_id} appears twice with different " + f"bounds or values: {rows[source_record_id]} and {row} " + "(microcosm#940)." ) + rows[source_record_id] = row + return groups + + +def _state_agi_band_partition_total( + key: tuple[str, str, str, str], + rows: Mapping[str, tuple[float, float, float]], +) -> float | None: + """The sum of one group's bands if they tile the whole AGI line. + + A gap leaves the partition incomplete (``None``). Overlapping bands are a + packaging error and raise. + """ + + cursor = -float("inf") + complete = True + for lower, upper, _ in sorted(rows.values()): + if lower < cursor or upper <= lower: + state_fips, measure_id, period, record_set = key + raise ValueError( + f"Overlapping state AGI bands in {record_set} ({period}) " + f"for state {state_fips} {measure_id}: a band starting at " + f"{_format_bound(lower)} overlaps the one ending at " + f"{_format_bound(cursor)}. One vintage's bands must tile the " + "AGI line (microcosm#940)." + ) + if lower > cursor: + complete = False + cursor = upper + if not complete or cursor != float("inf"): + return None + return sum(value for _, _, value in rows.values()) + + +def _latest_complete_state_agi_band_vintage( + key: tuple[str, str], + vintages: set[tuple[str, str]], + band_rows: Mapping[ + tuple[str, str, str, str], Mapping[str, tuple[float, float, float]] + ], +) -> tuple[tuple[str, str], float] | None: + """The newest vintage of a state's bands with a complete, nonzero partition. + + Only the vintages some flagged row asks for are examined, so a malformed + vintage that could never bind cannot stop the compile. Two record sets of + one period that both tile the line are ambiguous and raise. + """ + + by_period: dict[tuple[int, int], list[tuple[str, str]]] = {} + for vintage in vintages: + by_period.setdefault(_period_key_from_value(vintage[0])[:2], []).append( + vintage ) - totals: dict[tuple[str, str, str, str], float] = {} - for key, rows in bands.items(): - rows.sort() - cursor = -float("inf") - complete = True - for lower, upper, _ in rows: - if lower < cursor or upper <= lower: - state_fips, measure_id, period, record_set = key - raise ValueError( - f"Overlapping state AGI bands in {record_set} ({period}) " - f"for state {state_fips} {measure_id}: a band starting at " - f"{_format_bound(lower)} overlaps the one ending at " - f"{_format_bound(cursor)}. One vintage's bands must tile the " - "AGI line (microcosm#940)." - ) - if lower > cursor: - complete = False - cursor = upper - if complete and cursor == float("inf"): - totals[key] = sum(value for _, _, value in rows) - return totals + for period_key in sorted(by_period, reverse=True): + complete = [] + for vintage in sorted(by_period[period_key]): + group = (*key, *vintage) + partition = _state_agi_band_partition_total( + group, band_rows.get(group, {}) + ) + if partition: + complete.append((vintage, partition)) + if len(complete) > 1: + raise ValueError( + f"State {key[0]} {key[1]} has complete AGI band partitions in " + f"more than one record set for one period: " + f"{[vintage for vintage, _ in complete]} (microcosm#940)." + ) + if complete: + return complete[0] + return None def _soi_state_agi_band_controls( @@ -2211,24 +2265,6 @@ def _soi_state_agi_band_controls( return controls -def _check_soi_state_agi_bands_disjoint( - kept_bounds: Mapping[tuple[str, str], list[tuple[float, float, str]]], -) -> None: - """Refuse overlapping bands for one state and measure: a packaging error.""" - - for (state_fips, measure_id), bounds in kept_bounds.items(): - ordered = sorted(bounds) - for (_, upper, name), (lower, _, other) in zip( - ordered, ordered[1:], strict=False - ): - if lower < upper: - raise ValueError( - "Overlapping state AGI band targets for state " - f"{state_fips} {measure_id}: {name} and {other}. One " - "vintage's bands must tile the AGI line (microcosm#940)." - ) - - @dataclass(frozen=True) class _EitcActiveTotal: value: float @@ -2985,9 +3021,15 @@ def _soi_reference_from_fact( ) # A state's Historic Table 2 AGI band binds only as a share of its own # published partition, rebased onto the state total that binds - # (_rebase_soi_state_agi_bands) — at every vintage, so no state band ever - # binds as a raw nominal level (microcosm#940). + # (_rebase_soi_state_agi_bands), and only from the $100k floor up, for all + # filing statuses. Every other state band is refused at every vintage, so + # no state band ever binds as a raw nominal level (microcosm#940). requires_state_agi_band_rebase = _is_soi_state_agi_band_fact(fact, measure_id) + if ( + _soi_state_agi_band_status(fact, measure_id) is not None + and not requires_state_agi_band_rebase + ): + return None if ( cross_period_agi_slice and not requires_total_eitc_uprating @@ -3141,30 +3183,40 @@ def _is_soi_total_uprated_decomposition_fact( return not _is_all_income_range(fact) -def _is_soi_state_agi_band_fact(fact: object, measure_id: str) -> bool: - """Whether a fact is a state Historic Table 2 AGI band that binds (#940). +def _soi_state_agi_band_status( + fact: object, measure_id: str +) -> Literal["binding", "below_floor"] | None: + """Classify a state Historic Table 2 AGI band (#940). - True only for a return count or AGI amount, from a state record set of the - Historic Table 2 AGI table, at state geography, for all filing statuses, - in a bounded AGI band whose lower edge is at or above - :data:`US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND`. The national shape of - AGI belongs to Pub 1304 Table 1.1, so the HT2 ``us`` rows never qualify. + ``None`` unless the fact is a return count or AGI amount from a state + record set of the Historic Table 2 AGI table, at state geography, in a + bounded AGI band. Such a band is ``"binding"`` when its lower edge is at + or above :data:`US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND`, and + ``"below_floor"`` otherwise. The national shape of AGI belongs to Pub 1304 + Table 1.1, so the HT2 ``us`` rows are never state bands. """ if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: - return False + return None if not _normalized_record_set_id( _str_at(fact, "layout", "record_set_id") ).startswith(_SOI_STATE_AGI_BAND_RECORD_SET_PREFIX): - return False + return None if _geography_level(fact) != "state" or _state_fips(fact) is None: - return False - if _filing_status_label(_dimensions(fact).get("filing_status")) != "All": - return False + return None if _is_all_agi_range_fact(fact): - return False + return None lower, _ = _agi_bounds(fact) + if _bound_from_metadata_value(lower) >= US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND: + return "binding" + return "below_floor" + + +def _is_soi_state_agi_band_fact(fact: object, measure_id: str) -> bool: + """Whether a fact is a state HT2 AGI band that binds (#940): a binding-floor + band (:func:`_soi_state_agi_band_status`) for all filing statuses.""" return ( - _bound_from_metadata_value(lower) >= US_SOI_STATE_AGI_BAND_MINIMUM_LOWER_BOUND + _soi_state_agi_band_status(fact, measure_id) == "binding" + and _filing_status_label(_dimensions(fact).get("filing_status")) == "All" ) @@ -4042,6 +4094,23 @@ def _str_at(obj: object, *path: str) -> str: "not ship without the constraint." ), ), + TargetCoverageRequirement( + requirement_id="irs_state_agi_top_tail_returns", + label="SOI returns at $1M+ AGI in every state", + accepted_families=("irs_soi",), + required_metadata=( + (_SOI_STATE_AGI_BAND_REBASE_FLAG, "true"), + ("source_measure_id", "return_count"), + ("agi_lower_bound", "1000000.0"), + ), + min_matches=len(US_STATE_FIPS_TO_POSTAL), + notes=( + "The count half of irs_state_agi_top_tail: a state's AGI above $1M " + "is pinned only by its $1M+ AGI and return count together, and " + "each measure's bands are dropped independently when its " + "partition or state total is missing (microcosm#940)." + ), + ), TargetCoverageRequirement( requirement_id="irs_wages_distribution", label="SOI wages by AGI bracket", diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py b/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py index c422e9f5e2..e37658b668 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py @@ -248,8 +248,16 @@ def find_period_contract_violations( continue if metadata.get("period_contract_waiver"): continue + # The period the value is AT: a rebased row's value sits at its + # control's period (``uprating_to_period``), the period _age_spec ages + # it from. A state AGI band rebased onto an older state total + # (microcosm#940) is a row whose two periods differ. + uprated_to = ( + metadata.get("uprating_to_period") if "uprating_factor" in metadata else None + ) fact_period = ( - metadata.get("source_period") + uprated_to + or metadata.get("source_period") or metadata.get("ledger_fact_period") or str(spec.period) ) diff --git a/packages/microcosm-build/tests/test_us_fiscal_targets.py b/packages/microcosm-build/tests/test_us_fiscal_targets.py index 8d3c72c6bf..396f56b697 100644 --- a/packages/microcosm-build/tests/test_us_fiscal_targets.py +++ b/packages/microcosm-build/tests/test_us_fiscal_targets.py @@ -6833,22 +6833,23 @@ def complete_coverage_targets() -> list[dict[str, object]]: def complete_state_agi_top_tail_rows() -> list[dict[str, object]]: rows = [] for postal in US_STATE_FIPS_TO_POSTAL.values(): - name = ( - f"irs_soi.ty2023.historic_table_2.state_agi.{postal.lower()}." - "1m_plus.adjusted_gross_income" - ) - rows.append( - { - "name": name, - "measure": name, - "family": "irs_soi", - "metadata": { - "requires_state_agi_band_rebase": "true", - "source_measure_id": "adjusted_gross_income", - "agi_lower_bound": "1000000.0", - }, - } - ) + for measure in ("adjusted_gross_income", "return_count"): + name = ( + f"irs_soi.ty2023.historic_table_2.state_agi.{postal.lower()}." + f"1m_plus.{measure}" + ) + rows.append( + { + "name": name, + "measure": name, + "family": "irs_soi", + "metadata": { + "requires_state_agi_band_rebase": "true", + "source_measure_id": measure, + "agi_lower_bound": "1000000.0", + }, + } + ) return rows diff --git a/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py b/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py index 8e77ca00ae..42a2d1ecf3 100644 --- a/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py +++ b/packages/microcosm-build/tests/test_us_soi_state_agi_bands.py @@ -223,24 +223,34 @@ def _totals(postal: str, period: int, returns: float, agi: float) -> list[dict]: ] -#: Colorado's published TY2023 cells (23in55cmcsv.csv; AGI in dollars). +#: Colorado's published TY2023 cells (23in55cmcsv.csv, sha256 d1f7c890...668f, +#: AGI_STUB 1-10: N1 and A00100 x 1000, AGI in dollars). CO_2023 = { - "under_1": (47_150, -2_559_604_000), - "1_to_10k": (291_060, 1_416_216_000), - "10k_to_25k": (389_460, 6_728_128_000), - "25k_to_50k": (632_110, 23_615_781_000), - "50k_to_75k": (477_700, 29_421_989_000), - "75k_to_100k": (320_010, 27_725_880_000), - "100k_to_200k": (581_560, 81_122_417_000), + "under_1": (52_560, -2_879_696_000), + "1_to_10k": (315_840, 1_452_173_000), + "10k_to_25k": (397_560, 6_852_985_000), + "25k_to_50k": (630_840, 23_652_280_000), + "50k_to_75k": (480_120, 29_575_755_000), + "75k_to_100k": (317_240, 27_490_269_000), + "100k_to_200k": (581_520, 81_135_957_000), "200k_to_500k": (257_510, 74_198_170_000), "500k_to_1m": (38_030, 25_370_899_000), "1m_plus": (15_610, 47_266_883_000), } +#: Colorado's published TY2023 all-returns total (AGI_STUB 0). +CO_2023_TOTAL_RETURNS = 3_086_830 +CO_2023_TOTAL_AGI = 314_115_675_000 #: Colorado's TY2022 all-returns totals (22in55cmcsv.csv, AGI_STUB 0). CO_2022_TOTAL_RETURNS = 2_972_380 CO_2022_TOTAL_AGI = 297_676_269_000 +def test_colorado_fixture_adds_up_to_the_published_state_total() -> None: + """Guards the fixture itself: its ten cells sum to the file's stub 0.""" + assert sum(returns for returns, _ in CO_2023.values()) == CO_2023_TOTAL_RETURNS + assert sum(agi for _, agi in CO_2023.values()) == CO_2023_TOTAL_AGI + + def _reference_fact(reference, value: float) -> dict[str, object]: selector = dict(reference.ledger_selector) source_name = str(selector.get("source_name") or reference.family) @@ -594,11 +604,22 @@ def test_rebased_bands_age_with_the_state_total() -> None: ) -def test_release_coverage_requires_a_top_tail_row_in_every_state() -> None: +@pytest.mark.parametrize( + ("requirement_id", "measure"), + [ + ("irs_state_agi_top_tail", "adjusted_gross_income"), + ("irs_state_agi_top_tail_returns", "return_count"), + ], +) +def test_release_coverage_requires_top_tail_rows_in_every_state( + requirement_id: str, measure: str +) -> None: + """Both halves of a state's $1M+ cell are release requirements: dropping + one state's row of either measure fails the gate.""" requirement = next( requirement for requirement in US_FISCAL_TARGET_COVERAGE_REQUIREMENTS - if requirement.requirement_id == "irs_state_agi_top_tail" + if requirement.requirement_id == requirement_id ) facts = [] for postal in sorted(POSTAL_TO_FIPS): @@ -607,11 +628,7 @@ def test_release_coverage_requires_a_top_tail_row_in_every_state() -> None: registry = _compile(facts) everything = target_profile_coverage_gate(registry.specs, [requirement]) one_state_short = target_profile_coverage_gate( - [ - spec - for spec in registry.specs - if spec.name != _co_name("1m_plus", "adjusted_gross_income") - ], + [spec for spec in registry.specs if spec.name != _co_name("1m_plus", measure)], [requirement], ) @@ -620,6 +637,129 @@ def test_release_coverage_requires_a_top_tail_row_in_every_state() -> None: assert not one_state_short.passed +def test_state_bands_below_the_floor_never_bind_even_in_their_own_year() -> None: + """At a target period equal to the bands' tax year nothing is cross-period, + so the floor itself must refuse sub-$100k state bands (and non-all filing + statuses); binding bands still carry the rebase flag.""" + from microcosm.build.us_runtime import fiscal_targets + + for band, lower, upper in BANDS: + for measure in MEASURES: + fact = _band_fact("CO", 2023, band, lower, upper, measure, 1_000.0) + reference = fiscal_targets._soi_reference_from_fact(fact, target_period=2023) + if band in BINDING_BANDS: + assert reference is not None, band + assert reference.metadata[FLAG] == "true" + else: + assert reference is None, band + single = _band_fact( + "CO", 2023, band, lower, upper, measure, 1_000.0, filing_status="single" + ) + assert ( + fiscal_targets._soi_reference_from_fact(single, target_period=2023) + is None + ) + + +def test_an_incomplete_newest_vintage_falls_back_to_the_last_complete_one() -> None: + """A TY2023 partition with a gap does not bind; the complete TY2022 bands + do, as shares, instead of the state losing its bands.""" + ty2022_values = {band: (100.0, 1_000_000.0) for band, _, _ in COLLAPSED_BANDS} + gapped_2023 = [ + fact + for fact in _partition("CO", 2023, CO_2023) + if ".75k_to_100k." not in str(fact["lineage"]["source_record_id"]) + ] + registry = _compile( + [ + *_partition("CO", 2022, ty2022_values, bands=COLLAPSED_BANDS), + *gapped_2023, + *_totals("CO", 2022, 900.0, 9_000_000.0), + ] + ) + bands = _band_specs(registry) + + assert bands + assert {spec.metadata["uprating_from_period"] for spec in bands.values()} == { + "2022" + } + assert {name.split(".")[5] for name in bands} == { + "100k_to_200k", + "200k_to_500k", + "500k_plus", + } + + +def test_identical_reemissions_collapse_and_conflicting_ones_raise() -> None: + """One source record id emitted twice with the same bytes is one band; + the same id with a different value is a feed error.""" + base = [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + duplicate = dict(base[0]) + registry = _compile([*base, duplicate]) + assert len(_band_specs(registry)) == len(BINDING_BANDS) * len(MEASURES) + + conflicting = {**base[0], "value": base[0]["value"] + 10} + with pytest.raises(ValueError, match="appears twice with different"): + _compile([*base, conflicting]) + + +def test_a_malformed_vintage_that_cannot_bind_does_not_stop_the_compile() -> None: + """An overlapping TY2021 partition is never examined when the state's + newest vintage (TY2023) is complete.""" + overlapping_2021 = [ + *_partition("CO", 2021, CO_2023), + _band_fact("CO", 2021, "500k_plus", 500_000, None, "return_count", 1.0), + ] + registry = _compile( + [ + *overlapping_2021, + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + + assert { + spec.metadata["uprating_from_period"] + for spec in _band_specs(registry).values() + } == {"2023"} + + +def test_period_contract_reads_the_period_a_rebased_band_sits_at() -> None: + """Without aging, TY2023 AGI bands rebased onto a TY2022 state total hold + 2022-level dollars: at a 2023 build they violate the period contract like + the state total they are shares of, and at a 2022 build neither does.""" + from microcosm.build.us_runtime.target_aging import ( + find_period_contract_violations, + ) + + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + agi_bands = { + name + for name, spec in _band_specs(registry).items() + if spec.metadata["source_measure_id"] == "adjusted_gross_income" + } + total = "irs_soi.ty2022.historic_table_2.state_broad.co.all.adjusted_gross_income" + at_2023 = { + violation.target_name + for violation in find_period_contract_violations(registry, target_period=2023) + } + at_2022 = { + violation.target_name + for violation in find_period_contract_violations(registry, target_period=2022) + } + + assert agi_bands | {total} <= at_2023 + assert not (agi_bands | {total}) & at_2022 + + # -------------------------------------------------------------------------- # Invariants over generated states (Hypothesis is a workspace dependency; the # wheels job installs no test extras, so these skip there). From 4f1460bed7b29357bc5983808c88b9d7a59c88ce Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 00:31:59 -0400 Subject: [PATCH 05/10] Format the period-contract hunk Co-Authored-By: Claude Opus 5.5 --- .../src/microcosm/build/us_runtime/target_aging.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py b/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py index e37658b668..a8296fa471 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/target_aging.py @@ -253,7 +253,9 @@ def find_period_contract_violations( # it from. A state AGI band rebased onto an older state total # (microcosm#940) is a row whose two periods differ. uprated_to = ( - metadata.get("uprating_to_period") if "uprating_factor" in metadata else None + metadata.get("uprating_to_period") + if "uprating_factor" in metadata + else None ) fact_period = ( uprated_to From 7a90473c199fc0c95de1ef12602beca2645572b1 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 00:41:31 -0400 Subject: [PATCH 06/10] Let every state band vintage reach the rebase pass; fix the contract test Per-band latest selection let a gapped TY2023 band shadow its complete TY2022 twin before _rebase_soi_state_agi_bands could fall back, so the fallback bound only rows with no newer twin. Binding state bands now carry their period in the selection key, and the pass is their one vintage selector. The period-contract test now strips the waivers _compile stamps at its own build before asking the contract at other periods. Docs updated. Co-Authored-By: Claude Opus 5.5 --- docs/us-fact-to-target.md | 27 +++++++++++++------ .../build/us_runtime/fiscal_targets.py | 9 ++++++- .../us/test_us_soi_state_agi_bands.py | 21 ++++++++++++++- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/docs/us-fact-to-target.md b/docs/us-fact-to-target.md index 4cae68ceb0..6cb6b486d2 100644 --- a/docs/us-fact-to-target.md +++ b/docs/us-fact-to-target.md @@ -143,16 +143,27 @@ binds them: The control may be older than the bands (TY2023 bands on the TY2022 state total): the newest published shares scale onto the level the state total binds at, rather than binding a second, differently aged level. -- **One vintage.** Per state and measure only the newest vintage's bands - bind, so the TY2022 package's summed `500k_plus` row never binds beside - TY2023's split rows. A gap in a partition drops that state's bands; an - overlap raises. +- **One vintage.** Every vintage of a state band reaches the pass; per state + and measure the pass binds the newest vintage whose published partition is + complete and drops the rest, so the TY2022 package's summed `500k_plus` row + never binds beside TY2023's split rows, and a gapped newest vintage falls + back to the last complete one. Overlapping bands, or one source record id + re-emitted with different values, raise. +- **The floor holds at every period.** A state band below $100k, or for a + single filing status, is refused even in its own tax year, so a same-year + vintage can never bind raw sub-floor levels. - **Receipts.** Every rebased row carries `state_agi_band_share`, `uprating_factor` and the control's record id. -- **Release gate.** `irs_state_agi_top_tail` in - `US_FISCAL_TARGET_COVERAGE_REQUIREMENTS` requires a $1M+ AGI row for all 51 - states, so a feed without the split bands fails the release rather than - shipping without the constraint. +- **Release gate.** `irs_state_agi_top_tail` and + `irs_state_agi_top_tail_returns` in `US_FISCAL_TARGET_COVERAGE_REQUIREMENTS` + require a $1M+ AGI row and a $1M+ return-count row for all 51 states, so a + feed without the split bands, or a state whose partition or total is + missing for either measure, fails the release rather than shipping without + the constraint. Together the two rows pin each state's AGI above $1M. +- **Period contract.** Without aging, a band rebased onto an older state + total holds that total's period's dollars; `find_period_contract_violations` + reads `uprating_to_period` for rebased rows, the same period target aging + ages them from. - **Agreement with Table 1.1.** On the pinned feed the states' $500k–$1M and $1M+ rows sum to 98–99% of Table 1.1's TY2023 classes aged the same way; Table 1.1 also counts returns filed from other areas and Puerto Rico diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index 5577e2b90d..32d05643e3 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -2615,9 +2615,16 @@ def _latest_dynamic_target_references( target_period=target_period, ) if reference is not None: + key = _dynamic_target_key(fact) + if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true": + # Every vintage of a state AGI band reaches the registry: + # _rebase_soi_state_agi_bands picks one vintage per state and + # measure by partition completeness, which per-band latest + # selection cannot see (microcosm#940). + key = (*key, str(_period_value(fact))) candidates.append( ( - _dynamic_target_key(fact), + key, _period_key(fact), _numeric_value(fact), _source_record_id(fact), diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py index bfab3b2056..7f03b37897 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py @@ -732,16 +732,35 @@ def test_period_contract_reads_the_period_a_rebased_band_sits_at() -> None: """Without aging, TY2023 AGI bands rebased onto a TY2022 state total hold 2022-level dollars: at a 2023 build they violate the period contract like the state total they are shares of, and at a 2022 build neither does.""" + from dataclasses import replace + from microcosm.build.us_runtime.target_aging import ( find_period_contract_violations, ) + from microcosm.calibrate import TargetRegistry - registry = _compile( + compiled = _compile( [ *_partition("CO", 2023, CO_2023), *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), ] ) + # _compile waives the contract at its 2024 build; remove the waivers to + # ask the contract afresh at other build periods. + registry = TargetRegistry( + [ + replace( + spec, + metadata={ + key: value + for key, value in spec.metadata.items() + if key != "period_contract_waiver" + }, + ) + for spec in compiled.specs + ], + country="us", + ) agi_bands = { name for name, spec in _band_specs(registry).items() From ea8940de224fb0535d23d3290e98eaaf2ade4949 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 03:07:35 -0400 Subject: [PATCH 07/10] Re-pin the US Chronicle feed to add the TY2023 state AGI-band facts (#940) The pin moves from c5e5bf8 to 51aa40f: Chronicle c5e5bf8 plus only the TY2023 Historic Table 2 state AGI package (chronicle#291; branch feed/us-c5e5bf8-state-agi-2023, tag microcosm-us-feed-940-v1). Re-pinning to Chronicle main instead would also adopt the restamp guard (ten scoped pairs produce no row there) and chronicle#304's concept renames, which are microcosm#1030's re-pin. Measured (experiments/940-state-agi-bands/feed-repin/compare.json): all 39,158 c5e5bf8 cells present with equal values and no changed field; 1,020 cells added, all TY2023 state_agi; compiled at 2024 as the release does, no non-band target added, removed or changed; state bands 306 -> 408. Scope 586 -> 637 pairs, 62 -> 63 runs; feed 40,178 rows (965a29ac...). Parity regenerated: 32 compiled / 52 reviewed, irs_soi.historic_table_2 5,654 -> 6,674. Feed-gated pins re-measured: 33,250 targets, 6,102 national_state at f96be9f41781; ACS-local state surface irs_soi 4,227 (state_agi spec 1,320), state_cd 26,272 SOI. Docs updated. Co-Authored-By: Claude Opus 5.5 --- .../940-state-agi-band-targets.added.md | 1 + docs/us-acs-local-soi-target-surface.md | 25 +- docs/us-chronicle-feed-repin.md | 43 +- experiments/940-state-agi-bands/README.md | 18 + .../feed-repin/apply_pin.py | 70 +++ .../feed-repin/compare.json | 31 ++ .../feed-repin/compare_feeds.py | 176 ++++++++ .../feed-repin/extend_scope.py | 59 +++ .../feed-repin/measure_surface.py | 63 +++ .../microcosm/build/us/chronicle_feed.json | 10 +- .../build/us/chronicle_feed_scope.json | 415 +++++++++++++++++- .../build/us/target_parity_feed_families.json | 6 +- .../build/us/target_parity_manifest.json | 4 +- .../us/test_us_acs_local_release_tool.py | 13 +- .../us/test_us_acs_local_sparse_cd.py | 8 +- .../engine_free/us/test_us_chronicle_feed.py | 10 +- .../engine_free/us/test_us_fiscal_targets.py | 16 +- tools/build_us_target_parity_manifest.py | 2 +- 18 files changed, 925 insertions(+), 45 deletions(-) create mode 100644 changelog.d/940-state-agi-band-targets.added.md create mode 100644 experiments/940-state-agi-bands/feed-repin/apply_pin.py create mode 100644 experiments/940-state-agi-bands/feed-repin/compare.json create mode 100644 experiments/940-state-agi-bands/feed-repin/compare_feeds.py create mode 100644 experiments/940-state-agi-bands/feed-repin/extend_scope.py create mode 100644 experiments/940-state-agi-bands/feed-repin/measure_surface.py diff --git a/changelog.d/940-state-agi-band-targets.added.md b/changelog.d/940-state-agi-band-targets.added.md new file mode 100644 index 0000000000..513fb90e2d --- /dev/null +++ b/changelog.d/940-state-agi-band-targets.added.md @@ -0,0 +1 @@ +State x AGI-band calibration targets from IRS SOI Historic Table 2 (#940): return counts and AGI for each state's bands from $100k up, with $500k-$1M and $1M+ split, bound as shares of the state's published partition rebased onto the state total that binds. The US Chronicle feed is re-pinned to add the TY2023 state AGI-band facts (40,178 rows), and two release coverage requirements demand the $1M+ AGI and return-count row in every state. diff --git a/docs/us-acs-local-soi-target-surface.md b/docs/us-acs-local-soi-target-surface.md index dbca25b164..e072362569 100644 --- a/docs/us-acs-local-soi-target-surface.md +++ b/docs/us-acs-local-soi-target-surface.md @@ -66,6 +66,21 @@ Chronicle `b571381` consumer artifact gives the same counts. | `irs_soi` | 3,819 | 607 | 30,913 | | **Admin specs** | **3,972** | **760** | **31,066** | +**Re-measured 2026-10-04 on `consumer_facts_us_51aa40f.jsonl`** (sha256 +`965a29ac…`, the #940 re-pin: the c5e5bf8 feed plus the TY2023 Historic +Table 2 state AGI-band facts). The 408 state AGI-band rows (51 states x the +four bands from $100k up x returns and AGI; `docs/us-fact-to-target.md`, +"State AGI bands bind as shares of the state total") join `state` and `full`; +their role is `soi_fiscal_distribution`, so `totals` is unchanged: + +| Family | `state` | `totals` | `full` | +|---|---:|---:|---:| +| `irs_soi` | 4,227 | 607 | 31,321 | +| **Admin specs** | **4,380** | **760** | **31,474** | + +With the 487 population marginals `state` now calibrates to 4,867 targets. +The rest of this section describes the 2026-09-22 measurement. + The 487 population marginals (51 states and 436 congressional districts) are added on top in every mode, so `state` calibrates to 4,459 targets: Build P's set, and Build O's 4,461 minus the Vermont under-$1 taxable-interest pair the @@ -80,7 +95,7 @@ Historic Table 2 state tables: | Record set spec | Specs | Content | |---|---:|---| | `irs_soi.historic_table_2.state_broad_totals.v1` | 2,397 | 47 all-income-range measures x 51 states, including AGI, income tax, and ACA premium tax credit returns and amounts | -| `irs_soi.historic_table_2.state_agi_counts_and_amounts.v1` | 912 | taxable interest by AGI band | +| `irs_soi.historic_table_2.state_agi_counts_and_amounts.v1` | 912 | taxable interest by AGI band (1,320 on the #940 feed: plus 408 TY2023 return-count and AGI bands) | | `irs_soi.historic_table_2.state_eitc.v1` | 510 | EITC returns and amounts by number of qualifying children | It holds no congressional-district SOI row and no row from the TY2023 @@ -307,15 +322,17 @@ change forces the same review. |---|---:| | `usda_snap` | 102 | | `cms_medicaid` (enrollment) | 51 | -| `irs_soi` state, Historic Table 2 | 3,819 | +| `irs_soi` state, Historic Table 2 | 4,227 | | `irs_soi` state, district file (district-file-only measures) | 302 | | `irs_soi` district (427 districts x 51 measures, less 34 banded) | 21,743 | -| **Admin specs** | **26,017** | +| **Admin specs** | **26,425** | Of the 21,743 district rows, 19,181 are rebased to a Historic Table 2 parent and 2,562 keep a district-file parent. The 2,189 (state, concept) district blocks each sum to their parent within 1e-9. Adding the 487 population -marginals gives 26,504 targets, before the holdout. The feed-gated test +marginals gives 26,912 targets, before the holdout. The Historic Table 2 +state count includes the 408 state AGI-band rows of #940 (3,819 and 26,017 +admin specs before the 2026-10-04 re-pin). The feed-gated test `test_pinned_feed_state_cd_surface_matches_its_contract` pins these counts and the reconciliation. diff --git a/docs/us-chronicle-feed-repin.md b/docs/us-chronicle-feed-repin.md index 2c68ed03e3..26702e36c3 100644 --- a/docs/us-chronicle-feed-repin.md +++ b/docs/us-chronicle-feed-repin.md @@ -13,7 +13,33 @@ any other feed, and `test_us_chronicle_feed.py` fails if the parity resources, the generator and the pin disagree, or if the scope file changes without a new pin. -## Why the feed moved +## The 2026-10-04 re-pin: TY2023 state AGI bands (microcosm#940) + +The state x AGI-band targets of #940 need the TY2023 Historic Table 2 state +file, whose $500k-$1M and $1M+ classes are separate facts +(PolicyEngine/chronicle#291). The pin moved from `c5e5bf8` to `51aa40f`, a +commit that is `c5e5bf8` plus only that package (Chronicle branch +`feed/us-c5e5bf8-state-agi-2023`, tag `microcosm-us-feed-940-v1`), not to +Chronicle main: + +- At Chronicle main the artifact-year restamp guard (chronicle#292) stops + building the TY2022 and TY2020 files at `--year 2023`, so ten scoped pairs + (the congressional-district file, the W-2 tips and 401(k) items, the IRA + tables, the `state_2022` US rows) produce no row, and chronicle#304 renames + the Historic Table 2 and district-file capital-gains concepts. Adopting + those is microcosm#1030's re-pin and needs its own decisions. +- Built at `51aa40f`, the feed keeps all 39,158 `c5e5bf8` cells with equal + values and no changed field, and adds exactly the 1,020 TY2023 state AGI + cells (`irs_soi.ty2023.historic_table_2.state_agi.`, 51 new scope + pairs). Compiled at 2024 with the packaged CD crosswalk, aging and the + Medicaid substitutions, every target other than the state AGI bands is + identical on both feeds, name, value and metadata; the bands go from 306 + TY2022 rows to 408 TY2023 rows. The comparison script and its report are in + `experiments/940-state-agi-bands/feed-repin/`. +- A later re-pin to Chronicle main carries the 51 pairs over: chronicle#291 + adds the same package to main. + +## Why the feed moved (2026-09-18) `_validate_chronicle_hierarchy_labels` (`packages/microcosm-build/src/microcosm/build/ledger_targets.py`) requires @@ -28,15 +54,20 @@ the first labelled US export. | Field | Value | |---|---| -| Chronicle commit | `c5e5bf8aa84960c1a200ee47303b19c953092d0f` | -| Feed file | `consumer_facts_us_c5e5bf8.jsonl`, 39,158 rows, 164,603,204 bytes | -| `facts_sha256` | `b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801` | +| Chronicle commit | `51aa40fd28e2ca81937752515e773d123fecfb71` (`c5e5bf8` plus the TY2023 state AGI package; tag `microcosm-us-feed-940-v1`) | +| Feed file | `consumer_facts_us_51aa40f.jsonl`, 40,178 rows, 169,038,757 bytes | +| `facts_sha256` | `965a29ac9458edb58a05184917ee4a19772fd3dc7b4588db6eb6da5803641aac` | | Consumer fact schema | `chronicle.consumer_fact.v3`, schema file sha256 `bdb51e2a…` (unchanged from the UK pin) | -| Scope | 586 (record set, period) pairs; 62 package runs over build years 2020 to 2029 | +| Scope | 637 (record set, period) pairs; 63 package runs over build years 2020 to 2029 | | Consumer artifact | none: refused at this commit, see below | +The previous pin was `c5e5bf8aa84960c1a200ee47303b19c953092d0f` +(`consumer_facts_us_c5e5bf8.jsonl`, 39,158 rows, `facts_sha256` +`b8543739…`, 586 pairs, 62 runs); the rest of this document describes its +2026-09-18 rebuild unless it says otherwise. + The feed is too large for the repository. Its home on the build machine is -`~/PolicyEngine/_buildh-runtime/inputs/consumer_facts_us_c5e5bf8.jsonl`, +`~/PolicyEngine/_buildh-runtime/inputs/consumer_facts_us_51aa40f.jsonl`, beside the previous pins; `tools/build_us_target_parity_manifest.py` reads it there by default. A holder of the Chronicle commit regenerates it byte for byte with the commands below. diff --git a/experiments/940-state-agi-bands/README.md b/experiments/940-state-agi-bands/README.md index cf610d084f..862ab20e90 100644 --- a/experiments/940-state-agi-bands/README.md +++ b/experiments/940-state-agi-bands/README.md @@ -293,3 +293,21 @@ incomes; no clone selection; feasibility conditions are per-cell and necessary only; the AGI aging factor 1.1203460 was supplied by the caller and matches the "x1.1203 over 2022->2024" CBO AGI default documented in `us_runtime/fiscal_targets.py`. + +## Feed re-pin receipts (`feed-repin/`) + +The 2026-10-04 re-pin of the US Chronicle feed to `51aa40f` (Chronicle +`c5e5bf8` plus only the TY2023 state AGI package; see +`docs/us-chronicle-feed-repin.md`): + +- `extend_scope.py` adds the 51 TY2023 `state_agi` pairs to + `us/chronicle_feed_scope.json` for a given commit; `apply_pin.py` writes the + pin and the parity generator's feed name from the builder's receipt. +- `compare_feeds.py` joins the old and new feeds on source cell and compiles + both as the release does. `compare.json` is its report: all 39,158 old cells + present with equal values and no changed field, 1,020 cells added (all + `irs_soi.ty2023.historic_table_2.state_agi`), and no non-band target added, + removed or changed in value or metadata; state bands 306 (TY2022) -> 408 + (TY2023). +- `measure_surface.py` measures the release surface the feed-gated test pins: + 33,250 targets, 6,102 `national_state` (408 of them state bands). diff --git a/experiments/940-state-agi-bands/feed-repin/apply_pin.py b/experiments/940-state-agi-bands/feed-repin/apply_pin.py new file mode 100644 index 0000000000..af40ff6948 --- /dev/null +++ b/experiments/940-state-agi-bands/feed-repin/apply_pin.py @@ -0,0 +1,70 @@ +"""Point the US Chronicle feed pin at a rebuilt feed (#940). + +Usage: python apply_pin.py +Rewrites us/chronicle_feed.json (commit, build text, row count, facts and +scope digests) and tools/build_us_target_parity_manifest.py's +DEFAULT_FEED_NAME. The scope file must already name the commit; the schema +version and its digest are checked unchanged (the commit is c5e5bf8-based). +""" + +from __future__ import annotations + +import hashlib +import json +import re +import sys +from pathlib import Path + +worktree, feed_dir, commit, feed_name = ( + Path(sys.argv[1]), + Path(sys.argv[2]), + sys.argv[3], + sys.argv[4], +) +us = worktree / "packages/microcosm-build/src/microcosm/build/us" +scope_bytes = (us / "chronicle_feed_scope.json").read_bytes() +assert json.loads(scope_bytes)["source_commit"] == commit +receipt = json.loads((feed_dir / "receipt.json").read_text()) +facts = (feed_dir / "consumer_facts.jsonl").read_bytes() +facts_sha = hashlib.sha256(facts).hexdigest() +rows = [json.loads(line) for line in facts.splitlines() if line.strip()] +versions = sorted({row["schema_version"] for row in rows}) +assert receipt["facts_sha256"] == facts_sha, receipt +assert receipt["row_count"] == len(rows), receipt +assert receipt["scope_sha256"] == hashlib.sha256(scope_bytes).hexdigest(), receipt + +pin_path = us / "chronicle_feed.json" +pin = json.loads(pin_path.read_text()) +assert versions == pin["consumer_fact_schema_versions"], versions +pin["source_commit"] = commit +pin["build"] = ( + "tools/build_us_chronicle_feed.py --skip-artifact: one `chronicle build-bundle " + "--year Y --source ` per build year in chronicle_feed_scope.json, rows " + "kept for exactly the scope's (record set, period) pairs and sorted by " + "aggregate_fact_key. The commit is c5e5bf8 plus only the TY2023 Historic " + "Table 2 state AGI-band package (tag microcosm-us-feed-940-v1, chronicle#291). " + "Bare feed: `chronicle build-consumer-artifact` refuses it at this commit; see " + "docs/us-chronicle-feed-repin.md." +) +pin["fact_row_count"] = len(rows) +pin["facts_sha256"] = facts_sha +pin["scope_sha256"] = hashlib.sha256(scope_bytes).hexdigest() +pin_path.write_text(json.dumps(pin, indent=2) + "\n") + +tool_path = worktree / "tools/build_us_target_parity_manifest.py" +tool, count = re.subn( + r'DEFAULT_FEED_NAME = "[^"]+"', + f'DEFAULT_FEED_NAME = "{feed_name}"', + tool_path.read_text(), +) +assert count == 1 +tool_path.write_text(tool) +print( + json.dumps( + { + k: pin[k] + for k in ("source_commit", "fact_row_count", "facts_sha256", "scope_sha256") + }, + indent=1, + ) +) diff --git a/experiments/940-state-agi-bands/feed-repin/compare.json b/experiments/940-state-agi-bands/feed-repin/compare.json new file mode 100644 index 0000000000..eb5e51116f --- /dev/null +++ b/experiments/940-state-agi-bands/feed-repin/compare.json @@ -0,0 +1,31 @@ +{ + "cells": { + "old": 39158, + "new": 40178, + "shared": 39158, + "value_changes": [], + "value_change_count": 0, + "only_old_by_family": {}, + "only_new_by_record_set_prefix": { + "irs_soi.ty2023.historic_table_2.state_agi": 1020 + }, + "field_changes": {}, + "field_change_examples": {} + }, + "targets": { + "old_count": 33148, + "new_count": 33250, + "old_state_bands": 306, + "new_state_bands": 408, + "core_removed": [], + "core_removed_count": 0, + "core_added": [], + "core_added_count": 0, + "core_value_change_count": 0, + "core_value_changes": [], + "core_metadata_changes": {}, + "core_metadata_change_examples": {}, + "old_version": "b809fb2d69db", + "new_version": "fc776a2b6eb7" + } +} \ No newline at end of file diff --git a/experiments/940-state-agi-bands/feed-repin/compare_feeds.py b/experiments/940-state-agi-bands/feed-repin/compare_feeds.py new file mode 100644 index 0000000000..d2b8f94a10 --- /dev/null +++ b/experiments/940-state-agi-bands/feed-repin/compare_feeds.py @@ -0,0 +1,176 @@ +"""What moving the US Chronicle feed pin changes, besides the #940 facts. + +Usage: python compare_feeds.py + +1. Cell join (record set, period, source row, source column): every old cell + must be in the new feed with an equal value; list added and removed cells + by record set. +2. Field diff on joined cells: which fact fields changed (e.g. concept ids, + schema_version), counted per record-set family. +3. Compile both feeds as the release does (target 2024, packaged CD + crosswalk, age_targets=True, Medicaid substitutions) and compare targets: + names added/removed, value changes, metadata changes, excluding the state + AGI band rows #940 adds. +""" + +from __future__ import annotations + +import collections +import json +import sys + +from microcosm.build.ledger_artifact import load_ledger_consumer_artifact +from microcosm.build.us_runtime import ( + apply_us_medicaid_enrollment_substitutions, + compile_us_fiscal_target_registry, + default_congressional_district_vintage_crosswalk_path, + load_congressional_district_vintage_crosswalk, +) + +old_path, new_path, out_path = sys.argv[1:4] + + +def cell_key(row): + layout = row["layout"] + return ( + layout["record_set_id"], + row["period"]["type"], + str(row["period"]["value"]), + str(layout.get("source_row_id")), + str(layout.get("source_column_id")), + ) + + +def family(record_set_id: str) -> str: + parts = [p for p in record_set_id.split(".") if p[:2] not in {"ty", "cy", "fy"}] + return ".".join(parts[:3]) + + +def load_rows(path): + rows = collections.defaultdict(list) + for line in open(path): + if line.strip(): + row = json.loads(line) + rows[cell_key(row)].append(row) + return rows + + +old_rows, new_rows = load_rows(old_path), load_rows(new_path) +shared = set(old_rows) & set(new_rows) +value_changes = [] +field_changes = collections.Counter() +field_examples = {} +for key in sorted(shared): + old, new = old_rows[key][0], new_rows[key][0] + if old["value"] != new["value"]: + value_changes.append({"cell": key, "old": old["value"], "new": new["value"]}) + for field in sorted(set(old) | set(new)): + if old.get(field) != new.get(field): + if field in {"aggregate_fact_key", "semantic_fact_key", "legacy_fact_key"}: + continue + tag = (family(key[0]), field) + field_changes[tag] += 1 + field_examples.setdefault( + f"{tag[0]}|{field}", + {"cell": key, "old": old.get(field), "new": new.get(field)}, + ) +only_old = collections.Counter(family(k[0]) for k in set(old_rows) - set(new_rows)) +only_new = collections.Counter( + k[0].rsplit(".", 1)[0] for k in set(new_rows) - set(old_rows) +) + +crosswalk = load_congressional_district_vintage_crosswalk( + default_congressional_district_vintage_crosswalk_path() +) + + +def compile_(path): + facts = load_ledger_consumer_artifact(path).facts + registry = compile_us_fiscal_target_registry( + facts, + target_period=2024, + congressional_district_vintage_crosswalk=crosswalk, + age_targets=True, + ) + registry, _ = apply_us_medicaid_enrollment_substitutions(registry) + return registry + + +def is_band(spec): + return spec.metadata.get("requires_state_agi_band_rebase") == "true" + + +old_reg, new_reg = compile_(old_path), compile_(new_path) +old_specs = {s.name: s for s in old_reg.specs} +new_specs = {s.name: s for s in new_reg.specs} +old_core = {n for n, s in old_specs.items() if not is_band(s)} +new_core = {n for n, s in new_specs.items() if not is_band(s)} +target_value_changes = [] +target_metadata_changes = collections.Counter() +target_metadata_examples = {} +for name in sorted(old_core & new_core): + a, b = old_specs[name], new_specs[name] + if abs(a.value - b.value) > 1e-9 * max(1.0, abs(a.value)): + target_value_changes.append({"name": name, "old": a.value, "new": b.value}) + for key in sorted(set(a.metadata) | set(b.metadata)): + if a.metadata.get(key) != b.metadata.get(key): + target_metadata_changes[key] += 1 + target_metadata_examples.setdefault( + key, + {"name": name, "old": a.metadata.get(key), "new": b.metadata.get(key)}, + ) + +report = { + "cells": { + "old": len(old_rows), + "new": len(new_rows), + "shared": len(shared), + "value_changes": value_changes[:50], + "value_change_count": len(value_changes), + "only_old_by_family": dict(only_old), + "only_new_by_record_set_prefix": dict(collections.Counter(only_new)), + "field_changes": {f"{f}|{k}": n for (f, k), n in sorted(field_changes.items())}, + "field_change_examples": field_examples, + }, + "targets": { + "old_count": len(old_specs), + "new_count": len(new_specs), + "old_state_bands": len(old_specs) - len(old_core), + "new_state_bands": len(new_specs) - len(new_core), + "core_removed": sorted(old_core - new_core)[:100], + "core_removed_count": len(old_core - new_core), + "core_added": sorted(new_core - old_core)[:100], + "core_added_count": len(new_core - old_core), + "core_value_change_count": len(target_value_changes), + "core_value_changes": target_value_changes[:50], + "core_metadata_changes": dict(target_metadata_changes), + "core_metadata_change_examples": target_metadata_examples, + "old_version": old_reg.version, + "new_version": new_reg.version, + }, +} +json.dump(report, open(out_path, "w"), indent=1, default=str) +print( + json.dumps( + { + "cells": { + k: v + for k, v in report["cells"].items() + if k not in {"value_changes", "field_change_examples"} + }, + "targets": { + k: v + for k, v in report["targets"].items() + if k + not in { + "core_removed", + "core_added", + "core_value_changes", + "core_metadata_change_examples", + } + }, + }, + indent=1, + default=str, + ) +) diff --git a/experiments/940-state-agi-bands/feed-repin/extend_scope.py b/experiments/940-state-agi-bands/feed-repin/extend_scope.py new file mode 100644 index 0000000000..c9a2eafd45 --- /dev/null +++ b/experiments/940-state-agi-bands/feed-repin/extend_scope.py @@ -0,0 +1,59 @@ +"""Add the TY2023 state AGI-band pairs to the US Chronicle feed scope (#940). + +Usage: python extend_scope.py +Idempotent: re-running with the same commit rewrites the same bytes. +""" + +from __future__ import annotations + +import json +import sys + +POSTALS = ( + "al ak az ar ca co ct de dc fl ga hi id il in ia ks ky la me md ma mi mn ms " + "mo mt ne nv nh nj nm ny nc nd oh ok or pa ri sc sd tn tx ut vt va wa wv wi wy" +).split() +PACKAGE = "packages/irs_soi/historic_table_2_state_agi_2023" +PACKAGE_ID = "soi-historic-table-2-state-agi-2023" +RULE = ( + "The (record_set_id, period) pairs of the pinned feed " + "consumer_facts_buildn_v9_4.jsonl, plus the 51 TY2023 Historic Table 2 " + "state AGI-band record sets (irs_soi.ty2023.historic_table_2.state_agi., " + "microcosm#940); each built from the named package with " + "`chronicle build-bundle --year --source `." +) + +path, commit = sys.argv[1], sys.argv[2] +assert len(commit) == 40, commit +scope = json.load(open(path)) +assert len(POSTALS) == 51 == len(set(POSTALS)) +pairs = [ + pair + for pair in scope["pairs"] + if not pair["record_set_id"].startswith( + "irs_soi.ty2023.historic_table_2.state_agi." + ) +] +for postal in POSTALS: + pairs.append( + { + "record_set_id": f"irs_soi.ty2023.historic_table_2.state_agi.{postal}", + "period_type": "tax_year", + "period_value": "2023", + "package_id": PACKAGE_ID, + "package": PACKAGE, + "build_year": 2023, + } + ) +pairs.sort(key=lambda e: (e["record_set_id"], e["period_type"], e["period_value"])) +runs: dict[str, set[str]] = {} +for pair in pairs: + runs.setdefault(str(pair["build_year"]), set()).add(pair["package"]) +scope["source_commit"] = commit +scope["rule"] = RULE +scope["pair_count"] = len(pairs) +scope["runs"] = {year: sorted(runs[year]) for year in sorted(runs)} +scope["pairs"] = pairs +with open(path, "w") as handle: + handle.write(json.dumps(scope, indent=1) + "\n") +print(len(pairs), sum(len(v) for v in scope["runs"].values())) diff --git a/experiments/940-state-agi-bands/feed-repin/measure_surface.py b/experiments/940-state-agi-bands/feed-repin/measure_surface.py new file mode 100644 index 0000000000..76ad1ec7c3 --- /dev/null +++ b/experiments/940-state-agi-bands/feed-repin/measure_surface.py @@ -0,0 +1,63 @@ +"""Measure the pinned-feed release surface as test_us_fiscal_targets' fixture builds it. + +Run from the repository root with PYTHONPATH=. (test_support is a repo package). +""" + +import importlib.util + +from microcosm.build.ledger_artifact import load_ledger_consumer_artifact +from microcosm.build.us_runtime import ( + apply_us_medicaid_enrollment_substitutions, + compile_us_fiscal_target_registry, + default_congressional_district_vintage_crosswalk_path, + load_congressional_district_vintage_crosswalk, +) +from microcosm.build.us_runtime.chronicle_feed import load_us_chronicle_feed +from microcosm.calibrate import TargetRegistry +from test_support.paths import paths_for + +root = paths_for("microcosm-build").repository + + +def tool(name): + spec = importlib.util.spec_from_file_location(name, root / "tools" / f"{name}.py") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +feed = tool("build_us_target_parity_manifest").DEFAULT_FEED_PATH +facts = load_ledger_consumer_artifact( + feed, + expected_facts_sha256=load_us_chronicle_feed().facts_sha256, + expected_manifest_sha256=None, +).facts +cw = load_congressional_district_vintage_crosswalk( + default_congressional_district_vintage_crosswalk_path() +) +reg = compile_us_fiscal_target_registry( + facts, + target_period=2024, + congressional_district_vintage_crosswalk=cw, + age_targets=True, +) +reg, _ = apply_us_medicaid_enrollment_substitutions(reg) +specs, _ = tool("build_us_fiscal_refresh_release")._select_target_surface( + reg.specs, "national_state" +) +surface = TargetRegistry(specs, country="us") +bands = [ + s + for s in surface.specs + if s.metadata.get("requires_state_agi_band_rebase") == "true" +] +print( + "registry", + len(reg.specs), + "national_state", + len(surface.specs), + "version", + surface.version, + "bands_in_surface", + len(bands), +) diff --git a/packages/microcosm-build/src/microcosm/build/us/chronicle_feed.json b/packages/microcosm-build/src/microcosm/build/us/chronicle_feed.json index acc37281e1..5b46e935e1 100644 --- a/packages/microcosm-build/src/microcosm/build/us/chronicle_feed.json +++ b/packages/microcosm-build/src/microcosm/build/us/chronicle_feed.json @@ -3,15 +3,15 @@ "country": "us", "scope": "us_fiscal_targets", "source_repo": "PolicyEngine/chronicle", - "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", - "build": "tools/build_us_chronicle_feed.py --skip-artifact: one `chronicle build-bundle --year Y --source ` per build year in chronicle_feed_scope.json, rows kept for exactly the scope's (record set, period) pairs and sorted by aggregate_fact_key. Bare feed: `chronicle build-consumer-artifact` refuses it at this commit (994 concept_alignment rows lack `authority`); see docs/us-chronicle-feed-repin.md.", + "source_commit": "51aa40fd28e2ca81937752515e773d123fecfb71", + "build": "tools/build_us_chronicle_feed.py --skip-artifact: one `chronicle build-bundle --year Y --source ` per build year in chronicle_feed_scope.json, rows kept for exactly the scope's (record set, period) pairs and sorted by aggregate_fact_key. The commit is c5e5bf8 plus only the TY2023 Historic Table 2 state AGI-band package (tag microcosm-us-feed-940-v1, chronicle#291). Bare feed: `chronicle build-consumer-artifact` refuses it at this commit; see docs/us-chronicle-feed-repin.md.", "artifact_schema_version": null, "consumer_fact_schema_versions": [ "chronicle.consumer_fact.v3" ], "consumer_fact_schema_sha256": "bdb51e2a8115634633ba7448c4005930fd9c0bfbade5e1b079b6bc24da485d3d", - "fact_row_count": 39158, - "facts_sha256": "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801", + "fact_row_count": 40178, + "facts_sha256": "965a29ac9458edb58a05184917ee4a19772fd3dc7b4588db6eb6da5803641aac", "manifest_sha256": null, - "scope_sha256": "b769887d716e90612518788700c5c01dba8b411c5c75f3d47bb8b1273550ddc1" + "scope_sha256": "f090102099b3d2c799a8f975a8156101dbb18925b526c3791a785f68944d020d" } diff --git a/packages/microcosm-build/src/microcosm/build/us/chronicle_feed_scope.json b/packages/microcosm-build/src/microcosm/build/us/chronicle_feed_scope.json index 9afd1dfabf..d3647ec2b6 100644 --- a/packages/microcosm-build/src/microcosm/build/us/chronicle_feed_scope.json +++ b/packages/microcosm-build/src/microcosm/build/us/chronicle_feed_scope.json @@ -2,9 +2,9 @@ "version": 1, "country": "us", "source_repo": "PolicyEngine/chronicle", - "source_commit": "c5e5bf8aa84960c1a200ee47303b19c953092d0f", - "rule": "Exactly the (record_set_id, period) pairs of the pinned feed consumer_facts_buildn_v9_4.jsonl; each built from the named package with `chronicle build-bundle --year --source `.", - "pair_count": 586, + "source_commit": "51aa40fd28e2ca81937752515e773d123fecfb71", + "rule": "The (record_set_id, period) pairs of the pinned feed consumer_facts_buildn_v9_4.jsonl, plus the 51 TY2023 Historic Table 2 state AGI-band record sets (irs_soi.ty2023.historic_table_2.state_agi., microcosm#940); each built from the named package with `chronicle build-bundle --year --source `.", + "pair_count": 637, "runs": { "2020": [ "packages/bea/nipa_total_wages_salaries", @@ -40,6 +40,7 @@ "packages/federal_reserve/z1_household_net_worth", "packages/hhs_acf_liheap/fy2023_national_profile", "packages/irs_soi/congressional_district_2022", + "packages/irs_soi/historic_table_2_state_agi_2023", "packages/irs_soi/ira_roth_contributions_2022", "packages/irs_soi/ira_traditional_contributions_2022", "packages/irs_soi/state_2022", @@ -4346,6 +4347,414 @@ "package": "packages/irs_soi/w2_statistics_2020", "build_year": 2023 }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ak", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.al", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ar", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.az", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ca", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.co", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ct", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.dc", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.de", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.fl", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ga", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.hi", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ia", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.id", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.il", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.in", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ks", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ky", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.la", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ma", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.md", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.me", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.mi", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.mn", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.mo", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ms", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.mt", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nc", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nd", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ne", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nh", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nj", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nm", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.nv", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ny", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.oh", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ok", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.or", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.pa", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ri", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.sc", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.sd", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.tn", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.tx", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.ut", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.va", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.vt", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.wa", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.wi", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.wv", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, + { + "record_set_id": "irs_soi.ty2023.historic_table_2.state_agi.wy", + "period_type": "tax_year", + "period_value": "2023", + "package_id": "soi-historic-table-2-state-agi-2023", + "package": "packages/irs_soi/historic_table_2_state_agi_2023", + "build_year": 2023 + }, { "record_set_id": "irs_soi.ty2023.roth_ira_contributions.all_taxpayers", "period_type": "tax_year", diff --git a/packages/microcosm-build/src/microcosm/build/us/target_parity_feed_families.json b/packages/microcosm-build/src/microcosm/build/us/target_parity_feed_families.json index 6a8c987fda..23e9607ad3 100644 --- a/packages/microcosm-build/src/microcosm/build/us/target_parity_feed_families.json +++ b/packages/microcosm-build/src/microcosm/build/us/target_parity_feed_families.json @@ -1,6 +1,6 @@ { - "feed": "consumer_facts_us_c5e5bf8.jsonl", - "feed_sha256": "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801", + "feed": "consumer_facts_us_51aa40f.jsonl", + "feed_sha256": "965a29ac9458edb58a05184917ee4a19772fd3dc7b4588db6eb6da5803641aac", "families": { "bea_nipa.business_current_transfer_receipts": 1, "bea_nipa.defined_contribution_actual_contributions": 1, @@ -60,7 +60,7 @@ "irs_soi.form_w2_401k_elective_deferrals": 1, "irs_soi.form_w2_designated_roth_401k_contributions": 1, "irs_soi.form_w2_social_security_tips": 6, - "irs_soi.historic_table_2": 5654, + "irs_soi.historic_table_2": 6674, "irs_soi.roth_ira_contributions": 2, "irs_soi.state_2022": 4, "irs_soi.table_1_1": 160, diff --git a/packages/microcosm-build/src/microcosm/build/us/target_parity_manifest.json b/packages/microcosm-build/src/microcosm/build/us/target_parity_manifest.json index 904f8bf512..6de4b30b49 100644 --- a/packages/microcosm-build/src/microcosm/build/us/target_parity_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/us/target_parity_manifest.json @@ -1,8 +1,8 @@ { "schema_version": 1, "reference": { - "feed": "consumer_facts_us_c5e5bf8.jsonl", - "feed_sha256": "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801", + "feed": "consumer_facts_us_51aa40f.jsonl", + "feed_sha256": "965a29ac9458edb58a05184917ee4a19772fd3dc7b4588db6eb6da5803641aac", "target_period": "2024", "registry_compile": "compile_us_fiscal_target_registry(age_targets=True, canonical CD vintage crosswalk) + apply_us_medicaid_enrollment_substitutions; one national + state + congressional-district surface for every artifact (microcosm#449)", "us_data_source": "retired us-data pipeline (archived): utils/loss.py (eCPS loss matrix), db/etl_national_targets.py, db/etl_*.py, utils/national_target_parity.py", diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py index a8c4eea708..bde92cfe9a 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_release_tool.py @@ -908,8 +908,9 @@ def test_package_records_the_materialized_soi_mode_not_the_parser_default( def test_pinned_feed_soi_surfaces_match_their_contracts() -> None: """On the real feed: the default ``state`` surface is Build O/P's - 3,972-spec admin contract, built only from the three Historic Table 2 - state tables at state geography; ``totals`` holds no + 3,972-spec admin contract plus the 408 state AGI-band rows of + microcosm#940 (4,380 specs), built only from the Historic Table 2 state + tables at state geography; ``totals`` holds no ``soi_fiscal_distribution`` spec; ``full`` adds exactly those specs to ``totals`` and contains ``state``. @@ -936,11 +937,13 @@ def test_pinned_feed_soi_surfaces_match_their_contracts() -> None: # Build P's ACS local contract: 102 SNAP + 51 Medicaid + 3,819 SOI admin # specs (4,459 with the 487 population marginals); Build O's 4,461 plus the - # Vermont under-$1 taxable-interest pair the compiler now excludes. + # Vermont under-$1 taxable-interest pair the compiler now excludes. The + # TY2023 state AGI bands (#940: 51 states x 4 bands x 2 measures, same + # record-set spec) add 408 SOI specs. families_count = {} for spec in state_specs: families_count[spec.family] = families_count.get(spec.family, 0) + 1 - assert families_count == {"usda_snap": 102, "cms_medicaid": 51, "irs_soi": 3819} + assert families_count == {"usda_snap": 102, "cms_medicaid": 51, "irs_soi": 4227} soi = [spec for spec in state_specs if spec.family == "irs_soi"] record_sets = {} for spec in soi: @@ -948,7 +951,7 @@ def test_pinned_feed_soi_surfaces_match_their_contracts() -> None: record_sets[key] = record_sets.get(key, 0) + 1 assert record_sets == { "irs_soi.historic_table_2.state_broad_totals.v1": 2397, - "irs_soi.historic_table_2.state_agi_counts_and_amounts.v1": 912, + "irs_soi.historic_table_2.state_agi_counts_and_amounts.v1": 1320, "irs_soi.historic_table_2.state_eitc.v1": 510, } assert {spec.metadata["ledger_geography_level"] for spec in soi} == {"state"} diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_sparse_cd.py b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_sparse_cd.py index e8a6474966..07bede8bd0 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_sparse_cd.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_acs_local_sparse_cd.py @@ -903,17 +903,17 @@ def test_pinned_feed_state_cd_surface_matches_its_contract() -> None: receipt = surface.soi_receipt soi = [spec for spec in specs if spec.family == "irs_soi"] assert receipt["counts"] == { - "historic_table_2_state": 3819, + "historic_table_2_state": 4227, "cd_file_state": 302, "congressional_district": 21743, "congressional_district_by_parent_basis": { "historic_table_2": 19181, "cd_file_state_total_bridged": 2562, }, - "total": 25864, + "total": 26272, } - assert len(soi) == 25864 - assert len(specs) == 25864 + 102 + 51 + assert len(soi) == 26272 + assert len(specs) == 26272 + 102 + 51 reconciliation = module.cd_surface.state_parent_reconciliation(soi) assert len(reconciliation) == 2189 assert all(block["ok"] for block in reconciliation) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_chronicle_feed.py b/packages/microcosm-build/tests/engine_free/us/test_us_chronicle_feed.py index 5b90126482..3f9bd565b0 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_chronicle_feed.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_chronicle_feed.py @@ -31,8 +31,8 @@ _TEST_PATHS = paths_for("microcosm-build") _ROOT = _TEST_PATHS.repository -_CHRONICLE_COMMIT = "c5e5bf8aa84960c1a200ee47303b19c953092d0f" -_FACTS_SHA256 = "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801" +_CHRONICLE_COMMIT = "51aa40fd28e2ca81937752515e773d123fecfb71" +_FACTS_SHA256 = "965a29ac9458edb58a05184917ee4a19772fd3dc7b4588db6eb6da5803641aac" _SCHEMA_SHA256 = "bdb51e2a8115634633ba7448c4005930fd9c0bfbade5e1b079b6bc24da485d3d" @@ -55,7 +55,7 @@ def test_pin_records_the_rebuilt_bare_feed() -> None: assert pin.source_repo == "PolicyEngine/chronicle" assert pin.source_commit == _CHRONICLE_COMMIT assert pin.scope == "us_fiscal_targets" - assert pin.fact_row_count == 39158 + assert pin.fact_row_count == 40178 assert pin.facts_sha256 == _FACTS_SHA256 assert pin.consumer_fact_schema_versions == ("chronicle.consumer_fact.v3",) assert pin.consumer_fact_schema_sha256 == _SCHEMA_SHA256 @@ -137,8 +137,8 @@ def test_scope_names_every_pinned_pair_once() -> None: scope = builder.load_scope(scope_path) raw = scope["raw"] assert scope["commit"] == load_us_chronicle_feed().source_commit - assert len(scope["pairs"]) == 586 == raw["pair_count"] - assert sum(len(p) for p in scope["runs"].values()) == 62 + assert len(scope["pairs"]) == 637 == raw["pair_count"] + assert sum(len(p) for p in scope["runs"].values()) == 63 assert set(scope["runs"]) == { 2020, 2021, diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_fiscal_targets.py b/packages/microcosm-build/tests/engine_free/us/test_us_fiscal_targets.py index b53589ad35..de4f6c6827 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_fiscal_targets.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_fiscal_targets.py @@ -891,17 +891,19 @@ def test_pinned_feed_exclusion_receipt(pinned_feed_national_state_surface) -> No def test_pinned_feed_national_state_surface_restores_the_fences( pinned_feed_national_state_surface, ) -> None: - """The release surface on the pinned feed: 32,842 compiled targets after - Medicaid substitution, 5,694 national_state targets at registry - d315c75804ef, 32 CHIP rows none of them for an M-CHIP state, no - other-income row and no tips return count. Before microcosm#956 it was + """The release surface on the pinned feed: 33,250 compiled targets after + Medicaid substitution, 6,102 national_state targets at registry + f96be9f41781, 32 CHIP rows none of them for an M-CHIP state, no + other-income row and no tips return count. The 408 state AGI-band rows of + microcosm#940 (51 states x 4 bands x 2 measures) took it from 32,842 / + 5,694 at d315c75804ef on the c5e5bf8 feed; before microcosm#956 it was 32,867 / 5,719 at d5f9d854fe11, and before decision d179 dropped the ty2020 tips return count it was 32,843 / 5,695 at 386fac439e77 (docs/us-chronicle-feed-repin.md).""" registry, surface, _ = pinned_feed_national_state_surface - assert len(registry.specs) == 32_842 - assert len(surface.specs) == 5_694 - assert surface.version == "d315c75804ef" + assert len(registry.specs) == 33_250 + assert len(surface.specs) == 6_102 + assert surface.version == "f96be9f41781" chip = [ spec for spec in surface.specs diff --git a/tools/build_us_target_parity_manifest.py b/tools/build_us_target_parity_manifest.py index 57d3238ba9..0b8548ebe3 100644 --- a/tools/build_us_target_parity_manifest.py +++ b/tools/build_us_target_parity_manifest.py @@ -61,7 +61,7 @@ MANIFEST_PATH = US_PACKAGE_DIR / "target_parity_manifest.json" FEED_FAMILIES_PATH = US_PACKAGE_DIR / "target_parity_feed_families.json" -DEFAULT_FEED_NAME = "consumer_facts_us_c5e5bf8.jsonl" +DEFAULT_FEED_NAME = "consumer_facts_us_51aa40f.jsonl" DEFAULT_FEED_PATH = ( Path.home() / "PolicyEngine" / "_buildh-runtime" / "inputs" / DEFAULT_FEED_NAME ) From cdd45625e238b7dbfd2b90bf8ee19f9fb6b0afd6 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 10 Oct 2026 19:27:06 -0400 Subject: [PATCH 08/10] Address the #940 round-2 review: bound controls, selection-time vintage, per-state gates Independent review of ea8940de2 (GPT-6.1 Sol, REQUEST_CHANGES; report in ~/reviews/microcosm-940/review-out-b.md): - major: the control came from raw facts, so it could differ from the state total the registry binds (two same-key totals: recorded share 0.1505, actual 0.3010) and an excluded total still anchored bands. Controls are now read from the registry: the selected, non-excluded state_broad row. Two bound totals for one state and measure raise. - minor: every band vintage reached the exclusion vintage guard, so a discarded vintage could trip it. The one-vintage choice moves into latest-vintage selection (_with_one_state_agi_band_vintage), before the guard and the receipt. - minor: NaN bounds or values in a partition raise instead of slipping through the tiling comparisons. - minor: the coverage gate counted names. It is now one requirement per state and measure (102), keyed on state_fips and the [1M, inf) band, so a duplicate of another state cannot stand in. - major (duplicates): a binding band's fact is a target fact, and the compile's one-fact-per-record-id rule refuses any duplicate of one for every family. That stays; the docstring and test now say so, and the partition still counts an identical sub-floor re-emission once. Co-Authored-By: Claude Opus 5.5 --- .../build/us_runtime/fiscal_targets.py | 378 +++++++++++------- .../us/test_us_soi_state_agi_bands.py | 199 +++++++-- .../microcosm_build/us_fiscal_targets.py | 4 +- 3 files changed, 394 insertions(+), 187 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index 32d05643e3..eb10659f8d 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -10,6 +10,7 @@ from __future__ import annotations import json +import math from collections.abc import Iterable, Mapping from dataclasses import dataclass, replace from functools import cache @@ -350,6 +351,7 @@ def _us_hierarchy_seed( _SOI_STATE_AGI_BAND_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_agi." _SOI_STATE_AGI_BAND_CONTROL_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_broad." _SOI_STATE_AGI_BAND_REBASE_FLAG = "requires_state_agi_band_rebase" +_SOI_STATE_AGI_BAND_RECORD_SET_KEY = "state_agi_band_record_set" _SOI_FORM_W2_ITEM_LAYOUT_DIMENSION = "irs_soi.form_w2_item" _SOI_FORM_W2_SOCIAL_SECURITY_TIP_ITEMS = frozenset( { @@ -1056,11 +1058,7 @@ def compile_us_fiscal_target_registry( materialized_facts, target_period=target_period, ) - registry = _rebase_soi_state_agi_bands( - registry, - materialized_facts, - target_period=target_period, - ) + registry = _rebase_soi_state_agi_bands(registry, materialized_facts) registry = apply_ledger_target_profile( registry, _load_us_fiscal_target_profile(), @@ -1987,8 +1985,6 @@ def _soi_total_uprating_index(measure_id: str) -> str: def _rebase_soi_state_agi_bands( registry: TargetRegistry, facts: tuple[object, ...], - *, - target_period: int | str, ) -> TargetRegistry: """Bind state HT2 AGI bands as shares of the state total that binds (#940). @@ -2006,9 +2002,10 @@ def _rebase_soi_state_agi_bands( same vintage, measure and record set over the whole AGI line (under $1 to $1M+). HT2 publishes amounts additively exactly and counts rounded to tens, so the shares over one partition sum to one. - * ``control`` is the state's HT2 all-returns total of the latest vintage - not after the target period: the ``state_broad`` fact that already - binds as the state's return count or AGI. Congressional-district + * ``control`` is the state's HT2 ``state_broad`` all-returns total as the + registry binds it: the selected, non-excluded row, so a band's share of + the total it calibrates beside is the share it records. A state whose + total does not bind has no control. Congressional-district ``_total`` rows are a processing-window subset stamped with the wrong vintage and never anchor a state. @@ -2018,13 +2015,11 @@ def _rebase_soi_state_agi_bands( the latest published shares scale onto the level the state total binds at, which keeps the two consistent instead of mixing levels. - One vintage per state and measure: the newest vintage whose published - partition is complete binds, and every other vintage's rows are dropped, - so a collapsed ``500k_plus`` row from one year never binds beside another - year's split ``500k_to_1m``/``1m_plus`` rows. A newest vintage with a gap - falls back to the next complete one. With no complete partition or no - control a state's bands are dropped, never shipped as unanchored nominal - levels; the ``irs_state_agi_top_tail`` release requirement then fails. + The vintage is chosen before this pass, in latest-vintage selection + (:func:`_with_one_state_agi_band_vintage`), so the exclusion vintage guard + and receipt see only the band ids that can bind. A state with no control + has its bands dropped, never shipped as unanchored nominal levels; the + per-state ``irs_state_agi_top_tail_*`` release requirements then fail. """ flagged = [ @@ -2034,32 +2029,35 @@ def _rebase_soi_state_agi_bands( ] if not flagged: return registry - controls = _soi_state_agi_band_controls(facts, target_period=target_period) + controls = _soi_state_agi_band_controls(registry) band_rows = _soi_state_agi_band_rows(facts) - candidates: dict[tuple[str, str], set[tuple[str, str]]] = {} + vintages: dict[tuple[str, str], set[tuple[str, str]]] = {} for spec in flagged: - candidates.setdefault(_soi_state_agi_band_key_from_spec(spec), set()).add( - _soi_state_agi_band_vintage_from_spec(spec) + vintages.setdefault(_state_agi_band_key(spec.metadata), set()).add( + _state_agi_band_vintage(spec.metadata) ) - chosen: dict[tuple[str, str], tuple[tuple[str, str], float]] = {} - for key, vintages in candidates.items(): - if key not in controls: - continue - selected = _latest_complete_state_agi_band_vintage(key, vintages, band_rows) - if selected is not None: - chosen[key] = selected + partitions: dict[tuple[str, str], float] = {} + for key, kept in vintages.items(): + if len(kept) != 1: + raise ValueError( + f"State {key[0]} {key[1]} reached the AGI band rebase with more " + f"than one vintage: {sorted(kept)}; latest-vintage selection " + "keeps one (microcosm#940)." + ) + group = (*key, *next(iter(kept))) + partition = _state_agi_band_partition_total(group, band_rows.get(group, ())) + if partition: + partitions[key] = partition specs: list[TargetSpec] = [] for spec in registry.specs: if spec.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) != "true": specs.append(spec) continue - key = _soi_state_agi_band_key_from_spec(spec) - if key not in chosen: - continue - vintage, partition = chosen[key] - if _soi_state_agi_band_vintage_from_spec(spec) != vintage: + key = _state_agi_band_key(spec.metadata) + if key not in partitions or key not in controls: continue + partition = partitions[key] control = controls[key] source_period = spec.metadata.get("source_period", "") share = spec.value / partition @@ -2086,77 +2084,136 @@ def _rebase_soi_state_agi_bands( return TargetRegistry(specs, country=registry.country) -def _soi_state_agi_band_key_from_spec(spec: TargetSpec) -> tuple[str, str]: +def _state_agi_band_key(metadata: Mapping[str, str]) -> tuple[str, str]: + """(state FIPS, measure) of a flagged band reference or spec.""" return ( - spec.metadata.get("state_fips", ""), - spec.metadata.get("source_measure_id", ""), + metadata.get("state_fips", ""), + metadata.get("source_measure_id", ""), ) -def _soi_state_agi_band_vintage_from_spec(spec: TargetSpec) -> tuple[str, str]: - """(source period, period-free record set) of a flagged band row.""" +def _state_agi_band_vintage(metadata: Mapping[str, str]) -> tuple[str, str]: + """(source period, period-free record set) of a flagged band.""" return ( - spec.metadata.get("source_period", ""), - _normalized_record_set_id(spec.metadata.get("ledger_layout_record_set_id", "")), + metadata.get("source_period", ""), + metadata.get(_SOI_STATE_AGI_BAND_RECORD_SET_KEY, ""), ) -def _soi_state_agi_band_rows( +def _with_one_state_agi_band_vintage( + selected: tuple[tuple[str, LedgerTargetReference], ...], facts: tuple[object, ...], -) -> dict[tuple[str, str, str, str], dict[str, tuple[float, float, float]]]: - """Every published state HT2 AGI band, as ``(lower, upper, value)``. +) -> tuple[tuple[str, LedgerTargetReference], ...]: + """Keep each state's AGI bands of one vintage: the newest that tiles (#940). + + Binding state bands keep their period in the selection key, so every + vintage arrives here. Per (state, measure) the newest vintage whose + published partition tiles the AGI line is kept and every other vintage's + rows are dropped: a collapsed ``500k_plus`` row from one year never binds + beside another year's split ``500k_to_1m``/``1m_plus`` rows, and a newest + vintage with a gap falls back to the last complete one. Choosing here, + inside selection, means the exclusion vintage guard and the receipt audit + only the band ids that can bind. + """ - Keyed ``(state_fips, measure_id, period, period-free record set)`` and - then by source record id. All bands count, those below the binding floor - and negative AGI under $1 included. An identical re-emission of one id - collapses to one row; one id with two different rows raises. + flagged = [ + reference + for _, reference in selected + if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true" + ] + if not flagged: + return selected + band_rows = _soi_state_agi_band_rows(facts) + vintages: dict[tuple[str, str], set[tuple[str, str]]] = {} + for reference in flagged: + vintages.setdefault(_state_agi_band_key(reference.metadata), set()).add( + _state_agi_band_vintage(reference.metadata) + ) + chosen = { + key: _latest_complete_state_agi_band_vintage(key, kept, band_rows) + for key, kept in vintages.items() + } + return tuple( + (source_record_id, reference) + for source_record_id, reference in selected + if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) != "true" + or chosen[_state_agi_band_key(reference.metadata)] + == _state_agi_band_vintage(reference.metadata) + ) + + +def _soi_state_agi_band_rows( + facts: tuple[object, ...], +) -> dict[tuple[str, str, str, str], list[tuple[str, tuple[float, float, float]]]]: + """Every published state HT2 AGI band of the binding measures. + + Keyed ``(state_fips, measure_id, period, period-free record set)``; each + row is ``(source record id, (lower, upper, value))``. All bands count, + those below the binding floor and negative AGI under $1 included. Rows + are not validated here: a group is checked only when a binding band asks + for its partition. """ - groups: dict[tuple[str, str, str, str], dict[str, tuple[float, float, float]]] = {} + groups: dict[ + tuple[str, str, str, str], list[tuple[str, tuple[float, float, float]]] + ] = {} for fact in facts: if _soi_state_agi_band_status(fact, _measure_id(fact)) is None: continue if _filing_status_label(_dimensions(fact).get("filing_status")) != "All": continue lower, upper = _agi_bounds(fact) - row = ( - _bound_from_metadata_value(lower), - _bound_from_metadata_value(upper), - _numeric_value(fact), - ) key = ( _state_fips(fact) or "", _measure_id(fact), str(_period_value(fact)), _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")), ) - rows = groups.setdefault(key, {}) - source_record_id = _source_record_id(fact) - if rows.get(source_record_id, row) != row: - raise ValueError( - f"State AGI band {source_record_id} appears twice with different " - f"bounds or values: {rows[source_record_id]} and {row} " - "(microcosm#940)." + groups.setdefault(key, []).append( + ( + _source_record_id(fact), + ( + _bound_from_metadata_value(lower), + _bound_from_metadata_value(upper), + _numeric_value(fact), + ), ) - rows[source_record_id] = row + ) return groups def _state_agi_band_partition_total( key: tuple[str, str, str, str], - rows: Mapping[str, tuple[float, float, float]], + rows: Iterable[tuple[str, tuple[float, float, float]]], ) -> float | None: """The sum of one group's bands if they tile the whole AGI line. - A gap leaves the partition incomplete (``None``). Overlapping bands are a - packaging error and raise. + A gap leaves the partition incomplete (``None``). A NaN bound or value, + overlapping bands, or one source record id with two different rows is a + packaging error and raises; an identical re-emission of one id counts + once. (A binding band's own fact is still subject to the compile's + one-fact-per-record-id rule, which refuses any duplicate.) """ + state_fips, measure_id, period, record_set = key + unique: dict[str, tuple[float, float, float]] = {} + for source_record_id, row in rows: + if any(math.isnan(component) for component in row): + raise ValueError( + f"State AGI band {source_record_id} has a NaN bound or value: " + f"{row} (microcosm#940)." + ) + if unique.get(source_record_id, row) != row: + raise ValueError( + f"State AGI band {source_record_id} appears twice with different " + f"bounds or values: {unique[source_record_id]} and {row} " + "(microcosm#940)." + ) + unique[source_record_id] = row cursor = -float("inf") complete = True - for lower, upper, _ in sorted(rows.values()): + for lower, upper, _ in sorted(unique.values()): if lower < cursor or upper <= lower: - state_fips, measure_id, period, record_set = key raise ValueError( f"Overlapping state AGI bands in {record_set} ({period}) " f"for state {state_fips} {measure_id}: a band starting at " @@ -2169,38 +2226,40 @@ def _state_agi_band_partition_total( cursor = upper if not complete or cursor != float("inf"): return None - return sum(value for _, _, value in rows.values()) + return sum(value for _, _, value in unique.values()) def _latest_complete_state_agi_band_vintage( key: tuple[str, str], vintages: set[tuple[str, str]], band_rows: Mapping[ - tuple[str, str, str, str], Mapping[str, tuple[float, float, float]] + tuple[str, str, str, str], list[tuple[str, tuple[float, float, float]]] ], -) -> tuple[tuple[str, str], float] | None: +) -> tuple[str, str] | None: """The newest vintage of a state's bands with a complete, nonzero partition. - Only the vintages some flagged row asks for are examined, so a malformed - vintage that could never bind cannot stop the compile. Two record sets of - one period that both tile the line are ambiguous and raise. + Vintages are examined newest first and the search stops at the first + complete one, so an older malformed vintage that could never bind cannot + stop the compile. Two record sets of one period that both tile the line + are ambiguous and raise. """ by_period: dict[tuple[int, int], list[tuple[str, str]]] = {} for vintage in vintages: by_period.setdefault(_period_key_from_value(vintage[0])[:2], []).append(vintage) for period_key in sorted(by_period, reverse=True): - complete = [] - for vintage in sorted(by_period[period_key]): - group = (*key, *vintage) - partition = _state_agi_band_partition_total(group, band_rows.get(group, {})) - if partition: - complete.append((vintage, partition)) + complete = [ + vintage + for vintage in sorted(by_period[period_key]) + if _state_agi_band_partition_total( + (*key, *vintage), band_rows.get((*key, *vintage), ()) + ) + ] if len(complete) > 1: raise ValueError( f"State {key[0]} {key[1]} has complete AGI band partitions in " - f"more than one record set for one period: " - f"{[vintage for vintage, _ in complete]} (microcosm#940)." + f"more than one record set for one period: {complete} " + "(microcosm#940)." ) if complete: return complete[0] @@ -2208,54 +2267,56 @@ def _latest_complete_state_agi_band_vintage( def _soi_state_agi_band_controls( - facts: tuple[object, ...], - *, - target_period: int | str, + registry: TargetRegistry, ) -> dict[tuple[str, str], _SoiTotalControl]: - """The latest state HT2 all-returns total per (state, measure).""" + """The bound HT2 ``state_broad`` all-returns total per (state, measure). + + Read from the registry, not the facts: the control is the row latest- + vintage selection kept and the exclusions let through, so the bands are + shares of the very total that calibrates beside them. Two such rows for + one state and measure are ambiguous and raise. + """ controls: dict[tuple[str, str], _SoiTotalControl] = {} - target_period_key = _period_key_from_value(target_period) - for fact in facts: - if _source_name(fact) != "irs_soi": + for spec in registry.specs: + if spec.family != "irs_soi": continue - measure_id = _measure_id(fact) + metadata = spec.metadata + measure_id = metadata.get("source_measure_id", "") if measure_id not in _SOI_STATE_AGI_BAND_MEASURES: continue if not _normalized_record_set_id( - _str_at(fact, "layout", "record_set_id") + metadata.get("ledger_layout_record_set_id", "") ).startswith(_SOI_STATE_AGI_BAND_CONTROL_RECORD_SET_PREFIX): continue - state_fips = _state_fips(fact) - if _geography_level(fact) != "state" or state_fips is None: - continue - if not _is_all_income_range(fact): + state_fips = metadata.get("state_fips", "") + if ( + not state_fips + or metadata.get("congressional_district_geoid") + or metadata.get("ledger_geography_level") != "state" + ): continue - if _soi_return_universe_from_fact(fact) != "all_returns": + if _bounds_from_metadata(spec) != (-float("inf"), float("inf")): continue - period_key = _period_key(fact) - if not period_key[0] or not _not_after_target_period( - period_key, target_period_key - ): + if metadata.get("filing_status") != "All": continue - source_record_id = _source_record_id(fact) - if not source_record_id: + if metadata.get("soi_return_universe", "all_returns") != "all_returns": continue + source_period = metadata.get("source_period", "") candidate = _SoiTotalControl( - value=_numeric_value(fact), - source_period=str(_period_value(fact)), - source_record_id=source_record_id, - period_key=period_key, + value=spec.value, + source_period=source_period, + source_record_id=metadata.get("ledger_source_record_id", spec.name), + period_key=_period_key_from_value(source_period), ) key = (state_fips, measure_id) - current = controls.get(key) - # Latest period wins; a same-period tie resolves on the record id so - # the choice never depends on feed order. - if current is None or (candidate.period_key[1], candidate.source_record_id) > ( - current.period_key[1], - current.source_record_id, - ): - controls[key] = candidate + if key in controls: + raise ValueError( + f"Two state totals bind for state {state_fips} {measure_id}: " + f"{controls[key].source_record_id} and {candidate.source_record_id}; " + "a state's AGI bands need one control (microcosm#940)." + ) + controls[key] = candidate return controls @@ -2597,9 +2658,13 @@ def _latest_dynamic_target_references( """Select one fact per model target shape: the latest eligible period. Returns ``(source_record_id, reference)`` pairs so the exclusion vintage - guard and receipt can see which fact won each key. + guard and receipt can see which fact won each key. State AGI bands are + the one family selected by vintage rather than per key: every vintage is + a candidate, and :func:`_with_one_state_agi_band_vintage` keeps one per + state and measure (microcosm#940). """ + facts = tuple(facts) candidates: list[ tuple[ tuple[str, ...], @@ -2617,10 +2682,10 @@ def _latest_dynamic_target_references( if reference is not None: key = _dynamic_target_key(fact) if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true": - # Every vintage of a state AGI band reaches the registry: - # _rebase_soi_state_agi_bands picks one vintage per state and - # measure by partition completeness, which per-band latest - # selection cannot see (microcosm#940). + # Every vintage of a state AGI band stays a candidate: one + # vintage is chosen per state and measure by partition + # completeness, which per-band latest selection cannot see + # (microcosm#940). key = (*key, str(_period_value(fact))) candidates.append( ( @@ -2658,9 +2723,12 @@ def _latest_dynamic_target_references( target_period_key=target_period_key, ): latest[key] = (period_key, source_record_id, reference) - return tuple( - (source_record_id, reference) - for _, source_record_id, reference in latest.values() + return _with_one_state_agi_band_vintage( + tuple( + (source_record_id, reference) + for _, source_record_id, reference in latest.values() + ), + facts, ) @@ -3085,6 +3153,9 @@ def _soi_reference_from_fact( metadata["requires_total_soi_uprating"] = "true" if requires_state_agi_band_rebase: metadata[_SOI_STATE_AGI_BAND_REBASE_FLAG] = "true" + metadata[_SOI_STATE_AGI_BAND_RECORD_SET_KEY] = _normalized_record_set_id( + _str_at(fact, "layout", "record_set_id") + ) return LedgerTargetReference( name=source_record_id, ledger_source_record_id=source_record_id, @@ -4059,6 +4130,38 @@ def _str_at(obj: object, *path: str) -> str: if reference.family == "irs_soi" ) + +def _state_agi_top_tail_requirements() -> tuple[TargetCoverageRequirement, ...]: + """One release requirement per state and measure for the $1M+ band (#940). + + State totals leave a state's top tail free, which is what progressive + state rate schedules tax. A state's AGI above $1M is pinned only by its + $1M+ AGI and return count together, and each measure's bands are dropped + independently when its partition or bound state total is missing, so the + release requires both rows for every state: a feed without the split + Historic Table 2 state bands fails, naming each state it leaves free. + """ + return tuple( + TargetCoverageRequirement( + requirement_id=f"irs_state_agi_top_tail_{postal.lower()}_{measure_id}", + label=f"SOI {noun} of returns at $1M+ AGI in {postal}", + accepted_families=("irs_soi",), + required_metadata=( + (_SOI_STATE_AGI_BAND_REBASE_FLAG, "true"), + ("source_measure_id", measure_id), + ("state_fips", state_fips), + ("agi_lower_bound", "1000000.0"), + ("agi_upper_bound", "inf"), + ), + ) + for state_fips, postal in sorted(US_STATE_FIPS_TO_POSTAL.items()) + for measure_id, noun in ( + ("adjusted_gross_income", "AGI"), + ("return_count", "count"), + ) + ) + + US_FISCAL_TARGET_COVERAGE_REQUIREMENTS: tuple[TargetCoverageRequirement, ...] = ( TargetCoverageRequirement( requirement_id="federal_income_tax_total", @@ -4078,40 +4181,7 @@ def _str_at(obj: object, *path: str) -> str: accepted_name_substrings=(".adjusted_gross_income",), min_matches=20, ), - TargetCoverageRequirement( - requirement_id="irs_state_agi_top_tail", - label="SOI AGI of returns at $1M+ in every state", - accepted_families=("irs_soi",), - required_metadata=( - (_SOI_STATE_AGI_BAND_REBASE_FLAG, "true"), - ("source_measure_id", "adjusted_gross_income"), - ("agi_lower_bound", "1000000.0"), - ), - min_matches=len(US_STATE_FIPS_TO_POSTAL), - notes=( - "State totals leave a state's top tail free, which is what " - "progressive state rate schedules tax (microcosm#940). A feed " - "without the split Historic Table 2 state bands must fail here, " - "not ship without the constraint." - ), - ), - TargetCoverageRequirement( - requirement_id="irs_state_agi_top_tail_returns", - label="SOI returns at $1M+ AGI in every state", - accepted_families=("irs_soi",), - required_metadata=( - (_SOI_STATE_AGI_BAND_REBASE_FLAG, "true"), - ("source_measure_id", "return_count"), - ("agi_lower_bound", "1000000.0"), - ), - min_matches=len(US_STATE_FIPS_TO_POSTAL), - notes=( - "The count half of irs_state_agi_top_tail: a state's AGI above $1M " - "is pinned only by its $1M+ AGI and return count together, and " - "each measure's bands are dropped independently when its " - "partition or state total is missing (microcosm#940)." - ), - ), + *_state_agi_top_tail_requirements(), TargetCoverageRequirement( requirement_id="irs_wages_distribution", label="SOI wages by AGI bracket", diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py index 7f03b37897..40edcce917 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py @@ -12,6 +12,7 @@ import importlib.util import math import random +from dataclasses import replace from hashlib import sha256 import pytest @@ -604,37 +605,44 @@ def test_rebased_bands_age_with_the_state_total() -> None: ) -@pytest.mark.parametrize( - ("requirement_id", "measure"), - [ - ("irs_state_agi_top_tail", "adjusted_gross_income"), - ("irs_state_agi_top_tail_returns", "return_count"), - ], -) -def test_release_coverage_requires_top_tail_rows_in_every_state( - requirement_id: str, measure: str -) -> None: - """Both halves of a state's $1M+ cell are release requirements: dropping - one state's row of either measure fails the gate.""" - requirement = next( +def test_release_coverage_requires_both_top_tail_rows_in_each_state() -> None: + """The release requires a $1M+ AGI row and a $1M+ count row for every one + of the 51 states: dropping one state's row fails exactly that state's + requirement, and another state's duplicate cannot stand in for it.""" + requirements = [ requirement for requirement in US_FISCAL_TARGET_COVERAGE_REQUIREMENTS - if requirement.requirement_id == requirement_id - ) + if requirement.requirement_id.startswith("irs_state_agi_top_tail_") + ] facts = [] for postal in sorted(POSTAL_TO_FIPS): facts += _partition(postal, 2023, CO_2023) facts += _totals(postal, 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI) registry = _compile(facts) - everything = target_profile_coverage_gate(registry.specs, [requirement]) - one_state_short = target_profile_coverage_gate( - [spec for spec in registry.specs if spec.name != _co_name("1m_plus", measure)], - [requirement], - ) - assert requirement.min_matches == 51 - assert everything.passed - assert not one_state_short.passed + assert len(requirements) == 51 * 2 + assert target_profile_coverage_gate(registry.specs, requirements).passed + for measure in MEASURES: + dropped = _co_name("1m_plus", measure) + alabama = next( + spec + for spec in registry.specs + if spec.name == _co_name("1m_plus", measure).replace(".co.", ".al.") + ) + stand_in = { + "name": f"{alabama.name}.copy", + "measure": f"{alabama.name}.copy", + "family": alabama.family, + "metadata": dict(alabama.metadata), + } + result = target_profile_coverage_gate( + [*[spec for spec in registry.specs if spec.name != dropped], stand_in], + requirements, + ) + assert not result.passed + assert [failure.split(":")[0] for failure in result.failures] == [ + f"irs_state_agi_top_tail_co_{measure}" + ] def test_state_bands_below_the_floor_never_bind_even_in_their_own_year() -> None: @@ -692,20 +700,149 @@ def test_an_incomplete_newest_vintage_falls_back_to_the_last_complete_one() -> N } -def test_identical_reemissions_collapse_and_conflicting_ones_raise() -> None: - """One source record id emitted twice with the same bytes is one band; - the same id with a different value is a feed error.""" +def test_reemissions_follow_the_one_fact_per_record_id_rule() -> None: + """A partition counts an identical re-emission of a sub-floor band once, + and refuses one record id with two different values. A binding band's own + fact is a target fact, so the compile's one-fact-per-record-id rule + refuses any duplicate of it, identical or not, as it does for every other + family.""" base = [ *_partition("CO", 2023, CO_2023), *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), ] - duplicate = dict(base[0]) - registry = _compile([*base, duplicate]) + sub_floor = base[0] + assert ".under_1." in str(sub_floor["lineage"]["source_record_id"]) + registry = _compile([*base, dict(sub_floor)]) assert len(_band_specs(registry)) == len(BINDING_BANDS) * len(MEASURES) - conflicting = {**base[0], "value": base[0]["value"] + 10} with pytest.raises(ValueError, match="appears twice with different"): - _compile([*base, conflicting]) + _compile([*base, {**sub_floor, "value": sub_floor["value"] + 10}]) + + binding = next( + fact + for fact in base + if str(fact["lineage"]["source_record_id"]).endswith("1m_plus.return_count") + ) + with pytest.raises(ValueError, match="matched multiple Ledger facts"): + _compile([*base, dict(binding)]) + + +def test_bands_are_shares_of_the_state_total_the_registry_binds() -> None: + """Two same-period Colorado totals with one selection key but different + record ids and values (the second is twice the first): latest-vintage + selection binds one of them, and in either feed order every band is a + share of the one that binds, with the share it records.""" + totals = _totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI) + doubled = [] + for fact in totals: + twin_id = f"{fact['lineage']['source_record_id']}_restated" + doubled.append( + { + **fact, + "value": 2 * fact["value"], + "lineage": {"source_record_id": twin_id}, + "aggregate_fact_key": f"{fact['aggregate_fact_key']}_restated", + "semantic_fact_key": f"{fact['semantic_fact_key']}_restated", + "legacy_fact_key": f"{fact['legacy_fact_key']}_restated", + } + ) + facts = [*_partition("CO", 2023, CO_2023), *totals, *doubled] + bound_controls = set() + for ordering in (facts, list(reversed(facts))): + registry = _compile(ordering) + bound = { + spec.metadata["ledger_source_record_id"]: spec + for spec in registry.specs + if ".state_broad." in spec.name + } + assert len(bound) == 2 # one total per measure binds + bands = _band_specs(registry) + assert len(bands) == len(BINDING_BANDS) * len(MEASURES) + for spec in bands.values(): + control = bound[spec.metadata["uprating_index_source_record_id"]] + assert spec.value / control.value == pytest.approx( + float(spec.metadata["state_agi_band_share"]), rel=1e-12 + ) + bound_controls |= set(bound) + # The two orders bind different twins, so the check covered both values. + assert len(bound_controls) == 4 + + +def test_an_excluded_state_total_anchors_no_bands(monkeypatch) -> None: + """When a state's total is a reviewed support exclusion it does not bind, + so the state's bands have no control and are dropped (and the release + requirement for that state then fails).""" + from microcosm.build.us_runtime import fiscal_targets + + excluded = ( + "irs_soi.ty2022.historic_table_2.state_broad.co.all.adjusted_gross_income" + ) + monkeypatch.setitem( + fiscal_targets.US_FISCAL_TARGET_SUPPORT_EXCLUSIONS, excluded, "test" + ) + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + measures = { + spec.metadata["source_measure_id"] for spec in _band_specs(registry).values() + } + + assert excluded not in {spec.name for spec in registry.specs} + assert measures == {"return_count"} + + +def test_the_exclusion_guard_sees_only_the_chosen_band_vintage(monkeypatch) -> None: + """A reviewed TY2020 exclusion with a reviewed TY2023 bypass: the complete + TY2021 bands are discarded by vintage choice before the guard runs, so + they cannot trip it.""" + from microcosm.build.us_runtime import fiscal_targets + + cell = "historic_table_2.state_agi.co.1m_plus.return_count" + monkeypatch.setitem( + fiscal_targets.US_FISCAL_TARGET_SUPPORT_EXCLUSIONS, + f"irs_soi.ty2020.{cell}", + "test", + ) + monkeypatch.setitem( + fiscal_targets.US_FISCAL_TARGET_EXCLUSION_VINTAGE_BYPASSES, + f"irs_soi.ty2023.{cell}", + "test", + ) + registry = _compile( + [ + *_partition("CO", 2021, CO_2023), + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + + assert { + spec.metadata["uprating_from_period"] for spec in _band_specs(registry).values() + } == {"2023"} + + +def test_a_nan_bound_in_a_partition_is_refused() -> None: + nan_under_1 = [ + { + **fact, + "universe_constraints": { + "constraints": [{"variable": AGI, "operator": "<", "value": "nan"}] + }, + } + if str(fact["lineage"]["source_record_id"]).endswith("under_1.return_count") + else fact + for fact in _partition("CO", 2023, CO_2023) + ] + with pytest.raises(ValueError, match="NaN bound or value"): + _compile( + [ + *nan_under_1, + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) def test_a_malformed_vintage_that_cannot_bind_does_not_stop_the_compile() -> None: @@ -732,8 +869,6 @@ def test_period_contract_reads_the_period_a_rebased_band_sits_at() -> None: """Without aging, TY2023 AGI bands rebased onto a TY2022 state total hold 2022-level dollars: at a 2023 build they violate the period contract like the state total they are shares of, and at a 2022 build neither does.""" - from dataclasses import replace - from microcosm.build.us_runtime.target_aging import ( find_period_contract_violations, ) diff --git a/test_support/microcosm_build/us_fiscal_targets.py b/test_support/microcosm_build/us_fiscal_targets.py index 394d05f3a0..f3c4f5c83c 100644 --- a/test_support/microcosm_build/us_fiscal_targets.py +++ b/test_support/microcosm_build/us_fiscal_targets.py @@ -1188,7 +1188,7 @@ def complete_coverage_targets() -> list[dict[str, object]]: def complete_state_agi_top_tail_rows() -> list[dict[str, object]]: """$1M+ AGI and return-count state band rows for all 51 states (#940).""" rows = [] - for postal in US_STATE_FIPS_TO_POSTAL.values(): + for state_fips, postal in US_STATE_FIPS_TO_POSTAL.items(): for measure in ("adjusted_gross_income", "return_count"): name = ( f"irs_soi.ty2023.historic_table_2.state_agi.{postal.lower()}." @@ -1202,7 +1202,9 @@ def complete_state_agi_top_tail_rows() -> list[dict[str, object]]: "metadata": { "requires_state_agi_band_rebase": "true", "source_measure_id": measure, + "state_fips": state_fips, "agi_lower_bound": "1000000.0", + "agi_upper_bound": "inf", }, } ) From 39f37229bfeb0319e40bc7361641192e497506e1 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 10 Oct 2026 19:49:38 -0400 Subject: [PATCH 09/10] Carry the band vintage through selection, not target metadata; document round 2 The round-2 selection-time vintage choice stamped a state_agi_band_record_set key on every band row, which entered the hashed target surface. Selection now keeps each band id's (period, record set) beside the candidates instead, so band metadata is what the reviewed head produced: on the pinned feed the national_state surface is f96be9f41781 again (33,250 / 6,102), which also shows the registry-derived controls give the same values as before there and that the merge of main moved nothing on this surface. docs/us-fact-to-target.md: control read from the bound registry row, vintage chosen inside selection, malformed-partition rules, per-state release requirements. Changelog fragment updated. Co-Authored-By: Claude Opus 5.5 --- .../940-state-agi-band-targets.added.md | 2 +- docs/us-fact-to-target.md | 46 ++++++++++++------- .../build/us_runtime/fiscal_targets.py | 45 ++++++++++-------- 3 files changed, 57 insertions(+), 36 deletions(-) diff --git a/changelog.d/940-state-agi-band-targets.added.md b/changelog.d/940-state-agi-band-targets.added.md index 513fb90e2d..60a483fea5 100644 --- a/changelog.d/940-state-agi-band-targets.added.md +++ b/changelog.d/940-state-agi-band-targets.added.md @@ -1 +1 @@ -State x AGI-band calibration targets from IRS SOI Historic Table 2 (#940): return counts and AGI for each state's bands from $100k up, with $500k-$1M and $1M+ split, bound as shares of the state's published partition rebased onto the state total that binds. The US Chronicle feed is re-pinned to add the TY2023 state AGI-band facts (40,178 rows), and two release coverage requirements demand the $1M+ AGI and return-count row in every state. +State x AGI-band calibration targets from IRS SOI Historic Table 2 (#940): return counts and AGI for each state's bands from $100k up, with $500k-$1M and $1M+ split, bound as shares of the state's published partition rebased onto the state total that binds. The US Chronicle feed is re-pinned to add the TY2023 state AGI-band facts (40,178 rows), and a release coverage requirement per state and measure demands each state's $1M+ AGI and return-count row. diff --git a/docs/us-fact-to-target.md b/docs/us-fact-to-target.md index 6cb6b486d2..bcea19d3a8 100644 --- a/docs/us-fact-to-target.md +++ b/docs/us-fact-to-target.md @@ -133,33 +133,47 @@ binds them: the state's published bands of the same vintage, measure and record set over the whole AGI line, negative AGI under $1 included; HT2 publishes amounts that add exactly and counts rounded to tens. The control is the - state's latest HT2 all-returns total not after the build period - (`irs_soi..historic_table_2.state_broad..all.`), the row - that already binds the state's total. Congressional-district `_total` - rows never anchor a state. + state's HT2 all-returns total + (`irs_soi..historic_table_2.state_broad..all.`) as the + registry binds it: the row latest-vintage selection kept and the + exclusions let through, read from the compiled registry, not from the + facts. A band's share of the total it calibrates beside is therefore the + share it records. A state whose total is excluded has no control and binds + no bands of that measure; two bound totals for one state and measure + raise. Congressional-district `_total` rows never anchor a state. - **Periods.** The value lands at the control's period and ages with the state total: AGI on the CBO AGI series, counts never. The bands therefore stay the same share of the state total they bind beside, at every stage. The control may be older than the bands (TY2023 bands on the TY2022 state total): the newest published shares scale onto the level the state total binds at, rather than binding a second, differently aged level. -- **One vintage.** Every vintage of a state band reaches the pass; per state - and measure the pass binds the newest vintage whose published partition is - complete and drops the rest, so the TY2022 package's summed `500k_plus` row - never binds beside TY2023's split rows, and a gapped newest vintage falls - back to the last complete one. Overlapping bands, or one source record id - re-emitted with different values, raise. +- **One vintage.** State bands are the one family selected by vintage, not + per row. Every vintage of a binding band stays a candidate through + latest-vintage selection, and `_with_one_state_agi_band_vintage` then keeps, + per state and measure, the newest vintage whose published partition is + complete. The TY2022 package's summed `500k_plus` row never binds beside + TY2023's split rows, and a gapped newest vintage falls back to the last + complete one. The choice is made inside selection, so the exclusion vintage + guard and the exclusion receipt see only the band ids that can bind. +- **Malformed partitions.** In a vintage that is examined, overlapping + bands, a NaN bound or value, or one source record id with two different + rows raise; an identical re-emission of a sub-floor band counts once. A + binding band's own fact is a target fact: like every other family, the + compile refuses two facts for one source record id, identical or not. + Vintages older than the one chosen are not examined. - **The floor holds at every period.** A state band below $100k, or for a single filing status, is refused even in its own tax year, so a same-year vintage can never bind raw sub-floor levels. - **Receipts.** Every rebased row carries `state_agi_band_share`, `uprating_factor` and the control's record id. -- **Release gate.** `irs_state_agi_top_tail` and - `irs_state_agi_top_tail_returns` in `US_FISCAL_TARGET_COVERAGE_REQUIREMENTS` - require a $1M+ AGI row and a $1M+ return-count row for all 51 states, so a - feed without the split bands, or a state whose partition or total is - missing for either measure, fails the release rather than shipping without - the constraint. Together the two rows pin each state's AGI above $1M. +- **Release gate.** `US_FISCAL_TARGET_COVERAGE_REQUIREMENTS` carries one + requirement per state and measure, + `irs_state_agi_top_tail__` (102 in all), each matching that + state's `[$1M, inf)` row by `state_fips` and both AGI bounds. A feed + without the split bands, or a state whose partition or bound total is + missing for either measure, fails the release and names the state, rather + than shipping without the constraint; a second row for another state + cannot stand in. Together the two rows pin each state's AGI above $1M. - **Period contract.** Without aging, a band rebased onto an older state total holds that total's period's dollars; `find_period_contract_violations` reads `uprating_to_period` for rebased rows, the same period target aging diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index eb10659f8d..143a6c3fab 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -351,7 +351,6 @@ def _us_hierarchy_seed( _SOI_STATE_AGI_BAND_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_agi." _SOI_STATE_AGI_BAND_CONTROL_RECORD_SET_PREFIX = "irs_soi.historic_table_2.state_broad." _SOI_STATE_AGI_BAND_REBASE_FLAG = "requires_state_agi_band_rebase" -_SOI_STATE_AGI_BAND_RECORD_SET_KEY = "state_agi_band_record_set" _SOI_FORM_W2_ITEM_LAYOUT_DIMENSION = "irs_soi.form_w2_item" _SOI_FORM_W2_SOCIAL_SECURITY_TIP_ITEMS = frozenset( { @@ -2093,21 +2092,31 @@ def _state_agi_band_key(metadata: Mapping[str, str]) -> tuple[str, str]: def _state_agi_band_vintage(metadata: Mapping[str, str]) -> tuple[str, str]: - """(source period, period-free record set) of a flagged band.""" + """(source period, period-free record set) of a compiled band spec.""" return ( metadata.get("source_period", ""), - metadata.get(_SOI_STATE_AGI_BAND_RECORD_SET_KEY, ""), + _normalized_record_set_id(metadata.get("ledger_layout_record_set_id", "")), + ) + + +def _state_agi_band_vintage_from_fact(fact: object) -> tuple[str, str]: + """(source period, period-free record set) of a band fact.""" + return ( + str(_period_value(fact)), + _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")), ) def _with_one_state_agi_band_vintage( selected: tuple[tuple[str, LedgerTargetReference], ...], facts: tuple[object, ...], + band_vintages: Mapping[str, tuple[str, str]], ) -> tuple[tuple[str, LedgerTargetReference], ...]: """Keep each state's AGI bands of one vintage: the newest that tiles (#940). Binding state bands keep their period in the selection key, so every - vintage arrives here. Per (state, measure) the newest vintage whose + vintage arrives here; ``band_vintages`` maps each band's source record id + to its (period, record set). Per (state, measure) the newest vintage whose published partition tiles the AGI line is kept and every other vintage's rows are dropped: a collapsed ``500k_plus`` row from one year never binds beside another year's split ``500k_to_1m``/``1m_plus`` rows, and a newest @@ -2116,19 +2125,15 @@ def _with_one_state_agi_band_vintage( only the band ids that can bind. """ - flagged = [ - reference - for _, reference in selected - if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true" - ] - if not flagged: + if not band_vintages: return selected band_rows = _soi_state_agi_band_rows(facts) vintages: dict[tuple[str, str], set[tuple[str, str]]] = {} - for reference in flagged: - vintages.setdefault(_state_agi_band_key(reference.metadata), set()).add( - _state_agi_band_vintage(reference.metadata) - ) + for source_record_id, reference in selected: + if source_record_id in band_vintages: + vintages.setdefault(_state_agi_band_key(reference.metadata), set()).add( + band_vintages[source_record_id] + ) chosen = { key: _latest_complete_state_agi_band_vintage(key, kept, band_rows) for key, kept in vintages.items() @@ -2136,9 +2141,9 @@ def _with_one_state_agi_band_vintage( return tuple( (source_record_id, reference) for source_record_id, reference in selected - if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) != "true" + if source_record_id not in band_vintages or chosen[_state_agi_band_key(reference.metadata)] - == _state_agi_band_vintage(reference.metadata) + == band_vintages[source_record_id] ) @@ -2665,6 +2670,7 @@ def _latest_dynamic_target_references( """ facts = tuple(facts) + band_vintages: dict[str, tuple[str, str]] = {} candidates: list[ tuple[ tuple[str, ...], @@ -2687,6 +2693,9 @@ def _latest_dynamic_target_references( # completeness, which per-band latest selection cannot see # (microcosm#940). key = (*key, str(_period_value(fact))) + band_vintages[_source_record_id(fact)] = ( + _state_agi_band_vintage_from_fact(fact) + ) candidates.append( ( key, @@ -2729,6 +2738,7 @@ def _latest_dynamic_target_references( for _, source_record_id, reference in latest.values() ), facts, + band_vintages, ) @@ -3153,9 +3163,6 @@ def _soi_reference_from_fact( metadata["requires_total_soi_uprating"] = "true" if requires_state_agi_band_rebase: metadata[_SOI_STATE_AGI_BAND_REBASE_FLAG] = "true" - metadata[_SOI_STATE_AGI_BAND_RECORD_SET_KEY] = _normalized_record_set_id( - _str_at(fact, "layout", "record_set_id") - ) return LedgerTargetReference( name=source_record_id, ledger_source_record_id=source_record_id, From e2c34ac7537f67c8b663836515c7ea1a33c7cc1c Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 11 Oct 2026 06:13:12 -0400 Subject: [PATCH 10/10] Address the #940 round-3 minors: finite partition values, untested guards Round-3 independent review of 39f37229b (GPT-6.1 Sol): APPROVE, with two minors and two nits (report: ~/reviews/microcosm-940/review-out-r3.md). - Partition values must parse and be finite. An infinite sub-floor value made every share 0.0 (and still satisfied the coverage gate); an unparseable one counted as 0.0 and moved the $1M+ count share by 1.7%. Both now raise; bounds still only need to be non-NaN. - Tests for the guards no test exercised: two bound state totals raise; the control filters (filing status, AGI bounds, universe, CD geography, record set) each reject a decoy; a $1M+ row with a closed upper edge fails its state's requirement. The reviewer's three surviving mutations (last control wins, requirement without agi_upper_bound, control accepts any filing status) are now each caught. - "Every vintage" -> "every eligible vintage" in the docs and docstrings. - The Hypothesis property test suppresses the too_slow health check, which tripped once at load ~300. Co-Authored-By: Claude Opus 5.5 --- docs/us-fact-to-target.md | 12 +-- .../build/us_runtime/fiscal_targets.py | 54 ++++++---- .../us/test_us_soi_state_agi_bands.py | 102 +++++++++++++++++- 3 files changed, 140 insertions(+), 28 deletions(-) diff --git a/docs/us-fact-to-target.md b/docs/us-fact-to-target.md index bcea19d3a8..e4ae417a8d 100644 --- a/docs/us-fact-to-target.md +++ b/docs/us-fact-to-target.md @@ -148,16 +148,16 @@ binds them: total): the newest published shares scale onto the level the state total binds at, rather than binding a second, differently aged level. - **One vintage.** State bands are the one family selected by vintage, not - per row. Every vintage of a binding band stays a candidate through - latest-vintage selection, and `_with_one_state_agi_band_vintage` then keeps, - per state and measure, the newest vintage whose published partition is - complete. The TY2022 package's summed `500k_plus` row never binds beside + per row. Every eligible vintage (not after the build period) of a binding + band stays a candidate through latest-vintage selection, and + `_with_one_state_agi_band_vintage` then keeps, per state and measure, the + newest vintage whose published partition is complete. The TY2022 package's summed `500k_plus` row never binds beside TY2023's split rows, and a gapped newest vintage falls back to the last complete one. The choice is made inside selection, so the exclusion vintage guard and the exclusion receipt see only the band ids that can bind. - **Malformed partitions.** In a vintage that is examined, overlapping - bands, a NaN bound or value, or one source record id with two different - rows raise; an identical re-emission of a sub-floor band counts once. A + bands, a NaN bound, a value that is infinite, NaN or does not parse, or one + source record id with two different rows raise; an identical re-emission of a sub-floor band counts once. A binding band's own fact is a target fact: like every other family, the compile refuses two facts for one source record id, identical or not. Vintages older than the one chosen are not examined. diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py index 143a6c3fab..2f0818f70e 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/fiscal_targets.py @@ -2115,7 +2115,8 @@ def _with_one_state_agi_band_vintage( """Keep each state's AGI bands of one vintage: the newest that tiles (#940). Binding state bands keep their period in the selection key, so every - vintage arrives here; ``band_vintages`` maps each band's source record id + eligible vintage (not after the target period) arrives here; + ``band_vintages`` maps each band's source record id to its (period, record set). Per (state, measure) the newest vintage whose published partition tiles the AGI line is kept and every other vintage's rows are dropped: a collapsed ``500k_plus`` row from one year never binds @@ -2153,14 +2154,15 @@ def _soi_state_agi_band_rows( """Every published state HT2 AGI band of the binding measures. Keyed ``(state_fips, measure_id, period, period-free record set)``; each - row is ``(source record id, (lower, upper, value))``. All bands count, - those below the binding floor and negative AGI under $1 included. Rows - are not validated here: a group is checked only when a binding band asks - for its partition. + row is ``(source record id, (lower, upper, value))``, with ``value`` + ``None`` when it does not parse as a number. All bands count, those below + the binding floor and negative AGI under $1 included. Rows are not + validated here: a group is checked only when a binding band asks for its + partition. """ groups: dict[ - tuple[str, str, str, str], list[tuple[str, tuple[float, float, float]]] + tuple[str, str, str, str], list[tuple[str, tuple[float, float, float | None]]] ] = {} for fact in facts: if _soi_state_agi_band_status(fact, _measure_id(fact)) is None: @@ -2180,7 +2182,7 @@ def _soi_state_agi_band_rows( ( _bound_from_metadata_value(lower), _bound_from_metadata_value(upper), - _numeric_value(fact), + _parsed_value_or_none(fact), ), ) ) @@ -2189,24 +2191,30 @@ def _soi_state_agi_band_rows( def _state_agi_band_partition_total( key: tuple[str, str, str, str], - rows: Iterable[tuple[str, tuple[float, float, float]]], + rows: Iterable[tuple[str, tuple[float, float, float | None]]], ) -> float | None: """The sum of one group's bands if they tile the whole AGI line. - A gap leaves the partition incomplete (``None``). A NaN bound or value, - overlapping bands, or one source record id with two different rows is a - packaging error and raises; an identical re-emission of one id counts - once. (A binding band's own fact is still subject to the compile's + A gap leaves the partition incomplete (``None``). A NaN bound, a value + that is infinite, NaN or does not parse, overlapping bands, or one source + record id with two different rows is a packaging error and raises; an + identical re-emission of one id counts once. (A binding band's own fact is still subject to the compile's one-fact-per-record-id rule, which refuses any duplicate.) """ state_fips, measure_id, period, record_set = key unique: dict[str, tuple[float, float, float]] = {} for source_record_id, row in rows: - if any(math.isnan(component) for component in row): + lower, upper, value = row + if math.isnan(lower) or math.isnan(upper): raise ValueError( - f"State AGI band {source_record_id} has a NaN bound or value: " - f"{row} (microcosm#940)." + f"State AGI band {source_record_id} has a NaN bound: {row} " + "(microcosm#940)." + ) + if value is None or not math.isfinite(value): + raise ValueError( + f"State AGI band {source_record_id} has a value that is not a " + f"finite number: {row} (microcosm#940)." ) if unique.get(source_record_id, row) != row: raise ValueError( @@ -2238,7 +2246,7 @@ def _latest_complete_state_agi_band_vintage( key: tuple[str, str], vintages: set[tuple[str, str]], band_rows: Mapping[ - tuple[str, str, str, str], list[tuple[str, tuple[float, float, float]]] + tuple[str, str, str, str], list[tuple[str, tuple[float, float, float | None]]] ], ) -> tuple[str, str] | None: """The newest vintage of a state's bands with a complete, nonzero partition. @@ -2664,8 +2672,8 @@ def _latest_dynamic_target_references( Returns ``(source_record_id, reference)`` pairs so the exclusion vintage guard and receipt can see which fact won each key. State AGI bands are - the one family selected by vintage rather than per key: every vintage is - a candidate, and :func:`_with_one_state_agi_band_vintage` keeps one per + the one family selected by vintage rather than per key: every eligible + vintage is a candidate, and :func:`_with_one_state_agi_band_vintage` keeps one per state and measure (microcosm#940). """ @@ -2688,7 +2696,7 @@ def _latest_dynamic_target_references( if reference is not None: key = _dynamic_target_key(fact) if reference.metadata.get(_SOI_STATE_AGI_BAND_REBASE_FLAG) == "true": - # Every vintage of a state AGI band stays a candidate: one + # Every eligible vintage of a state AGI band stays a candidate: one # vintage is chosen per state and measure by partition # completeness, which per-band latest selection cannot see # (microcosm#940). @@ -4031,6 +4039,14 @@ def _congressional_district_geoid(fact: object) -> str | None: return congressional_district_geoid +def _parsed_value_or_none(fact: object) -> float | None: + """The fact's value as a float, or ``None`` when it does not parse.""" + try: + return float(_at(fact, "value")) + except (TypeError, ValueError): + return None + + def _numeric_value(fact: object) -> float: value = _at(fact, "value") try: diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py index 40edcce917..6edeb8e2ee 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_soi_state_agi_bands.py @@ -643,6 +643,22 @@ def test_release_coverage_requires_both_top_tail_rows_in_each_state() -> None: assert [failure.split(":")[0] for failure in result.failures] == [ f"irs_state_agi_top_tail_co_{measure}" ] + # A Colorado row with the right lower edge but a closed upper edge is + # not the $1M+ band. + colorado = next(spec for spec in registry.specs if spec.name == dropped) + capped = { + "name": colorado.name, + "measure": colorado.name, + "family": colorado.family, + "metadata": {**colorado.metadata, "agi_upper_bound": "5000000.0"}, + } + result = target_profile_coverage_gate( + [*[spec for spec in registry.specs if spec.name != dropped], capped], + requirements, + ) + assert [failure.split(":")[0] for failure in result.failures] == [ + f"irs_state_agi_top_tail_co_{measure}" + ] def test_state_bands_below_the_floor_never_bind_even_in_their_own_year() -> None: @@ -824,6 +840,82 @@ def test_the_exclusion_guard_sees_only_the_chosen_band_vintage(monkeypatch) -> N } == {"2023"} +def test_two_bound_state_totals_for_one_measure_are_refused() -> None: + """A second state_broad record set for Colorado binds its own AGI total + beside the first; the bands then have two candidate controls, and the + compile refuses rather than choose one.""" + restated = "irs_soi.ty2022.historic_table_2.state_broad.co_restated" + with pytest.raises(ValueError, match="Two state totals bind"): + _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + _state_total_fact( + "CO", + 2022, + "adjusted_gross_income", + CO_2022_TOTAL_AGI, + record_set_id=restated, + ), + ] + ) + + +def test_only_a_state_level_all_returns_total_is_a_control() -> None: + """The control filters, checked directly on the bound Colorado AGI total: + the same spec stops being a control when it is a filing-status slice, an + AGI band, another return universe, a congressional district, or outside + the state_broad record sets.""" + from microcosm.build.us_runtime import fiscal_targets + from microcosm.calibrate import TargetRegistry + + registry = _compile( + [ + *_partition("CO", 2023, CO_2023), + *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI), + ] + ) + total = next( + spec + for spec in registry.specs + if spec.name.endswith("state_broad.co.all.adjusted_gross_income") + ) + + def controls(**metadata): + variant = replace(total, metadata={**total.metadata, **metadata}) + return fiscal_targets._soi_state_agi_band_controls( + TargetRegistry([variant], country="us") + ) + + assert set(controls()) == {("08", "adjusted_gross_income")} + for decoy in ( + {"filing_status": "Single"}, + {"agi_lower_bound": "1000000.0"}, + {"agi_upper_bound": "1000000.0"}, + {"soi_return_universe": "returns_excluding_dependents"}, + {"congressional_district_geoid": "0801"}, + {"ledger_geography_level": "congressional_district"}, + {"ledger_layout_record_set_id": "irs_soi.ty2023.congressional_district_2022"}, + ): + assert controls(**decoy) == {}, decoy + + +@pytest.mark.parametrize("bad_value", ["inf", float("inf"), "not-a-number"]) +def test_a_partition_value_that_is_not_a_finite_number_is_refused(bad_value) -> None: + """An infinite sub-floor value would make every share zero, and an + unparseable one would silently count as zero; both refuse.""" + facts = [ + {**fact, "value": bad_value} + if str(fact["lineage"]["source_record_id"]).endswith("under_1.return_count") + else fact + for fact in _partition("CO", 2023, CO_2023) + ] + with pytest.raises(ValueError, match="not a finite number"): + _compile( + [*facts, *_totals("CO", 2022, CO_2022_TOTAL_RETURNS, CO_2022_TOTAL_AGI)] + ) + + def test_a_nan_bound_in_a_partition_is_refused() -> None: nan_under_1 = [ { @@ -836,7 +928,7 @@ def test_a_nan_bound_in_a_partition_is_refused() -> None: else fact for fact in _partition("CO", 2023, CO_2023) ] - with pytest.raises(ValueError, match="NaN bound or value"): + with pytest.raises(ValueError, match="NaN bound"): _compile( [ *nan_under_1, @@ -936,12 +1028,16 @@ def test_rebase_invariants_hold_for_generated_partitions() -> None: partition share; scaling a control scales exactly that state's bands; and the output never depends on feed order.""" pytest.importorskip("hypothesis") - from hypothesis import given, settings + from hypothesis import HealthCheck, given, settings from hypothesis import strategies as st states = sorted(POSTAL_TO_FIPS) - @settings(max_examples=40, deadline=None) + @settings( + max_examples=40, + deadline=None, + suppress_health_check=[HealthCheck.too_slow], + ) @given( chosen=st.lists(st.sampled_from(states), min_size=1, max_size=3, unique=True), seed=st.integers(0, 2**32 - 1),