Exemple #1
0
def main():
    """
    Multi-Core Markov-chain Monte Carlo (MC3) wrapper for the command line

    Notes
    -----
    To display the full list of arguments, run from the prompt:
    mc3 -h

    Command-line arguments overwrite the config-file arguments if the
    argument is defined twice.
    """
    parser = parse()

    # Parse command-line args (right now, just interested in the config file):
    args, unknown = parser.parse_known_args()

    # Parse configuration file to a dictionary:
    if args.cfile is not None and not os.path.isfile(args.cfile):
        print("Configuration file: '{:s}' not found.".format(args.cfile))
        sys.exit(0)
    if args.cfile:
        config = configparser.ConfigParser()
        config.read([args.cfile])
        defaults = dict(config.items("MCMC"))
    else:
        defaults = {}
    # Set defaults from the configuration-file values:
    parser.set_defaults(**defaults)
    # Overwrite defaults with the command-line arguments:
    args, unknown = parser.parse_known_args()
    delattr(args, 'cfile')
    # Call MCMC driver:
    mc3.sample(**vars(args))
Exemple #2
0
def test_mcmc_sampler_error(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        indparams=[x], pstep=pstep,
        nsamples=1e4, burnin=100)
    captured = capsys.readouterr()
    assert output is None
    assert "'sampler' is a required argument." in captured.out
Exemple #3
0
def test_mcmc_nsamples_error(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, burnin=100)
    captured = capsys.readouterr()
    assert output is None
    assert "'nsamples' is a required argument for MCMC runs." in captured.out
Exemple #4
0
def test_mcmc_samples_error(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x], pstep=pstep,
        nsamples=1e4, burnin=2000)
    captured = capsys.readouterr()
    assert output is None
    assert "The number of burned-in samples (2000) is greater" in captured.out
Exemple #5
0
def test_mcmc_deprecation_full_output(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x], stepsize=pstep,
        nsamples=1e3, burnin=2, ncpu=7, full_output=True)
    captured = capsys.readouterr()
    assert output is not None
    assert "full_output argument is deprecated." in captured.out
Exemple #6
0
def test_mcmc_deprecation_walk(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        walk=sampler, indparams=[x], stepsize=pstep,
        nsamples=1e3, burnin=2, ncpu=7)
    captured = capsys.readouterr()
    assert output is not None
    assert "walk argument is deprecated. Use sampler instead." in captured.out
Exemple #7
0
def test_mcmc_shared():
    output = mc3.sample(data1, uncert1, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=[0.03, -1, 0.05],
        nsamples=1e4, burnin=100)
    assert output is not None
    assert output['bestp'][1] == output['bestp'][0]
Exemple #8
0
def test_mcmc_func_error(capsys):
    output = mc3.sample(data=data, uncert=uncert, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100)
    captured = capsys.readouterr()
    assert output is None
    assert "'func' must be either a callable or an iterable" in captured.out
Exemple #9
0
def test_mcmc_gr(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        grtest=True)
    captured = capsys.readouterr()
    assert output is not None
    assert "Gelman-Rubin statistics for free parameters:" in captured.out
Exemple #10
0
def test_mcmc_leastsq_error(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x], pstep=pstep,
        leastsq='invalid', nsamples=1e4, burnin=100)
    captured = capsys.readouterr()
    assert output is None
    assert "Invalid 'leastsq' input (invalid). Must select from " \
           "['lm', 'trf']." in captured.out
Exemple #11
0
def test_mcmc_deprecation_parname(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x], pstep=pstep,
        nsamples=1e3, burnin=2, parname=pnames)
    captured = capsys.readouterr()
    assert output is not None
    assert "parname argument is deprecated. Use pnames instead." \
        in captured.out
Exemple #12
0
def test_mcmc_gr_break_iterations(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        grtest=True, grbreak=1.1, grnmin=5000.0)
    captured = capsys.readouterr()
    assert output is not None
    assert "All parameters satisfy the GR convergence threshold of 1.1" \
           in captured.out
