Skip to content

Commit c75583a

Browse files
committed
Partially revert #5131
Allow Metropolis proposals to depend on global seeding by default
1 parent 21e1998 commit c75583a

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

pymc/step_methods/metropolis.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,59 +50,57 @@
5050

5151

5252
class Proposal:
53-
def __init__(self, s, rng_seed: Optional[int] = None):
53+
def __init__(self, s):
5454
self.s = s
55-
self.rng = np.random.default_rng(rng_seed)
5655

5756

5857
class NormalProposal(Proposal):
5958
def __call__(self, rng: Optional[np.random.Generator] = None):
6059
if rng is None:
61-
rng = self.rng
60+
rng = nr
6261
return rng.normal(scale=self.s)
6362

6463

6564
class UniformProposal(Proposal):
6665
def __call__(self, rng: Optional[np.random.Generator] = None):
6766
if rng is None:
68-
rng = self.rng
67+
rng = nr
6968
return rng.uniform(low=-self.s, high=self.s, size=len(self.s))
7069

7170

7271
class CauchyProposal(Proposal):
7372
def __call__(self, rng: Optional[np.random.Generator] = None):
7473
if rng is None:
75-
rng = self.rng
74+
rng = nr
7675
return rng.standard_cauchy(size=np.size(self.s)) * self.s
7776

7877

7978
class LaplaceProposal(Proposal):
8079
def __call__(self, rng: Optional[np.random.Generator] = None):
8180
if rng is None:
82-
rng = self.rng
81+
rng = nr
8382
size = np.size(self.s)
8483
return (rng.standard_exponential(size=size) - rng.standard_exponential(size=size)) * self.s
8584

8685

8786
class PoissonProposal(Proposal):
8887
def __call__(self, rng: Optional[np.random.Generator] = None):
8988
if rng is None:
90-
rng = self.rng
89+
rng = nr
9190
return rng.poisson(lam=self.s, size=np.size(self.s)) - self.s
9291

9392

9493
class MultivariateNormalProposal(Proposal):
95-
def __init__(self, *args, **kwargs):
96-
super().__init__(*args, **kwargs)
97-
n, m = self.s.shape
94+
def __init__(self, s):
95+
n, m = s.shape
9896
if n != m:
9997
raise ValueError("Covariance matrix is not symmetric.")
10098
self.n = n
101-
self.chol = scipy.linalg.cholesky(self.s, lower=True)
99+
self.chol = scipy.linalg.cholesky(s, lower=True)
102100

103101
def __call__(self, num_draws=None, rng: Optional[np.random.Generator] = None):
104102
if rng is None:
105-
rng = self.rng
103+
rng = nr
106104
if num_draws is not None:
107105
b = rng.normal(size=(self.n, num_draws))
108106
return np.dot(self.chol, b).T

0 commit comments

Comments
 (0)