示例#1
0
    def testKumaraswamyModeInvalid(self):
        with session.Session():
            a = np.array([1., 2, 3])
            b = np.array([2., 4, 1.2])
            dist = kumaraswamy_lib.Kumaraswamy(a, b, allow_nan_stats=False)
            with self.assertRaisesOpError(
                    "Mode undefined for concentration1 <= 1."):
                dist.mode().eval()

            a = np.array([2., 2, 3])
            b = np.array([1., 4, 1.2])
            dist = kumaraswamy_lib.Kumaraswamy(a, b, allow_nan_stats=False)
            with self.assertRaisesOpError(
                    "Mode undefined for concentration0 <= 1."):
                dist.mode().eval()
示例#2
0
 def testBProperty(self):
     a = [[1., 2, 3]]
     b = [[2., 4, 3]]
     with self.cached_session():
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertEqual([1, 3], dist.concentration0.get_shape())
         self.assertAllClose(b, dist.concentration0.eval())
示例#3
0
 def testKumaraswamySample(self):
     with self.cached_session():
         a = 1.
         b = 2.
         kumaraswamy = kumaraswamy_lib.Kumaraswamy(a, b)
         n = constant_op.constant(100000)
         samples = kumaraswamy.sample(n)
         sample_values = samples.eval()
         self.assertEqual(sample_values.shape, (100000, ))
         self.assertFalse(np.any(sample_values < 0.0))
         if not stats:
             return
         self.assertLess(
             stats.kstest(
                 # Kumaraswamy is a univariate distribution.
                 sample_values,
                 lambda x: _kumaraswamy_cdf(1., 2., x))[0],
             0.01)
         # The standard error of the sample mean is 1 / (sqrt(18 * n))
         expected_mean = _kumaraswamy_moment(a, b, 1)
         self.assertAllClose(sample_values.mean(axis=0),
                             expected_mean,
                             atol=1e-2)
         expected_variance = _kumaraswamy_moment(
             a, b, 2) - _kumaraswamy_moment(a, b, 1)**2
         self.assertAllClose(np.cov(sample_values, rowvar=0),
                             expected_variance,
                             atol=1e-1)
示例#4
0
 def testKumaraswamyMode(self):
     with session.Session():
         a = np.array([1.1, 2, 3])
         b = np.array([2., 4, 1.2])
         expected_mode = _kumaraswamy_mode(a, b)
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertEqual(dist.mode().get_shape(), (3, ))
         self.assertAllClose(expected_mode, dist.mode().eval())
示例#5
0
 def testSimpleShapes(self):
     with self.cached_session():
         a = np.random.rand(3)
         b = np.random.rand(3)
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertAllEqual([], dist.event_shape_tensor().eval())
         self.assertAllEqual([3], dist.batch_shape_tensor().eval())
         self.assertEqual(tensor_shape.TensorShape([]), dist.event_shape)
         self.assertEqual(tensor_shape.TensorShape([3]), dist.batch_shape)
示例#6
0
 def testPdfXStretchedInBroadcastWhenLowerRank(self):
     with self.cached_session():
         a = [[1., 2], [2., 3]]
         b = [[1., 2], [2., 3]]
         x = [.5, .5]
         pdf = kumaraswamy_lib.Kumaraswamy(a, b).prob(x)
         expected_pdf = _kumaraswamy_pdf(a, b, x)
         self.assertAllClose(expected_pdf, pdf.eval())
         self.assertEqual((2, 2), pdf.get_shape())
示例#7
0
 def testComplexShapesBroadcast(self):
     with self.cached_session():
         a = np.random.rand(3, 2, 2)
         b = np.random.rand(2, 2)
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertAllEqual([], dist.event_shape_tensor().eval())
         self.assertAllEqual([3, 2, 2], dist.batch_shape_tensor().eval())
         self.assertEqual(tensor_shape.TensorShape([]), dist.event_shape)
         self.assertEqual(tensor_shape.TensorShape([3, 2, 2]),
                          dist.batch_shape)
示例#8
0
    def testKumaraswamySampleMultipleTimes(self):
        with self.cached_session():
            a_val = 1.
            b_val = 2.
            n_val = 100

            random_seed.set_random_seed(654321)
            kumaraswamy1 = kumaraswamy_lib.Kumaraswamy(concentration1=a_val,
                                                       concentration0=b_val,
                                                       name="kumaraswamy1")
            samples1 = kumaraswamy1.sample(n_val, seed=123456).eval()

            random_seed.set_random_seed(654321)
            kumaraswamy2 = kumaraswamy_lib.Kumaraswamy(concentration1=a_val,
                                                       concentration0=b_val,
                                                       name="kumaraswamy2")
            samples2 = kumaraswamy2.sample(n_val, seed=123456).eval()

            self.assertAllClose(samples1, samples2)
示例#9
0
    def testKumaraswamyModeEnableAllowNanStats(self):
        with session.Session():
            a = np.array([1., 2, 3])
            b = np.array([2., 4, 1.2])
            dist = kumaraswamy_lib.Kumaraswamy(a, b, allow_nan_stats=True)

            expected_mode = _kumaraswamy_mode(a, b)
            expected_mode[0] = np.nan
            self.assertEqual((3, ), dist.mode().get_shape())
            self.assertAllClose(expected_mode, dist.mode().eval())

            a = np.array([2., 2, 3])
            b = np.array([1., 4, 1.2])
            dist = kumaraswamy_lib.Kumaraswamy(a, b, allow_nan_stats=True)

            expected_mode = _kumaraswamy_mode(a, b)
            expected_mode[0] = np.nan
            self.assertEqual((3, ), dist.mode().get_shape())
            self.assertAllClose(expected_mode, dist.mode().eval())
