# ) * sin(Y*2*pi*3) *
a = numpy.exp(-0.5 * (((X - 0.3) / 0.2)**2 + ((Y - 0) / 0.2)**2 * 0 + (
    (Z - 0.6) / 0.3)**2)) * (sin(Y * 2 * pi * 3) + 1)
print a.shape, a.min(), a.max()
xv = numpy.linspace(0, 1, 33)
yv = numpy.linspace(0, 1, 33)
zv = numpy.linspace(0, 1, 33)

print 'evaluating'
values = []
for xi in xv:
    yvalues = []
    for yi in yv:
        zvalues = []
        for zi in zv:
            v = interpn(x, y, z, a, xi, zi, yi)
            #z = numpy.exp(-0.5 * (((xi-0.3)/0.2)**2 + ((yi-0.6)/0.3)**2))
            zvalues.append(v)
        yvalues.append(zvalues)
    values.append(yvalues)
values = numpy.array(values)
print 'plotting'

import matplotlib.pyplot as plt


def imshow(arr, title):
    plt.title(title)
    plt.imshow(
        arr, extent=(0, 1, 1, 0), vmin=0, vmax=a.max(), interpolation='none')
    plt.colorbar()
		for y in [0, 1, 0.5]:
			print x, y, interpn([0,1], [0,1], [[1, 2], [3, 4]], x, y, method='linear')
	
if __name__ == '__main__':
	numpy.random.seed(0)
	limits = [(-10,10), (-3,3)]
	breaks = [numpy.array([lo] + sorted(numpy.random.uniform(lo,hi, size=50)) + [hi]) 
		for lo,hi in limits]
	
	npoints = numpy.product([len(b) for b in breaks])
	inputvalues = []
	values = []
	for x in breaks[0]:
		vx = []
		for y in breaks[1]:
			z = numpy.random.normal(0, 1)**2.
			z = numpy.exp(-0.5 * ((x - -3)**2 + (y - 1)**2.))
			inputvalues.append([x, y, z])
			vx.append(z)
		values.append(vx)
	
	outputvalues = []
	for i in range(1000):
		x = [numpy.random.uniform(lo, hi) for lo,hi in limits]
		z = interpn(*(breaks + [values] + x), method='linear')
		outputvalues.append(x + [z])
	numpy.savetxt("interpn_test_input.txt", inputvalues)
	numpy.savetxt("interpn_test_output.txt", outputvalues)
	

def test_interpn_grid():
	for x in [0, 1, 0.5]:
		for y in [0, 1, 0.5]:
			print x, y, interpn([0,1], [0,1], [[1, 2], [3, 4]], x, y, method='linear')
for j in range(1, len(z)):
	if j0 - j >= 0:
		a[:, j0 - j, :] = a[:, j0 - j + 1, :] * 0.9
	if j0 + j < len(z):
		a[:, j0 + j, :] = a[:, j0 + j - 1, :] * 0.9
del j

xv = numpy.linspace(0, 1, 33)
yv = numpy.linspace(0, 1, 33)
zv = numpy.linspace(0, 1, 33)

#xi = numpy.array([0.5, 0.3]).transpose()
xi = 0.5
yi = xi
zi = xi
print interpn(x, y, z, a, xi, zi, yi)

print 'evaluating'
values = []
for xi in xv:
	yvalues = []
	for yi in yv:
		zvalues = []
		for zi in zv:
			v = interpn(x, y, z, a, xi, zi, yi)
			#z = numpy.exp(-0.5 * (((xi-0.3)/0.2)**2 + ((yi-0.6)/0.3)**2))
			zvalues.append(v)
		yvalues.append(zvalues)
	values.append(yvalues)
values = numpy.array(values)
print 'plotting'