ltc-code 0.2.28__tar.gz → 0.2.29__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {ltc_code-0.2.28 → ltc_code-0.2.29}/PKG-INFO +1 -1
  2. {ltc_code-0.2.28 → ltc_code-0.2.29}/pyproject.toml +5 -1
  3. ltc_code-0.2.29/src/ltc_code/nsc/NEW_CROSSWALK.md +24 -0
  4. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/build_nsc_outcomes.py +8 -2
  5. ltc_code-0.2.29/src/ltc_code/nsc/build_nsc_outcomes_new.py +2162 -0
  6. ltc_code-0.2.29/src/ltc_code/nsc/naics.csv +25 -0
  7. ltc_code-0.2.29/src/ltc_code/nsc/naics_raw.xlsx +0 -0
  8. ltc_code-0.2.29/src/ltc_code/nsc/raw/CREDENTIAL_LEVEL_LOOKUP_TABLE.xlsx +0 -0
  9. ltc_code-0.2.29/src/ltc_code/nsc/raw/IPEDS_IC_2013.csv +7647 -0
  10. ltc_code-0.2.29/src/ltc_code/nsc/raw/IPEDS_IC_manual.xlsx +0 -0
  11. ltc_code-0.2.29/src/ltc_code/nsc/raw/NSC_SCHOOL_CODE_TO_IPEDS_UNIT_ID_XWALK_APR-2023.xlsx +0 -0
  12. ltc_code-0.2.29/src/ltc_code/nsc/raw/chetty/mrc_table11.dta +0 -0
  13. ltc_code-0.2.29/src/ltc_code/nsc/raw/chetty/mrc_table2.dta +0 -0
  14. ltc_code-0.2.29/src/ltc_code/nsc/raw/college_crosswalk.xls +0 -0
  15. ltc_code-0.2.29/src/ltc_code/nsc/raw/directory.dta +0 -0
  16. ltc_code-0.2.28/pyproject.toml.orig +0 -19
  17. ltc_code-0.2.28/src/ltc_code/nsc/input/.gitkeep +0 -0
  18. ltc_code-0.2.28/src/ltc_code/nsc/output/.gitkeep +0 -0
  19. {ltc_code-0.2.28 → ltc_code-0.2.29}/README.md +0 -0
  20. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/aspire.py +0 -0
  21. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/check_cmo_apps.do +0 -0
  22. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/christel_house.py +0 -0
  23. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/democracy_prep.py +0 -0
  24. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/green_dot.py +0 -0
  25. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/helpers.py +0 -0
  26. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/ilt.py +0 -0
  27. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/kipp_nj.py +0 -0
  28. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/main.py +0 -0
  29. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/mappings.py +0 -0
  30. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/rocketship.py +0 -0
  31. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260614_new_build_scripts_update/yes_prep.py +0 -0
  32. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/aspire.py +0 -0
  33. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/christel_house.py +0 -0
  34. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/democracy_prep.py +0 -0
  35. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/green_dot.py +0 -0
  36. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/ilt.py +0 -0
  37. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/kipp.py +0 -0
  38. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/kipp_nj.py +0 -0
  39. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/rocketship.py +0 -0
  40. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260630_census_disclosure/yes_prep.py +0 -0
  41. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/BALANCE.do +0 -0
  42. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/FS.do +0 -0
  43. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/ITT.do +0 -0
  44. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/TOT.do +0 -0
  45. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/apps_helpers.py +0 -0
  46. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/harmony.py +0 -0
  47. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260706_ceprscripts/main.py +0 -0
  48. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260712_uncommon_scripts/main.py +0 -0
  49. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260712_uncommon_scripts/mappings.py +0 -0
  50. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/20260712_uncommon_scripts/uncommon.py +0 -0
  51. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/__init__.py +0 -0
  52. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/aspire.py +0 -0
  53. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/check_cmo_apps.do +0 -0
  54. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/christel_house.py +0 -0
  55. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/green_dot.py +0 -0
  56. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/helpers.py +0 -0
  57. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/june13.py +0 -0
  58. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/june2.py +0 -0
  59. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/june30.py +0 -0
  60. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/june5.py +0 -0
  61. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/june7.py +0 -0
  62. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/kipp_nj.py +0 -0
  63. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/kipp_tx.py +0 -0
  64. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/main.py +0 -0
  65. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/make_summary_stats_table.py +0 -0
  66. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/mappings.py +0 -0
  67. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/may27.py +0 -0
  68. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/__init__.py +0 -0
  69. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/dhs_stem/dhs_stem_cip_additions_2024.csv +0 -0
  70. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/dhs_stem/extract_dhs_stem_cips.R +0 -0
  71. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/dhs_stem/stemList2024.pdf +0 -0
  72. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/naics.py +0 -0
  73. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/raw/ipeds_data.dta +0 -0
  74. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/nsc/run_nsc_outcomes.py +0 -0
  75. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/plot_bars.py +0 -0
  76. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/polars_dates.py +0 -0
  77. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/rocketship.py +0 -0
  78. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/schema_mapping.py +0 -0
  79. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/school_name_xwalk/__init__.py +0 -0
  80. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/school_name_xwalk/all_schools_with_ccd.csv +0 -0
  81. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/school_name_xwalk/merge_school_ccd.py +0 -0
  82. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/signal_var_calcs.py +0 -0
  83. {ltc_code-0.2.28 → ltc_code-0.2.29}/src/ltc_code/yes_prep.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ltc-code