Exemple #13
0
def test_mcmc_func_as_strings(tmp_path):
    p = tmp_path / "quadratic.py"
    CONTENT = u'def quad(p, x):\n  y = p[0] + p[1]*x + p[2]*x**2.0\n  return y'
    p.write_text(CONTENT)
    output = mc3.sample(func=('quad', 'quadratic', str(tmp_path)),
        params=np.copy(params),
        data=data, uncert=uncert, indparams=[x], pstep=pstep,
        sampler=sampler, nsamples=1e4, burnin=100)
    assert output is not None
Exemple #14
0
def test_mcmc_optimize(capsys, leastsq):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        leastsq=leastsq)
    captured = capsys.readouterr()
    assert output is not None
    assert "Least-squares best-fitting parameters:" in captured.out
    np.testing.assert_allclose(output['bestp'],
        np.array([4.28263253, -2.40781859, 0.49534411]), rtol=1e-7)
Exemple #15
0
def test_mcmc_pnames_texnames(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        pnames=pnames, texnames=texnames)
    captured = capsys.readouterr()
    assert output is not None
    assert "constant"  in captured.out
    assert "linear"    in captured.out
    assert "quadratic" in captured.out
Exemple #16
0
def test_mcmc_texnames(capsys):
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        texnames=texnames)
    captured = capsys.readouterr()
    assert output is not None
    assert "$\\alpha$"     in captured.out
    assert "$\\log(\\beta" in captured.out
    assert "quadratic"     in captured.out
Exemple #17
0
def test_mcmc_savefile(capsys, tmp_path):
    os.chdir(str(tmp_path))
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        savefile='MCMC.npz')
    captured = capsys.readouterr()
    assert output is not None
    assert "'MCMC.npz'" in captured.out
    assert "MCMC.npz" in os.listdir(".")
Exemple #18
0
def test_mcmc_priors_gauss():
    prior    = np.array([ 4.5,  0.0,   0.0])
    priorlow = np.array([ 0.1,  0.0,   0.0])
    priorup  = np.array([ 0.1,  0.0,   0.0])
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        prior=prior, priorlow=priorlow, priorup=priorup)
    assert output is not None
    assert -2*output['best_log_post'] > output['best_chisq']
    assert np.all(-2*output['log_post'] > output['chisq'])
Exemple #19
0
def test_mcmc_fixed():
    pars = np.copy(params)
    pars[0] = p0[0]
    output = mc3.sample(data, uncert, func=quad, params=np.copy(pars),
        sampler=sampler, indparams=[x],
        pstep=[0, 0.03, 0.05], nsamples=1e4, burnin=100)
    assert output is not None
    assert len(output['bestp']) == len(params)
    assert output['bestp'][0] == pars[0]
    assert output['CRlo'][0] == 0
    assert output['CRhi'][0] == 0
    assert output['stdp'][0] == 0
Exemple #20
0
def test_dynesty_pmax_error(capsys):
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(params),
                        sampler=sampler,
                        indparams=[x],
                        pstep=pstep,
                        pmin=pmin)
    captured = capsys.readouterr()
    assert output is None
    assert "Parameter space must be constrained by pmin and pmax." \
        in captured.out
Exemple #21
0
def test_dynesty_minimal():
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(params),
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        pstep=pstep,
                        sampler=sampler,
                        maxiter=5000)
    # No error? that's a pass.
    assert output is not None
Exemple #22
0
def test_dynesty_ncpu():
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(params),
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        ncpu=8,
                        pstep=pstep,
                        sampler=sampler,
                        maxiter=5000)
    assert output is not None
Exemple #23
0
def test_dynesty_shared():
    output = mc3.sample(data1,
                        uncert1,
                        func=quad,
                        params=np.copy(params),
                        sampler=sampler,
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        pstep=[0.03, -1, 0.05],
                        maxiter=5000)
    assert output is not None
    assert output['bestp'][1] == output['bestp'][0]
Exemple #24
0
def test_mcmc_optimize_chisqscale(capsys):
    unc = np.copy(uncert)
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        leastsq='lm', chisqscale=True)
    captured = capsys.readouterr()
    assert output is not None
    assert "Least-squares best-fitting parameters (rescaled chisq):" \
        in captured.out
    assert "Reduced chi-squared:                  1.0000" in captured.out
    # Assert that uncert has not mutated:
    np.testing.assert_equal(uncert, unc)
