From c8071a28879540c1da9efde1e916fbfe6bf94b95 Mon Sep 17 00:00:00 2001 From: Brioch Date: Wed, 17 Jun 2020 11:34:52 +1200 Subject: [PATCH] Dropping underscore in auto setup par and obs names --- autotest/pst_from_tests.py | 34 ++++++++++++++++++---------------- pyemu/prototypes/pst_from.py | 12 ++++++------ pyemu/pst/pst_utils.py | 10 +++++++--- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/autotest/pst_from_tests.py b/autotest/pst_from_tests.py index fb01bad71..230ba9747 100644 --- a/autotest/pst_from_tests.py +++ b/autotest/pst_from_tests.py @@ -116,12 +116,13 @@ def freyberg_test(): use_cols=sfr_use, prefix='sfr', ofile_skip=4, ofile_sep=' ', use_rows=np.arange(0, 50)) # check obs set up - sfrobs = pf.obs_dfs[-1] - sfrobs[['col'] + sfr_idx] = sfrobs.obsnme.apply( - lambda x: pd.Series([s.split(':')[1] for s in x.split('_') if ':' in s])) + sfrobs = pf.obs_dfs[-1].copy() + sfrobs[['usecol'] + sfr_idx] = sfrobs.obsnme.apply( + lambda x: pd.Series( + dict([s.split(':') for s in x.split('_') if ':' in s]))) sfrobs.loc[:, sfr_idx] = sfrobs.loc[:, sfr_idx].astype(int) sfrobs_p = sfrobs.pivot_table(index=sfr_idx, - columns=['col'], values='obsval') + columns=['usecol'], values='obsval') sfodf_c = sfodf.set_index(sfr_idx).sort_index() sfodf_c.columns = sfodf_c.columns.str.lower() assert (sfrobs_p == sfodf_c.loc[sfrobs_p.index, @@ -150,12 +151,13 @@ def freyberg_test(): ofile_sep=',', obsgp=['qaquifer', 'qout', "width"], use_rows=np.arange(50, 101)) # check obs set up - sfrobs = pf.obs_dfs[-1] - sfrobs[['col'] + sfr_idx] = sfrobs.obsnme.apply( - lambda x: pd.Series([s.split(':')[1] for s in x.split('_') if ':' in s])) + sfrobs = pf.obs_dfs[-1].copy() + sfrobs[['usecol'] + sfr_idx] = sfrobs.obsnme.apply( + lambda x: pd.Series( + dict([s.split(':') for s in x.split('_') if ':' in s]))) sfrobs.loc[:, sfr_idx] = sfrobs.loc[:, sfr_idx].astype(int) sfrobs_p = sfrobs.pivot_table(index=sfr_idx, - columns=['col'], values='obsval') + columns=['usecol'], values='obsval') sfodf_c = sfodf.set_index(sfr_idx).sort_index() sfodf_c.columns = sfodf_c.columns.str.lower() assert (sfrobs_p == sfodf_c.loc[sfrobs_p.index, @@ -709,7 +711,7 @@ def mf6_freyberg_test(): pars.loc[sfr_pars, 'parval1'] = np.random.random(len(sfr_pars)) * 10 sfr_pars = pars.loc[sfr_pars].copy() - sfr_pars[['inst', 'col', '#rno']] = sfr_pars.parnme.apply( + sfr_pars[['inst', 'usecol', '#rno']] = sfr_pars.parnme.apply( lambda x: pd.DataFrame([s.split(':') for s in x.split('_') if ':' in s]).set_index(0)[1]) sfr_pars['#rno'] = sfr_pars['#rno'] .astype(int) @@ -1067,7 +1069,7 @@ def mf6_freyberg_da_test(): if ib[i,j] < 1: f.write(" -1.0e+30 ") else: - pname = "hds_use_col:trgw_{0}_{1}_{2}_time:31.0".format(k,i,j) + pname = "hds_usecol:trgw_{0}_{1}_{2}_time:31.0".format(k,i,j) if pname not in hobs_set and ib[i,j] > 0: print(k,i,j,pname,ib[i,j]) f.write(" ~ {0} ~".format(pname)) @@ -1295,9 +1297,9 @@ def mf6_freyberg_direct_test(): raise Exception("recharge too diff") if __name__ == "__main__": - #freyberg_test() - #freyberg_prior_build_test() - #mf6_freyberg_test() - #mf6_freyberg_shortnames_test() - #mf6_freyberg_da_test() - mf6_freyberg_direct_test() \ No newline at end of file + freyberg_test() + freyberg_prior_build_test() + mf6_freyberg_test() + mf6_freyberg_shortnames_test() + mf6_freyberg_da_test() + mf6_freyberg_direct_test() diff --git a/pyemu/prototypes/pst_from.py b/pyemu/prototypes/pst_from.py index 24b44d8b3..05faf7026 100644 --- a/pyemu/prototypes/pst_from.py +++ b/pyemu/prototypes/pst_from.py @@ -1878,7 +1878,7 @@ def _write_direct_df_tpl(in_filename, tpl_filename,df,name,index_cols,typ,use_co if typ == "constant": # one par for entire use_col column if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}_{2}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}_{2}".format( nname, use_col, "direct") if suffix != '': df_ti.loc[:, use_col] += "_{0}".format(suffix) @@ -1893,7 +1893,7 @@ def _write_direct_df_tpl(in_filename, tpl_filename,df,name,index_cols,typ,use_co elif typ == "zone": # one par for each zone if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}_{2}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}_{2}".format( nname, use_col, "direct") if zone_array is not None: df_ti.loc[:, use_col] += df_ti.zval.apply( @@ -1912,7 +1912,7 @@ def _write_direct_df_tpl(in_filename, tpl_filename,df,name,index_cols,typ,use_co elif typ == "grid": # one par for each index if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}_{2}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}_{2}".format( nname, use_col, "direct") if zone_array is not None: df_ti.loc[:, use_col] += df_ti.zval.apply( @@ -2075,7 +2075,7 @@ def _get_tpl_or_ins_df(filenames, dfs, name, index_cols, typ, use_cols=None, if typ == "constant": # one par for entire use_col column if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}".format( nname, use_col) if suffix != '': df_ti.loc[:, use_col] += "_{0}".format(suffix) @@ -2087,7 +2087,7 @@ def _get_tpl_or_ins_df(filenames, dfs, name, index_cols, typ, use_cols=None, elif typ == "zone": # one par for each zone if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}".format( nname, use_col) if zone_array is not None: df_ti.loc[:, use_col] += df_ti.zval.apply( @@ -2102,7 +2102,7 @@ def _get_tpl_or_ins_df(filenames, dfs, name, index_cols, typ, use_cols=None, elif typ == "grid": # one par for each index if longnames: - df_ti.loc[:, use_col] = "{0}_use_col:{1}".format( + df_ti.loc[:, use_col] = "{0}_usecol:{1}".format( nname, use_col) if zone_array is not None: df_ti.loc[:, use_col] += df_ti.zval.apply( diff --git a/pyemu/pst/pst_utils.py b/pyemu/pst/pst_utils.py index caff44d46..d77e3575a 100644 --- a/pyemu/pst/pst_utils.py +++ b/pyemu/pst/pst_utils.py @@ -861,12 +861,16 @@ def csv_to_ins_file(csv_filename,ins_filename=None,only_cols=None,only_rows=None if c_count < len(only_clabels): # if we haven't yet set up all obs if rlabel in only_rlabels and clabel in only_clabels: # define obs names + if not isinstance(prefix, str): + nprefix = prefix[c_count] + else: + nprefix = prefix if longnames: - nname = "{0}_use_col:{1}".format(prefix, clabel) + nname = "{0}_usecol:{1}".format(nprefix, clabel) oname = "{0}_{1}".format(nname, rlabel) else: - nname = prefix+clabel - oname = prefix+rlabel+"_"+clabel + nname = nprefix+clabel + oname = nprefix+rlabel+"_"+clabel onames.append(oname) # append list of obs ovals.append(df.iloc[i, j]) # store current obs val # defin group name