Skip to content

Commit

Permalink
Merge pull request #4 from reegis/adapt-licence-text-according-to-reuse
Browse files Browse the repository at this point in the history
Adadpt licence and provoke black
  • Loading branch information
uvchik committed Dec 12, 2019
2 parents 52f5108 + 72809e6 commit 806a18c
Show file tree
Hide file tree
Showing 23 changed files with 1,006 additions and 752 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.0.1'
__version__ = '0.1.0-rc.1'
2 changes: 1 addition & 1 deletion deflex/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.1.0-rc.1'
__version__='0.1.0-rc.1'
436 changes: 249 additions & 187 deletions deflex/basic_scenario.py

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions deflex/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
"""
Reegis config reader.
Based on Steffen (https://github.com/steffenGit)
Copyright (c) 2016-2018 Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-License-Identifier: MIT
"""
Expand Down
3 changes: 3 additions & 0 deletions deflex/deflex.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2019 Uwe Krien <krien@uni-bremen.de>
# SPDX-License-Identifier: MIT

[init]
map = de21

Expand Down
45 changes: 27 additions & 18 deletions deflex/demand.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

"""Processing a list of power plants in Germany.
Copyright (c) 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-License-Identifier: MIT
"""
Expand Down Expand Up @@ -35,50 +35,59 @@ def get_heat_profiles_deflex(deflex_geo, year, time_index=None,
-------
"""
# separate_regions = keep all demand connected to the region
separate_regions = cfg.get_list('demand_heat', 'separate_heat_regions')
# separate_regions=keep all demand connected to the region
separate_regions = cfg.get_list("demand_heat", "separate_heat_regions")

# add second fuel to first
combine_fuels = cfg.get_dict('combine_heat_fuels')
combine_fuels = cfg.get_dict("combine_heat_fuels")

# fuels to be dissolved per region
region_fuels = cfg.get_list('demand_heat', 'local_fuels')
region_fuels = cfg.get_list("demand_heat", "local_fuels")

fn = os.path.join(
cfg.get('paths', 'demand'),
'heat_profiles_{year}_{map}'.format(year=year, map=deflex_geo.name))

demand_region = demand_heat.get_heat_profiles_by_region(
deflex_geo, year, to_csv=fn, weather_year=weather_year).groupby(
level=[0, 1], axis=1).sum()
cfg.get("paths", "demand"),
"heat_profiles_{year}_{map}".format(year=year, map=deflex_geo.name),
)

demand_region = (
demand_heat.get_heat_profiles_by_region(
deflex_geo, year, to_csv=fn, weather_year=weather_year
)
.groupby(level=[0, 1], axis=1)
.sum()
)

# Decentralised demand is combined to a nation-wide demand if not part
# of region_fuels.
regions = list(set(demand_region.columns.get_level_values(0).unique()) -
set(separate_regions))
regions = list(
set(demand_region.columns.get_level_values(0).unique())
- set(separate_regions)
)

# If region_fuels is 'all' fetch all fuels to be local.
if 'all' in region_fuels:
if "all" in region_fuels:
region_fuels = demand_region.columns.get_level_values(1).unique()

for fuel in demand_region.columns.get_level_values(1).unique():
demand_region['DE_demand', fuel] = 0
demand_region["DE_demand", fuel] = 0

for region in regions:
for f1, f2 in combine_fuels.items():
demand_region[region, f1] += demand_region[region, f2]
demand_region.drop((region, f2), axis=1, inplace=True)
cols = list(set(demand_region[region].columns) - set(region_fuels))
for col in cols:
demand_region['DE_demand', col] += demand_region[region, col]
demand_region["DE_demand", col] += demand_region[region, col]
demand_region.drop((region, col), axis=1, inplace=True)

if time_index is not None:
demand_region.index = time_index

if not keep_unit:
msg = ("The unit of the source is 'TJ'. "
"Will be divided by {0} to get 'MWh'.")
msg = (
"The unit of the source is 'TJ'. "
"Will be divided by {0} to get 'MWh'."
)
converter = 0.0036
demand_region = demand_region.div(converter)
logging.debug(msg.format(converter))
Expand Down
53 changes: 30 additions & 23 deletions deflex/geometries.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""
Reegis geometry tools.
Copyright (c) 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-License-Identifier: MIT
"""
Expand Down Expand Up @@ -36,12 +36,12 @@ def deflex_regions(rmap=None, rtype='polygons'):
Examples
--------
>>> regions = deflex_regions('de17')
>>> regions=deflex_regions('de17')
>>> len(regions)
17
>>> regions.geometry.iloc[0].geom_type
'MultiPolygon'
>>> l = deflex_regions('de21', 'labels').loc['DE04', 'geometry']
>>> l=deflex_regions('de21', 'labels').loc['DE04', 'geometry']
>>> l.geom_type
'Point'
>>> l.x
Expand All @@ -55,17 +55,20 @@ def deflex_regions(rmap=None, rtype='polygons'):
['DE01', 'DE02']
"""
if rmap is None:
rmap = cfg.get('init', 'map')
name = os.path.join(cfg.get('paths', 'geo_deflex'),
cfg.get('geometry', 'deflex_polygon').format(
suffix='.geojson', map=rmap, type=rtype))
rmap = cfg.get("init", "map")
name = os.path.join(
cfg.get("paths", "geo_deflex"),
cfg.get("geometry", "deflex_polygon").format(
suffix=".geojson", map=rmap, type=rtype
),
)
regions = geo.load(fullname=name)
regions.set_index('region', inplace=True)
regions.set_index("region", inplace=True)
regions.name = rmap
return regions


def deflex_power_lines(rmap=None, rtype='lines'):
def deflex_power_lines(rmap=None, rtype="lines"):
"""
Parameters
Expand All @@ -80,7 +83,7 @@ def deflex_power_lines(rmap=None, rtype='lines'):
Examples
--------
>>> lines = deflex_power_lines('de17')
>>> lines=deflex_power_lines('de17')
>>> lines.geometry.iloc[0].geom_type
'LineString'
>>> len(lines)
Expand All @@ -92,12 +95,15 @@ def deflex_power_lines(rmap=None, rtype='lines'):
'de21'
"""
if rmap is None:
rmap = cfg.get('init', 'map')
name = os.path.join(cfg.get('paths', 'geo_deflex'),
cfg.get('geometry', 'powerlines').format(
map=rmap, type=rtype, suffix='.geojson'))
rmap = cfg.get("init", "map")
name = os.path.join(
cfg.get("paths", "geo_deflex"),
cfg.get("geometry", "powerlines").format(
map=rmap, type=rtype, suffix=".geojson"
),
)
lines = geo.load(fullname=name)
lines.set_index('name', inplace=True)
lines.set_index("name", inplace=True)
lines.name = rmap
return lines

Expand All @@ -119,25 +125,26 @@ def divide_off_and_onshore(regions):
Examples
--------
>>> reg = deflex_regions('de02')
>>> reg=deflex_regions('de02')
>>> divide_off_and_onshore(reg).onshore
['DE01']
>>> reg = deflex_regions('de21')
>>> reg=deflex_regions('de21')
>>> divide_off_and_onshore(reg).offshore
['DE19', 'DE20', 'DE21']
"""
region_type = namedtuple('RegionType', 'offshore onshore')
region_type = namedtuple("RegionType", "offshore onshore")
regions_centroid = regions.copy()
regions_centroid.geometry = regions_centroid.centroid

germany_onshore = geo.load(
cfg.get('paths', 'geometry'),
cfg.get('geometry', 'germany_polygon'))
cfg.get("paths", "geometry"), cfg.get("geometry", "germany_polygon")
)

