예제 #1
0
def test_invar_discrete():
    from scipy.stats import randint
    invar = InVar('randint',
                  ndraws=1000,
                  dist=randint,
                  distkwargs={
                      'low': 1,
                      'high': 5
                  },
                  seed=invarseeds[0],
                  samplemethod=SampleMethod.RANDOM)
    assert invar.stats().mean == pytest.approx(2.538)
예제 #2
0
def plot_testing():
    from scipy.stats import norm
    invar = InVar('norm',
                  ndraws=1000,
                  dist=norm,
                  distkwargs={
                      'loc': 10,
                      'scale': 4
                  },
                  seed=invarseeds[1],
                  samplemethod=SampleMethod.RANDOM,
                  firstcaseismedian=False)
    fig, ax = invar.plot()
    plt.show()
예제 #3
0
def invar_custom_dist():
    return InVar('custom',
                 ndraws=1000,
                 dist=custom_dist,
                 distkwargs=dict(),
                 ninvar=1,
                 samplemethod=SampleMethod.RANDOM,
                 seed=invarseeds[2],
                 firstcaseismedian=False)
예제 #4
0
def invar_lognorm_random():
    from scipy.stats import lognorm
    return InVar('lognorm',
                 ndraws=1000,
                 dist=lognorm,
                 distkwargs={
                     's': lognorm_sigma,
                     'scale': np.exp(lognorm_mu)
                 },
                 seed=invarseeds[1],
                 samplemethod=SampleMethod.RANDOM,
                 firstcaseismedian=False)
예제 #5
0
def invar_norm_random():
    from scipy.stats import norm
    return InVar('norm',
                 ndraws=1000,
                 dist=norm,
                 distkwargs={
                     'loc': 10,
                     'scale': 4
                 },
                 seed=invarseeds[1],
                 samplemethod=SampleMethod.RANDOM,
                 firstcaseismedian=False)
예제 #6
0
def test_invar_norm_sobol_warning():
    from scipy.stats import norm
    with pytest.warns(UserWarning, match='Infinite value'):
        InVar('norm',
              ndraws=1000,
              dist=norm,
              distkwargs={
                  'loc': 10,
                  'scale': 4
              },
              ninvar=1,
              samplemethod=SampleMethod.SOBOL,
              seed=invarseeds[1],
              firstcaseismedian=False)
예제 #7
0
def test_invar_nummap():
    invar = InVar('map',
                  ndraws=10,
                  dist=custom_dist,
                  distkwargs=dict(),
                  ninvar=1,
                  nummap={
                      1: 'a',
                      5: 'e',
                      6: 'f'
                  },
                  samplemethod=SampleMethod.RANDOM,
                  seed=invarseeds[3],
                  firstcaseismedian=False)
    assert invar.vals == ['f', 'e', 'f', 'f', 'a', 'e', 'e', 'a', 'e', 'e']
예제 #8
0
def case():
    seed = 74494861
    from scipy.stats import norm
    invar = {
        'Test':
        InVar('Test',
              ndraws=10,
              ninvar=1,
              dist=norm,
              distkwargs={
                  'loc': 10,
                  'scale': 4
              },
              seed=seed,
              firstcaseismedian=True)
    }
    case = Case(ncase=0,
                ismedian=False,
                invars=invar,
                constvals=dict(),
                seed=seed)
    return case
