ltc-code 0.2.21__tar.gz → 0.2.23__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 (79) hide show
  1. {ltc_code-0.2.21 → ltc_code-0.2.23}/PKG-INFO +1 -1
  2. {ltc_code-0.2.21 → ltc_code-0.2.23}/pyproject.toml +1 -1
  3. ltc_code-0.2.23/pyproject.toml.orig +19 -0
  4. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/build_nsc_outcomes.py +61 -0
  5. ltc_code-0.2.21/src/ltc_code/.DS_Store +0 -0
  6. ltc_code-0.2.21/src/ltc_code/nsc/.DS_Store +0 -0
  7. ltc_code-0.2.21/src/ltc_code/nsc/naics.csv +0 -25
  8. ltc_code-0.2.21/src/ltc_code/nsc/naics_raw.xlsx +0 -0
  9. ltc_code-0.2.21/src/ltc_code/nsc/raw/.DS_Store +0 -0
  10. ltc_code-0.2.21/src/ltc_code/nsc/raw/CREDENTIAL_LEVEL_LOOKUP_TABLE.xlsx +0 -0
  11. ltc_code-0.2.21/src/ltc_code/nsc/raw/IPEDS_IC_2013.csv +0 -7647
  12. ltc_code-0.2.21/src/ltc_code/nsc/raw/IPEDS_IC_manual.xlsx +0 -0
  13. ltc_code-0.2.21/src/ltc_code/nsc/raw/chetty/mrc_table11.dta +0 -0
  14. ltc_code-0.2.21/src/ltc_code/nsc/raw/chetty/mrc_table2.dta +0 -0
  15. ltc_code-0.2.21/src/ltc_code/nsc/raw/college_crosswalk.xls +0 -0
  16. ltc_code-0.2.21/src/ltc_code/nsc/raw/directory.dta +0 -0
  17. {ltc_code-0.2.21 → ltc_code-0.2.23}/README.md +0 -0
  18. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/aspire.py +0 -0
  19. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/check_cmo_apps.do +0 -0
  20. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/christel_house.py +0 -0
  21. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/democracy_prep.py +0 -0
  22. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/green_dot.py +0 -0
  23. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/helpers.py +0 -0
  24. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/ilt.py +0 -0
  25. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/kipp_nj.py +0 -0
  26. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/main.py +0 -0
  27. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/mappings.py +0 -0
  28. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/rocketship.py +0 -0
  29. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260614_new_build_scripts_update/yes_prep.py +0 -0
  30. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/aspire.py +0 -0
  31. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/christel_house.py +0 -0
  32. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/democracy_prep.py +0 -0
  33. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/green_dot.py +0 -0
  34. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/ilt.py +0 -0
  35. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/kipp.py +0 -0
  36. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/kipp_nj.py +0 -0
  37. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/rocketship.py +0 -0
  38. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260630_census_disclosure/yes_prep.py +0 -0
  39. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/BALANCE.do +0 -0
  40. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/FS.do +0 -0
  41. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/ITT.do +0 -0
  42. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/TOT.do +0 -0
  43. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/apps_helpers.py +0 -0
  44. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/harmony.py +0 -0
  45. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260706_ceprscripts/main.py +0 -0
  46. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260712_uncommon_scripts/main.py +0 -0
  47. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260712_uncommon_scripts/mappings.py +0 -0
  48. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/20260712_uncommon_scripts/uncommon.py +0 -0
  49. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/__init__.py +0 -0
  50. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/aspire.py +0 -0
  51. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/check_cmo_apps.do +0 -0
  52. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/christel_house.py +0 -0
  53. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/green_dot.py +0 -0
  54. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/helpers.py +0 -0
  55. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/june13.py +0 -0
  56. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/june2.py +0 -0
  57. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/june30.py +0 -0
  58. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/june5.py +0 -0
  59. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/june7.py +0 -0
  60. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/kipp_nj.py +0 -0
  61. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/kipp_tx.py +0 -0
  62. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/main.py +0 -0
  63. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/make_summary_stats_table.py +0 -0
  64. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/mappings.py +0 -0
  65. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/may27.py +0 -0
  66. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/__init__.py +0 -0
  67. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/input/.gitkeep +0 -0
  68. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/naics.py +0 -0
  69. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/output/.gitkeep +0 -0
  70. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/raw/ipeds_data.dta +0 -0
  71. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/nsc/run_nsc_outcomes.py +0 -0
  72. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/polars_dates.py +0 -0
  73. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/rocketship.py +0 -0
  74. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/schema_mapping.py +0 -0
  75. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/school_name_xwalk/__init__.py +0 -0
  76. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/school_name_xwalk/all_schools_with_ccd.csv +0 -0
  77. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/school_name_xwalk/merge_school_ccd.py +0 -0
  78. {ltc_code-0.2.21 → ltc_code-0.2.23}/src/ltc_code/signal_var_calcs.py +0 -0
  79. {ltc_code-0.2.21 → ltc_code-0.2.23}/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.21
