Skip to content

Commit a496ae1

Browse files
committed
Remove filter_input function
1 parent 490014f commit a496ae1

5 files changed

Lines changed: 15 additions & 63 deletions

File tree

src/muse/agents/agent.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from __future__ import annotations
44

55
from abc import ABC, abstractmethod
6-
from collections.abc import Sequence
76
from typing import Callable
87

98
import xarray as xr
@@ -65,18 +64,15 @@ def __init__(
6564
def filter_input(
6665
self,
6766
dataset: xr.Dataset | xr.DataArray,
68-
year: Sequence[int] | int | None = None,
6967
**kwargs,
7068
) -> xr.Dataset | xr.DataArray:
7169
"""Filter inputs for usage in agent.
7270
7371
For instance, filters down to agent's region, etc.
7472
"""
75-
from muse.utilities import filter_input
76-
7773
if "region" in dataset.dims and "region" not in kwargs:
7874
kwargs["region"] = self.region
79-
return filter_input(dataset, year=year, **kwargs)
75+
return dataset.sel(**kwargs)
8076

8177
@abstractmethod
8278
def next(

src/muse/constraints.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,6 @@ def max_capacity_expansion(
311311
312312
\Gamma_t^{r, i} \geq 0
313313
"""
314-
from muse.utilities import filter_input
315-
316314
# case with technology and region in asset dimension
317315
if capacity.region.dims != ():
318316
names = [u for u in capacity.asset.coords if capacity[u].dims == ("asset",)]
@@ -335,12 +333,7 @@ def max_capacity_expansion(
335333
replacement = replacement.drop_vars(
336334
[u for u in replacement.coords if u not in replacement.dims]
337335
)
338-
techs = filter_input(
339-
technologies[
340-
["max_capacity_addition", "max_capacity_growth", "total_capacity_limit"]
341-
],
342-
technology=replacement,
343-
).drop_vars("technology")
336+
techs = technologies.sel(technology=replacement).drop_vars("technology")
344337
regions = getattr(capacity, "region", None)
345338
if regions is not None and "region" in technologies.dims:
346339
techs = techs.sel(region=regions)

src/muse/costs.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
from muse.commodities import is_enduse, is_fuel, is_material, is_pollutant
5555
from muse.quantities import production_amplitude
5656
from muse.timeslices import broadcast_timeslice, distribute_timeslice, get_level
57-
from muse.utilities import filter_input
5857

5958

6059
def cost(func):
@@ -113,7 +112,7 @@ def environmental_costs(
113112
multiplied by their prices.
114113
"""
115114
environmentals = is_pollutant(technologies.comm_usage)
116-
prices_environmental = filter_input(prices, commodity=environmentals)
115+
prices_environmental = prices.sel(commodity=environmentals)
117116
result = (production * prices_environmental).sum("commodity")
118117
assert "timeslice" in result.dims
119118
return result
@@ -129,7 +128,7 @@ def fuel_costs(
129128
multiplied by their prices.
130129
"""
131130
fuels = is_fuel(technologies.comm_usage)
132-
prices_fuel = filter_input(prices, commodity=fuels)
131+
prices_fuel = prices.sel(commodity=fuels)
133132
result = (consumption * prices_fuel).sum("commodity")
134133
assert "timeslice" in result.dims
135134
return result
@@ -145,7 +144,7 @@ def material_costs(
145144
multiplied by their prices.
146145
"""
147146
material = is_material(technologies.comm_usage)
148-
prices_material = filter_input(prices, commodity=material)
147+
prices_material = prices.sel(commodity=material)
149148
result = (consumption * prices_material).sum("commodity")
150149
assert "timeslice" in result.dims
151150
return result
@@ -292,7 +291,7 @@ def net_present_value(
292291

293292
# Revenue (annual)
294293
products = is_enduse(technologies.comm_usage)
295-
prices_non_env = filter_input(prices, commodity=products)
294+
prices_non_env = prices.sel(commodity=products)
296295
revenues = (production * prices_non_env).sum("commodity")
297296
if aggregate_timeslices:
298297
revenues = revenues.sum("timeslice")

src/muse/quantities.py

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -231,15 +231,12 @@ def maximum_production(
231231
filters and the set of technologies in `capacity`.
232232
"""
233233
from muse.commodities import is_enduse
234-
from muse.utilities import filter_input
235234

236-
capa = filter_input(
237-
capacity, **{k: v for k, v in filters.items() if k in capacity.dims}
235+
capa = capacity.sel(**{k: v for k, v in filters.items() if k in capacity.dims})
236+
ftechs = technologies.sel(
237+
**{k: v for k, v in filters.items() if k in technologies.dims}
238238
)
239239

240-
ftechs = filter_input(
241-
technologies, **{k: v for k, v in filters.items() if k in technologies.dims}
242-
)
243240
result = (
244241
broadcast_timeslice(capa, level=timeslice_level)
245242
* distribute_timeslice(ftechs.fixed_outputs, level=timeslice_level)
@@ -275,14 +272,10 @@ def capacity_in_use(
275272
Capacity-in-use for each technology, whittled down by the filters.
276273
"""
277274
from muse.commodities import is_enduse
278-
from muse.utilities import filter_input
279-
280-
prod = filter_input(
281-
production, **{k: v for k, v in filters.items() if k in production.dims}
282-
)
283275

284-
ftechs = filter_input(
285-
technologies, **{k: v for k, v in filters.items() if k in technologies.dims}
276+
prod = production.sel(**{k: v for k, v in filters.items() if k in production.dims})
277+
ftechs = technologies.sel(
278+
**{k: v for k, v in filters.items() if k in technologies.dims}
286279
)
287280

288281
factor = 1 / (ftechs.fixed_outputs * ftechs.utilization_factor)
@@ -338,17 +331,14 @@ def minimum_production(
338331
the filters and the set of technologies in `capacity`.
339332
"""
340333
from muse.commodities import is_enduse
341-
from muse.utilities import filter_input
342334

343-
capa = filter_input(
344-
capacity, **{k: v for k, v in filters.items() if k in capacity.dims}
345-
)
335+
capa = capacity.sel(**{k: v for k, v in filters.items() if k in capacity.dims})
346336

347337
if "minimum_service_factor" not in technologies:
348338
return broadcast_timeslice(xr.zeros_like(capa), level=timeslice_level)
349339

350-
ftechs = filter_input(
351-
technologies, **{k: v for k, v in filters.items() if k in technologies.dims}
340+
ftechs = technologies.sel(
341+
**{k: v for k, v in filters.items() if k in technologies.dims}
352342
)
353343
result = (
354344
broadcast_timeslice(capa, level=timeslice_level)

src/muse/utilities.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -298,35 +298,9 @@ def clean_assets(assets: xr.Dataset, year: int):
298298

299299
def filter_input(
300300
dataset: xr.Dataset | xr.DataArray,
301-
year: int | Iterable[int] | None = None,
302301
**kwargs,
303302
) -> xr.Dataset | xr.DataArray:
304303
"""Filter inputs, selecting data for the specified year."""
305-
if year is None:
306-
setyear: set[int] = set()
307-
else:
308-
try:
309-
setyear = {int(year)} # type: ignore
310-
except TypeError:
311-
setyear = set(int(u) for u in year) # type: ignore
312-
withyear = (
313-
"year" in dataset.dims
314-
and year is not None
315-
and setyear.issubset(dataset.year.values)
316-
)
317-
if withyear:
318-
kwargs["year"] = year
319-
year = None
320-
dataset = dataset.sel(**kwargs)
321-
if withyear and "year" not in dataset.dims and "year" in dataset.coords:
322-
dataset = dataset.drop_vars("year")
323-
324-
if "year" in dataset.dims and year is not None:
325-
dataset = dataset.interp(year=year)
326-
if "year" not in dataset.dims and "year" in dataset.coords:
327-
dataset = dataset.drop_vars("year")
328-
elif "year" in dataset.dims:
329-
dataset = dataset.ffill("year")
330304
return dataset
331305

332306

0 commit comments

Comments
 (0)