Source code for hynet.reduction.large_scale.utilities

"""
Utility functions for the network reduction.
"""

import pandas as pd

from hynet.types_ import hynet_id_


[docs]def add_parallel_branch_info(scenario): """ Add information about parallel branches to the scenario. This function adds/updates the following columns to the branch data frame: ``parallel``: (``bool``) ``True`` if the branch is parallel to another one and ``False`` otherwise. ``parallel_main_id``: (``hynet_id_``) Branch ID of the (arbitrarily selected) main branch among the group of parallel branches. With this information, groups of parallel branches can be determined by filtering this column w.r.t. the main branch ID. Parameters ---------- scenario : Scenario Scenario that shall be processed. """ scenario.branch['parallel'] = False scenario.branch['parallel_main_id'] = scenario.branch.index for idx_parallel in scenario.get_parallel_branches(): scenario.branch.loc[idx_parallel, 'parallel'] = True scenario.branch.loc[idx_parallel, 'parallel_main_id'] = idx_parallel[0]
[docs]def remove_parallel_branch_info(scenario): """ Remove the information about parallel branches. Parameters ---------- scenario : Scenario Scenario that shall be processed. """ if 'parallel' in scenario.branch.columns: scenario.branch.drop('parallel', axis='columns', inplace=True) if 'parallel_main_id' in scenario.branch.columns: scenario.branch.drop('parallel_main_id', axis='columns', inplace=True)
[docs]def add_adjacent_bus_info(scenario): """ Add information about adjacent buses to the scenario. This function adds/updates the following columns to the bus data frame: ``num_adjacent``: (``int``) Number of adjacent buses. ``adjacent``: (``pandas.Index[hynet_id_]``) Pandas index with the bus ID of all adjacent buses. Parameters ---------- scenario : Scenario Scenario that shall be processed. """ scenario.bus['num_adjacent'] = hynet_id_(0) scenario.bus['adjacent'] = None for bus_id in scenario.bus.index: adjacent_buses = set() adjacent_buses.update( scenario.branch.loc[scenario.branch['src'] == bus_id, 'dst']) adjacent_buses.update( scenario.branch.loc[scenario.branch['dst'] == bus_id, 'src']) scenario.bus.at[bus_id, 'num_adjacent'] = len(adjacent_buses) scenario.bus.at[bus_id, 'adjacent'] = pd.Index(adjacent_buses)
[docs]def remove_adjacent_bus_info(scenario): """ Remove the information about adjacent buses. Parameters ---------- scenario : Scenario Scenario that shall be processed. """ if 'num_adjacent' in scenario.bus.columns: scenario.bus.drop('num_adjacent', axis='columns', inplace=True) if 'adjacent' in scenario.bus.columns: scenario.bus.drop('adjacent', axis='columns', inplace=True)