def test_bad_mcmc():
	constrainer = MCMCConstrainer(proposer = GaussProposal(adapt=False, scale=1e-5), nmaxsteps=100000)
	N = 40
	for d in 2, 7, 20:
		print 'running in %d dimensions' % d
		run_constrainer(d=d, N=N, constrainer=constrainer, name='rejection')
		plt.savefig('test_constrainer_%d_%s.pdf' % (d, 'rejection'), bbox_inches='tight')
		plt.close()
def test_bad_mcmc():
    constrainer = MCMCConstrainer(proposer=GaussProposal(adapt=False,
                                                         scale=1e-5),
                                  nmaxsteps=100000)
    N = 40
    for d in 2, 7, 20:
        print('running in %d dimensions' % d)
        run_constrainer(d=d, N=N, constrainer=constrainer, name='rejection')
        plt.savefig('test_constrainer_%d_%s.pdf' % (d, 'rejection'),
                    bbox_inches='tight')
        plt.close()
def run_constrainers(ds, Ns, constrainers):
	fout = file('constrainertest.tex', 'w')
	print ' %(name)30s  %(d)3s  %(N)3s     D  pvalue     D  pvalue   iter      evals   efficiency' % dict(name='constrainer', d='dim', N='N')
	print ' %s  ---  ---  ----  ------  ----  ------  -----  ----------  -------------' % ('-'*30)
	for d in ds:
		for name, constrainer in constrainers:
			for N in Ns:
				results = run_constrainer(d, N, constrainer, name=name)
				fout.write('%(name)s & %(d)d & %(pvalue).4f & %(shrinkage_pvalue).4f & %(niter)d & %(total_samples)d & %(efficiency).2f\\%% \\\\ \n' % results)
				fout.flush()
		fout.write('\hline\n')
	fout.close()
def run_constrainers(ds, Ns, constrainers):
    fout = file('constrainertest.tex', 'w')
    print ' %(name)30s  %(d)3s  %(N)3s     D  pvalue     D  pvalue   iter      evals   efficiency' % dict(
        name='constrainer', d='dim', N='N')
    print ' %s  ---  ---  ----  ------  ----  ------  -----  ----------  -------------' % (
        '-' * 30)
    for d in ds:
        for name, constrainer in constrainers:
            for N in Ns:
                results = run_constrainer(d, N, constrainer, name=name)
                fout.write(
                    '%(name)s & %(d)d & %(pvalue).4f & %(shrinkage_pvalue).4f & %(niter)d & %(total_samples)d & %(efficiency).2f\\%% \\\\ \n'
                    % results)
                fout.flush()
        fout.write('\hline\n')
    fout.close()
        Ns=[400],
        constrainers=constrainers)


def test_rejection():
    constrainer = RejectionConstrainer()
    N = 40
    for d in 2, 7, 20:
        print('running in %d dimensions' % d)
        evaluate_constrainer(d=d, N=N, constrainer=constrainer, niter=400)
        plt.savefig('test_constrainer_%d_%s.pdf' % (d, 'rejection'),
                    bbox_inches='tight')
        plt.close()


if __name__ == '__main__':
    import sys
    if len(sys.argv) == 1:
        test_all()
    else:
        sel = int(sys.argv[1])
        i = 0
        ds = (2, 7, 20)
        Ns = [400]
        for name, constrainer in constrainers:
            for d in ds:
                for N in Ns:
                    i = i + 1
                    if i == sel:
                        run_constrainer(d, N, constrainer, name=name)
	fout.close()
def test_all():
	run_constrainers(ds=(2, 7, 20), #(2, 7, 20),
		Ns=[400], constrainers=constrainers)

def test_rejection():
	constrainer = RejectionConstrainer()
	N = 40
	for d in 2, 7, 20:
		print 'running in %d dimensions' % d
		evaluate_constrainer(d=d, N=N, constrainer=constrainer, niter=400)
		plt.savefig('test_constrainer_%d_%s.pdf' % (d, 'rejection'), bbox_inches='tight')
		plt.close()

if __name__ == '__main__':
	import sys
	if len(sys.argv) == 1:
		test_all()
	else:
		sel = int(sys.argv[1])
		i = 0
		ds=(2, 7, 20)
		Ns=[400]
		for name, constrainer in constrainers:
			for d in ds:
				for N in Ns:
					i = i + 1
					if i == sel:
						run_constrainer(d, N, constrainer, name=name)