code: def sparse_GP_regression_2D(num_samples=400, num_inducing=50, max_iters=100, optimize=True, plot=True, nan=False):
      
      np.random.seed(1234)
      X = np.random.uniform(-3., 3., (num_samples, 2))
      Y = np.sin(X[:, 0:1]) * np.sin(X[:, 1:2]) + np.random.randn(num_samples, 1) * 0.05
      if nan:
          inan = np.random.binomial(1,.2,size=Y.shape)
          Y[inan] = np.nan
  
      # construct kernel
      rbf = GPy.kern.RBF(2)
  
      # create simple GP Model
      m = GPy.models.SparseGPRegression(X, Y, kernel=rbf, num_inducing=num_inducing)
  
      # contrain all parameters to be positive (but not inducing inputs)
      m['.*len'] = 2.
  
      m.checkgrad()
  
      # optimize
      if optimize:
          m.optimize('tnc', messages=1, max_iters=max_iters)
  
      # plot
      if plot:
          m.plot()
  
      print(m)
      return m
docs: Run a 2D example of a sparse GP regression.