34
34
halfnormal ,
35
35
invgamma ,
36
36
normal ,
37
+ pareto ,
37
38
uniform ,
38
39
)
39
40
from aesara .tensor .random .op import RandomVariable
@@ -2029,23 +2030,19 @@ class Pareto(Continuous):
2029
2030
m: float
2030
2031
Scale parameter (m > 0).
2031
2032
"""
2033
+ rv_op = pareto
2032
2034
2033
- def __init__ (self , alpha , m , transform = "lowerbound" , * args , ** kwargs ):
2034
- self .alpha = alpha = at .as_tensor_variable (floatX (alpha ))
2035
- self .m = m = at .as_tensor_variable (floatX (m ))
2036
-
2037
- self .mean = at .switch (at .gt (alpha , 1 ), alpha * m / (alpha - 1.0 ), np .inf )
2038
- self .median = m * 2.0 ** (1.0 / alpha )
2039
- self .variance = at .switch (
2040
- at .gt (alpha , 2 ), (alpha * m ** 2 ) / ((alpha - 2.0 ) * (alpha - 1.0 ) ** 2 ), np .inf
2041
- )
2035
+ @classmethod
2036
+ def dist (
2037
+ cls , alpha : float = None , m : float = None , no_assert : bool = False , ** kwargs
2038
+ ) -> RandomVariable :
2039
+ alpha = at .as_tensor_variable (floatX (alpha ))
2040
+ m = at .as_tensor_variable (floatX (m ))
2042
2041
2043
2042
assert_negative_support (alpha , "alpha" , "Pareto" )
2044
2043
assert_negative_support (m , "m" , "Pareto" )
2045
2044
2046
- if transform == "lowerbound" :
2047
- transform = transforms .lowerbound (self .m )
2048
- super ().__init__ (transform = transform , * args , ** kwargs )
2045
+ return super ().dist ([alpha , m ], ** kwargs )
2049
2046
2050
2047
def _random (self , alpha , m , size = None ):
2051
2048
u = np .random .uniform (size = size )
@@ -2071,7 +2068,11 @@ def random(self, point=None, size=None):
2071
2068
# alpha, m = draw_values([self.alpha, self.m], point=point, size=size)
2072
2069
# return generate_samples(self._random, alpha, m, dist_shape=self.shape, size=size)
2073
2070
2074
- def logp (self , value ):
2071
+ def logp (
2072
+ value : Union [float , np .ndarray , TensorVariable ],
2073
+ alpha : Union [float , np .ndarray , TensorVariable ],
2074
+ m : Union [float , np .ndarray , TensorVariable ],
2075
+ ):
2075
2076
"""
2076
2077
Calculate log-probability of Pareto distribution at specified value.
2077
2078
@@ -2085,8 +2086,6 @@ def logp(self, value):
2085
2086
-------
2086
2087
TensorVariable
2087
2088
"""
2088
- alpha = self .alpha
2089
- m = self .m
2090
2089
return bound (
2091
2090
at .log (alpha ) + logpow (m , alpha ) - logpow (value , alpha + 1 ),
2092
2091
value >= m ,
@@ -2097,7 +2096,11 @@ def logp(self, value):
2097
2096
def _distr_parameters_for_repr (self ):
2098
2097
return ["alpha" , "m" ]
2099
2098
2100
- def logcdf (self , value ):
2099
+ def logcdf (
2100
+ value : Union [float , np .ndarray , TensorVariable ],
2101
+ alpha : Union [float , np .ndarray , TensorVariable ],
2102
+ m : Union [float , np .ndarray , TensorVariable ],
2103
+ ):
2101
2104
"""
2102
2105
Compute the log of the cumulative distribution function for Pareto distribution
2103
2106
at the specified value.
@@ -2112,8 +2115,6 @@ def logcdf(self, value):
2112
2115
-------
2113
2116
TensorVariable
2114
2117
"""
2115
- m = self .m
2116
- alpha = self .alpha
2117
2118
arg = (m / value ) ** alpha
2118
2119
return bound (
2119
2120
at .switch (
0 commit comments