import tensorflow as tf

        tfd.Exponential,
        tfd.Gamma,
        tfd.InverseGamma,
        tfd.Laplace,
        tfd.StudentT,
        tfd.Uniform,
    ]

    sample_shapes = [(), (10,), (10, 20, 30)]
    for cls in classes:
      for sample_shape in sample_shapes:
        param_shapes = cls.param_shapes(sample_shape)
        params = dict([(name, tf.random_normal(shape))
                       for name, shape in param_shapes.items()])
        dist = cls(**params)
        self.assertAllEqual(sample_shape, self.evaluate(
            tf.shape(dist.sample())))
        dist_copy = dist.copy()
        self.assertAllEqual(sample_shape,
                            self.evaluate(tf.shape(dist_copy.sample())))
        self.assertEqual(dist.parameters, dist_copy.parameters)

  def testCopyExtraArgs(self):
    # Note: we cannot easily test all distributions since each requires
