def propagate(self, y, u, Sigma_x):
		def py(x, y):
			mux, varx = self.gp(x)
			return 1 / (np.sqrt(2 * np.pi * varx)) * np.exp(-0.5 * (y - mux) ** 2 / varx)


		func = lambda x: py(x, y)
		return integrate_hermgauss_nd(func,u,Sigma_x,4)
	def propagate_GA(self, u, Sigma_x):
		mu = self.propagate_mean(u, Sigma_x)
		func1 = lambda x: (self.gp(x))[1]
		func2 = lambda x: (self.gp(x))[0] ** 2
		variance = integrate_hermgauss_nd(func1,u,Sigma_x,4) + integrate_hermgauss_nd(func2,u,Sigma_x,4) - mu ** 2
		return mu, variance
	def propagate_mean(self, u, Sigma_x):

		func = lambda x: (self.gp(x))[0]
		return integrate_hermgauss_nd(func,u,Sigma_x,4)