Skip to content

Commit d4b4b94

Browse files
authored
Merge pull request #2962 from PolicyEngine/feat/enable-us-districts
Enable US districts
2 parents 491d102 + 1c10af2 commit d4b4b94

File tree

13 files changed

+1695
-192
lines changed

13 files changed

+1695
-192
lines changed

changelog_entry.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
- bump: patch
2+
changes:
3+
added:
4+
- US congressional district metadata
5+
changed:
6+
- US simulations use default datasets from .py
7+
- Upgraded .py version to 0.7.0

policyengine_api/constants.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,34 @@
2424
}
2525
except:
2626
COUNTRY_PACKAGE_VERSIONS = {country: "0.0.0" for country in COUNTRIES}
27+
28+
# Valid region types for each country
29+
# These define the geographic scope categories for regions
30+
US_REGION_TYPES = (
31+
"national", # National level (e.g., "us")
32+
"state", # US states (e.g., "state/ca", "state/ny")
33+
"city", # US cities (e.g., "city/nyc")
34+
"congressional_district", # US congressional districts (e.g., "congressional_district/CA-37")
35+
)
36+
37+
UK_REGION_TYPES = (
38+
"national", # National level (e.g., "uk")
39+
"country", # UK countries (e.g., "country/england", "country/scotland")
40+
"constituency", # UK parliamentary constituencies (e.g., "constituency/Aldershot")
41+
)
42+
43+
# Valid region prefixes for each country
44+
# These define the allowed geographic scope prefixes in region names
45+
REGION_PREFIXES = {
46+
"us": [
47+
"state/", # US states (e.g., "state/ca", "state/ny")
48+
"city/", # US cities (e.g., "city/nyc")
49+
"congressional_district/", # US congressional districts (e.g., "congressional_district/CA-37")
50+
],
51+
"uk": [
52+
"country/", # UK countries (e.g., "country/england", "country/scotland")
53+
"constituency/", # UK parliamentary constituencies (e.g., "constituency/Aldershot")
54+
],
55+
}
56+
2757
__version__ = VERSION

policyengine_api/country.py

Lines changed: 70 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
import math
1919
import pandas as pd
2020
from pathlib import Path
21+
from policyengine_api.data.congressional_districts import (
22+
build_congressional_district_metadata,
23+
)
2124