3
- Version: 0.2.28
3
+ Version: 0.2.29
4
4
  Summary: Add your description here
5
5
  Requires-Dist: fastexcel>=0.16,<0.20
6
6
  Requires-Dist: polars>=1.36.1,<1.42
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ltc-code"
3
- version = "0.2.28"
3
+ version = "0.2.29"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -17,3 +17,7 @@ ltc-summary-stats = "ltc_code.make_summary_stats_table:main"
17
17
  [build-system]
18
18
  requires = ["uv_build>=0.11.16,<0.12.0"]
19
19
  build-backend = "uv_build"
20
+
21
+ [tool.uv.build-backend]
22
+ source-exclude = ["**/.DS_Store", "**/__pycache__/**", "**/*.pyc", "src/ltc_code/nsc/input/**", "src/ltc_code/nsc/output/**"]
23
+ wheel-exclude = ["**/.DS_Store", "**/__pycache__/**", "**/*.pyc", "ltc_code/nsc/input/**", "ltc_code/nsc/output/**"]
@@ -0,0 +1,24 @@
1
+ # New NSC crosswalk build
2
+
3
+ Run the new variant explicitly with `python -m ltc_code.nsc.build_nsc_outcomes_new` after providing the student input files. The original build remains available. The new variant writes to `nsc/output/new_crosswalk/` to keep its outputs separate.
4
+
5
+ The official April 2023 NSC crosswalk is primary. Append mapped legacy codes only when their full lookup key is absent from the official file. Do not fill the 108 present-but-blank official keys using Sarah's mappings. Existing 18 sole-rate candidate choices and 24 Calhoun branch assignments are explicit and documented in the code. Preserve full branch codes and deterministic legacy selection.
6
+
7
+ Institution type uses IPEDS 2013, then the latest nonmissing directory classification, then three inline exceptions formerly loaded from the manual spreadsheet. Less-than-two-year labels are parsed before broader two-year labels. Treat Missing/not reported as null before choosing the latest directory record. The existing two-year-or-less outcome grouping is retained. The 5–8 tier bucket lookup counts Nevada State once despite its tier 5/7 aliases.
8
+
9
+ All student outcome formulas, eligibility windows, completion-rate imputation, and the existing within-bucket coarse-rate exercise remain unchanged. The change affects their institutional inputs. No annual enrollment-year classification is introduced.
10
+
11
+ Expected counts with the audited files: 24,166 keys; 21,315 with UNITID; 21,204 matching a UNITID in the 2013/directory files (99.479%); 7,867 matched institutions with no missing type. Distinct institution types: 3,329 four-year, 2,440 two-year, 2,098 less-than-two-year. These are reference-table counts, not secure-sample match rates or completeness of completion rates.
12
+
13
+ Required files in `nsc/raw/`:
14
+ - NSC_SCHOOL_CODE_TO_IPEDS_UNIT_ID_XWALK_APR-2023.xlsx (official workbook, NSC_to_IPEDS_UNIT_ID sheet)
15
+ - college_crosswalk.xls (legacy fallback)
16
+ - IPEDS_IC_2013.csv
17
+ - directory.dta
18
+ - CREDENTIAL_LEVEL_LOOKUP_TABLE.xlsx
19
+ - ipeds_data.dta
20
+ - chetty/mrc_table2.dta and chetty/mrc_table11.dta
21
+
22
+ The old IPEDS_IC_manual.xlsx is not needed by this variant. Student inputs remain input/apps.csv, input/nsc_records_old.dta, and input/nsc_records_new.csv. Do not supply synthetic records for actual analysis. Institutional support files are bundled in the locally built wheel and source distribution but are Git-ignored. GitHub Actions publishes these verified distributions from release assets; it does not rebuild from a checkout that lacks the data. Student inputs are never bundled.
23
+
24
+ Institution-only audit CSVs are written alongside the outcomes, including mapping choices, appended candidates, missing UNITIDs, and missing classifications. The 99.48% matched subset is an audit denominator, not a filter that drops student records from the build.
@@ -1898,8 +1898,14 @@ nsc_outcomes = nsc_outcomes.with_columns(
1898
1898
  .alias("adj_cmp_rate_coarse_2yr"),
1899
1899
  )
1900
1900
 
1901
- # Give each IPEDS institution one tier, excluding missing crosswalk tiers.
1902
- ipeds_tiers = college_ref.select("unitid", "tier").drop_nulls().unique()
1901
+ # Only tiers 1-8 enter these four-year bucket averages. Other-tier branch
1902
+ # mappings can share a UNITID and must not duplicate the institution's cohort.
1903
+ ipeds_tiers = (
1904
+ college_ref.select("unitid", "tier")
1905
+ .drop_nulls()
1906
+ .filter(pl.col("tier").is_in(range(1, 9)))
1907
+ .unique()
1908
+ )
1903
1909
  ipeds_tier_completion = ipeds_completion_with_sector.join(
1904
1910
  ipeds_tiers, on="unitid", how="left", validate="1:1"
1905
1911
  ).filter(pl.col("college_sector") == "4yr")