3
+ Version: 0.2.23
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.21"
3
+ version = "0.2.23"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -0,0 +1,19 @@
1
+ [project]
2
+ name = "ltc-code"
3
+ version = "0.2.23"
4
+ description = "Add your description here"
5
+ readme = "README.md"
6
+ requires-python = ">=3.9"
7
+ dependencies = [
8
+ "fastexcel>=0.16,<0.20",
9
+ "polars>=1.36.1,<1.42",
10
+ "polars-readstat>=0.20.2",
11
+ ]
12
+
13
+ [project.scripts]
14
+ ltc-code = "ltc_code:main"
15
+ ltc-summary-stats = "ltc_code.make_summary_stats_table:main"
16
+
17
+ [build-system]
18
+ requires = ["uv_build>=0.11.16,<0.12.0"]
19
+ build-backend = "uv_build"
@@ -86,6 +86,8 @@ NSC_CUTOFF_DATE = date(2026, 12, 31)
86
86
  RANDOM_SEED = 3852804
87
87
  STEM_CIP_FAMILIES = {11, 14, 15, 26, 27, 40, 41}
88
88
  COLLEGE_TYPES = ["any", "4yr", "2yr", "elite"]
89
+ AGE_ATTENDANCE_TYPES = ["any", "4yr", "2yr"]
90
+ AGE_ATTENDANCE_RANGE = range(18, 27)
89
91
 
90
92
 
91
93
  ###########################################################
@@ -1020,6 +1022,40 @@ for year in range(1, N_YEARS_OUT + 1):
1020
1022
  )
1021
1023
  )
1022
1024
 
1025
+ # Build calendar-year attendance indicators for each age. These use birth year
1026
+ # plus age, rather than the July-to-June school-year windows above.
1027
+ for age in AGE_ATTENDANCE_RANGE:
1028
+ bounded = enroll.with_columns(
1029
+ (pl.col("cohort_lottery") + age).alias("_age_window_year")
1030
+ ).with_columns(
1031
+ pl.date(pl.col("_age_window_year"), 1, 1).alias("_age_window_start"),
1032
+ pl.date(pl.col("_age_window_year"), 12, 31).alias("_age_window_end"),
1033
+ ).with_columns(
1034
+ (
1035
+ (pl.col("term_start_date") <= pl.col("_age_window_end"))
1036
+ & (pl.col("term_end_date") >= pl.col("_age_window_start"))
1037
+ & (pl.col("_term_att") == 1)
1038
+ )
1039
+ .cast(pl.Int8)
1040
+ .alias("_overlaps")
1041
+ )
1042
+
1043
+ enrollment_pieces.append(
1044
+ bounded.group_by("sid_cepr").agg(
1045
+ [
1046
+ (
1047
+ pl.col("_overlaps")
1048
+ * pl.col(f"college_{college_type}")
1049
+ .fill_null(0)
1050
+ .cast(pl.Int8)
1051
+ )
1052
+ .max()
1053
+ .alias(f"att_{college_type}_{age}")
1054
+ for college_type in AGE_ATTENDANCE_TYPES
1055
+ ]
1056
+ )
1057
+ )
1058
+
1023
1059
  enrollment_outcomes = enrollment_pieces[0]
