return plotfunc


if __name__ == '__main__':
    num_iterations = 500
    num_samples = 100

    weights = [1./5, 4./5]
    mus = [np.array([-4]),
           np.array([4])]
    sigmas = [np.eye(1),
              np.eye(1)]

    toy_init_particles = sample_gmm(num_samples,
                                    [1.],
                                    [np.array([10])],
                                    [np.eye(1)])

    # a = -10
    # b = 10
    # toy_init_particles = np.random.rand(100).reshape(-1, 1)*(b - a) + a

    true_samples = sample_gmm(num_samples, weights, mus, sigmas)

    plotfunc = get_plotfunc(true_samples)

    log_lik_func = log_lik_gmm(weights, mus, sigmas)
    report_metrics = metrics(log_lik_func)

    toy_score = gmm_gld(weights, mus, sigmas)
def metrics(log_lik_func):
    def report_metrics(particles):
        print("Log Likelihood: {}".format(log_lik_func(particles)))

    return report_metrics


if __name__ == '__main__':
    num_iterations = 5000
    num_samples = 100

    weights = [1]
    mus = [np.array([0, 0])]
    sigmas = [np.eye(2)]

    init_particles = sample_gmm(num_samples, [1.], [np.array([-7, -7])],
                                [np.eye(2)])

    true_samples = sample_gmm(num_samples, weights, mus, sigmas)

    plotfunc = get_plotfunc(true_samples)

    gld = gmm_gld(weights, mus, sigmas)

    svgd = SVGD(gld=gld)

    log_lik_func = log_lik_gmm(weights, mus, sigmas)

    report_metrics = metrics(log_lik_func)

    particles = svgd.do_svgd_iterations_optimized(
        init_particles=init_particles,
        plt.savefig('./plots/hmc/1d_multimodal_medium_equal_other_side.png')
        plt.close()

    return plotfunc


if __name__ == '__main__':
    num_samples = 100

    weights = [1. / 5, 4. / 5]
    mus = [np.array([-4]), np.array([4])]

    sigmas = [np.eye(1), np.eye(1)]

    true_samples = sample_gmm(num_samples, weights, mus, sigmas)

    plotfunc = get_plotfunc(true_samples)

    log_pdf = log_gmm_pdf_vectorized(weights, mus, sigmas)

    target_energy = lambda x: -log_pdf(x)

    gld = gmm_gld(weights, mus, sigmas)

    target_grad = lambda x: -gld(x)

    #define other parameters
    params = {
        'u_energy': target_energy,
        'u_grad': target_grad,