|
13 | 13 | import warnings
|
14 | 14 |
|
15 | 15 | from . import transforms
|
16 |
| -from .dist_math import bound, bound_elemwise, logpow, gammaln, betaln, std_cdf, i0, i1 |
| 16 | +from .dist_math import bound, bound, logpow, gammaln, betaln, std_cdf, i0, i1 |
17 | 17 | from .distribution import Continuous, draw_values, generate_samples
|
18 | 18 |
|
19 | 19 | __all__ = ['Uniform', 'Flat', 'Normal', 'Beta', 'Exponential', 'Laplace',
|
@@ -146,7 +146,7 @@ def random(self, point=None, size=None, repeat=None):
|
146 | 146 | def logp(self, value):
|
147 | 147 | lower = self.lower
|
148 | 148 | upper = self.upper
|
149 |
| - return bound_elemwise(-tt.log(upper - lower), |
| 149 | + return bound(-tt.log(upper - lower), |
150 | 150 | value >= lower, value <= upper)
|
151 | 151 |
|
152 | 152 |
|
@@ -243,7 +243,7 @@ def logp(self, value):
|
243 | 243 | sd = self.sd
|
244 | 244 | tau = self.tau
|
245 | 245 | mu = self.mu
|
246 |
| - return bound_elemwise((-tau * (value - mu)**2 + tt.log(tau / np.pi / 2.)) / 2., |
| 246 | + return bound((-tau * (value - mu)**2 + tt.log(tau / np.pi / 2.)) / 2., |
247 | 247 | sd > 0)
|
248 | 248 |
|
249 | 249 |
|
@@ -289,7 +289,7 @@ def random(self, point=None, size=None, repeat=None):
|
289 | 289 | def logp(self, value):
|
290 | 290 | tau = self.tau
|
291 | 291 | sd = self.sd
|
292 |
| - return bound_elemwise(-0.5 * tau * value**2 + 0.5 * tt.log(tau * 2. / np.pi), |
| 292 | + return bound(-0.5 * tau * value**2 + 0.5 * tt.log(tau * 2. / np.pi), |
293 | 293 | value >= 0,
|
294 | 294 | tau > 0, sd > 0)
|
295 | 295 |
|
@@ -402,7 +402,7 @@ def logp(self, value):
|
402 | 402 | lam = self.lam
|
403 | 403 | alpha = self.alpha
|
404 | 404 | # value *must* be iid. Otherwise this is wrong.
|
405 |
| - return bound_elemwise(logpow(lam / (2. * np.pi), 0.5) |
| 405 | + return bound(logpow(lam / (2. * np.pi), 0.5) |
406 | 406 | - logpow(value - alpha, 1.5)
|
407 | 407 | - (0.5 * lam / (value - alpha)
|
408 | 408 | * ((value - alpha - mu) / mu)**2),
|
@@ -492,7 +492,7 @@ def logp(self, value):
|
492 | 492 | alpha = self.alpha
|
493 | 493 | beta = self.beta
|
494 | 494 |
|
495 |
| - return bound_elemwise(logpow(value, alpha - 1) + logpow(1 - value, beta - 1) |
| 495 | + return bound(logpow(value, alpha - 1) + logpow(1 - value, beta - 1) |
496 | 496 | - betaln(alpha, beta),
|
497 | 497 | value >= 0, value <= 1,
|
498 | 498 | alpha > 0, beta > 0)
|
@@ -537,7 +537,7 @@ def random(self, point=None, size=None, repeat=None):
|
537 | 537 |
|
538 | 538 | def logp(self, value):
|
539 | 539 | lam = self.lam
|
540 |
| - return bound_elemwise(tt.log(lam) - lam * value, value > 0, lam > 0) |
| 540 | + return bound(tt.log(lam) - lam * value, value > 0, lam > 0) |
541 | 541 |
|
542 | 542 |
|
543 | 543 | class Laplace(Continuous):
|
@@ -641,7 +641,7 @@ def random(self, point=None, size=None, repeat=None):
|
641 | 641 | def logp(self, value):
|
642 | 642 | mu = self.mu
|
643 | 643 | tau = self.tau
|
644 |
| - return bound_elemwise(-0.5 * tau * (tt.log(value) - mu)**2 |
| 644 | + return bound(-0.5 * tau * (tt.log(value) - mu)**2 |
645 | 645 | + 0.5 * tt.log(tau / (2. * np.pi))
|
646 | 646 | - tt.log(value),
|
647 | 647 | tau > 0)
|
@@ -702,7 +702,7 @@ def logp(self, value):
|
702 | 702 | lam = self.lam
|
703 | 703 | sd = self.sd
|
704 | 704 |
|
705 |
| - return bound_elemwise(gammaln((nu + 1.0) / 2.0) |
| 705 | + return bound(gammaln((nu + 1.0) / 2.0) |
706 | 706 | + .5 * tt.log(lam / (nu * np.pi))
|
707 | 707 | - gammaln(nu / 2.0)
|
708 | 708 | - (nu + 1.0) / 2.0 * tt.log1p(lam * (value - mu)**2 / nu),
|
@@ -765,7 +765,7 @@ def random(self, point=None, size=None, repeat=None):
|
765 | 765 | def logp(self, value):
|
766 | 766 | alpha = self.alpha
|
767 | 767 | m = self.m
|
768 |
| - return bound_elemwise(tt.log(alpha) + logpow(m, alpha) |
| 768 | + return bound(tt.log(alpha) + logpow(m, alpha) |
769 | 769 | - logpow(value, alpha + 1),
|
770 | 770 | value >= m, alpha > 0, m > 0)
|
771 | 771 |
|
@@ -817,7 +817,7 @@ def random(self, point=None, size=None, repeat=None):
|
817 | 817 | def logp(self, value):
|
818 | 818 | alpha = self.alpha
|
819 | 819 | beta = self.beta
|
820 |
| - return bound_elemwise(- tt.log(np.pi) - tt.log(beta) |
| 820 | + return bound(- tt.log(np.pi) - tt.log(beta) |
821 | 821 | - tt.log1p(((value - alpha) / beta)**2),
|
822 | 822 | beta > 0)
|
823 | 823 |
|
@@ -863,7 +863,7 @@ def random(self, point=None, size=None, repeat=None):
|
863 | 863 |
|
864 | 864 | def logp(self, value):
|
865 | 865 | beta = self.beta
|
866 |
| - return bound_elemwise(tt.log(2) - tt.log(np.pi) - tt.log(beta) |
| 866 | + return bound(tt.log(2) - tt.log(np.pi) - tt.log(beta) |
867 | 867 | - tt.log1p((value / beta)**2),
|
868 | 868 | value >= 0, beta > 0)
|
869 | 869 |
|
@@ -943,7 +943,7 @@ def random(self, point=None, size=None, repeat=None):
|
943 | 943 | def logp(self, value):
|
944 | 944 | alpha = self.alpha
|
945 | 945 | beta = self.beta
|
946 |
| - return bound_elemwise( |
| 946 | + return bound( |
947 | 947 | -gammaln(alpha) + logpow(
|
948 | 948 | beta, alpha) - beta * value + logpow(value, alpha - 1),
|
949 | 949 |
|
@@ -1007,7 +1007,7 @@ def random(self, point=None, size=None, repeat=None):
|
1007 | 1007 | def logp(self, value):
|
1008 | 1008 | alpha = self.alpha
|
1009 | 1009 | beta = self.beta
|
1010 |
| - return bound_elemwise(logpow(beta, alpha) - gammaln(alpha) - beta / value |
| 1010 | + return bound(logpow(beta, alpha) - gammaln(alpha) - beta / value |
1011 | 1011 | + logpow(value, -alpha - 1),
|
1012 | 1012 | value > 0, alpha > 0, beta > 0)
|
1013 | 1013 |
|
@@ -1088,7 +1088,7 @@ def _random(a, b, size=None):
|
1088 | 1088 | def logp(self, value):
|
1089 | 1089 | alpha = self.alpha
|
1090 | 1090 | beta = self.beta
|
1091 |
| - return bound_elemwise(tt.log(alpha) - tt.log(beta) |
| 1091 | + return bound(tt.log(alpha) - tt.log(beta) |
1092 | 1092 | + (alpha - 1) * tt.log(value / beta)
|
1093 | 1093 | - (value / beta)**alpha,
|
1094 | 1094 | value >= 0, alpha > 0, beta > 0)
|
@@ -1161,7 +1161,7 @@ def random(self, point=None, size=None, repeat=None):
|
1161 | 1161 | size=size)
|
1162 | 1162 |
|
1163 | 1163 | def logp(self, value):
|
1164 |
| - return bound_elemwise(self.dist.logp(value), |
| 1164 | + return bound(self.dist.logp(value), |
1165 | 1165 | value >= self.lower, value <= self.upper)
|
1166 | 1166 |
|
1167 | 1167 |
|
@@ -1286,7 +1286,7 @@ def logp(self, value):
|
1286 | 1286 | + logpow(std_cdf((value - mu) / sigma - sigma / nu), 1.),
|
1287 | 1287 | - tt.log(sigma * tt.sqrt(2 * np.pi))
|
1288 | 1288 | - 0.5 * ((value - mu) / sigma)**2)
|
1289 |
| - return bound_elemwise(lp, sigma > 0., nu > 0.) |
| 1289 | + return bound(lp, sigma > 0., nu > 0.) |
1290 | 1290 |
|
1291 | 1291 |
|
1292 | 1292 | class VonMises(Continuous):
|
@@ -1335,7 +1335,7 @@ def random(self, point=None, size=None, repeat=None):
|
1335 | 1335 | def logp(self, value):
|
1336 | 1336 | mu = self.mu
|
1337 | 1337 | kappa = self.kappa
|
1338 |
| - return bound_elemwise(kappa * tt.cos(mu - value) - tt.log(2 * np.pi * i0(kappa)), value >= -np.pi, value <= np.pi, kappa >= 0) |
| 1338 | + return bound(kappa * tt.cos(mu - value) - tt.log(2 * np.pi * i0(kappa)), value >= -np.pi, value <= np.pi, kappa >= 0) |
1339 | 1339 |
|
1340 | 1340 |
|
1341 | 1341 | class SkewNormal(Continuous):
|
@@ -1401,7 +1401,7 @@ def logp(self, value):
|
1401 | 1401 | sd = self.sd
|
1402 | 1402 | mu = self.mu
|
1403 | 1403 | alpha = self.alpha
|
1404 |
| - return bound_elemwise( |
| 1404 | + return bound( |
1405 | 1405 | tt.log(1 +
|
1406 | 1406 | tt.erf(((value - mu) * tt.sqrt(tau) * alpha) / tt.sqrt(2)))
|
1407 | 1407 | + (-tau * (value - mu)**2
|
|
0 commit comments