@@ -215,37 +215,17 @@ def test_logp(self):
215
215
class TestShiftedBetaGeometric :
216
216
class TestRandomVariable (BaseTestDistributionRandom ):
217
217
pymc_dist = ShiftedBetaGeometric
218
- pymc_dist_params = {"alpha" : 2 .0 , "beta" : 3 .0 }
219
- expected_rv_op_params = {"alpha" : 2 .0 , "beta" : 3 .0 }
218
+ pymc_dist_params = {"alpha" : 1 .0 , "beta" : 1 .0 }
219
+ expected_rv_op_params = {"alpha" : 1 .0 , "beta" : 1 .0 }
220
220
tests_to_run = [
221
221
"check_pymc_params_match_rv_op" ,
222
222
"check_rv_size" ,
223
223
]
224
224
225
- # TODO: Adapt this to ShiftedBetaGeometric and delete random_moments tests?
226
- # def test_random_matches_geometric(self):
227
- # discrete_random_tester(
228
- # dist=self.pymc_dist,
229
- # paramdomains={"theta": Rplus, "alpha": Domain([0], edges=(None, None))},
230
- # ref_rand=lambda mu, lam, size: scipy.stats.geometric.rvs(theta, size=size),
231
- # )
232
-
233
- # @pytest.mark.parametrize("mu", (2.5, 20, 50))
234
- # def test_random_lam_expected_moments(self, mu):
235
- # lam = np.array([-0.9, -0.7, -0.2, 0, 0.2, 0.7, 0.9])
236
- # dist = self.pymc_dist.dist(mu=mu, lam=lam, size=(10_000, len(lam)))
237
- # draws = dist.eval()
238
-
239
- # expected_mean = mu / (1 - lam)
240
- # np.testing.assert_allclose(draws.mean(0), expected_mean, rtol=1e-1)
241
-
242
- # expected_std = np.sqrt(mu / (1 - lam) ** 3)
243
- # np.testing.assert_allclose(draws.std(0), expected_std, rtol=1e-1)
244
-
245
225
def test_random_basic_properties (self ):
246
226
"""Test basic random sampling properties"""
247
227
# Test with standard parameter values
248
- alpha_vals = [0.5 , 1.0 , 2.0 ]
228
+ alpha_vals = [1.0 , 0.5 , 2.0 ]
249
229
beta_vals = [0.5 , 1.0 , 2.0 ]
250
230
251
231
for alpha in alpha_vals :
@@ -277,16 +257,14 @@ def test_random_edge_cases(self):
277
257
assert np .var (draws ) > 0
278
258
279
259
@pytest .mark .parametrize (
280
- "alpha,beta " ,
260
+ "alpha" ,
281
261
[
282
- (0.5 , 1.0 ),
283
- (1.0 , np .array ([2.0 , 1.0 ])),
284
- (np .array ([1.0 , 2.0 ]), 1.0 ),
285
- (np .array ([2.0 , 0.5 ]), np .array ([1.0 , 2.0 ])),
262
+ (0.5 , 1.0 , 10.0 ),
286
263
],
287
264
)
288
- def test_random_moments (self , alpha , beta ):
289
- dist = self .pymc_dist .dist (alpha = alpha , beta = beta , size = 10_000 )
265
+ def test_random_moments (self , alpha ):
266
+ beta = np .array ([0.5 , 1.0 , 10.0 ])
267
+ dist = self .pymc_dist .dist (alpha = alpha , beta = beta , size = (10_000 , len (beta )))
290
268
draws = dist .eval ()
291
269
292
270
assert np .all (draws > 0 )
@@ -300,7 +278,7 @@ def test_logp(self):
300
278
beta = pt .scalar ("beta" )
301
279
value = pt .vector ("value" , dtype = "int64" )
302
280
303
- # Check out-of-bounds values
281
+ # Compile logp function for testing
304
282
dist = ShiftedBetaGeometric .dist (alpha , beta )
305
283
logp = pm .logp (dist , value )
306
284
logp_fn = pytensor .function ([value , alpha , beta ], logp )
@@ -311,21 +289,13 @@ def test_logp(self):
311
289
assert not np .any (np .isnan (logp_vals ))
312
290
assert np .all (np .isfinite (logp_vals ))
313
291
314
- # Check out-of-bounds values
315
- value = pt .scalar ("value" )
316
- logp = pm .logp (ShiftedBetaGeometric .dist (alpha , beta ), value )
317
- logp_fn = pytensor .function ([value , alpha , beta ], logp )
318
-
319
- logp_fn (- 1 , alpha = 5 , beta = 0 ) == - np .inf
320
- logp_fn (9 , alpha = 5 , beta = - 1 ) == - np .inf
292
+ assert logp_fn (- 1 , alpha = 5 , beta = 1 ) == - np .inf
321
293
322
- # Check mu/lam restrictions
294
+ # Check alpha/beta restrictions
323
295
with pytest .raises (ParameterValueError ):
324
- logp_fn (1 , alpha = 1 , beta = 2 )
325
-
296
+ logp_fn (1 , alpha = - 1 , beta = 2 )
326
297
with pytest .raises (ParameterValueError ):
327
298
logp_fn (1 , alpha = 0 , beta = 0 )
328
-
329
299
with pytest .raises (ParameterValueError ):
330
300
logp_fn (1 , alpha = 1 , beta = - 1 )
331
301
0 commit comments