gdf = geo.spatial_join_with_buffer(regions_centroid, germany_onshore,
'onshore', limit=0)
gdf = geo.spatial_join_with_buffer(
regions_centroid, germany_onshore, "onshore", limit=0
)

onshore = list(gdf.loc[gdf.onshore == 0].index)
offshore = list(gdf.loc[gdf.onshore == 'unknown'].index)
offshore = list(gdf.loc[gdf.onshore == "unknown"].index)

return region_type(offshore=offshore, onshore=onshore)
4 changes: 2 additions & 2 deletions deflex/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

"""Main script.
Copyright (c) 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-License-Identifier: MIT
"""
Expand All @@ -24,7 +24,7 @@

def stopwatch():
"""Track the running time."""
if not hasattr(stopwatch, 'start'):
if not hasattr(stopwatch, "start"):
stopwatch.start = datetime.now()
return str(datetime.now() - stopwatch.start)[:-7]

Expand Down
68 changes: 36 additions & 32 deletions deflex/powerplants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

"""Adapting the general reegis power plants to the deflex model.
Copyright (c) 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: 2016-2019 Uwe Krien <krien@uni-bremen.de>
SPDX-License-Identifier: MIT
"""
Expand Down Expand Up @@ -33,21 +33,23 @@ def pp_reegis2deflex(regions, name, filename_in=None, filename_out=None):
"""
if filename_out is None:
filename_out = os.path.join(
cfg.get('paths', 'powerplants'),
cfg.get('powerplants', 'deflex_pp')).format(
map=cfg.get('init', 'map'))
cfg.get("paths", "powerplants"),
cfg.get("powerplants", "deflex_pp"),
).format(map=cfg.get("init", "map"))

# Add deflex regions to powerplants
pp = powerplants.add_regions_to_powerplants(
regions, name, dump=False, filename=filename_in)
regions, name, dump=False, filename=filename_in
)

# Add federal states to powerplants
federal_states = reegis_geometries.get_federal_states_polygon()
pp = powerplants.add_regions_to_powerplants(
federal_states, 'federal_states', pp=pp, dump=False)
federal_states, "federal_states", pp=pp, dump=False
)

# store the results for further usage of deflex
pp.to_hdf(filename_out, 'pp')
pp.to_hdf(filename_out, "pp")
return filename_out


Expand All @@ -58,10 +60,10 @@ def pp_reegis2deflex(regions, name, filename_in=None, filename_out=None):
# logging.info("Removing onshore technology from offshore regions.")
# logging.info("The code is not efficient. So it may take a while.")
#
# offshore_regions = (
# offshore_regions=(
# cfg.get_dict_list('offshore_regions_set')[cfg.get('init', 'map')])
#
# coast_regions = {'de02': {'MV': 'DE01',
# coast_regions={'de02': {'MV': 'DE01',
# 'SH': 'DE01',
# 'NI': 'DE01 '},
# 'de17': {'MV': 'DE13',
Expand All @@ -74,41 +76,41 @@ def pp_reegis2deflex(regions, name, filename_in=None, filename_out=None):
# 'SH': 'DE13',
# 'NI': 'DE14'}}
# try:
# dc = coast_regions[cfg.get('init', 'map')]
# dc=coast_regions[cfg.get('init', 'map')]
# except KeyError:
# raise ValueError('Coast regions not defined for {0} model.'.format(
# cfg.get('init', 'map')))
#
# region_column = '{0}_region'.format(cfg.get('init', 'map'))
# region_column='{0}_region'.format(cfg.get('init', 'map'))
#
# for ttype in ['Solar', 'Bioenergy', 'Wind']:
# for region in offshore_regions:
# logging.debug("Clean {1} from {0}.".format(region, ttype))
#
# c1 = df['energy_source_level_2'] == ttype
# c2 = df[region_column] == region
# c1=df['energy_source_level_2'] == ttype
# c2=df[region_column] == region
#
# condition = c1 & c2
# condition=c1 & c2
#
# if ttype == 'Wind':
# condition = c1 & c2 & (df['technology'] == 'Onshore')
# condition=c1 & c2 & (df['technology'] == 'Onshore')
#
# for i, v in df.loc[condition].iterrows():
# df.loc[i, region_column] = (
# df.loc[i, region_column]=(
# dc[df.loc[i, 'federal_states']])
# return df


def process_pp_table(pp):
# # Remove powerplants outside Germany
# for state in cfg.get_list('powerplants', 'remove_states'):
# pp = pp.loc[pp.state != state]
# pp=pp.loc[pp.state != state]
#
# if clean_offshore:
# pp = remove_onshore_technology_from_offshore_regions(pp)
# pp=remove_onshore_technology_from_offshore_regions(pp)
# Remove PHES (storages)
if cfg.get('powerplants', 'remove_phes'):
pp = pp.loc[pp.technology != 'Pumped storage']
if cfg.get("powerplants", "remove_phes"):
pp = pp.loc[pp.technology != "Pumped storage"]
return pp


Expand All @@ -128,20 +130,20 @@ def get_deflex_pp_by_year(regions, year, name, overwrite_capacity=False):
-------
"""
filename = os.path.join(cfg.get('paths', 'powerplants'),
cfg.get('powerplants', 'deflex_pp')).format(
map=name)
filename = os.path.join(
cfg.get("paths", "powerplants"), cfg.get("powerplants", "deflex_pp")
).format(map=name)
logging.info("Get deflex power plants for {0}.".format(year))
if not os.path.isfile(filename):
msg = "File '{0}' does not exist. Will create it from reegis file."
logging.debug(msg.format(filename))
filename = pp_reegis2deflex(regions, name)
pp = pd.DataFrame(pd.read_hdf(filename, 'pp', mode='r'))
pp = pd.DataFrame(pd.read_hdf(filename, "pp", mode="r"))

