Пример #1
0
def decompose_plant_data_frame_into_areas(df, areas, grid):
    """Take a plant-column data frame and decompose it into plant-column data frames
    for areas.

    :param pandas.DataFrame df: data frame, columns are plant id in grid.
    :param dict areas: areas to use for decomposition. Keys are area types
        ('*loadzone*', '*state*', or '*interconnect*'), values are
        str/list/tuple/set of areas.
    :param powersimdata.input.grid.Grid grid: Grid instance.
    :return: (*dict*) -- keys are areas, values are plant-column data frames.
    """
    _check_data_frame(df, "PG")
    plant_id = set(df.columns)
    _check_plants_are_in_grid(plant_id, grid)
    areas = _check_areas_are_in_grid_and_format(areas, grid)

    df_areas = {}
    for k, v in areas.items():
        if k == "interconnect":
            for i in v:
                name = "%s interconnect" % " - ".join(i.split("_"))
                df_areas[name] = df[get_plant_id_in_interconnects(i, grid)
                                    & plant_id]
        elif k == "state":
            for s in v:
                df_areas[s] = df[get_plant_id_in_states(s, grid) & plant_id]
        elif k == "loadzone":
            for l in v:
                df_areas[l] = df[get_plant_id_in_loadzones(l, grid) & plant_id]

    return df_areas
Пример #2
0
def test_check_plants_are_in_grid_argument_type(mock_grid):
    arg = (
        (str(mock_grid.plant.index[1]), mock_grid),
        (mock_grid.plant.index[:3], mock_grid),
        (mock_grid.plant.index[0], mock_grid.plant),
    )
    for a in arg:
        with pytest.raises(TypeError):
            _check_plants_are_in_grid(a[0], a[1])
Пример #3
0
def summarize_plant_to_location(df, grid):
    """Take a plant-column data frame and sum to a location-column data frame.

    :param pandas.DataFrame df: dataframe, columns are plant id in grid.
    :param powersimdata.input.grid.Grid grid: Grid instance.
    :return: (*pandas.DataFrame*) -- index: df index, columns: location tuples.
    """
    _check_data_frame(df, "PG")
    _check_grid_type(grid)
    _check_plants_are_in_grid(df.columns.to_list(), grid)

    all_locations = grid.plant[["lat", "lon"]]
    locations_in_df = all_locations.loc[df.columns].to_records(index=False)
    location_data = df.groupby(locations_in_df, axis=1).sum()

    return location_data
Пример #4
0
def decompose_plant_data_frame_into_resources(df, resources, grid):
    """Take a plant-column data frame and decompose it into plant-column data frames
    for each resource.

    :param pandas.DataFrame df: data frame, columns are plant id in grid.
    :param str/list/tuple/set resources: resource(s) to use for decomposition.
    :param powersimdata.input.grid.Grid grid: Grid instance.
    :return: (*dict*) -- keys are resources, values are plant-column data frames.
    """
    _check_data_frame(df, "PG")
    plant_id = set(df.columns)
    _check_plants_are_in_grid(plant_id, grid)
    resources = _check_resources_are_in_grid_and_format(resources, grid)

    df_resources = {
        r: df[get_plant_id_for_resources(r, grid) & plant_id].sort_index(axis=1)
        for r in resources
    }
    return df_resources
Пример #5
0
def summarize_plant_to_bus(df, grid, all_buses=False):
    """Take a plant-column data frame and sum to a bus-column data frame.

    :param pandas.DataFrame df: dataframe, columns are plant id in grid.
    :param powersimdata.input.grid.Grid grid: Grid instance.
    :param boolean all_buses: return all buses in grid, not just plant buses.
    :return: (*pandas.DataFrame*) -- index as df input, columns are buses.
    """
    _check_data_frame(df, "PG")
    _check_grid_type(grid)
    _check_plants_are_in_grid(df.columns.to_list(), grid)

    all_buses_in_grid = grid.plant["bus_id"]
    buses_in_df = all_buses_in_grid.loc[df.columns]
    bus_data = df.T.groupby(buses_in_df).sum().T
    if all_buses:
        bus_data = pd.DataFrame(bus_data,
                                columns=grid.bus.index,
                                index=df.index).fillna(0.0)

    return bus_data
Пример #6
0
def test_check_plants_are_in_grid(mock_grid):
    _check_plants_are_in_grid([p for p in mock_grid.plant.index[:5]], mock_grid)
    _check_plants_are_in_grid([str(p) for p in mock_grid.plant.index[:5]], mock_grid)
    _check_plants_are_in_grid(set([p for p in mock_grid.plant.index[:5]]), mock_grid)
    _check_plants_are_in_grid(tuple([p for p in mock_grid.plant.index[:5]]), mock_grid)
Пример #7
0
def test_check_plants_are_in_grid_argument_value(mock_grid):
    with pytest.raises(ValueError):
        _check_plants_are_in_grid(
            [p + 100 for p in mock_grid.plant.index[-5:]], mock_grid
        )