示例#10
0
 def testKumaraswamyMean(self):
     with session.Session():
         a = [1., 2, 3]
         b = [2., 4, 1.2]
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertEqual(dist.mean().get_shape(), (3, ))
         if not stats:
             return
         expected_mean = _kumaraswamy_moment(a, b, 1)
         self.assertAllClose(expected_mean, dist.mean().eval())
示例#11
0
 def testPdfAStretchedInBroadcastWhenSameRank(self):
     with self.cached_session():
         a = [[1., 2]]
         b = [[1., 2]]
         x = [[.5, .5], [.3, .7]]
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         pdf = dist.prob(x)
         expected_pdf = _kumaraswamy_pdf(a, b, x)
         self.assertAllClose(expected_pdf, pdf.eval())
         self.assertEqual((2, 2), pdf.get_shape())
示例#12
0
 def testPdfTwoBatchesNontrivialX(self):
     with self.cached_session():
         a = [1., 2]
         b = [1., 2]
         x = [.3, .7]
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         pdf = dist.prob(x)
         expected_pdf = _kumaraswamy_pdf(a, b, x)
         self.assertAllClose(expected_pdf, pdf.eval())
         self.assertEqual((2, ), pdf.get_shape())
示例#13
0
 def testKumaraswamyVariance(self):
     with session.Session():
         a = [1., 2, 3]
         b = [2., 4, 1.2]
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertEqual(dist.variance().get_shape(), (3, ))
         if not stats:
             return
         expected_variance = _kumaraswamy_moment(
             a, b, 2) - _kumaraswamy_moment(a, b, 1)**2
         self.assertAllClose(expected_variance, dist.variance().eval())
示例#14
0
 def testPdfUniformZeroBatch(self):
     with self.cached_session():
         # This is equivalent to a uniform distribution
         a = 1.
         b = 1.
         x = np.array([.1, .2, .3, .5, .8], dtype=np.float32)
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         pdf = dist.prob(x)
         expected_pdf = _kumaraswamy_pdf(a, b, x)
         self.assertAllClose(expected_pdf, pdf.eval())
         self.assertEqual((5, ), pdf.get_shape())
示例#15
0
 def testKumaraswamyEntropy(self):
     with session.Session():
         a = np.array([1., 2, 3])
         b = np.array([2., 4, 1.2])
         dist = kumaraswamy_lib.Kumaraswamy(a, b)
         self.assertEqual(dist.entropy().get_shape(), (3, ))
         if not stats:
             return
         expected_entropy = (
             1 - 1. / a) + (1 - 1. / b) * _harmonic_number(b) + np.log(
                 a * b)
         self.assertAllClose(expected_entropy, dist.entropy().eval())
示例#16
0
 def testPdfXProper(self):
     a = [[1., 2, 3]]
     b = [[2., 4, 3]]
     with self.cached_session():
         dist = kumaraswamy_lib.Kumaraswamy(a, b, validate_args=True)
         dist.prob([.1, .3, .6]).eval()
         dist.prob([.2, .3, .5]).eval()
         # Either condition can trigger.
         with self.assertRaisesOpError("sample must be non-negative"):
             dist.prob([-1., 0.1, 0.5]).eval()
         with self.assertRaisesOpError("sample must be no larger than `1`"):
             dist.prob([.1, .2, 1.2]).eval()
示例#17
0
 def testKumaraswamySampleMultidimensional(self):
     with self.cached_session():
         a = np.random.rand(3, 2, 2).astype(np.float32)
         b = np.random.rand(3, 2, 2).astype(np.float32)
         kumaraswamy = kumaraswamy_lib.Kumaraswamy(a, b)
         n = constant_op.constant(100000)
         samples = kumaraswamy.sample(n)
         sample_values = samples.eval()
         self.assertEqual(sample_values.shape, (100000, 3, 2, 2))
         self.assertFalse(np.any(sample_values < 0.0))
         if not stats:
             return
         self.assertAllClose(sample_values[:, 1, :].mean(axis=0),
                             _kumaraswamy_moment(a, b, 1)[1, :],
                             atol=1e-1)
示例#18
0
 def testKumaraswamyCdf(self):
     with self.cached_session():
         shape = (30, 40, 50)
         for dt in (np.float32, np.float64):
             a = 10. * np.random.random(shape).astype(dt)
             b = 10. * np.random.random(shape).astype(dt)
             x = np.random.random(shape).astype(dt)
             actual = kumaraswamy_lib.Kumaraswamy(a, b).cdf(x).eval()
             self.assertAllEqual(np.ones(shape, dtype=np.bool), 0. <= x)
             self.assertAllEqual(np.ones(shape, dtype=np.bool), 1. >= x)
             if not stats:
                 return
             self.assertAllClose(_kumaraswamy_cdf(a, b, x),
                                 actual,
                                 rtol=1e-4,
                                 atol=0)