Exemple #25
0
def test_mcmc_plots(capsys, tmp_path):
    os.chdir(str(tmp_path))
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x],
        pstep=pstep, nsamples=1e4, burnin=100,
        plots=True)
    captured = capsys.readouterr()
    assert output is not None
    assert "snooker_trace.png"     in captured.out
    assert "snooker_pairwise.png"  in captured.out
    assert "snooker_posterior.png" in captured.out
    assert "snooker_model.png"     in captured.out
    assert "snooker_trace.png"     in os.listdir(".")
    assert "snooker_pairwise.png"  in os.listdir(".")
    assert "snooker_posterior.png" in os.listdir(".")
    assert "snooker_model.png"     in os.listdir(".")
Exemple #26
0
def test_dynesty_log(capsys, tmp_path):
    os.chdir(str(tmp_path))
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(params),
                        sampler=sampler,
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        pstep=pstep,
                        maxiter=5000,
                        log='NS.log')
    captured = capsys.readouterr()
    assert output is not None
    assert "NS.log" in captured.out
    assert "NS.log" in os.listdir(".")
Exemple #27
0
def test_mcmc_deprecation_leastsq(capsys, lm, leastsq):
    if leastsq is True and lm is False:
        ls = 'trf'
    elif leastsq in [True, 'lm']:
        ls = 'lm'
    else:
        ls = None
    output = mc3.sample(data, uncert, func=quad, params=np.copy(params),
        sampler=sampler, indparams=[x], stepsize=pstep,
        nsamples=1e3, burnin=2, ncpu=7, leastsq=leastsq, lm=lm)
    captured = capsys.readouterr()
    assert output is not None
    if isinstance(leastsq, bool):
        assert "leastsq as boolean is deprecated.  See docs for new usage.  " \
           "Set\nleastsq={}".format(repr(ls)) in captured.out
    if isinstance(lm, bool):
        assert "lm argument is deprecated.  See new usage of leastsq.  " \
               "Set\nleastsq={}".format(repr(ls)) in captured.out
Exemple #28
0
def test_dynesty_fixed():
    pars = np.copy(params)
    pars[0] = p0[0]
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(pars),
                        sampler=sampler,
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        pstep=[0, 0.03, 0.05],
                        maxiter=5000)
    assert output is not None
    assert len(output['bestp']) == len(params)
    assert output['bestp'][0] == pars[0]
    assert output['CRlo'][0] == 0
    assert output['CRhi'][0] == 0
    assert output['stdp'][0] == 0
def MCMC(dfs_dict):
    
    # dfoutput = pd.DataFrame(columns = ['peak_L1635','width_L1635','L1635_amplitude','peak_G1515',
    #     'std_G1515','G1515_amplitude','peak_G1430', 'std_G1430', 'std_G1430'])

    # Run the MCMC:
    for files, data in dfs_dict.items():
        
        spec = data['Absorbance'].to_numpy()
        uncert = np.ones_like(spec)*0.01
        
        mc3_output = mc3.sample(data=spec, uncert=uncert, func=func, params=params,
            indparams=indparams, pstep=pstep, pmin=pmin, pmax=pmax,
            priorlow=priorlow, priorup=priorup, pnames=pnames, texnames=texnames,
            sampler=sampler, nsamples=nsamples,  nchains=nchains,
            ncpu=ncpu, burnin=burnin, thinning=thinning,
            leastsq=leastsq, chisqscale=chisqscale,
            grtest=grtest, grbreak=grbreak, grnmin=grnmin,
            hsize=hsize, kickoff=kickoff, wlike=wlike, log=log,
            plots=plots, savefile=savefile, rms=rms)
Exemple #30
0
def test_dynesty_priors_gauss():
    prior = np.array([4.5, 0.0, 0.0])
    priorlow = np.array([0.1, 0.0, 0.0])
    priorup = np.array([0.1, 0.0, 0.0])
    output = mc3.sample(data,
                        uncert,
                        func=quad,
                        params=np.copy(params),
                        sampler=sampler,
                        indparams=[x],
                        pmin=pmin,
                        pmax=pmax,
                        pstep=pstep,
                        maxiter=5000,
                        prior=prior,
                        priorlow=priorlow,
                        priorup=priorup)
    assert output is not None
    assert -2 * output['best_log_post'] > output['best_chisq']
    assert np.all(-2 * output['log_post'] > output['chisq'])