code: def testShapeInfoPreserved(self):
      self.skip_if_no_xla()
      with self.subTest(
          "all static shape known - cov has more batch dims"
      ):
          shapes = self._get_mvn_shape_tensors(
              loc_shape=(3, 4), cov_diag_shape=(2, 3, 4)
          )
          self.assertAllEqual((2, 3), shapes["batch_shape"])
          self.assertAllEqual((4,), shapes["event_shape"])
  
      with self.subTest(
          "all static shape known - loc has more batch dims"
      ):
          shapes = self._get_mvn_shape_tensors(
              loc_shape=(2, 3, 4), cov_diag_shape=(3, 4)
          )
          self.assertAllEqual((2, 3), shapes["batch_shape"])
          self.assertAllEqual((4,), shapes["event_shape"])
  
imports: import collections
  from absl.testing import parameterized
  import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import mvn_low_rank_update_linear_operator_covariance
  from tensorflow_probability.python.distributions import mvn_tril
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.stats import sample_stats
label_desc: Use image node_id 2 for calling the MVNLowRankUpdateCovarianceJITShapes obj's underlying member method code with example usage: obj.testShapeInfoPreserved() without return types