@@ -1381,13 +1381,12 @@ def test_issue_3706(self):
1381
1381
assert prior_pred ["X" ].shape == (1 , N , 2 )
1382
1382
1383
1383
1384
- COORDS = {
1385
- "regions" : ["a" , "b" , "c" ],
1386
- "answers" : ["yes" , "no" , "whatever" , "don't understand question" ],
1387
- }
1388
-
1389
-
1390
1384
class TestZeroSumNormal :
1385
+ coords = {
1386
+ "regions" : ["a" , "b" , "c" ],
1387
+ "answers" : ["yes" , "no" , "whatever" , "don't understand question" ],
1388
+ }
1389
+
1391
1390
def assert_zerosum_axes (self , random_samples , axes_to_check , check_zerosum_axes = True ):
1392
1391
if check_zerosum_axes :
1393
1392
for ax in axes_to_check :
@@ -1409,14 +1408,19 @@ def assert_zerosum_axes(self, random_samples, axes_to_check, check_zerosum_axes=
1409
1408
],
1410
1409
)
1411
1410
def test_zsn_dims (self , dims , zerosum_axes ):
1412
- with pm .Model (coords = COORDS ) as m :
1411
+ with pm .Model (coords = self . coords ) as m :
1413
1412
v = pm .ZeroSumNormal ("v" , dims = dims , zerosum_axes = zerosum_axes )
1414
1413
s = pm .sample (10 , chains = 1 , tune = 100 )
1415
1414
1416
1415
# to test forward graph
1417
1416
random_samples = pm .draw (v , draws = 10 )
1418
1417
1419
- assert s .posterior .v .shape == (1 , 10 , len (COORDS ["regions" ]), len (COORDS ["answers" ]))
1418
+ assert s .posterior .v .shape == (
1419
+ 1 ,
1420
+ 10 ,
1421
+ len (self .coords ["regions" ]),
1422
+ len (self .coords ["answers" ]),
1423
+ )
1420
1424
1421
1425
ndim_supp = v .owner .op .ndim_supp
1422
1426
zerosum_axes = np .arange (- ndim_supp , 0 )
@@ -1429,22 +1433,25 @@ def test_zsn_dims(self, dims, zerosum_axes):
1429
1433
self .assert_zerosum_axes (samples , nonzero_axes , check_zerosum_axes = False )
1430
1434
1431
1435
@pytest .mark .parametrize (
1432
- "zerosum_axes, shape" ,
1433
- [
1434
- (None , (len (COORDS ["regions" ]), len (COORDS ["answers" ]))),
1435
- (1 , (len (COORDS ["regions" ]), len (COORDS ["answers" ]))),
1436
- (2 , (len (COORDS ["regions" ]), len (COORDS ["answers" ]))),
1437
- ],
1436
+ "zerosum_axes" ,
1437
+ (None , 1 , 2 ),
1438
1438
)
1439
- def test_zsn_shape (self , shape , zerosum_axes ):
1440
- with pm .Model (coords = COORDS ) as m :
1439
+ def test_zsn_shape (self , zerosum_axes ):
1440
+ shape = (len (self .coords ["regions" ]), len (self .coords ["answers" ]))
1441
+
1442
+ with pm .Model (coords = self .coords ) as m :
1441
1443
v = pm .ZeroSumNormal ("v" , shape = shape , zerosum_axes = zerosum_axes )
1442
1444
s = pm .sample (10 , chains = 1 , tune = 100 )
1443
1445
1444
1446
# to test forward graph
1445
1447
random_samples = pm .draw (v , draws = 10 )
1446
1448
1447
- assert s .posterior .v .shape == (1 , 10 , len (COORDS ["regions" ]), len (COORDS ["answers" ]))
1449
+ assert s .posterior .v .shape == (
1450
+ 1 ,
1451
+ 10 ,
1452
+ len (self .coords ["regions" ]),
1453
+ len (self .coords ["answers" ]),
1454
+ )
1448
1455
1449
1456
ndim_supp = v .owner .op .ndim_supp
1450
1457
zerosum_axes = np .arange (- ndim_supp , 0 )
@@ -1525,13 +1532,13 @@ def test_zsn_change_dist_size(self, zerosum_axes):
1525
1532
)
1526
1533
def test_zsn_variance (self , sigma , n ):
1527
1534
1528
- dist = pm .ZeroSumNormal .dist (sigma = sigma , shape = n )
1529
- random_samples = pm .draw (dist , draws = 100_000 )
1535
+ dist = pm .ZeroSumNormal .dist (sigma = sigma , shape = ( 100_000 , n ) )
1536
+ random_samples = pm .draw (dist )
1530
1537
1531
1538
empirical_var = random_samples .var (axis = 0 )
1532
1539
theoretical_var = sigma ** 2 * (n - 1 ) / n
1533
1540
1534
- np .testing .assert_allclose (empirical_var , theoretical_var , rtol = 1e-02 )
1541
+ np .testing .assert_allclose (empirical_var , theoretical_var , atol = 0.4 )
1535
1542
1536
1543
@pytest .mark .parametrize (
1537
1544
"sigma, shape, zerosum_axes, mvn_axes" ,
0 commit comments