From 452a56550c0b568159a505dd4e0ed76952c172b4 Mon Sep 17 00:00:00 2001 From: martinholmer Date: Thu, 10 Sep 2026 10:32:36 -0400 Subject: [PATCH 1/2] Cosmetic edit of top-level Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 56898446..87f376d5 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,8 @@ install: .PHONY=clean clean: - rm -f tmd/storage/output/tmd* rm -f tmd/storage/output/growfactors.csv + rm -f tmd/storage/output/tmd* rm -f tmd/storage/output/cached* rm -f tmd/storage/output/preimpute_tmd.csv.gz rm -f tmd/storage/output/make_data_*.log From 4d0bc42f978007060dbe98db254941a7a34eb3ef Mon Sep 17 00:00:00 2001 From: martinholmer Date: Thu, 10 Sep 2026 11:00:41 -0400 Subject: [PATCH 2/2] Consistently use the four new _PATH constants --- Makefile | 2 -- README.md | 2 +- setup.py | 2 +- tests/test_state_weight_results.py | 10 +++++----- tests/test_tmd_file_fingerprint.py | 4 ++-- tmd/areas/batch_weights.py | 13 +++++++++---- tmd/areas/create_area_weights.py | 4 ++-- tmd/areas/quality_report.py | 4 ++-- tmd/areas/solve_weights.py | 10 +++++----- tmd/create_raw_growth_factors.py | 4 ++-- tmd/create_taxcalc_cached_files.py | 9 ++++++--- tmd/create_taxcalc_growth_factors.py | 6 +++--- tmd/create_taxcalc_imputed_variables.py | 9 ++++++--- tmd/create_taxcalc_input_variables.py | 4 ++-- tmd/create_taxcalc_sampling_weights.py | 6 +++--- 15 files changed, 49 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index 87f376d5..70113a39 100644 --- a/Makefile +++ b/Makefile @@ -80,8 +80,6 @@ test: tmd_files .PHONY=data data: install clean format lint tmd_files test warnings - diff tmd/storage/output/growfactors.csv tmd/storage/output/old_growfactors.csv - diff tmd/storage/output/tmd_growfactors.csv tmd/storage/output/old_tmd_growfactors.csv .PHONY=warnings warnings: diff --git a/README.md b/README.md index 39087e70..d18b98f0 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ see [this folder](https://github.com/PSLmodels/Tax-Calculator/tree/master/taxcalc/cli/input_data_tests). The **current TMD version is 2.2.0**, which was released on September -9, 2026, and is the same as the prior TMD version 2.1.4 except that +10, 2026, and is the same as the prior TMD version 2.1.4 except that post-2022 weights are extrapolated using a CBO returns projection (rather than using a CBO population projection as in prior versions). See [PR diff --git a/setup.py b/setup.py index e27fbfc7..44d7547f 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="tmd", - version="2.1.4", + version="2.2.0", packages=find_packages(), python_requires=">=3.12,<3.15", install_requires=[ diff --git a/tests/test_state_weight_results.py b/tests/test_state_weight_results.py index e90f6d20..1215ff64 100644 --- a/tests/test_state_weight_results.py +++ b/tests/test_state_weight_results.py @@ -15,7 +15,6 @@ # pylint: disable=redefined-outer-name # pytest fixture pattern import io -from pathlib import Path import numpy as np import pandas as pd @@ -31,6 +30,7 @@ ) from tmd.areas.prepare.constants import ALL_STATES from tmd.imputation_assumptions import TAXYEAR +from tmd.storage import STORAGE_FOLDER, TMD_VARIABLES_PATH # Skip entire module if weight files haven't been generated _WEIGHT_FILES = list(STATE_WEIGHT_DIR.glob("*_tmd_weights.csv.gz")) @@ -40,10 +40,10 @@ ) # Also need cached data files for target accuracy checks -_CACHED = Path(__file__).parent.parent / "tmd" / "storage" / "output" -_HAS_CACHED = (_CACHED / "tmd.csv.gz").exists() and ( - _CACHED / "cached_c00100.npy" -).exists() +_CACHED = STORAGE_FOLDER / "output" +_HAS_CACHED = ( + TMD_VARIABLES_PATH.exists() and (_CACHED / "cached_c00100.npy").exists() +) class TestStateWeightFiles: diff --git a/tests/test_tmd_file_fingerprint.py b/tests/test_tmd_file_fingerprint.py index 1b2b6fe9..3a7280fe 100644 --- a/tests/test_tmd_file_fingerprint.py +++ b/tests/test_tmd_file_fingerprint.py @@ -45,10 +45,10 @@ import pytest import taxcalc -from tmd.storage import STORAGE_FOLDER +from tmd.storage import TMD_VARIABLES_PATH from tmd.imputation_assumptions import TAXYEAR -TMD_FILE = STORAGE_FOLDER / "output" / "tmd.csv.gz" +TMD_FILE = TMD_VARIABLES_PATH FINGERPRINT_DIR = Path(__file__).parent / "fingerprints" FINGERPRINT_PATH = FINGERPRINT_DIR / "tmd_file_fingerprint.json" diff --git a/tmd/areas/batch_weights.py b/tmd/areas/batch_weights.py index e9dd7802..2365c121 100644 --- a/tmd/areas/batch_weights.py +++ b/tmd/areas/batch_weights.py @@ -308,16 +308,21 @@ def _time_of_newest_other_dependency(): invalidate cached area-weight files. """ from tmd.areas import AREAS_FOLDER - from tmd.storage import STORAGE_FOLDER + from tmd.storage import ( + STORAGE_FOLDER, + TMD_VARIABLES_PATH, + TMD_WEIGHTS_PATH, + TMD_GROWFACTORS_PATH, + ) from tmd.imputation_assumptions import POPULATION_FILE, RETURNS_FILE from tmd.utils import weight_growth deps = [ AREAS_FOLDER / "create_area_weights.py", Path(weight_growth.__file__), - STORAGE_FOLDER / "output" / "tmd.csv.gz", - STORAGE_FOLDER / "output" / "tmd_weights.csv.gz", - STORAGE_FOLDER / "output" / "tmd_growfactors.csv", + TMD_VARIABLES_PATH, + TMD_WEIGHTS_PATH, + TMD_GROWFACTORS_PATH, STORAGE_FOLDER / "input" / POPULATION_FILE, ] if RETURNS_FILE: diff --git a/tmd/areas/create_area_weights.py b/tmd/areas/create_area_weights.py index aafabf26..20127262 100644 --- a/tmd/areas/create_area_weights.py +++ b/tmd/areas/create_area_weights.py @@ -59,12 +59,12 @@ from tmd.areas import AREAS_FOLDER from tmd.imputation_assumptions import TAXYEAR -from tmd.storage import STORAGE_FOLDER +from tmd.storage import STORAGE_FOLDER, TMD_VARIABLES_PATH from tmd.utils.weight_growth import cumulative_growth FIRST_YEAR = TAXYEAR LAST_YEAR = 2034 -INFILE_PATH = STORAGE_FOLDER / "output" / "tmd.csv.gz" +INFILE_PATH = TMD_VARIABLES_PATH TAXCALC_AGI_CACHE = STORAGE_FOLDER / "output" / "cached_c00100.npy" CACHED_ALLVARS_PATH = STORAGE_FOLDER / "output" / "cached_allvars.csv" diff --git a/tmd/areas/quality_report.py b/tmd/areas/quality_report.py index 95b42312..91cd5634 100644 --- a/tmd/areas/quality_report.py +++ b/tmd/areas/quality_report.py @@ -789,9 +789,9 @@ def _load_report_data(areas, weight_dir): Returns (tmd, s006, state_weights, n_loaded) or None if no weight files found. """ - from tmd.storage import STORAGE_FOLDER + from tmd.storage import STORAGE_FOLDER, TMD_VARIABLES_PATH - tmd_path = STORAGE_FOLDER / "output" / "tmd.csv.gz" + tmd_path = TMD_VARIABLES_PATH tmd_cols = [ "RECID", "s006", diff --git a/tmd/areas/solve_weights.py b/tmd/areas/solve_weights.py index 03de4575..8a332a58 100644 --- a/tmd/areas/solve_weights.py +++ b/tmd/areas/solve_weights.py @@ -215,10 +215,10 @@ def _compute_exhaustion(weight_dir): Returns (exhaustion_array, state_weights_dict). """ - from tmd.storage import STORAGE_FOLDER + from tmd.storage import TMD_VARIABLES_PATH s006 = pd.read_csv( - STORAGE_FOLDER / "output" / "tmd.csv.gz", + TMD_VARIABLES_PATH, usecols=["s006"], )["s006"].values n = len(s006) @@ -251,14 +251,14 @@ def _write_exhaustion_caps( Returns list of affected area codes. """ - from tmd.storage import STORAGE_FOLDER + from tmd.storage import TMD_VARIABLES_PATH s006 = pd.read_csv( - STORAGE_FOLDER / "output" / "tmd.csv.gz", + TMD_VARIABLES_PATH, usecols=["s006"], )["s006"].values nat_pop = pd.read_csv( - STORAGE_FOLDER / "output" / "tmd.csv.gz", + TMD_VARIABLES_PATH, usecols=["s006", "XTOT"], ) nat_pop = (nat_pop["s006"] * nat_pop["XTOT"]).sum() diff --git a/tmd/create_raw_growth_factors.py b/tmd/create_raw_growth_factors.py index cdcd37a8..75936638 100644 --- a/tmd/create_raw_growth_factors.py +++ b/tmd/create_raw_growth_factors.py @@ -3,7 +3,7 @@ """ import pandas as pd -from tmd.storage import STORAGE_FOLDER +from tmd.storage import STORAGE_FOLDER, POLICY_GROWFACTORS_PATH from tmd.imputation_assumptions import TAXYEAR INPUT_FILE = { @@ -11,7 +11,7 @@ 2022: "taxdata26_growfactors.csv", } INFILE = STORAGE_FOLDER / "input" / INPUT_FILE[TAXYEAR] -OUTFILE = STORAGE_FOLDER / "output" / "growfactors.csv" +OUTFILE = POLICY_GROWFACTORS_PATH def create_raw_factors_file(): diff --git a/tmd/create_taxcalc_cached_files.py b/tmd/create_taxcalc_cached_files.py index abf24391..33dda859 100644 --- a/tmd/create_taxcalc_cached_files.py +++ b/tmd/create_taxcalc_cached_files.py @@ -9,12 +9,15 @@ STORAGE_FOLDER, CACHED_TAXCALC_VARIABLES, POLICY_GROWFACTORS_PATH, + TMD_VARIABLES_PATH, + TMD_WEIGHTS_PATH, + TMD_GROWFACTORS_PATH, ) from tmd.imputation_assumptions import TAXYEAR, SOI_IITAX_SPEC -INFILE_PATH = STORAGE_FOLDER / "output" / "tmd.csv.gz" -WTFILE_PATH = STORAGE_FOLDER / "output" / "tmd_weights.csv.gz" -GFFILE_PATH = STORAGE_FOLDER / "output" / "tmd_growfactors.csv" +INFILE_PATH = TMD_VARIABLES_PATH +WTFILE_PATH = TMD_WEIGHTS_PATH +GFFILE_PATH = TMD_GROWFACTORS_PATH def create_cached_files(): diff --git a/tmd/create_taxcalc_growth_factors.py b/tmd/create_taxcalc_growth_factors.py index 25a9a91a..2af2d749 100644 --- a/tmd/create_taxcalc_growth_factors.py +++ b/tmd/create_taxcalc_growth_factors.py @@ -5,7 +5,7 @@ import pandas as pd import numpy as np -from tmd.storage import STORAGE_FOLDER +from tmd.storage import POLICY_GROWFACTORS_PATH, TMD_GROWFACTORS_PATH from tmd.imputation_assumptions import TAXYEAR FIRST_YEAR = TAXYEAR @@ -19,8 +19,8 @@ ASOCSEC_INDEX = 14 AUCOMP_INDEX = 15 -INFILE = STORAGE_FOLDER / "output" / "growfactors.csv" -OUTFILE = STORAGE_FOLDER / "output" / "tmd_growfactors.csv" +INFILE = POLICY_GROWFACTORS_PATH +OUTFILE = TMD_GROWFACTORS_PATH def create_factors_file(): diff --git a/tmd/create_taxcalc_imputed_variables.py b/tmd/create_taxcalc_imputed_variables.py index e99db1aa..4e9509b0 100644 --- a/tmd/create_taxcalc_imputed_variables.py +++ b/tmd/create_taxcalc_imputed_variables.py @@ -21,10 +21,14 @@ ALI_convert_zero_prob, ALI_scale, ) -from tmd.storage import STORAGE_FOLDER +from tmd.storage import ( + STORAGE_FOLDER, + TMD_VARIABLES_PATH, + TMD_GROWFACTORS_PATH, +) from tmd.utils.mice import MICE -TMD_PATH = STORAGE_FOLDER / "output" / "tmd.csv.gz" +TMD_PATH = TMD_VARIABLES_PATH TMD_YEAR = TAXYEAR SIPP_PATH = STORAGE_FOLDER / "input" / "SIPP24" / "pu2024.csv.gz" SIPP_YEAR = 2023 # 2024 SIPP data contain calandar year 2023 information @@ -36,7 +40,6 @@ "fmli241.csv.gz", ] CEX_YEAR = 2023 -TMD_GROWFACTORS_PATH = STORAGE_FOLDER / "output" / "tmd_growfactors.csv" def growfactor(name: str, year1: int, year2: int) -> float: diff --git a/tmd/create_taxcalc_input_variables.py b/tmd/create_taxcalc_input_variables.py index f65e8916..b6c736ad 100644 --- a/tmd/create_taxcalc_input_variables.py +++ b/tmd/create_taxcalc_input_variables.py @@ -13,7 +13,7 @@ W2_WAGES_RATIO, CPS_WEIGHTS_SCALE, ) -from tmd.storage import STORAGE_FOLDER +from tmd.storage import STORAGE_FOLDER, TMD_VARIABLES_PATH DUMP_ALL_UNROUNDED_VARIABLES = False @@ -59,7 +59,7 @@ def create_variable_file(write_file=True): vdf[var] = vdf[f"{var}p"] + vdf[f"{var}s"] # write input-variables-only dataframe to CSV-formatted file if write_file: - fname = STORAGE_FOLDER / "output" / "tmd.csv.gz" + fname = TMD_VARIABLES_PATH print(f"Writing PUF+CPS file... [{fname}]") vdf.to_csv(fname, index=False, float_format="%.5f") diff --git a/tmd/create_taxcalc_sampling_weights.py b/tmd/create_taxcalc_sampling_weights.py index 4df1375f..6c01ce6c 100644 --- a/tmd/create_taxcalc_sampling_weights.py +++ b/tmd/create_taxcalc_sampling_weights.py @@ -5,14 +5,14 @@ """ import pandas as pd -from tmd.storage import STORAGE_FOLDER +from tmd.storage import TMD_VARIABLES_PATH, TMD_WEIGHTS_PATH from tmd.imputation_assumptions import TAXYEAR from tmd.utils.weight_growth import cumulative_growth FIRST_YEAR = TAXYEAR LAST_YEAR = TAXYEAR + 53 -VARFILE = STORAGE_FOLDER / "output" / "tmd.csv.gz" -WGTFILE = STORAGE_FOLDER / "output" / "tmd_weights.csv.gz" +VARFILE = TMD_VARIABLES_PATH +WGTFILE = TMD_WEIGHTS_PATH def create_weights_file():