Exemple #1
0
 def testSupportBijectorOutsideRange(self):
     dist = tfd.InverseGaussian(loc=self.make_tensor([7., 2., 5.]),
                                concentration=self.make_tensor(2.),
                                validate_args=True)
     eps = 1e-6
     x = np.array([[-7.2, -eps, -1.3], [-5., -12., -eps]])
     bijector_inverse_x = dist.experimental_default_event_space_bijector(
     ).inverse(x)
     self.assertAllNan(self.evaluate(bijector_inverse_x))
Exemple #2
0
 def testInverseGaussianFullyReparameterized(self):
     concentration = tf.constant(4.0)
     loc = tf.constant(3.0)
     _, [grad_concentration, grad_loc] = tfm.value_and_gradient(
         lambda a, b: tfd.InverseGaussian(a, b, validate_args=True).  # pylint: disable=g-long-lambda
         sample(100, seed=test_util.test_seed()),
         [concentration, loc])
     self.assertIsNotNone(grad_concentration)
     self.assertIsNotNone(grad_loc)
Exemple #3
0
 def testInverseGaussianMeanBroadCast(self):
     loc_v = 2.
     concentration_v = [1.4, 2., 2.5]
     inverse_gaussian = tfd.InverseGaussian(
         self.make_tensor(loc_v), self.make_tensor(concentration_v))
     if self.use_static_shape:
         self.assertEqual(inverse_gaussian.mean().shape, (3, ))
     self.assertAllClose(
         self.evaluate(inverse_gaussian.mean()),
         _scipy_invgauss(np.array(loc_v), np.array(concentration_v)).mean())
Exemple #4
0
  def testInverseGaussianCdfValidateArgs(self):
    batch_size = 2
    loc = self.make_tensor([2.] * batch_size)
    concentration = self.make_tensor([2., 3.])
    x = self.make_tensor([-1., 2.])
    inverse_gaussian = tfd.InverseGaussian(loc, concentration,
                                           validate_args=True)

    with self.assertRaisesOpError('must be non-negative.'):
      self.evaluate(inverse_gaussian.cdf(x))
Exemple #5
0
    def testInvalidLoc(self):
        invalid_locs = [-.01, 0., -2.]
        concentration_v = 1.

        for loc_v in invalid_locs:
            with self.assertRaisesOpError('`loc` must be positive'):
                inverse_gaussian = tfd.InverseGaussian(
                    self.make_tensor(loc_v),
                    self.make_tensor(concentration_v),
                    validate_args=True)
                self.evaluate(inverse_gaussian.mean())
Exemple #6
0
    def testInvalidConcentration(self):
        loc_v = 3.
        invalid_concentrations = [-.01, 0., -2.]

        for concentration_v in invalid_concentrations:
            with self.assertRaisesOpError('`concentration` must be positive'):
                inverse_gaussian = tfd.InverseGaussian(
                    self.make_tensor(loc_v),
                    self.make_tensor(concentration_v),
                    validate_args=True)
                self.evaluate(inverse_gaussian.mean())
  def testInverseGaussianShape(self):
    loc = self.make_tensor([2.] * 5)
    concentration = self.make_tensor([2.] * 5)
    inverse_gaussian = tfd.InverseGaussian(loc, concentration)

    self.assertEqual(self.evaluate(inverse_gaussian.batch_shape_tensor()), (5,))
    if self.use_static_shape:
      self.assertEqual(inverse_gaussian.batch_shape, tf.TensorShape([5]))
    self.assertAllEqual(self.evaluate(inverse_gaussian.event_shape_tensor()),
                        [])
    self.assertEqual(inverse_gaussian.event_shape, tf.TensorShape([]))
  def testInverseGaussianShapeBroadcast(self):
    loc = self.make_tensor([[4.], [5.], [6.]])
    concentration = self.make_tensor([[3., 2.]])
    inverse_gaussian = tfd.InverseGaussian(loc, concentration)

    self.assertAllEqual(self.evaluate(inverse_gaussian.batch_shape_tensor()),
                        (3, 2))
    if self.use_static_shape:
      self.assertAllEqual(inverse_gaussian.batch_shape, tf.TensorShape([3, 2]))
    self.assertAllEqual(self.evaluate(inverse_gaussian.event_shape_tensor()),
                        [])
    self.assertEqual(inverse_gaussian.event_shape, tf.TensorShape([]))
Exemple #9
0
 def testModifiedVariableAssertion(self):
   concentration = tf.Variable(0.9)
   loc = tf.Variable(1.2)
   self.evaluate([concentration.initializer, loc.initializer])
   inverse_gaussian = tfd.InverseGaussian(
       loc=loc, concentration=concentration, validate_args=True)
   with self.assertRaisesOpError('`concentration` must be positive'):
     with tf.control_dependencies([concentration.assign(-2.)]):
       self.evaluate(inverse_gaussian.mean())
   with self.assertRaisesOpError('`loc` must be positive'):
     with tf.control_dependencies([loc.assign(-2.), concentration.assign(2.)]):
       self.evaluate(inverse_gaussian.mean())
