code: def _testParamShapes(self, sample_shape, expected):
      param_shapes = normal_lib.Normal.param_shapes(sample_shape)
      mu_shape, sigma_shape = param_shapes["loc"], param_shapes["scale"]
      self.assertAllEqual(expected, self.evaluate(mu_shape))
      self.assertAllEqual(expected, self.evaluate(sigma_shape))
      mu = array_ops.zeros(mu_shape)
      sigma = array_ops.ones(sigma_shape)
      self.assertAllEqual(
          expected,
          self.evaluate(
              array_ops.shape(normal_lib.Normal(mu, sigma).sample())
          ),
      )
  
imports: import importlib
  import math
  import numpy
  from tensorflow.python.eager import backprop
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import tensor_shape
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import gradients_impl
  from tensorflow.python.ops import nn_ops
  from tensorflow.python.ops import variables
  from tensorflow.python.ops.distributions import kullback_leibler
  from tensorflow.python.ops.distributions import normal
  from tensorflow.python.platform import test
  from tensorflow.python.platform import tf_logging
label_desc: Use image node_id 3 for calling the NormalTest obj's underlying member method code with example usage: obj._testParamShapes(sample_shape, expected) without return types