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))
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)