Skip to content
This repository was archived by the owner on Jun 14, 2026. It is now read-only.

Commit 188a940

Browse files
authored
Allow eCPS-shaped rebuilds without ACS (#111)
1 parent 99828db commit 188a940

3 files changed

Lines changed: 73 additions & 11 deletions

File tree

src/microplex_us/pipelines/pe_us_data_rebuild.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ def default_policyengine_us_data_rebuild_source_providers(
103103
puf_demographics_path: str | Path | None = None,
104104
puf_expand_persons: bool = True,
105105
include_donor_surveys: bool = True,
106+
include_acs: bool | None = None,
107+
include_sipp: bool | None = None,
108+
include_scf: bool | None = None,
106109
acs_year: int = 2022,
107110
sipp_year: int = 2023,
108111
scf_year: int = 2022,
@@ -150,14 +153,22 @@ def default_policyengine_us_data_rebuild_source_providers(
150153
social_security_split_strategy=SOCIAL_SECURITY_SPLIT_STRATEGY_PE_QRF,
151154
),
152155
]
153-
if include_donor_surveys:
156+
resolved_include_acs = include_donor_surveys if include_acs is None else include_acs
157+
resolved_include_sipp = (
158+
include_donor_surveys if include_sipp is None else include_sipp
159+
)
160+
resolved_include_scf = include_donor_surveys if include_scf is None else include_scf
161+
if resolved_include_acs:
162+
providers.append(
163+
ACSSourceProvider(
164+
year=int(acs_year),
165+
policyengine_us_data_repo=policyengine_us_data_repo,
166+
policyengine_us_data_python=policyengine_us_data_python,
167+
)
168+
)
169+
if resolved_include_sipp:
154170
providers.extend(
155171
[
156-
ACSSourceProvider(
157-
year=int(acs_year),
158-
policyengine_us_data_repo=policyengine_us_data_repo,
159-
policyengine_us_data_python=policyengine_us_data_python,
160-
),
161172
SIPPSourceProvider(
162173
block="tips",
163174
year=int(sipp_year),
@@ -168,13 +179,16 @@ def default_policyengine_us_data_rebuild_source_providers(
168179
year=int(sipp_year),
169180
cache_dir=donor_cache,
170181
),
171-
SCFSourceProvider(
172-
year=int(scf_year),
173-
policyengine_us_data_repo=policyengine_us_data_repo,
174-
policyengine_us_data_python=policyengine_us_data_python,
175-
),
176182
]
177183
)
184+
if resolved_include_scf:
185+
providers.append(
186+
SCFSourceProvider(
187+
year=int(scf_year),
188+
policyengine_us_data_repo=policyengine_us_data_repo,
189+
policyengine_us_data_python=policyengine_us_data_python,
190+
)
191+
)
178192
return tuple(providers)
179193

180194

src/microplex_us/pipelines/pe_us_data_rebuild_checkpoint.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1806,6 +1806,9 @@ def run_policyengine_us_data_rebuild_checkpoint(
18061806
puf_demographics_path: str | Path | None = None,
18071807
puf_expand_persons: bool = True,
18081808
include_donor_surveys: bool = True,
1809+
include_acs: bool | None = None,
1810+
include_sipp: bool | None = None,
1811+
include_scf: bool | None = None,
18091812
acs_year: int = 2022,
18101813
sipp_year: int = 2023,
18111814
scf_year: int = 2022,
@@ -1888,6 +1891,9 @@ def run_policyengine_us_data_rebuild_checkpoint(
18881891
puf_demographics_path=puf_demographics_path,
18891892
puf_expand_persons=puf_expand_persons,
18901893
include_donor_surveys=include_donor_surveys,
1894+
include_acs=include_acs,
1895+
include_sipp=include_sipp,
1896+
include_scf=include_scf,
18911897
acs_year=acs_year,
18921898
sipp_year=sipp_year,
18931899
scf_year=scf_year,
@@ -2091,6 +2097,27 @@ def main(argv: list[str] | None = None) -> None:
20912097
action=argparse.BooleanOptionalAction,
20922098
default=True,
20932099
)
2100+
parser.add_argument(
2101+
"--include-acs",
2102+
action=argparse.BooleanOptionalAction,
2103+
default=None,
2104+
help=(
2105+
"Include the ACS donor provider. Defaults to --include-donor-surveys; "
2106+
"use --no-include-acs for an eCPS-shaped run that keeps SIPP/SCF."
2107+
),
2108+
)
2109+
parser.add_argument(
2110+
"--include-sipp",
2111+
action=argparse.BooleanOptionalAction,
2112+
default=None,
2113+
help="Include SIPP donor providers. Defaults to --include-donor-surveys.",
2114+
)
2115+
parser.add_argument(
2116+
"--include-scf",
2117+
action=argparse.BooleanOptionalAction,
2118+
default=None,
2119+
help="Include the SCF donor provider. Defaults to --include-donor-surveys.",
2120+
)
20942121
parser.add_argument("--no-cps-download", action="store_true")
20952122
parser.add_argument("--no-puf-expand-persons", action="store_true")
20962123
parser.add_argument("--defer-policyengine-harness", action="store_true")
@@ -2235,6 +2262,9 @@ def main(argv: list[str] | None = None) -> None:
22352262
puf_demographics_path=args.puf_demographics_path,
22362263
puf_expand_persons=not args.no_puf_expand_persons,
22372264
include_donor_surveys=args.include_donor_surveys,
2265+
include_acs=args.include_acs,
2266+
include_sipp=args.include_sipp,
2267+
include_scf=args.include_scf,
22382268
acs_year=args.acs_year,
22392269
sipp_year=args.sipp_year,
22402270
scf_year=args.scf_year,

tests/pipelines/test_pe_us_data_rebuild.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,24 @@ def test_default_policyengine_us_data_rebuild_source_providers_can_include_donor
166166
assert isinstance(providers[5], SCFSourceProvider)
167167

168168

169+
def test_default_policyengine_us_data_rebuild_source_providers_can_disable_only_acs() -> None:
170+
providers = default_policyengine_us_data_rebuild_source_providers(
171+
include_donor_surveys=True,
172+
include_acs=False,
173+
cps_download=False,
174+
)
175+
176+
assert len(providers) == 5
177+
assert isinstance(providers[0], CPSASECSourceProvider)
178+
assert isinstance(providers[1], PUFSourceProvider)
179+
assert isinstance(providers[2], SIPPSourceProvider)
180+
assert providers[2].block == "tips"
181+
assert isinstance(providers[3], SIPPSourceProvider)
182+
assert providers[3].block == "assets"
183+
assert isinstance(providers[4], SCFSourceProvider)
184+
assert not any(isinstance(provider, ACSSourceProvider) for provider in providers)
185+
186+
169187
def test_build_policyengine_us_data_rebuild_pipeline_returns_configured_pipeline() -> None:
170188
pipeline = build_policyengine_us_data_rebuild_pipeline(
171189
random_seed=321,

0 commit comments

Comments
 (0)