[Python-Dev] random number generator state (original) (raw)

Scott David Daniels Scott.Daniels at Acm.Org
Sat Aug 15 21:54:41 CEST 2009


I find I have a need in randomized testing for a shorter version of getstate, even if it is slower to restore. When running exhaustive tests, a failure report should show the start state of the generator. Unfortunately, our current state includes a 625-element array. I want a state that can be read off a report and typed in to reproduce the state. Something a bit like the initial seed, a count of cycle calls, and a few other things.

So, in addition to .getstate() and .setstate(...), I'd at least need to have .get_slow_state() and possibly expand what .setstate(...) takes. However, a call to .setstate should reset the counter or all is for naught. That means I need to change the results of .getstate, thus giving me three kinds of input to .setstate: old, new-short, and new-long. In trying to get this to work, I found what might be a bug: code says mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array / but probably should be: mt[0] |= 0x80000000UL; / MSB is 1; assuring non-zero initial array */

In checking into that issue, I went to the original Mersenne-Twister code, and I see the original authors are pursuing a newer generator, dSFMT.

I now have a dilemma. Should I continue the work on the original M-T code (which is now seeming problematic for compatibility) or simply make a new generator with similar calls using dSFMT and put the new feature in that where there is no compatibility problem. Which would be more useful for the Python community?

--Scott David Daniels Scott.Daniels at Acm.Org



More information about the Python-Dev mailing list