예제 #9
0
def plot_testing():
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import randint, norm
    from monaco.mc_var import InVar, OutVar
    from monaco.mc_plot import (plot, plot_hist, plot_cdf,
                                plot_cov_corr, plot_integration_convergence,
                                plot_integration_error, plot_sensitivities)
    from monaco.mc_enums import SampleMethod

    generator = np.random.RandomState(74494861)
    invarseeds = generator.randint(0, 2**31-1, size=10)
    plt.close('all')

    invars = dict()
    nummap = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
    invars['randint'] = InVar(name='randint', ndraws=1000,
                              dist=randint, distkwargs={'low': 1, 'high': 6},
                              nummap=nummap,
                              samplemethod=SampleMethod.RANDOM, seed=invarseeds[0])
    invars['norm'] = InVar(name='norm', ndraws=1000,
                           dist=norm, distkwargs={'loc': 10, 'scale': 4},
                           samplemethod=SampleMethod.RANDOM, seed=invarseeds[1])
    invars['norm'].addVarStat(stat='orderstatTI',
                              statkwargs={'p': 0.75, 'c': 0.50, 'bound': '2-sided'})
    invars['norm'].addVarStat(stat='orderstatP',
                              statkwargs={'p': 0.5, 'c': 0.9999, 'bound': 'all'})
    invars['norm2'] = InVar(name='norm2', ndraws=1000,
                            dist=norm, distkwargs={'loc': 10, 'scale': 4},
                            samplemethod=SampleMethod.RANDOM, seed=invarseeds[2])
    outvars = dict()
    outvars['test'] = OutVar(name='test', vals=[1, 0, 2, 2], firstcaseismedian=True)
    outvars['test'].sensitivity_ratios = {'a': 0.15, 'b': 0.35, 'c': 0.4}

    f, (ax1, ax2) = plt.subplots(2, 1)
    plot_hist(invars['randint'], ax=ax1, orientation='horizontal')        # plot_hist
    plot_cdf(invars['randint'], ax=ax2)                                   # plot_cdf
    plot(invars['norm'], title='norm', invar_space=InVarSpace.PCTS)       # plot_hist
    plot_hist(outvars['test'], orientation='horizontal', rug_plot=False)  # plot_hist
    plot_cdf(invars['norm'], orientation='horizontal')                    # plot_cdf
    plot_cdf(outvars['test'])                                             # plot_cdf

    plot_sensitivities(outvars['test'], sensitivities='ratios', sort=True)  # plot_sensitivities

    plot(invars['randint'], invars['norm'],
         cases=None, highlight_cases=range(10, 30),
         rug_plot=True, cov_plot=True, cov_p=[0.90, 0.95, 0.99])  # plot_2d_scatter
    plot(invars['randint'], invars['norm'], invars['norm2'],
         cases=[], highlight_cases=range(10, 30))  # plot_3d_scatter
    plot_2d_scatter(invars['randint'], invars['norm'], invars['norm2'])  # plot_2d_scatter

    v = np.array([-2, -1, 2, 3, 4, 5])
    var0 = OutVar(name='testscalar', vals=[1, 2, 3, 4, 5], firstcaseismedian=True)
    var1 = OutVar(name='testx', vals=[v, v, v, v, v], firstcaseismedian=True)
    var2 = OutVar(name='testy', vals=[1*v, 2*v, 0*v, -1*v, -2*v], firstcaseismedian=True)
    var3 = OutVar(name='testz', vals=[1*v, 2*v, 0*v, -1*v, -2*v], firstcaseismedian=True)
    var2.addVarStat(stat='sigma', statkwargs={'sig': 3})
    var2.addVarStat(stat='sigma', statkwargs={'sig': -3})
    var2.addVarStat(stat='orderstatTI', statkwargs={'p': 0.6, 'c': 0.50, 'bound': '2-sided'})
    var2.addVarStat(stat='mean')

    plot(var2, highlight_cases=None)               # plot_2d_line
    plot(var1, var2, highlight_cases=[0, 1])       # plot_2d_line
    plot(var0, var1)                               # plot_2p5d_line
    plot(var1, var2, var3, highlight_cases=[0, ])  # plot_3d_line
    plot(var0, var1, var2)                         # plot_2p5d_line

    m = np.eye(3)
    var4 = OutVar(name='testm', vals=[1*m, 2*m, 0*m, -1*m, -2*m])
    plot(var4, highlight_cases=[])                 # plot_3d_line

    n = np.eye(2)
    var5 = OutVar(name='testn', vals=[1*n, 2*n, 0*n, -1*n, -2*n])
    plot(var0, var5)                               # plot_3d_line

    plot_cov_corr(np.array([[2, 0.1111, np.nan], [-0.19, -1, np.nan], [np.nan, np.nan, np.nan]]),
                  ['Test1', 'Test2', 'Test3'])

    invars['randint2'] = InVar(name='randint2', ndraws=1000,
                               dist=randint, distkwargs={'low': 0, 'high': 2},
                               samplemethod=SampleMethod.RANDOM, seed=invarseeds[3])
    plot_integration_convergence(invars['randint2'], volume=1, dimension=1,
                                 refval=0.5, conf=0.95)
    plot_integration_error(invars['randint2'], volume=1, dimension=1,
                           refval=0.5, conf=0.95)
    plt.show()
예제 #10
0
def plot_testing():
    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as plt
    from monaco.mc_var import InVar
    from monaco.mc_multi_plot import multi_plot, multi_plot_grid_rect
    from monaco.mc_enums import SampleMethod

    plt.close('all')

    generator = np.random.RandomState(74494861)
    invarseeds = generator.randint(0, 2**31 - 1, size=10)

    invars = dict()
    invars['norm1'] = InVar('norm1',
                            ndraws=1000,
                            dist=norm,
                            distkwargs={
                                'loc': 1,
                                'scale': 5
                            },
                            seed=invarseeds[0],
                            samplemethod=SampleMethod.RANDOM)
    invars['norm2'] = InVar('norm2',
                            ndraws=1000,
                            dist=norm,
                            distkwargs={
                                'loc': 10,
                                'scale': 4
                            },
                            seed=invarseeds[1],
                            samplemethod=SampleMethod.RANDOM)
    invars['norm3'] = InVar('norm3',
                            ndraws=1000,
                            dist=norm,
                            distkwargs={
                                'loc': 5,
                                'scale': 2
                            },
                            seed=invarseeds[3],
                            samplemethod=SampleMethod.RANDOM)

    fig, axs = multi_plot([invars['norm1'], invars['norm2']],
                          highlight_cases=range(10, 30),
                          rug_plot=True,
                          cov_plot=True,
                          cov_p=0.95,
                          title='test')  # multi_plot_2d_scatter_hist

    fig, axs = multi_plot([invars['norm1'], invars['norm2'], invars['norm3']],
                          highlight_cases=range(10, 30),
                          rug_plot=True,
                          cov_plot=True,
                          cov_p=0.95,
                          title='test')  # multi_plot_grid_tri

    fig, axs = multi_plot_grid_rect([invars['norm1'], invars['norm2']],
                                    invars['norm3'],
                                    highlight_cases=range(10, 30),
                                    rug_plot=True,
                                    cov_plot=True,
                                    cov_p=0.95,
                                    title='test')  # multi_plot_grid_rect

    plt.show(block=True)