@@ -156,10 +156,10 @@ def add_resource_data_to_targets(input_targets, scenario, calculate_curtailment=
156156 :param pandas.DataFrame input_targets: table includeing target names, used to
157157 summarize resource data.
158158 :param powersimdata.scenario.scenario.Scenario scenario: A Scenario instance.
159- :return: (*pandas.DataFrame*) -- DataFrame of targets including resource data.
159+ :return: (*pandas.DataFrame*) -- data frame of targets including resource data.
160160 """
161161 targets = input_targets .copy ()
162- grid = scenario .state . get_grid ()
162+ grid = scenario .get_grid ()
163163 plant = grid .plant
164164 curtailment_types = ["hydro" , "solar" , "wind" ]
165165 scenario_length = _get_scenario_length (scenario )
@@ -174,24 +174,33 @@ def add_resource_data_to_targets(input_targets, scenario, calculate_curtailment=
174174 capacity_groupby = plant .Pmax .groupby (groupby_cols )
175175 capacity_by_target_type = capacity_groupby .sum ().unstack (fill_value = 0 )
176176 # Generated energy
177- pg_groupby = scenario .state . get_pg ().sum ().groupby (groupby_cols )
177+ pg_groupby = scenario .get_pg ().sum ().groupby (groupby_cols )
178178 summed_generation = pg_groupby .sum ().unstack (fill_value = 0 )
179179 # Calculate capacity factors
180180 possible_energy = scenario_length * capacity_by_target_type [curtailment_types ]
181181 capacity_factor = summed_generation [curtailment_types ] / possible_energy
182+
182183 if calculate_curtailment :
183184 # Calculate: curtailment, no_curtailment_cap_factor
184185 # Hydro and solar are straightforward
185- hydro_plant_sum = scenario .state .get_hydro ().sum ()
186- hydro_plant_targets = plant [plant .type == "hydro" ].target_area
186+ hydro_plant_sum = scenario .get_profile ("hydro" ).sum ()
187+ hydro_plant_targets = plant [
188+ plant ["type" ].isin (
189+ grid .model_immutables .plants ["group_profile_resources" ]["hydro" ]
190+ )
191+ ]["target_area" ]
187192 hydro_potential_by_target = hydro_plant_sum .groupby (hydro_plant_targets ).sum ()
188- solar_plant_sum = scenario .state .get_solar ().sum ()
189- solar_plant_targets = plant [plant .type == "solar" ].target_area
193+ solar_plant_sum = scenario .get_profile ("solar" ).sum ()
194+ solar_plant_targets = plant [
195+ plant ["type" ].isin (
196+ grid .model_immutables .plants ["group_profile_resources" ]["solar" ]
197+ )
198+ ]["target_area" ]
190199 solar_potential_by_target = solar_plant_sum .groupby (solar_plant_targets ).sum ()
191- # Wind is a little tricker because get_wind() returns 'wind' and 'wind_offshore'
192- onshore_wind_plants = plant [plant . type == "wind" ].index
193- onshore_wind_plant_sum = scenario .state . get_wind ( ).sum ()[onshore_wind_plants ]
194- wind_plant_targets = plant [plant . type == "wind" ].target_area
200+ onshore_wind_type = grid . model_immutables . plants [ "label2type" ][ "Onshore Wind" ]
201+ onshore_wind_plants = plant [plant [ " type" ] == onshore_wind_type ].index
202+ onshore_wind_plant_sum = scenario .get_profile ( "wind" ).sum ()[onshore_wind_plants ]
203+ wind_plant_targets = plant [plant [ " type" ] == onshore_wind_type ].target_area
195204 wind_potential_by_target = onshore_wind_plant_sum .groupby (
196205 wind_plant_targets
197206 ).sum ()
@@ -234,7 +243,7 @@ def add_demand_to_targets(input_targets, scenario):
234243
235244 zonename2target = _make_zonename2target (grid , targets )
236245 zoneid2target = {grid .zone2id [z ]: target for z , target in zonename2target .items ()}
237- summed_demand = scenario .state . get_demand ().sum ().to_frame ()
246+ summed_demand = scenario .get_demand ().sum ().to_frame ()
238247 summed_demand ["target" ] = [zoneid2target [id ] for id in summed_demand .index ]
239248 targets ["demand" ] = summed_demand .groupby ("target" ).sum ()
240249 return targets
@@ -507,12 +516,19 @@ def calculate_clean_capacity_scaling(
507516 For method == 'independent', these values are specified in the targets table.
508517 :return: (*pandas.DataFrame*) -- dataframe of targets including new capacities,
509518 plus intermediate values used in calculation.
519+ :raises TypeError:
520+ if ``ref_scenario`` is not a Scenario object.
521+ if both ``targets`` and ``targets_filename`` are None or set.
522+ if ``targets`` is not a pandas.DataFrame
523+ :raises ValueError:
524+ if ``ref_scenario`` is not in the analyze state.
525+ if ``method`` is incorrectly set.
510526 """
511527 allowed_methods = {"independent" , "collaborative" }
512528 # Input validation
513529 if not isinstance (ref_scenario , Scenario ):
514530 raise TypeError ("ref_scenario must be a Scenario object" )
515- if ref_scenario .state . name != "analyze" :
531+ if ref_scenario .name != "analyze" :
516532 raise ValueError ("ref_scenario must be in Analyze state" )
517533 if method not in allowed_methods :
518534 raise ValueError (f"method must be one of: { allowed_methods } " )
@@ -521,7 +537,7 @@ def calculate_clean_capacity_scaling(
521537 if targets is not None and targets_filename is not None :
522538 raise TypeError ("targets and targets_filename cannot both be given" )
523539 if targets is not None and not isinstance (targets , pd .DataFrame ):
524- raise TypeError ("targets must be passed as a pandas.DataFrame" )
540+ raise TypeError ("targets must be a pandas.DataFrame" )
525541 if targets_filename is not None :
526542 targets = load_targets_from_csv (targets_filename )
527543
0 commit comments