diff --git a/plancklens/sims/phas.py b/plancklens/sims/phas.py index 68791dd..bf573ee 100644 --- a/plancklens/sims/phas.py +++ b/plancklens/sims/phas.py @@ -85,11 +85,25 @@ def __init__(self, lib_dir, get_state_func=np.random.get_state, nsims_max=None): self._rng_db = rng_db(os.path.join(lib_dir, 'rngdb.db'), idtype='INTEGER') self._get_rng_state = get_state_func + @staticmethod + def get_state(idx): + """Returns a random number generator state from a seed. """ + #sg = np.random.SeedSequence(idx) + #mt19937 = np.random.MT19937(sg) + #rs = np.random.RandomState(mt19937) + rs = np.random.Generator(np.random.MT19937()) + dictionary = rs.__getstate__() + l = [dictionary[k] for k in dictionary.keys()] + return [l[0], l[1]['key'], l[1]['pos'], 0, 0.0] + #return rs.get_state() + def get_sim(self, idx, **kwargs): """Returns sim number idx and caches random number generator state. """ if self.has_nmax(): assert idx < self.nmax + if not self.is_stored(idx): - self._rng_db.add(idx, self._get_rng_state()) + #self._rng_db.add(idx, self._get_rng_state()) + self._rng_db.add(idx, self.get_state(idx)) return self._build_sim_from_rng(self._rng_db.get(idx), **kwargs) def has_nmax(self): @@ -193,3 +207,4 @@ def get_sim(self, idx, idf=None, phas_only=False): def hashdict(self): return {'nfields': self.nfields, 'lmax':self.lmax} +