class_docstr: Compare gp.LatentKron to gp.Latent, both with Gaussian noise.
class_docstr_tok: ["Compare","gp.LatentKron","to","gp.Latent",",","both","with","Gaussian","noise","."]
code: def testLatentKronvsLatent(self):
      with pm.Model() as kron_model:
          kron_gp = pm.gp.LatentKron(
              mean_func=self.mean, cov_funcs=self.cov_funcs
          )
          f = kron_gp.prior("f", self.Xs)
          p = kron_gp.conditional("p", self.Xnew)
      assert tuple(f.shape.eval()) == (self.X.shape[0],)
      assert tuple(p.shape.eval()) == (self.Xnew.shape[0],)
      kronlatent_logp = kron_model.compile_logp()(
          {"f_rotated_": self.y_rotated, "p": self.pnew}
      )
      npt.assert_allclose(kronlatent_logp, self.logp, atol=0, rtol=1e-3)
  
imports: from functools import reduce
  from operator import add
  import numpy
  import numpy.testing
  import pytest
  import pymc
  from pymc.math import cartesian
label_desc: Use image node_id 2 for calling the TestLatentKron obj's underlying member method code with example usage: obj.testLatentKronvsLatent() without return types