From 0fb24fbb1e3a04cf296d6fec5916e648fa40a1ed Mon Sep 17 00:00:00 2001 From: wcole Date: Tue, 1 Sep 2026 17:10:09 -0600 Subject: [PATCH 1/4] Remove deprecated copy=False terms. --- reeds/input_processing/recf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/input_processing/recf.py b/reeds/input_processing/recf.py index 0d0fdbdaa..e1c768fcf 100644 --- a/reeds/input_processing/recf.py +++ b/reeds/input_processing/recf.py @@ -420,7 +420,7 @@ def main(reeds_path, inputs_case): recf = pd.concat( [df_windons, df_windofs, df_upv, df_distpv] + [df_pvb[pvb_type] for pvb_type in df_pvb], - sort=False, axis=1, copy=False) + sort=False, axis=1) ### Downselect RECF data to resource adequacy and weather years recf = recf.loc[recf.index.year.isin(resource_adequacy_years)] @@ -444,7 +444,7 @@ def main(reeds_path, inputs_case): # Sorting profiles of resources to match the order of the rows in resources resources = resources.sort_values(['resource','area']) - recf = recf.reindex(labels=resources['resource'].drop_duplicates(), axis=1, copy=False) + recf = recf.reindex(labels=resources['resource'].drop_duplicates(), axis=1) ### Scale up distpv by 1/(1-distloss) recf.loc[ From 098fb363557c37384cc45ad4dad0b677b8c8efae Mon Sep 17 00:00:00 2001 From: wcole Date: Tue, 1 Sep 2026 17:13:51 -0600 Subject: [PATCH 2/4] Log warnings as warnings rather than errors. --- reeds/log.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reeds/log.py b/reeds/log.py index ea9a9130a..053511500 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -39,6 +39,10 @@ def flush(self): datefmt="%Y-%m-%d %H:%M:%S", handlers=[logging.FileHandler(logpath, mode='a'), sh, eh], ) + ### Route warnings.warn() through the logging system at WARNING level. + ### Without this they reach the sys.stderr redirect below and get logged as ERROR. + logging.captureWarnings(True) + log = logging.getLogger(__name__) sys.stdout = StreamToLogger(log, logging.INFO) sys.stderr = StreamToLogger(log, logging.ERROR) From fe9951f75b20ce5b7061715c305af8ad6ce45cc7 Mon Sep 17 00:00:00 2001 From: wcole Date: Tue, 1 Sep 2026 17:19:11 -0600 Subject: [PATCH 3/4] Remove traceback.format_exc(), which causes a second printing of each error --- hourlize/reeds_to_rev.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hourlize/reeds_to_rev.py b/hourlize/reeds_to_rev.py index 455d5a306..4f5c0b1c4 100644 --- a/hourlize/reeds_to_rev.py +++ b/hourlize/reeds_to_rev.py @@ -2163,7 +2163,7 @@ def run( save_outputs(df_sc_out, out_dir_path, tech, reduced_only) except Exception as e: # pylint: disable=broad-exception-caught - print(f"***Error for {rev_row.tech}...\n{traceback.format_exc()}") + print(f"***Error for {rev_row.tech}...") raise e print("Completed reeds_to_rev!") From 17054ae5cafa39763529b4f41a77cbe2157080fa Mon Sep 17 00:00:00 2001 From: wcole Date: Tue, 1 Sep 2026 17:33:12 -0600 Subject: [PATCH 4/4] Replace calls that no longer return proper values with Pandas 3. --- hourlize/reeds_to_rev.py | 2 +- postprocessing/retail_rate_module/ferc_distadmin.py | 4 ++-- .../retail_rate_module/retail_rate_calculations.py | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hourlize/reeds_to_rev.py b/hourlize/reeds_to_rev.py index 4f5c0b1c4..62e41eb61 100644 --- a/hourlize/reeds_to_rev.py +++ b/hourlize/reeds_to_rev.py @@ -650,7 +650,7 @@ def get_retirements_of_preexisting(df_cap_exog, years): ) df_ret_exist = df_cap_exog.copy() df_ret_exist["MW"] = df_ret_exist.groupby(["tech", "region"])["MW"].diff() - df_ret_exist["MW"].fillna(0, inplace=True) + df_ret_exist["MW"] = df_ret_exist["MW"].fillna(0) df_ret_exist["MW"] = df_ret_exist["MW"] * -1 else: df_ret_exist = pd.DataFrame() diff --git a/postprocessing/retail_rate_module/ferc_distadmin.py b/postprocessing/retail_rate_module/ferc_distadmin.py index e1018cd31..a4221d66c 100644 --- a/postprocessing/retail_rate_module/ferc_distadmin.py +++ b/postprocessing/retail_rate_module/ferc_distadmin.py @@ -380,7 +380,7 @@ def get_ferc_costs( (dfall.t == 1993) | (dfall.state.isin(['AK','HI'])) ].index).reset_index(drop=True) ### Assign DC to MD (since that's how ReEDS treats it) - dfall.state.replace({'DC':'MD'}, inplace=True) + dfall['state'] = dfall['state'].replace({'DC':'MD'}) ### Fill missing states dfall.state = dfall.apply(lambda row: missingstates.get(row['Utility Name'],row.state), axis=1) ### Add a column for region @@ -446,7 +446,7 @@ def get_ferc_costs( df_extrapolate_dim['t'] = df_extrapolate_dim['index'] + df_loop['t'].max() + 1 df_extrapolate_dim['index'] = numprojyears - df_extrapolate_dim['index'] - df_extrapolate_dim['index'][df_extrapolate_dim['index'].values < 0] = 0 + df_extrapolate_dim.loc[df_extrapolate_dim['index'] < 0, 'index'] = 0 # List the years of historical data used for extrapolation slopeyears = np.array(df_loop['t'].tail(numslopeyears)) diff --git a/postprocessing/retail_rate_module/retail_rate_calculations.py b/postprocessing/retail_rate_module/retail_rate_calculations.py index d944b36a5..3e4e45f36 100644 --- a/postprocessing/retail_rate_module/retail_rate_calculations.py +++ b/postprocessing/retail_rate_module/retail_rate_calculations.py @@ -876,13 +876,13 @@ def main(run_dir, inputpath='inputs.csv', write=True, verbose=0): on=['i', 't'], how='left') # Fill in any missing eval_period with the default 20 years # This should apply to upgrades only - df_gen_capex['eval_period'].fillna(20, inplace=True) + df_gen_capex['eval_period'] = df_gen_capex['eval_period'].fillna(20) df_gen_capex = df_gen_capex.merge( depreciation_sch[['i', 't', 'depreciation_sch']], on=['i', 't'], how='left') # Fill in any missing eval_period with the default 20 years # This should also apply to upgrades only - df_gen_capex['depreciation_sch'].fillna('20', inplace=True) + df_gen_capex['depreciation_sch'] = df_gen_capex['depreciation_sch'].fillna('20') #%% # For historical capital expenditures, we use a pre-calculated result. # The expenditures are based on a EIA-NEMS database of historical capacity @@ -919,11 +919,11 @@ def main(run_dir, inputpath='inputs.csv', write=True, verbose=0): eval_period_init[['i', 'region', 't', 'eval_period']], on=['i', 'region', 't'], how='left') # Fill in any missing eval_period with the default 20 years - df_gen_capex_init['eval_period'].fillna(20, inplace=True) + df_gen_capex_init['eval_period'] = df_gen_capex_init['eval_period'].fillna(20) df_gen_capex_init = df_gen_capex_init.merge( dep_sch_init[['i', 'region', 't', 'depreciation_sch']], on=['i', 'region', 't'], how='left') - df_gen_capex_init['depreciation_sch'].fillna('20', inplace=True) + df_gen_capex_init['depreciation_sch'] = df_gen_capex_init['depreciation_sch'].fillna('20') #%% # Combine both new and historical capital expenditures df_gen_capex = pd.concat(