1024
1060
  for piece in enrollment_pieces[1:]:
1025
1061
  enrollment_outcomes = enrollment_outcomes.join(
@@ -1585,6 +1621,27 @@ for year in range(1, N_YEARS_OUT + 1):
1585
1621
  ]
1586
1622
  )
1587
1623
 
1624
+ for age in AGE_ATTENDANCE_RANGE:
1625
+ age_start = pl.date(pl.col("cohort_lottery") + age, 1, 1)
1626
+ age_columns = [
1627
+ column
1628
+ for column in nsc_outcomes.columns
1629
+ if column.startswith("att_") and column.endswith(f"_{age}")
1630
+ ]
1631
+
1632
+ nsc_outcomes = nsc_outcomes.with_columns(
1633
+ [
1634
+ pl.when(age_start > NSC_CUTOFF_DATE)
1635
+ .then(None)
1636
+ .when(pl.col(column).is_null())
1637
+ .then(0)
1638
+ .otherwise(pl.col(column))
1639
+ .cast(pl.Int8)
1640
+ .alias(column)
1641
+ for column in age_columns
1642
+ ]
1643
+ )
1644
+
1588
1645
 
1589
1646
  # Sarah removes the raw school-specific rate for students who were not observed
1590
1647
  # attending by Y2 before creating cmp_rate.
@@ -1684,6 +1741,10 @@ outcome_columns = [
1684
1741
  "att_2yr_byY2", "att_2yr_byY3", "att_2yr_byY4",
1685
1742
  "att_elite_byY2", "att_elite_byY3", "att_elite_byY4", "att_elite_byY5", "att_elite_byY6",
1686
1743
 
1744
+ *[f"att_any_{age}" for age in AGE_ATTENDANCE_RANGE],
1745
+ *[f"att_4yr_{age}" for age in AGE_ATTENDANCE_RANGE],
1746
+ *[f"att_2yr_{age}" for age in AGE_ATTENDANCE_RANGE],
1747
+
1687
1748
  "cmp_any_byY4", "cmp_any_byY5", "cmp_any_byY6", "cmp_any_byY7", "cmp_any_byY8",
1688
1749
  "cmp_AA_byY4", "cmp_AA_byY5", "cmp_AA_byY6", "cmp_AA_byY7", "cmp_AA_byY8",
1689
1750
  "cmp_BA_byY4", "cmp_BA_byY5", "cmp_BA_byY6", "cmp_BA_byY7", "cmp_BA_byY8",
Binary file
Binary file
@@ -1,25 +0,0 @@
1
- naics_code,sector
2
- 11,"Agriculture, Forestry, Fishing and Hunting"
3
- 21,"Mining, Quarrying, and Oil and Gas Extraction"
4
- 22,Utilities
5
- 23,Construction
6
- 31,Manufacturing
7
- 32,Manufacturing
8
- 33,Manufacturing
9
- 42,Wholesale Trade
10
- 44,Retail Trade
11
- 45,Retail Trade
12
- 48,Transportation and Warehousing
13
- 49,Transportation and Warehousing
14
- 51,Information
15
- 52,Finance and Insurance
16
- 53,Real Estate and Rental and Leasing
17
- 54,"Professional, Scientific, and Technical Services"
18
- 55,Management of Companies and Enterprises
19
- 56,Administrative and Support and Waste Management and Remediation Services
20
- 61,Educational Services
21
- 62,Health Care and Social Assistance
22
- 71,"Arts, Entertainment, and Recreation"
23
- 72,Accommodation and Food Services
24
- 81,Other Services (except Public Administration)
25
- 92,Public Administration