# Remove unwanted data sets
pp = process_pp_table(pp)

filter_columns = ['capacity_{0}', 'capacity_in_{0}']
filter_columns = ["capacity_{0}", "capacity_in_{0}"]

# Get all powerplants for the given year.
# If com_month exist the power plants will be considered month-wise.
Expand All @@ -151,15 +153,17 @@ def get_deflex_pp_by_year(regions, year, name, overwrite_capacity=False):
for fcol in filter_columns:
filter_column = fcol.format(year)
orig_column = fcol[:-4]
c1 = (pp['com_year'] < year) & (pp['decom_year'] > year)
c1 = (pp["com_year"] < year) & (pp["decom_year"] > year)
pp.loc[c1, filter_column] = pp.loc[c1, orig_column]

c2 = pp['com_year'] == year
pp.loc[c2, filter_column] = (pp.loc[c2, orig_column] *
(12 - pp.loc[c2, 'com_month']) / 12)
c3 = pp['decom_year'] == year
pp.loc[c3, filter_column] = (pp.loc[c3, orig_column] *
pp.loc[c3, 'com_month'] / 12)
c2 = pp["com_year"] == year
pp.loc[c2, filter_column] = (
pp.loc[c2, orig_column] * (12 - pp.loc[c2, "com_month"]) / 12
)
c3 = pp["decom_year"] == year
pp.loc[c3, filter_column] = (
pp.loc[c3, orig_column] * pp.loc[c3, "com_month"] / 12
)

if overwrite_capacity:
pp[orig_column] = 0
Expand Down
Loading

0 comments on commit 806a18c

Please sign in to comment.