Exemple #1
0
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)
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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