code: def testShapeInfoPreservedFullyStatic(self):
      with self.subTest(
          "all static shape known - cov has more batch dims"
      ):
          mvn = self._construct_mvn_for_shape_tests(
              loc_shape=(3, 4), cov_diag_shape=(2, 3, 4)
          )
          self.assertAllEqual((2, 3), mvn.batch_shape)
          self.assertAllEqual((2, 3), mvn.batch_shape_tensor())
          self.assertAllEqual((4,), mvn.event_shape)
          self.assertAllEqual((4,), mvn.event_shape_tensor())
  
      with self.subTest(
          "all static shape known - loc has more batch dims"
      ):
          mvn = self._construct_mvn_for_shape_tests(
              loc_shape=(2, 3, 4), cov_diag_shape=(3, 4)
          )
          self.assertAllEqual((2, 3), mvn.batch_shape)
          self.assertAllEqual((2, 3), mvn.batch_shape_tensor())
          self.assertAllEqual((4,), mvn.event_shape)
          self.assertAllEqual((4,), mvn.event_shape_tensor())
  
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 MVNLowRankUpdateCovarianceDynamicShapeTest obj's underlying member method code with example usage: obj.testShapeInfoPreservedFullyStatic() without return types