Skip to content

Commit bf9eb55

Browse files
committed
Update use of integer keys in .transport.demand
- Replace usage of genno.KeySeq with Key indexing.
1 parent 8dd0465 commit bf9eb55

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

message_ix_models/model/transport/demand.py

+17-18
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import genno
77
import numpy as np
88
import pandas as pd
9-
from dask.core import literal
10-
from genno import Computer, KeySeq
9+
from genno import Key, literal
1110
from message_ix import make_df
1211

1312
from message_ix_models.report.key import GDP
1413
from message_ix_models.util import broadcast
1514

15+
from . import factor
1616
from .key import (
1717
cg,
1818
cost,
@@ -36,6 +36,7 @@
3636
)
3737

3838
if TYPE_CHECKING:
39+
from genno import Computer
3940
from genno.types import AnyQuantity
4041

4142
from .config import Config
@@ -136,15 +137,15 @@ def dummy(
136137
# Mode shares
137138
((ms, "logit", cost, sw, "lambda:", y), dict(dim="t")),
138139
# Total PDT (n, t, y), with modes for the 't' dimension
139-
(pdt_nyt + "0", "mul", pdt_ny, ms),
140+
(pdt_nyt[0], "mul", pdt_ny, ms),
140141
# Scenario-specific adjustment factors
141142
("pdt factor:n-y-t", "factor_pdt", n, y, t_modes, "config"),
142143
# Only the LDV values
143144
(
144145
("ldv pdt factor:n-y", "select", "pdt factor:n-y-t"),
145146
dict(indexers=dict(t="LDV"), drop=True),
146147
),
147-
(pdt_nyt, "mul", pdt_nyt + "0", "pdt factor:n-y-t"),
148+
(pdt_nyt, "mul", pdt_nyt[0], "pdt factor:n-y-t"),
148149
# Per capita (for validation)
149150
(pdt_nyt + "capita+post", "div", pdt_nyt, pop),
150151
# LDV PDT only (n, y)
@@ -163,18 +164,18 @@ def dummy(
163164
# LDV PDT shared out by consumer group (cg, n, y)
164165
(ldv_nycg, "mul", ldv_ny + "total", cg),
165166
# Select only non-LDV PDT
166-
((pdt_nyt + "1", "select", pdt_nyt), dict(indexers=dict(t=["LDV"]), inverse=True)),
167+
((pdt_nyt[1], "select", pdt_nyt), dict(indexers=dict(t=["LDV"]), inverse=True)),
167168
# Relabel PDT
168169
(
169-
(pdt_cny + "0", "relabel2", pdt_nyt + "1"),
170+
(pdt_cny[0], "relabel2", pdt_nyt[1]),
170171
dict(new_dims={"c": "transport pax {t.lower()}"}),
171172
),
172-
(pdt_cny, "convert_units", pdt_cny + "0", "Gp km / a"),
173+
(pdt_cny, "convert_units", pdt_cny[0], "Gp km / a"),
173174
# Convert to ixmp format
174175
(("demand::P+ixmp", "as_message_df", pdt_cny), _DEMAND_KW),
175176
# Relabel ldv pdt:n-y-cg
176-
((ldv_cny + "0", "relabel2", ldv_nycg), dict(new_dims={"c": "transport pax {cg}"})),
177-
(ldv_cny, "convert_units", ldv_cny + "0", "Gp km / a"),
177+
((ldv_cny[0], "relabel2", ldv_nycg), dict(new_dims={"c": "transport pax {cg}"})),
178+
(ldv_cny, "convert_units", ldv_cny[0], "Gp km / a"),
178179
(("demand::LDV+ixmp", "as_message_df", ldv_cny), _DEMAND_KW),
179180
# Dummy demands, if these are configured
180181
("demand::dummy+ixmp", dummy, "c::transport", "nodes::ex world", y, "config"),
@@ -189,7 +190,7 @@ def dummy(
189190
]
190191

191192

192-
def pdt_per_capita(c: Computer) -> None:
193+
def pdt_per_capita(c: "Computer") -> None:
193194
"""Set up calculation of :data:`~.key.pdt_cap`.
194195
195196
Per Schäfer et al. (2009) Figure 2.5: linear interpolation between log GDP PPP per
@@ -202,12 +203,12 @@ def pdt_per_capita(c: Computer) -> None:
202203
between projected, log GDP in each future period and the log GDP in the reference
203204
year.
204205
"""
205-
gdp = KeySeq(GDP)
206-
pdt = KeySeq("_pdt:n-y")
206+
gdp = Key(GDP)
207+
pdt = Key("_pdt:n-y")
207208

208209
# GDP expressed in PPP. In the SSP(2024) input files, this conversion is already
209210
# applied, so no need to multiply by a mer_to_ppp factor here → simple alias.
210-
c.add(gdp["PPP"], gdp.base)
211+
c.add(gdp["PPP"], gdp)
211212

212213
# GDP PPP per capita
213214
c.add(gdp["capita"], "div", gdp["PPP"], pop)
@@ -229,7 +230,7 @@ def _delta(qty: "AnyQuantity", y0: int) -> "AnyQuantity":
229230
# Same transformation for both quantities
230231
for x, reference_values in ((gdp, gdp["capita"]), (pdt, pdt["ref"])):
231232
# Retrieve value from configuration
232-
k = KeySeq(f"{x.name}::fixed")
233+
k = Key(x.name, (), "fixed")
233234
c.add(k[0], "quantity_from_config", "config", name=f"fixed_{x.name.strip('_')}")
234235
# Broadcast on `n` dimension
235236
c.add(k[1] * "n", "mul", k[0], "n:n:ex world")
@@ -286,15 +287,13 @@ def _delta(qty: "AnyQuantity", y0: int) -> "AnyQuantity":
286287
c.add(gdp_cap + "adj", gdp[6])
287288

288289

289-
def prepare_computer(c: Computer) -> None:
290+
def prepare_computer(c: "Computer") -> None:
290291
"""Prepare `c` to calculate and add transport demand data.
291292
292293
See also
293294
--------
294295
TASKS
295296
"""
296-
from . import factor
297-
298297
config: "Config" = c.graph["context"].transport
299298

300299
# Compute total PDT per capita
@@ -313,6 +312,6 @@ def prepare_computer(c: Computer) -> None:
313312
c.add(pdt_cap * "t", "select", exo.pdt_cap_proj, indexers=dict(scenario="LED"))
314313

315314
# Multiply by population for the total
316-
c.add(pdt_nyt + "0", "mul", pdt_cap * "t", pop)
315+
c.add(pdt_nyt[0], "mul", pdt_cap * "t", pop)
317316

318317
c.add("transport_data", __name__, key="transport demand::ixmp")

0 commit comments

Comments
 (0)