On Fri, Mar 13, 2015 at 5:59 PM, Neal Becker <ndbeck...@gmail.com> wrote: > > Robert Kern wrote: > > > On Fri, Mar 13, 2015 at 5:34 PM, Neal Becker <ndbeck...@gmail.com> wrote: > >> > >> It is common that to guarantee good statistical independence between > > various > >> random generators, a singleton instance of an RNG is shared between them. > >> > >> So I typically have various random generator objects, which (sometimes > >> several levels objects deep) embed an instance of RandomState. > >> > >> Now I have a requirement to copy a generator object (without knowing > > exactly > >> what that generator object is). > > > > Or rather, you want the generator object to *avoid* copies by returning > > itself when a copy is requested of it. > > > >> My solution is to use deepcopy on the top-level object. But I need to > >> overload __deepcopy__ on the singleton RandomState object. > >> > >> Unfortunately, RandomState doesn't allow customization of __deepcopy__ > >> (or > >> anything else). And it has no __dict__. > > > > You can always subclass RandomState to override its __deepcopy__. > > > > -- > > Robert Kern > > Yes, I think I prefer this: > > from numpy.random import RandomState > > class shared_random_state (RandomState): > def __init__ (self, rs): > RandomState.__init__(self, rs) > > def __deepcopy__ (self, memo): > return self > > Although, that means I have to use it like this: > > rs = shared_random_state (0) > > where I really would prefer (for aesthetic reasons): > > rs = shared_random_state (RandomState(0)) > > but I don't know how to do that if shared_random_state inherits from > RandomState.
<shrug> If you insist: class shared_random_state(RandomState): def __init__(self, rs): self.__setstate__(rs.__getstate__()) def __deepcopy__(self, memo): return self -- Robert Kern
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion