ltc-code 0.2.30__tar.gz → 0.2.31__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 (81) hide show
  1. {ltc_code-0.2.30 → ltc_code-0.2.31}/PKG-INFO +1 -1
  2. {ltc_code-0.2.30 → ltc_code-0.2.31}/pyproject.toml +1 -1
  3. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/build_nsc_outcomes_new.py +27 -4
  4. {ltc_code-0.2.30 → ltc_code-0.2.31}/README.md +0 -0
  5. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/aspire.py +0 -0
  6. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/check_cmo_apps.do +0 -0
  7. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/christel_house.py +0 -0
  8. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/democracy_prep.py +0 -0
  9. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/green_dot.py +0 -0
  10. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/helpers.py +0 -0
  11. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/ilt.py +0 -0
  12. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/kipp_nj.py +0 -0
  13. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/main.py +0 -0
  14. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/mappings.py +0 -0
  15. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/rocketship.py +0 -0
  16. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260614_new_build_scripts_update/yes_prep.py +0 -0
  17. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/aspire.py +0 -0
  18. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/christel_house.py +0 -0
  19. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/democracy_prep.py +0 -0
  20. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/green_dot.py +0 -0
  21. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/ilt.py +0 -0
  22. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/kipp.py +0 -0
  23. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/kipp_nj.py +0 -0
  24. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/rocketship.py +0 -0
  25. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260630_census_disclosure/yes_prep.py +0 -0
  26. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/BALANCE.do +0 -0
  27. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/FS.do +0 -0
  28. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/ITT.do +0 -0
  29. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/TOT.do +0 -0
  30. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/apps_helpers.py +0 -0
  31. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/harmony.py +0 -0
  32. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260706_ceprscripts/main.py +0 -0
  33. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260712_uncommon_scripts/main.py +0 -0
  34. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260712_uncommon_scripts/mappings.py +0 -0
  35. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/20260712_uncommon_scripts/uncommon.py +0 -0
  36. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/__init__.py +0 -0
  37. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/aspire.py +0 -0
  38. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/check_cmo_apps.do +0 -0
  39. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/christel_house.py +0 -0
  40. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/green_dot.py +0 -0
  41. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/helpers.py +0 -0
  42. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/june13.py +0 -0
  43. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/june2.py +0 -0
  44. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/june30.py +0 -0
  45. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/june5.py +0 -0
  46. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/june7.py +0 -0
  47. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/kipp_nj.py +0 -0
  48. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/kipp_tx.py +0 -0
  49. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/main.py +0 -0
  50. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/make_summary_stats_table.py +0 -0
  51. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/mappings.py +0 -0
  52. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/may27.py +0 -0
  53. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/NEW_CROSSWALK.md +0 -0
  54. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/OUTCOMES.md +0 -0
  55. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/__init__.py +0 -0
  56. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/build_nsc_outcomes.py +0 -0
  57. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/dhs_stem/dhs_stem_cip_additions_2024.csv +0 -0
  58. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/dhs_stem/extract_dhs_stem_cips.R +0 -0
  59. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/dhs_stem/stemList2024.pdf +0 -0
  60. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/naics.csv +0 -0
  61. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/naics.py +0 -0
  62. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/naics_raw.xlsx +0 -0
  63. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/CREDENTIAL_LEVEL_LOOKUP_TABLE.xlsx +0 -0
  64. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/IPEDS_IC_2013.csv +0 -0
  65. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/IPEDS_IC_manual.xlsx +0 -0
  66. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/NSC_SCHOOL_CODE_TO_IPEDS_UNIT_ID_XWALK_APR-2023.xlsx +0 -0
  67. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/chetty/mrc_table11.dta +0 -0
  68. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/chetty/mrc_table2.dta +0 -0
  69. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/college_crosswalk.xls +0 -0
  70. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/directory.dta +0 -0
  71. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/raw/ipeds_data.dta +0 -0
  72. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/nsc/run_nsc_outcomes.py +0 -0
  73. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/plot_bars.py +0 -0
  74. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/polars_dates.py +0 -0
  75. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/rocketship.py +0 -0
  76. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/schema_mapping.py +0 -0
  77. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/school_name_xwalk/__init__.py +0 -0
  78. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/school_name_xwalk/all_schools_with_ccd.csv +0 -0
  79. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/school_name_xwalk/merge_school_ccd.py +0 -0
  80. {ltc_code-0.2.30 → ltc_code-0.2.31}/src/ltc_code/signal_var_calcs.py +0 -0
  81. {ltc_code-0.2.30 → ltc_code-0.2.31}/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.30
3
+ Version: 0.2.31
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.30"
3
+ version = "0.2.31"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -1293,11 +1293,34 @@ for column in enrollment_outcomes.columns:
1293
1293
  .alias(column)
1294
1294
  )
1295
1295
 
1296
- # First post-high-school institution is useful for auditing the match. Sarah's
1297
- # final Stata sort keeps the highest ID_FSC when enrollment start dates tie.
1296
+ # Use exactly the status and window-overlap rules for att_any_byY4. A spell
1297
+ # starting before July 1 can count if it continues into the attendance window.
1298
+ qualifying_enroll = enroll.with_columns(
1299
+ pl.date(pl.col("cohort_18"), 7, 1).alias("_window_start"),
1300
+ pl.date(pl.col("cohort_18") + 4, 6, 30).alias("_window_end"),
1301
+ ).filter(
1302
+ (pl.col("_term_att") == 1)
1303
+ & (pl.col("term_end_date") >= pl.col("_window_start"))
1304
+ )
1305
+
1306
+ # Before excluding late starts, count students whose first observed qualifying
1307
+ # enrollment is after Y4. Denominator: observed qualifying enrollees with a
1308
+ # fully observable Y4 window; not all applicants or an eventual-enrollment rate.
1309
+ first_enrollment_timing = qualifying_enroll.group_by("sid_cepr").agg(
1310
+ pl.col("term_start_date").min().alias("first_start"),
1311
+ pl.col("_window_end").first().alias("y4_end"),
1312
+ ).filter(pl.col("y4_end") <= NSC_CUTOFF_DATE)
1313
+
1314
+ print("FIRST QUALIFYING ENROLLMENT AFTER Y4", first_enrollment_timing.select(
1315
+ pl.len().alias("observed_enrollees_with_Y4_followup"),
1316
+ (pl.col("first_start") > pl.col("y4_end")).sum().alias("first_after_Y4"),
1317
+ (100 * (pl.col("first_start") > pl.col("y4_end")).mean()).alias("percent_after_Y4"),
1318
+ ))
1319
+
1320
+ # Select the earliest qualifying spell overlapping the by-Y4 window. Preserve
1321
+ # Sarah's tie-break: highest ID_FSC when enrollment start dates are equal.
1298
1322
  first_institution = (
1299
- enroll.with_columns(pl.date(pl.col("cohort_18"), 7, 1).alias("_hs_grad_start"))
1300
- .filter(pl.col("term_start_date") >= pl.col("_hs_grad_start"))
1323
+ qualifying_enroll.filter(pl.col("term_start_date") <= pl.col("_window_end"))
1301
1324
  .sort(["sid_cepr", "term_start_date", "ID_FSC"], descending=[False, False, True])
1302
1325
  .group_by("sid_cepr", maintain_order=True)
1303
1326
  .agg(
File without changes