Exemple #10
0
    def testInverseGaussianVarianceBroadcast(self):
        loc_v = 2.
        concentration_v = [1.4, 2., 2.5]
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor(loc_v),
            self.make_tensor(concentration_v),
            validate_args=True)

        if self.use_static_shape:
            self.assertEqual(inverse_gaussian.variance().shape, (3, ))
        self.assertAllClose(
            self.evaluate(inverse_gaussian.variance()),
            _scipy_invgauss(np.array(loc_v), np.array(concentration_v)).var())
Exemple #11
0
    def testInverseGaussianSampleMultidimensionalVariance(self):
        loc_v = 3.
        concentration_v = np.array([np.arange(1, 11)])
        n = int(1e6)
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor(loc_v), self.make_tensor(concentration_v))
        samples = inverse_gaussian.sample(n, seed=tfp_test_util.test_seed())
        sample_values = self.evaluate(samples)

        if self.use_static_shape:
            self.assertEqual(samples.shape, (n, 1, 10))
        self.assertEqual(sample_values.shape, (n, 1, 10))
        self.assertAllClose(sample_values.var(axis=0),
                            _scipy_invgauss(loc_v, concentration_v).var(),
                            rtol=.02,
                            atol=0)
Exemple #12
0
    def testInverseGaussianSampleVariance(self):
        loc_v = 3.
        concentration_v = 4.
        n = int(1e6)
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor(loc_v), self.make_tensor(concentration_v))
        samples = inverse_gaussian.sample(n, seed=tfp_test_util.test_seed())
        sample_values = self.evaluate(samples)

        if self.use_static_shape:
            self.assertEqual(samples.shape, (n, ))
        self.assertEqual(sample_values.shape, (n, ))
        self.assertAllClose(sample_values.var(),
                            _scipy_invgauss(loc_v, concentration_v).var(),
                            rtol=.02,
                            atol=0)
Exemple #13
0
    def testInverseGaussianLogPdf(self):
        batch_size = 6
        loc_v = 2.
        concentration_v = 3.
        x_v = [3., 3.1, 4., 5., 6., 7.]
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor([loc_v] * batch_size),
            self.make_tensor([concentration_v] * batch_size))

        log_prob = inverse_gaussian.log_prob(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(log_prob.shape, (6, ))
        self.assertAllClose(
            self.evaluate(log_prob),
            _scipy_invgauss(loc_v, concentration_v).logpdf(x_v))

        pdf = inverse_gaussian.prob(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(pdf.shape, (6, ))
        self.assertAllClose(self.evaluate(pdf),
                            _scipy_invgauss(loc_v, concentration_v).pdf(x_v))
Exemple #14
0
    def testInverseGaussianLogCdf(self):
        batch_size = 6
        loc_v = 2.
        concentration_v = 3.
        x_v = [3., 3.1, 4., 5., 6., 7.]
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor([loc_v] * batch_size),
            self.make_tensor([concentration_v] * batch_size),
            validate_args=True)

        log_cdf = inverse_gaussian.log_cdf(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(log_cdf.shape, (6, ))
        self.assertAllClose(
            self.evaluate(log_cdf),
            _scipy_invgauss(loc_v, concentration_v).logcdf(x_v))

        cdf = inverse_gaussian.cdf(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(cdf.shape, (6, ))
        self.assertAllClose(self.evaluate(cdf),
                            _scipy_invgauss(loc_v, concentration_v).cdf(x_v))
Exemple #15
0
    def testInverseGaussianLogCdfMultidimensional(self):
        batch_size = 6
        loc_v = 1.
        concentration_v = [2., 4., 5.]
        x_v = np.array([[6., 7., 9.2, 5., 6., 7.]]).T
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor([[loc_v]] * batch_size),
            self.make_tensor([concentration_v] * batch_size))

        log_cdf = inverse_gaussian.log_cdf(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(log_cdf.shape, (6, 3))
        self.assertAllClose(
            self.evaluate(log_cdf),
            _scipy_invgauss(loc_v, np.array(concentration_v)).logcdf(x_v))

        cdf = inverse_gaussian.cdf(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(cdf.shape, (6, 3))
        self.assertAllClose(
            self.evaluate(cdf),
            _scipy_invgauss(loc_v, np.array(concentration_v)).cdf(x_v))
Exemple #16
0
    def testInverseGaussianLogPdfMultidimensional(self):
        batch_size = 6
        loc_v = 1.
        concentration_v = [2., 4., 5.]
        x_v = np.array([[6., 7., 9.2, 5., 6., 7.]]).T
        inverse_gaussian = tfd.InverseGaussian(
            self.make_tensor([[loc_v]] * batch_size),
            self.make_tensor([concentration_v] * batch_size),
            validate_args=True)

        log_prob = inverse_gaussian.log_prob(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(log_prob.shape, (6, 3))
        self.assertAllClose(
            self.evaluate(log_prob),
            _scipy_invgauss(loc_v, np.array(concentration_v)).logpdf(x_v))

        prob = inverse_gaussian.prob(self.make_tensor(x_v))
        if self.use_static_shape:
            self.assertEqual(prob.shape, (6, 3))
        self.assertAllClose(
            self.evaluate(prob),
            _scipy_invgauss(loc_v, np.array(concentration_v)).pdf(x_v))
Exemple #17
0
 def gen_samples(l, c):
     return tfd.InverseGaussian(l, c).sample(2,
                                             seed=test_util.test_seed())