示例#1
0
    def test_interval(self):
        # open interval should have logp of 0
        interval = Interval()
        assert_equal(interval.logp(0), 0)

        # semi closed interval
        interval.ub = 1000
        assert_equal(interval.logp(0), 0)
        assert_equal(interval.logp(1001), -np.inf)

        # you should be able to send in multiple values
        assert_equal(
            interval.logp(np.array([1.0, 1002.0])), np.array([0, -np.inf])
        )

        # fully closed interval
        interval.lb = -1000
        assert_equal(interval.logp(-1001), -np.inf)
        assert_equal(interval.lb, -1000)
        assert_equal(interval.ub, 1000)
        assert_equal(interval.logp(0), np.log(1 / 2000.0))

        # you should be able to send in multiple values
        assert_equal(
            interval.logp(np.array([1.0, 2.0])),
            np.array([np.log(1 / 2000.0)] * 2),
        )

        # try and set lb higher than ub
        interval.lb = 1002
        assert_equal(interval.lb, 1000)
        assert_equal(interval.ub, 1002)

        # if val is outside closed range then rvs is used
        vals = interval.valid(np.linspace(990, 1005, 100))
        assert_(np.max(vals) <= 1002)
        assert_(np.min(vals) >= 1000)
        assert_(np.isfinite(interval.logp(vals)).all())

        # if bounds are semi-open then val is reflected from lb
        interval.ub = None
        interval.lb = 1002
        x = np.linspace(990, 1001, 10)
        vals = interval.valid(x)
        assert_almost_equal(vals, 2 * interval.lb - x)
        assert_equal(interval.valid(1003), 1003)

        # if bounds are semi-open then val is reflected from ub
        interval.lb = None
        interval.ub = 1002
        x = np.linspace(1003, 1005, 10)
        vals = interval.valid(x)
        assert_almost_equal(vals, 2 * interval.ub - x)
        assert_equal(interval.valid(1001), 1001)

        # ppf for Interval
        interval.lb = -10.0
        interval.ub = 10.0
        rando = np.random.uniform(size=10)
        assert_equal(interval.invcdf(rando), uniform.ppf(rando, -10, 20))
示例#2
0
    def test_interval(self):
        # open interval should have logp of 0
        interval = Interval()
        assert_equal(interval.logp(0), 0)

        # semi closed interval
        interval.ub = 1000
        assert_equal(interval.logp(0), 0)
        assert_equal(interval.logp(1001), -np.inf)

        # fully closed interval
        interval.lb = -1000
        assert_equal(interval.logp(-1001), -np.inf)
        assert_equal(interval.lb, -1000)
        assert_equal(interval.ub, 1000)
        assert_equal(interval.logp(0), np.log(1 / 2000.))

        # try and set lb higher than ub
        interval.lb = 1002
        assert_equal(interval.lb, 1000)
        assert_equal(interval.ub, 1002)

        # if val is outside closed range then rvs is used
        vals = interval.valid(np.linspace(990, 1005, 100))
        assert_(np.max(vals) <= 1002)
        assert_(np.min(vals) >= 1000)
        assert_(np.isfinite(interval.logp(vals)).all())

        # if bounds are semi-open then val is reflected from lb
        interval.ub = None
        interval.lb = 1002
        x = np.linspace(990, 1001, 10)
        vals = interval.valid(x)
        assert_almost_equal(vals, 2 * interval.lb - x)
        assert_equal(interval.valid(1003), 1003)

        # if bounds are semi-open then val is reflected from ub
        interval.lb = None
        interval.ub = 1002
        x = np.linspace(1003, 1005, 10)
        vals = interval.valid(x)
        assert_almost_equal(vals, 2 * interval.ub - x)
        assert_equal(interval.valid(1001), 1001)