prepare_sector: automatically interpolate in config get() function

This commit is contained in:
Fabian Neumann 2024-02-20 12:34:19 +01:00
parent 4e0b69b3fa
commit 26b202f463
2 changed files with 31 additions and 4 deletions

View File

@ -7,9 +7,11 @@
Release Notes
##########################################
.. Upcoming Release
.. ================
..
Upcoming Release
================
* Linearly interpolate missing investment periods in year-dependent
configuration options.
PyPSA-Eur 0.10.0 (19th February 2024)
=====================================

View File

@ -215,7 +215,32 @@ def get(item, investment_year=None):
"""
Check whether item depends on investment year.
"""
return item[investment_year] if isinstance(item, dict) else item
if not isinstance(item, dict):
return item
elif investment_year in item.keys():
return item[investment_year]
else:
logger.warning(
f"Investment key {investment_year} not found in dictionary {item}."
)
keys = sorted(item.keys())
if investment_year < keys[0]:
logger.warning(f"Lower than minimum key. Taking minimum key {keys[0]}")
return item[keys[0]]
elif investment_year > keys[-1]:
logger.warning(f"Higher than maximum key. Taking maximum key {keys[0]}")
return item[keys[-1]]
else:
logger.warning(
"Interpolate linearly between the next lower and next higher year."
)
lower_key = max(k for k in keys if k < investment_year)
higher_key = min(k for k in keys if k > investment_year)
lower = item[lower_key]
higher = item[higher_key]
return lower + (higher - lower) * (investment_year - lower_key) / (
higher_key - lower_key
)
def co2_emissions_year(