@@ -835,8 +835,11 @@ class TestEulerMaruyama:
835
835
@pytest .mark .parametrize ("batched_param" , [1 , 2 ])
836
836
@pytest .mark .parametrize ("explicit_shape" , (True , False ))
837
837
def test_batched_size (self , explicit_shape , batched_param ):
838
+ RANDOM_SEED = 42
839
+ numpy_rng = np .random .default_rng (RANDOM_SEED )
840
+
838
841
steps , batch_size = 100 , 5
839
- param_val = np .square (np . random . randn (batch_size ))
842
+ param_val = np .square (numpy_rng . standard_normal (batch_size ))
840
843
if explicit_shape :
841
844
kwargs = {"shape" : (batch_size , steps )}
842
845
else :
@@ -853,7 +856,7 @@ def sde_fn(x, k, d, s):
853
856
"y" , dt = 0.02 , sde_fn = sde_fn , sde_pars = sde_pars , init_dist = init_dist , ** kwargs
854
857
)
855
858
856
- y_eval = draw (y , draws = 2 )
859
+ y_eval = draw (y , draws = 2 , random_seed = numpy_rng )
857
860
assert y_eval [0 ].shape == (batch_size , steps )
858
861
assert not np .any (np .isclose (y_eval [0 ], y_eval [1 ]))
859
862
@@ -873,7 +876,7 @@ def sde_fn(x, k, d, s):
873
876
** kwargs ,
874
877
)
875
878
876
- t0_init = t0 .initial_point ()
879
+ t0_init = t0 .initial_point (random_seed = RANDOM_SEED )
877
880
t1_init = {f"y_{ i } " : t0_init ["y" ][i ] for i in range (batch_size )}
878
881
np .testing .assert_allclose (
879
882
t0 .compile_logp ()(t0_init ),
@@ -919,17 +922,20 @@ def test_linear_model(self):
919
922
N = 300
920
923
dt = 1e-1
921
924
925
+ RANDOM_SEED = 42
926
+ numpy_rng = np .random .default_rng (RANDOM_SEED )
927
+
922
928
def _gen_sde_path (sde , pars , dt , n , x0 ):
923
929
xs = [x0 ]
924
- wt = np . random .normal (size = (n ,) if isinstance (x0 , float ) else (n , x0 .size ))
930
+ wt = numpy_rng .normal (size = (n ,) if isinstance (x0 , float ) else (n , x0 .size ))
925
931
for i in range (n ):
926
932
f , g = sde (xs [- 1 ], * pars )
927
933
xs .append (xs [- 1 ] + f * dt + np .sqrt (dt ) * g * wt [i ])
928
934
return np .array (xs )
929
935
930
936
sde = lambda x , lam : (lam * x , sig2 )
931
937
x = floatX (_gen_sde_path (sde , (lam ,), dt , N , 5.0 ))
932
- z = x + np . random . randn ( x .size ) * sig2
938
+ z = x + numpy_rng . standard_normal ( size = x .size ) * sig2
933
939
# build model
934
940
with Model () as model :
935
941
lamh = Flat ("lamh" )
@@ -939,9 +945,9 @@ def _gen_sde_path(sde, pars, dt, n, x0):
939
945
Normal ("zh" , mu = xh , sigma = sig2 , observed = z )
940
946
# invert
941
947
with model :
942
- trace = sample (chains = 1 )
948
+ trace = sample (chains = 1 , random_seed = numpy_rng )
943
949
944
- ppc = sample_posterior_predictive (trace , model = model )
950
+ ppc = sample_posterior_predictive (trace , model = model , random_seed = numpy_rng )
945
951
946
952
p95 = [2.5 , 97.5 ]
947
953
lo , hi = np .percentile (trace .posterior ["lamh" ], p95 , axis = [0 , 1 ])
0 commit comments