code: def K(self, X, X2=None):
          
          if X2 is None:
              X2 = X
  
          base = np.pi * (X[:, None, :] - X2[None, :, :]) / self.period
          exp_dist = np.exp( -0.5* np.sum( np.square(  np.sin( base ) / self.lengthscale ), axis = -1 ) )
  
          return self.variance * exp_dist
docs: Compute the covariance matrix between X and X2.