|
50 | 50 |
|
51 | 51 |
|
52 | 52 | class Proposal:
|
53 |
| - def __init__(self, s, rng_seed: Optional[int] = None): |
| 53 | + def __init__(self, s): |
54 | 54 | self.s = s
|
55 |
| - self.rng = np.random.default_rng(rng_seed) |
56 | 55 |
|
57 | 56 |
|
58 | 57 | class NormalProposal(Proposal):
|
59 | 58 | def __call__(self, rng: Optional[np.random.Generator] = None):
|
60 | 59 | if rng is None:
|
61 |
| - rng = self.rng |
| 60 | + rng = nr |
62 | 61 | return rng.normal(scale=self.s)
|
63 | 62 |
|
64 | 63 |
|
65 | 64 | class UniformProposal(Proposal):
|
66 | 65 | def __call__(self, rng: Optional[np.random.Generator] = None):
|
67 | 66 | if rng is None:
|
68 |
| - rng = self.rng |
| 67 | + rng = nr |
69 | 68 | return rng.uniform(low=-self.s, high=self.s, size=len(self.s))
|
70 | 69 |
|
71 | 70 |
|
72 | 71 | class CauchyProposal(Proposal):
|
73 | 72 | def __call__(self, rng: Optional[np.random.Generator] = None):
|
74 | 73 | if rng is None:
|
75 |
| - rng = self.rng |
| 74 | + rng = nr |
76 | 75 | return rng.standard_cauchy(size=np.size(self.s)) * self.s
|
77 | 76 |
|
78 | 77 |
|
79 | 78 | class LaplaceProposal(Proposal):
|
80 | 79 | def __call__(self, rng: Optional[np.random.Generator] = None):
|
81 | 80 | if rng is None:
|
82 |
| - rng = self.rng |
| 81 | + rng = nr |
83 | 82 | size = np.size(self.s)
|
84 | 83 | return (rng.standard_exponential(size=size) - rng.standard_exponential(size=size)) * self.s
|
85 | 84 |
|
86 | 85 |
|
87 | 86 | class PoissonProposal(Proposal):
|
88 | 87 | def __call__(self, rng: Optional[np.random.Generator] = None):
|
89 | 88 | if rng is None:
|
90 |
| - rng = self.rng |
| 89 | + rng = nr |
91 | 90 | return rng.poisson(lam=self.s, size=np.size(self.s)) - self.s
|
92 | 91 |
|
93 | 92 |
|
94 | 93 | 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 |
98 | 96 | if n != m:
|
99 | 97 | raise ValueError("Covariance matrix is not symmetric.")
|
100 | 98 | self.n = n
|
101 |
| - self.chol = scipy.linalg.cholesky(self.s, lower=True) |
| 99 | + self.chol = scipy.linalg.cholesky(s, lower=True) |
102 | 100 |
|
103 | 101 | def __call__(self, num_draws=None, rng: Optional[np.random.Generator] = None):
|
104 | 102 | if rng is None:
|
105 |
| - rng = self.rng |
| 103 | + rng = nr |
106 | 104 | if num_draws is not None:
|
107 | 105 | b = rng.normal(size=(self.n, num_draws))
|
108 | 106 | return np.dot(self.chol, b).T
|
|
0 commit comments