def test_prior_model_no_admixes(start_tree,
                                sim_length=100000,
                                summaries=None,
                                thinning_coef=1):
    posterior = initialize_prior_as_posterior()
    if summaries is None:
        summaries = [
            s_variable('posterior'),
            s_variable('mhr'),
            s_no_admixes()
        ]
    proposal = adaptive_proposal_no_admix()
    #proposal.props=proposal.props[2:] #a little hack under the hood
    #proposal.params=proposal.params[2:] #a little hack under the hood.
    sample_verbose_scheme = {summary.name: (1, 0) for summary in summaries}
    final_tree, final_posterior, results, _ = basic_chain(
        start_tree,
        summaries,
        posterior,
        proposal,
        post=None,
        N=sim_length,
        sample_verbose_scheme=sample_verbose_scheme,
        overall_thinning=int(thinning_coef + sim_length / 60000),
        i_start_from=0,
        temperature=1.0,
        proposal_update=None,
        check_trees=False)
    save_to_csv(results, summaries)
    return results
def test_prior_model(start_tree,
                     sim_length=100000,
                     summaries=None,
                     thinning_coef=1):
    posterior = initialize_prior_as_posterior()
    if summaries is None:
        summaries = [
            s_variable('posterior'),
            s_variable('mhr'),
            s_no_admixes()
        ]
    proposal = adaptive_proposal()  #basic_meta_proposal()
    sample_verbose_scheme = {summary.name: (1, 0) for summary in summaries}
    sample_verbose_scheme['posterior'] = (1, 1000)
    final_tree, final_posterior, results, _ = basic_chain(
        start_tree,
        summaries,
        posterior,
        proposal,
        post=None,
        N=sim_length,
        sample_verbose_scheme=sample_verbose_scheme,
        overall_thinning=int(thinning_coef + sim_length / 60000),
        i_start_from=0,
        temperature=1.0,
        proposal_update=None,
        check_trees=True)
    print results
    save_to_csv(results, summaries)
    return results
def run_c():
    n = 3
    s_trees = [
        Rtree_operations.create_trivial_tree(n),
        Rtree_operations.create_burled_leaved_tree(n, 1.0),
        Rtree_operations.create_balanced_tree(n, 1.0)
    ]
    summaries = [
        summary.s_variable('posterior'),
        summary.s_variable('mhr'),
        summary.s_no_admixes(),
        summary.s_tree_identifier(),
        summary.s_average_branch_length(),
        summary.s_total_branch_length(),
        summary.s_basic_tree_statistics(
            Rtree_operations.get_number_of_ghost_populations,
            'ghost_pops',
            output='integer'),
        summary.s_basic_tree_statistics(
            Rtree_operations.get_max_distance_to_root, 'max_root'),
        summary.s_basic_tree_statistics(
            Rtree_operations.get_min_distance_to_root, 'min_root'),
        summary.s_basic_tree_statistics(
            Rtree_operations.get_average_distance_to_root, 'average_root'),
        summary.s_variable('proposal_type', output='string'),
        summary.s_tree_identifier_new_tree()
    ] + [
        summary.s_variable(s, output='double')
        for s in ['prior', 'branch_prior', 'no_admix_prior', 'top_prior']
    ]

    simulation_sanity.test_prior_model_several_chains(s_trees,
                                                      100000,
                                                      summaries=summaries,
                                                      thinning_coef=3)
    print 'finished mcmc chains'
    list_of_summaries = summaries[2:10]
    nsim = 100000
    prior_distribution = generate_prior_trees.get_distribution_under_prior(
        leaves=n, sim_length=nsim,
        list_of_summaries=list_of_summaries)  #, thinning_criteria=max_two)
    analyse_results.save_to_csv(
        [tuple(range(nsim))] +
        [tuple(prior_distribution[summ.name]) for summ in list_of_summaries],
        list_of_summaries,
        filename='sim_prior.csv',
        origin_layer=None)
    analyse_results.generate_summary_csv(summaries)
 def func(nstart_tree):
     n, start_tree = nstart_tree
     final_tree, final_posterior, results, _ = basic_chain(
         start_tree,
         summaries,
         posterior,
         proposal,
         post=None,
         N=sim_length,
         sample_verbose_scheme=sample_verbose_scheme,
         overall_thinning=int(thinning_coef + sim_length / 60000),
         i_start_from=0,
         temperature=1.0,
         proposal_update=None,
         check_trees=True)
     save_to_csv(results,
                 summaries,
                 filename='results_' + str(n + 1) + 'csv',
                 origin_layer=(n + 1, 1))
