code: def K(self, X, X2, target):
          
          if X2 is None: X2 = X
         # i1 = X[:,1]
         # i2 = X2[:,1]
         # X = X[:,0].reshape(-1,1)
         # X2 = X2[:,0].reshape(-1,1)
          dist = np.abs(X - X2.T)
          
          ly=1/self.lengthscaleY
          lu=np.sqrt(3)/self.lengthscaleU
          #ly=self.lengthscaleY
          #lu=self.lengthscaleU
  
          k1 = np.exp(-ly*dist)*(2*lu+ly)/(lu+ly)**2
          k2 = (np.exp(-lu*dist)*(ly-2*lu+lu*ly*dist-lu**2*dist) + np.exp(-ly*dist)*(2*lu-ly) ) / (ly-lu)**2 
          k3 = np.exp(-lu*dist) * ( (1+lu*dist)/(lu+ly) + (lu)/(lu+ly)**2 )
  
          np.add(self.varianceU*self.varianceY*(k1+k2+k3), target, target)
docs: Compute the covariance matrix between X and X2.