code: def testExponentiallyModifiedGaussianLogCDF(self):
      batch_size = 50
      mu = self._rng.randn(batch_size)
      sigma = self._rng.rand(batch_size) + 1.0
      rate = self._rng.rand(batch_size) + 1.0
      x = np.linspace(-8.0, 8.0, batch_size).astype(self.dtype)
  
      exgaussian = emg.ExponentiallyModifiedGaussian(
          loc=mu, scale=sigma, rate=rate, validate_args=True
      )
      cdf = exgaussian.log_cdf(x)
      self.assertAllEqual(
          self.evaluate(exgaussian.batch_shape_tensor()), cdf.shape
      )
      self.assertAllEqual(
          self.evaluate(exgaussian.batch_shape_tensor()),
          self.evaluate(cdf).shape,
      )
      self.assertAllEqual(exgaussian.batch_shape, cdf.shape)
      self.assertAllEqual(
          exgaussian.batch_shape, self.evaluate(cdf).shape
      )
      expected_cdf = sp_stats.exponnorm(
          1.0 / (rate * sigma), loc=mu, scale=sigma
      ).logcdf(x)
      self.assertAllClose(expected_cdf, self.evaluate(cdf), atol=0)
  
imports: import math
  import numpy
  from scipy import stats
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import exponentially_modified_gaussian
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import gradient
label_desc: Use image node_id 8 for calling the _ExponentiallyModifiedGaussianTest obj's underlying member method code with example usage: obj.testExponentiallyModifiedGaussianLogCDF() without return types