2225
# Note: The following policyengine_[xx] imports are probably redundant.
2326
# These modules are imported dynamically in the __init__ function below.
@@ -71,17 +74,22 @@ def build_microsimulation_options(self) -> dict:
7174
)
7275
constituency_names = pd.read_csv(constituency_names_path)
7376
region = [
74-
dict(name="uk", label="the UK"),
75-
dict(name="country/england", label="England"),
76-
dict(name="country/scotland", label="Scotland"),
77-
dict(name="country/wales", label="Wales"),
78-
dict(name="country/ni", label="Northern Ireland"),
77+
dict(name="uk", label="the UK", type="national"),
78+
dict(name="country/england", label="England", type="country"),
79+
dict(
80+
name="country/scotland", label="Scotland", type="country"
81+
),
82+
dict(name="country/wales", label="Wales", type="country"),
83+
dict(
84+
name="country/ni", label="Northern Ireland", type="country"
85+
),
7986
]
8087
for i in range(len(constituency_names)):
8188
region.append(
8289
dict(
8390
name=f"constituency/{constituency_names.iloc[i]['name']}",
8491
label=constituency_names.iloc[i]["name"],
92+
type="constituency",
8593
)
8694
)
8795
time_period = [
@@ -99,60 +107,64 @@ def build_microsimulation_options(self) -> dict:
99107
options["datasets"] = datasets
100108
elif self.country_id == "us":
101109
region = [
102-
dict(name="us", label="the US"),
103-
dict(name="al", label="Alabama"),
104-
dict(name="ak", label="Alaska"),
105-
dict(name="az", label="Arizona"),
106-
dict(name="ar", label="Arkansas"),
107-
dict(name="ca", label="California"),
108-
dict(name="co", label="Colorado"),
109-
dict(name="ct", label="Connecticut"),
110-
dict(name="de", label="Delaware"),
111-
dict(name="dc", label="District of Columbia"),
112-
dict(name="fl", label="Florida"),
113-
dict(name="ga", label="Georgia"),
114-
dict(name="hi", label="Hawaii"),
115-
dict(name="id", label="Idaho"),
116-
dict(name="il", label="Illinois"),
117-
dict(name="in", label="Indiana"),
118-
dict(name="ia", label="Iowa"),
119-
dict(name="ks", label="Kansas"),
120-
dict(name="ky", label="Kentucky"),
121-
dict(name="la", label="Louisiana"),
122-
dict(name="me", label="Maine"),
123-
dict(name="md", label="Maryland"),
124-
dict(name="ma", label="Massachusetts"),
125-
dict(name="mi", label="Michigan"),
126-
dict(name="mn", label="Minnesota"),
127-
dict(name="ms", label="Mississippi"),
128-
dict(name="mo", label="Missouri"),
129-
dict(name="mt", label="Montana"),
130-
dict(name="ne", label="Nebraska"),
131-
dict(name="nv", label="Nevada"),
132-
dict(name="nh", label="New Hampshire"),
133-
dict(name="nj", label="New Jersey"),
134-
dict(name="nm", label="New Mexico"),
135-
dict(name="ny", label="New York"),
136-
dict(name="nyc", label="New York City"), # Region, not State
137-
dict(name="nc", label="North Carolina"),
138-
dict(name="nd", label="North Dakota"),
139-
dict(name="oh", label="Ohio"),
140-
dict(name="ok", label="Oklahoma"),
141-
dict(name="or", label="Oregon"),
142-
dict(name="pa", label="Pennsylvania"),
143-
dict(name="ri", label="Rhode Island"),
144-
dict(name="sc", label="South Carolina"),
145-
dict(name="sd", label="South Dakota"),
146-
dict(name="tn", label="Tennessee"),
147-
dict(name="tx", label="Texas"),
148-
dict(name="ut", label="Utah"),
149-
dict(name="vt", label="Vermont"),
150-
dict(name="va", label="Virginia"),
151-
dict(name="wa", label="Washington"),
152-
dict(name="wv", label="West Virginia"),
153-
dict(name="wi", label="Wisconsin"),
154-
dict(name="wy", label="Wyoming"),
110+
dict(name="us", label="the US", type="national"),
111+
dict(name="state/al", label="Alabama", type="state"),
112+
dict(name="state/ak", label="Alaska", type="state"),
113+
dict(name="state/az", label="Arizona", type="state"),
114+
dict(name="state/ar", label="Arkansas", type="state"),
115+
dict(name="state/ca", label="California", type="state"),
116+
dict(name="state/co", label="Colorado", type="state"),
117+
dict(name="state/ct", label="Connecticut", type="state"),
118+
dict(name="state/de", label="Delaware", type="state"),
119+
dict(
120+
name="state/dc", label="District of Columbia", type="state"
121+
),
122+
dict(name="state/fl", label="Florida", type="state"),
123+
dict(name="state/ga", label="Georgia", type="state"),
124+
dict(name="state/hi", label="Hawaii", type="state"),
125+
dict(name="state/id", label="Idaho", type="state"),
126+
dict(name="state/il", label="Illinois", type="state"),
127+
dict(name="state/in", label="Indiana", type="state"),
128+
dict(name="state/ia", label="Iowa", type="state"),
129+
dict(name="state/ks", label="Kansas", type="state"),
130+
dict(name="state/ky", label="Kentucky", type="state"),
131+
dict(name="state/la", label="Louisiana", type="state"),
132+
dict(name="state/me", label="Maine", type="state"),
133+
dict(name="state/md", label="Maryland", type="state"),
134+
dict(name="state/ma", label="Massachusetts", type="state"),
135+
dict(name="state/mi", label="Michigan", type="state"),
136+
dict(name="state/mn", label="Minnesota", type="state"),
137+
dict(name="state/ms", label="Mississippi", type="state"),
138+
dict(name="state/mo", label="Missouri", type="state"),
139+
dict(name="state/mt", label="Montana", type="state"),
140+
dict(name="state/ne", label="Nebraska", type="state"),
141+
dict(name="state/nv", label="Nevada", type="state"),
142+
dict(name="state/nh", label="New Hampshire", type="state"),
143+
dict(name="state/nj", label="New Jersey", type="state"),
144+
dict(name="state/nm", label="New Mexico", type="state"),
145+
dict(name="state/ny", label="New York", type="state"),
146+
dict(name="city/nyc", label="New York City", type="city"),
147+
dict(name="state/nc", label="North Carolina", type="state"),
148+
dict(name="state/nd", label="North Dakota", type="state"),
149+
dict(name="state/oh", label="Ohio", type="state"),
150+
dict(name="state/ok", label="Oklahoma", type="state"),
151+
dict(name="state/or", label="Oregon", type="state"),
152+
dict(name="state/pa", label="Pennsylvania", type="state"),
153+
dict(name="state/ri", label="Rhode Island", type="state"),
154+
dict(name="state/sc", label="South Carolina", type="state"),
155+
dict(name="state/sd", label="South Dakota", type="state"),
156+
dict(name="state/tn", label="Tennessee", type="state"),
157+
dict(name="state/tx", label="Texas", type="state"),
158+
dict(name="state/ut", label="Utah", type="state"),
159+
dict(name="state/vt", label="Vermont", type="state"),
160+
dict(name="state/va", label="Virginia", type="state"),
161+
dict(name="state/wa", label="Washington", type="state"),
162+
dict(name="state/wv", label="West Virginia", type="state"),
163+
dict(name="state/wi", label="Wisconsin", type="state"),
164+
dict(name="state/wy", label="Wyoming", type="state"),
155165
]
166+
# Add all 436 congressional districts (435 voting + DC)
167+
region.extend(build_congressional_district_metadata())
156168
time_period = [
157169
dict(name=2035, label="2035"),
158170
dict(name=2034, label="2034"),

0 commit comments

Comments
 (0)