@@ -330,11 +330,12 @@ def logcdf(self, value):
330
330
alpha = self .alpha
331
331
beta = self .beta
332
332
n = self .n
333
+ safe_lower = tt .switch (tt .lt (value , 0 ), value , 0 )
333
334
334
335
return bound (
335
336
tt .switch (
336
337
tt .lt (value , n ),
337
- logsumexp (self .logp (tt .arange (0 , value + 1 )), keepdims = False ),
338
+ logsumexp (self .logp (tt .arange (safe_lower , value + 1 )), keepdims = False ),
338
339
0 ,
339
340
),
340
341
0 <= value ,
@@ -706,9 +707,12 @@ def logcdf(self, value):
706
707
"""
707
708
mu = self .mu
708
709
value = tt .floor (value )
710
+ # To avoid issue with #4340
711
+ safe_mu = tt .switch (tt .lt (mu , 0 ), 0 , mu )
712
+ safe_value = tt .switch (tt .lt (value , 0 ), 0 , value )
709
713
710
714
return bound (
711
- tt .log (tt .gammaincc (value + 1 , mu )),
715
+ tt .log (tt .gammaincc (safe_value + 1 , safe_mu )),
712
716
0 <= value ,
713
717
0 <= mu ,
714
718
)
@@ -1133,11 +1137,12 @@ def logcdf(self, value):
1133
1137
N = self .N
1134
1138
n = self .n
1135
1139
k = self .k
1140
+ safe_lower = tt .switch (tt .lt (value , 0 ), value , 0 )
1136
1141
1137
1142
return bound (
1138
1143
tt .switch (
1139
1144
tt .lt (value , n ),
1140
- logsumexp (self .logp (tt .arange (0 , value + 1 )), keepdims = False ),
1145
+ logsumexp (self .logp (tt .arange (safe_lower , value + 1 )), keepdims = False ),
1141
1146
0 ,
1142
1147
),
1143
1148
0 <= value ,
0 commit comments