def plot_id_bar_test(): import pyemu import matplotlib.pyplot as plt w_dir = "la" ev = pyemu.ErrVar(jco=os.path.join(w_dir, "pest.jcb")) id_df = ev.get_identifiability_dataframe(singular_value=15) pyemu.plot_utils.plot_id_bar(id_df)
def predvar1b_test(): out_files = [os.path.join(verf_dir,f) for f in os.listdir(verf_dir) if f.endswith(".out") and "ident" not in f] pv1b_results = {} for out_file in out_files: pred_name = os.path.split(out_file)[-1].split('.')[0] f = open(out_file,'r') for _ in range(3): f.readline() arr = np.loadtxt(f) pv1b_results[pred_name] = arr pst = pyemu.Pst(ord_base+".pst") omitted_parameters = [pname for pname in pst.parameter_data.parnme if pname.startswith("wf")] la_ord_errvar = pyemu.ErrVar(jco=ord_base+".jco", predictions=predictions, omitted_parameters=omitted_parameters, verbose=False) df = la_ord_errvar.get_errvar_dataframe(np.arange(36)) max_idx = 13 idx = np.arange(max_idx) for ipred,pred in enumerate(predictions): arr = pv1b_results[pred][:max_idx,:] first = df[("first", pred)][:max_idx] second = df[("second", pred)][:max_idx] third = df[("third", pred)][:max_idx] first_diff = (np.abs(arr[:,1] - first)).sum() second_diff = (np.abs(arr[:,2] - second)).sum() third_diff = (np.abs(arr[:,3] - third)).sum() print(pred,first_diff,second_diff,third_diff) assert first_diff < 1.5 assert second_diff < 1.5 assert third_diff < 1.5
def pnulpar_test(): import os import pyemu ev = pyemu.ErrVar(jco=os.path.join("mc","freyberg_ord.jco")) ev.get_null_proj(maxsing=1).to_ascii("ev_new_proj.mat") pst = ev.pst par_dir = os.path.join("mc","prior_par_draws") par_files = [os.path.join(par_dir,f) for f in os.listdir(par_dir) if f.endswith('.par')] pe = pyemu.ParameterEnsemble.from_parfiles(pst=pst,parfile_names=par_files) real_num = [int(os.path.split(f)[-1].split('.')[0].split('_')[1]) for f in par_files] pe._df.index = real_num pe_proj = pe.project(ev.get_null_proj(maxsing=1), enforce_bounds='reset') par_dir = os.path.join("mc", "proj_par_draws") par_files = [os.path.join(par_dir, f) for f in os.listdir(par_dir) if f.endswith('.par')] real_num = [int(os.path.split(f)[-1].split('.')[0].split('_')[1]) for f in par_files] pe_pnul = pyemu.ParameterEnsemble.from_parfiles(pst=pst,parfile_names=par_files) pe_pnul._df.index = real_num pe_proj._df.sort_index(axis=1, inplace=True) pe_proj._df.sort_index(axis=0, inplace=True) pe_pnul._df.sort_index(axis=1, inplace=True) pe_pnul._df.sort_index(axis=0, inplace=True) diff = 100.0 * ((pe_proj._df - pe_pnul._df) / pe_proj._df) assert max(diff.max()) < 1.0e-4,diff
def ident_test(): idf = pd.read_csv(os.path.join(verf_dir,"ident.out"),delim_whitespace=True,index_col="parameter") la_ord_errvar = pyemu.ErrVar(jco=ord_base+".jco", predictions=predictions, verbose=False) df = la_ord_errvar.get_identifiability_dataframe(5) for pname in idf.index: ival = idf.loc[pname,"identifiability"] val = df.loc[pname,"ident"] diff = np.abs(ival - val) print(pname,ival,val) assert diff < 1.0E-3,"{0}:{1}".format(pname,diff)
def freyberg_verf_test(): import os import pyemu import numpy as np import pandas as pd wdir = os.path.join("..", "verification", "Freyberg") post_pd7 = pyemu.Cov.from_ascii(os.path.join(wdir, "post.cov")) sc = pyemu.Schur(os.path.join(wdir, "freyberg.jcb")) post_pyemu = sc.posterior_parameter diff = (post_pd7 - post_pyemu).to_dataframe() diff = (diff / sc.pst.parameter_data.parval1 * 100.0).apply(np.abs) print(diff.max().max()) assert diff.max().max() < 10.0 pd1_file = os.path.join(wdir, "predunc1_textable.dat") names = ["forecasts", "pd1_pr", "py_pr", "pd1_pt", "py_pt"] pd1_df = pd.read_csv(pd1_file, sep='&', header=None, names=names) pd1_df.index = pd1_df.forecasts fsum = sc.get_forecast_summary() pd1_cols = ["pd1_pr", "pd1_pt"] py_cols = ["prior_var", "post_var"] forecasts = ["sw_gw_0", "sw_gw_1"] for fname in forecasts: for pd1_col, py_col in zip(pd1_cols, py_cols): pd1_pr = pd1_df.loc[fname, pd1_col] py_pr = np.sqrt(fsum.loc[fname, py_col]) assert np.abs(pd1_pr - py_pr) < 1.0e-1, "{0},{1}".format( pd1_pr, py_pr) out_files = [os.path.join(wdir,f) for f in os.listdir(wdir)\ if ".predvar1b.out" in f and f.split('.')[0] in forecasts] print(out_files) pv1b_results = {} for out_file in out_files: pred_name = os.path.split(out_file)[-1].split('.')[0] f = open(out_file, 'r') for _ in range(3): f.readline() arr = np.loadtxt(f) pv1b_results[pred_name] = arr omitted_parameters = [pname for pname in sc.pst.parameter_data.parnme if\ pname.startswith("wf")] obs_names = sc.pst.nnz_obs_names obs_names.extend(forecasts) jco = pyemu.Jco.from_binary(os.path.join(wdir,"freyberg.jcb")).\ get(obs_names,sc.pst.adj_par_names) ev = pyemu.ErrVar(jco=jco, pst=sc.pst, forecasts=forecasts, omitted_parameters=omitted_parameters, verbose=False) #print(ev.jco.shape) df = ev.get_errvar_dataframe(np.arange(36)) #print(df) max_idx = 12 #print(pv1b_results.keys()) for ipred, pred in enumerate(forecasts): arr = pv1b_results[pred][:max_idx, :] first = df[("first", pred)][:max_idx] second = df[("second", pred)][:max_idx] third = df[("third", pred)][:max_idx] #print(arr[:,1]) #print(first) diff = np.abs(arr[:, 1] - first) / arr[:, 1] * 100.0 assert diff.max() < 0.01 diff = np.abs(arr[:, 2] - second) / arr[:, 1] * 100.0 assert diff.max() < 0.01 diff = np.abs(arr[:, 3] - third) / arr[:, 1] * 100.0 assert diff.max() < 0.01