def trivial_simulation(start_val, reps, thinning_coef=1):
    posterior = initialize_trivial_posterior()
    summaries = [Trivial_Summary()]
    proposal = trivial_proposal()
    sample_verbose_scheme = {summary.name: (1, 0) for summary in summaries}
    final_tree, final_posterior, results, _ = basic_chain(
        start_val,
        summaries,
        posterior,
        proposal,
        post=None,
        N=reps,
        sample_verbose_scheme=sample_verbose_scheme,
        overall_thinning=int(thinning_coef + reps / 60000),
        i_start_from=0,
        temperature=1.0,
        proposal_update=None,
        check_trees=False)
    print results
    save_to_csv(results, summaries)
    return results
def test_posterior_model(true_tree=None,
                         start_tree=None,
                         sim_length=100000,
                         summaries=None,
                         thinning_coef=19,
                         admixtures_of_true_tree=None,
                         no_leaves_true_tree=4,
                         filename='results.csv',
                         sim_from_wishart=False,
                         wishart_df=None,
                         sap_sim=False,
                         sap_ana=False,
                         resimulate_regrafted_branch_length=False,
                         emp_cov=None,
                         big_posterior=False,
                         rescale_empirical_cov=False):
    if true_tree is None:
        if admixtures_of_true_tree is None:
            admixtures_of_true_tree = geom.rvs(p=0.5) - 1
        true_tree = generate_phylogeny(no_leaves_true_tree,
                                       admixtures_of_true_tree,
                                       skewed_admixture_prior=sap_sim)
    else:
        no_leaves_true_tree = get_no_leaves(true_tree)
        admixtures_of_true_tree = get_number_of_admixes(true_tree)

    true_x = (true_tree, 0)

    m = make_covariance(true_tree, get_trivial_nodes(no_leaves_true_tree))
    if start_tree is None:
        start_tree = true_tree

    start_x = (start_tree, 0)
    if wishart_df is None:
        wishart_df = n_mark(m)
    if sim_from_wishart:
        r = m.shape[0]
        print m
        m = wishart.rvs(df=r * wishart_df - 1, scale=m / (r * wishart_df))
        print m
    if emp_cov is not None:
        m = emp_cov
    if big_posterior:
        posterior = initialize_big_posterior(m,
                                             wishart_df,
                                             use_skewed_distr=sap_ana)
    else:
        posterior = initialize_posterior(m,
                                         wishart_df,
                                         use_skewed_distr=sap_ana,
                                         rescale=rescale_empirical_cov)
    print 'true_tree=', unique_identifier_and_branch_lengths(true_tree)
    post_ = posterior(true_x)
    print 'likelihood(true_tree)', post_[0]
    print 'prior(true_tree)', post_[1]
    print 'posterior(true_tree)', sum(post_[:2])
    if summaries is None:
        summaries = [s_posterior(), s_variable('mhr'), s_no_admixes()]
    proposal = adaptive_proposal(
        resimulate_regrafted_branch_length=resimulate_regrafted_branch_length)
    #proposal.props=proposal.props[2:] #a little hack under the hood
    #proposal.params=proposal.params[2:] #a little hack under the hood.
    sample_verbose_scheme = {summary.name: (1, 0) for summary in summaries}
    sample_verbose_scheme['posterior'] = (1, 1)
    sample_verbose_scheme['no_admixes'] = (1, 1)
    final_tree, final_posterior, results, _ = basic_chain(
        start_x,
        summaries,
        posterior,
        proposal,
        post=None,
        N=sim_length,
        sample_verbose_scheme=sample_verbose_scheme,
        overall_thinning=int(max(thinning_coef, sim_length / 60000)),
        i_start_from=0,
        temperature=1.0,
        proposal_update=None,
        check_trees=False)
    save_to_csv(results, summaries, filename=filename)
    return true_tree