def gaussian_smooth_eval(*vals, sigma_vec)
		npix = 7
		raise "npix must be odd" if npix%2==0
		case vals.size
		when 2
# 			delt0 = 3.0*0.999999*sigma_vec[0] / (npix-1)
# 			delt1 = 3.0*0.999999*sigma_vec[1] / (npix-1)
# 			sig3 = 3.0*sigma
			vals0 = GSL::Vector.linspace(vals[0] - 3.0* sigma_vec[0], vals[0] + 3.0* sigma_vec[0], npix)
			vals1 = GSL::Vector.linspace(vals[1] - 3.0* sigma_vec[1], vals[1] + 3.0* sigma_vec[1], npix)
			mat = GSL::Matrix.alloc(vals0.size, vals1.size)
			for i in 0...vals0.size
				for j in 0...vals1.size
					mat[i,j] = eval(vals0[i], vals1[j])
				end
			end
			mat.gaussian_smooth(*sigma_vec.to_a)
			cent = (npix - 1) / 2
			return mat[cent, cent]
			
		else
			raise 'Not supported for this number of dimensions yet'
		end
	end
def gaussian_smooth_eval(*vals, sigma_vec)
		npix = 7
		raise "npix must be odd" if npix%2==0
		case vals.size
		when 2
# 			delt0 = 3.0*0.999999*sigma_vec[0] / (npix-1)
# 			delt1 = 3.0*0.999999*sigma_vec[1] / (npix-1)
# 			sig3 = 3.0*sigma
			vals0 = GSL::Vector.linspace(vals[0] - 3.0* sigma_vec[0], vals[0] + 3.0* sigma_vec[0], npix)
			vals1 = GSL::Vector.linspace(vals[1] - 3.0* sigma_vec[1], vals[1] + 3.0* sigma_vec[1], npix)
			mat = GSL::Matrix.alloc(vals0.size, vals1.size)
			for i in 0...vals0.size
				for j in 0...vals1.size
					mat[i,j] = eval(vals0[i], vals1[j])
				end
			end
			mat.gaussian_smooth(*sigma_vec.to_a)
			cent = (npix - 1) / 2
			return mat[cent, cent]
			
		else
			raise 'Not supported for this number of dimensions yet'
		end
	end
Evaluate the function,