code: def testMeanAndVariance(self):
      loc, scale_row, scale_col = self._random_loc_and_scale(
          batch_shape=[3, 4], matrix_shape=[2, 5]
      )
      matrix_normal = mnlo.MatrixNormalLinearOperator(
          loc, scale_row, scale_col
      )
  
      cov_row = scale_row.matmul(scale_row.adjoint())
      cov_col = scale_col.matmul(scale_col.adjoint())
      # Compute diagonal of Kronecker product
      expected_variance = (
          cov_col.to_dense()[..., :, tf.newaxis, :, tf.newaxis]
          * cov_row.to_dense()[..., tf.newaxis, :, tf.newaxis, :]
      )
      expected_variance = tf.linalg.diag_part(
          tf.reshape(expected_variance, [3, 4, 10, 10])
      )
      expected_variance = tf.linalg.matrix_transpose(
          tf.reshape(expected_variance, [3, 4, 5, 2])
      )
      mean_, loc_, variance_, expected_variance_ = self.evaluate(
          [
              matrix_normal.mean(),
              loc,
              matrix_normal.variance(),
              expected_variance,
          ]
      )
      self.assertAllClose(loc_, mean_)
      self.assertAllClose(expected_variance_, variance_)
  
imports: from absl.testing import parameterized
  import numpy
  from scipy import stats
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import shift
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.bijectors import transform_diagonal
  from tensorflow_probability.python.distributions import matrix_normal_linear_operator
  from tensorflow_probability.python.internal import test_util
label_desc: Use image node_id 7 for calling the _MatrixNormalTest obj's underlying member method code with example usage: obj.testMeanAndVariance() without return types