--rquOkQCFkL Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit TP> + The ability to override the random number generator. Python's TP> default WH generator is showing its age as machines get TP> faster; it's simply not adequate anymore for long-running TP> programs making heavy use of it on a fast box. Combinatorial TP> algorithms in particular do tend to make heavy use of it. TP> (Speaking of which, "someone" should look into grabbing one of TP> the Mersenne Twister extensions for Python -- that's the TP> current state of *that* art). The last time we talked about random number generation, I remember finding a tiny algorithm by Pierre L'Ecuyer based on a recommendation from Luc Devroye. (That's a good pedigree!) Here's an almost equally tiny C extension that wraps up the algorithm. We should do a real test of it. Last time I checked, it wasn't obvious how to actually run the DIEHARD tests. Jeremy --rquOkQCFkL Content-Type: application/octet-stream Content-Disposition: attachment; filename="plerandommodule.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgIlB5dGhvbi5oIgoKUHlEb2NfU1RSVkFSKHBsZXJhbmRvbV9kb2MsCiJBIHVu aWZvcm0gWzAsIDFdIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuIgoiXG4iCiJUaGUgYWxn b3JpdGhtIHdhcyBkZXZlbG9wZWQgYnkgUGllcnJlIExlY3V5ZXIgYmFzZWQgb24gYSBjbGV2 ZXJcbiIKImFuZCB0ZXN0ZWQgY29tYmluYXRpb24gb2YgdHdvIGxpbmVhciBjb25ncnVlbnRp YWwgc2VxdWVuY2VzLlxuIgoiXG4iCiJMdWMgRGV2cm95ZSB3cml0ZXM6IEkgZ2V0IGZyZXF1 ZW50bHkgYXNrZWQgZm9yIGEgZ29vZCByZWxpYWJsZVxuIgoidW5pZm9ybSByYW5kb20gbnVt YmVyIGdlbmVyYXRvci4gVGhlcmUgaXMgbm8gc3VjaCB1bml2ZXJzYWwgYmVhc3QsXG4iCiJi dXQgdGhlIGxpbmsgW3RvIGEgc21hbGwgQyBpbXBsZW1lbnRhdGlvbl0gYWJvdmUgbGV0cyB5 b3UgZG93bmxvYWRcbiIKImEgaGlnaCBxdWFsaXR5IGdlbmVyYXRvci5cbiIKIlxuIgoiaHR0 cDovL3d3dy1jZ3JsLmNzLm1jZ2lsbC5jYS9+bHVjL2xlY3V5ZXIuYyAgICBcbiIKIlxuIik7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgUHlPYmplY3RfSEVBRAogICAgICAgIGxvbmcg czEsIHMyOwp9IEdlbmVyYXRvck9iamVjdDsKClB5RG9jX1NUUlZBUihwbGVyYW5kb21fcmFu ZG9tX2RvYywKIkdldCB0aGUgbmV4dCByYW5kb20gbnVtYmVyIGluIHRoZSByYW5nZSBbMC4w LCAxLjApLlxuIik7CgovKiBXZSBkb24ndCBuZWVkIGEgbG9jayBmb3IgcmFuZG9tKCkgdGhl IHdheSB3aHJhbmRvbSBkb2VzLCBiZWNhdXNlIHRoaXMKICAgaXNuJ3QgZXhlY3V0aW5nIGFu eSBQeXRob24gY29kZS4gIEdJTCB0byB0aGUgcmVzY3VlIGFnYWluLgoqLwoKc3RhdGljIFB5 T2JqZWN0ICoKcGxlcmFuZG9tX3JhbmRvbShQeU9iamVjdCAqc2VsZikKewoJc3RhdGljIGRv dWJsZSBmYWN0b3IgPSAxLjAvMjE0NzQ4MzU2My4wOwoJcmVnaXN0ZXIgbG9uZyBrLHo7CglH ZW5lcmF0b3JPYmplY3QgKmcgPSAoR2VuZXJhdG9yT2JqZWN0ICopc2VsZjsKCWsgPSBnLT5z MSAvIDUzNjY4OwoJZy0+czEgPSA0MDAxNCAqIChnLT5zMSAlIDUzNjY4KSAtIGsgKiAxMjIx MTsKCWlmIChnLT5zMSA8IDApIAoJCWctPnMxICs9IDIxNDc0ODM1NjM7CglrID0gZy0+czIg LyA1Mjc3NDsKCWctPnMyID0gNDA2OTIgKiAoZy0+czIgJSA1Mjc3NCkgLSBrICogMzc5MTsK CWlmIChnLT5zMiA8IDApIAoJCWctPnMyICs9IDIxNDc0ODMzOTk7CgoJLyoKCXogPSBhYnMo czEgXiBzMik7CgkqLwoJeiA9IChnLT5zMSAtIDIxNDc0ODM1NjMpICsgZy0+czI7CglpZiAo eiA8IDEpIAoJCXogKz0gMjE0NzQ4MzU2MjsKCQkKCXJldHVybiBQeUZsb2F0X0Zyb21Eb3Vi bGUoKChkb3VibGUpKHopKSpmYWN0b3IpOwp9CgpQeURvY19TVFJWQVIocGxlcmFuZG9tX3Nl ZWRfZG9jLAoiU2V0IHRoZSBzZWVkLlxuIik7CgpzdGF0aWMgUHlPYmplY3QgKgpwbGVyYW5k b21fc2VlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCnsKICAgICAgICBpbnQg czE7CiAgICAgICAgaW50IHMyOwogICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdz LCAiaWk6c2VlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzMSwgJnMyKSkK ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwoKCSgoR2VuZXJhdG9yT2JqZWN0ICopc2Vs ZiktPnMxID0gczE7CgkoKEdlbmVyYXRvck9iamVjdCAqKXNlbGYpLT5zMSA9IHMyOwoKCVB5 X0lOQ1JFRihQeV9Ob25lKTsKCXJldHVybiBQeV9Ob25lOwp9CgpzdGF0aWMgaW50CnBsZXJh bmRvbV9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKewoJR2VuZXJhdG9y T2JqZWN0ICpnID0gKEdlbmVyYXRvck9iamVjdCAqKXNlbGY7Cglsb25nIHMxID0gNTU1NTUs IHMyID0gOTk5OTk7CgkKCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGlpOnBsZXJh bmRvbSIsIHMxLCBzMikpCgkJcmV0dXJuIDA7CglnLT5zMSA9IHMyOwoJZy0+czIgPSBzMjsK CXJldHVybiAxOwp9CgpzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHBsZXJhbmRvbV9tZXRo b2RzW10gPSB7Cgl7InJhbmRvbSIsIChQeUNGdW5jdGlvbilwbGVyYW5kb21fcmFuZG9tLCBN RVRIX05PQVJHUywKICAgICAgICAgcGxlcmFuZG9tX3JhbmRvbV9kb2N9LAoJeyJzZWVkIiwg KFB5Q0Z1bmN0aW9uKXBsZXJhbmRvbV9zZWVkLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgIHBs ZXJhbmRvbV9zZWVkX2RvY30sCgl7TlVMTCwgTlVMTH0KfTsKCnN0YXRpYyBQeVR5cGVPYmpl Y3QgUHlwbGVyYW5kb21fVHlwZSA9IHsKICAgICAgICBQeU9iamVjdF9IRUFEX0lOSVQoMCkK ICAgICAgICAwLAkJCQkvKiBvYl9zaXplICovCiAgICAgICAgInBsZXJhbmRvbS5wbGVyYW5k b20iLAkvKiB0cF9uYW1lICovCiAgICAgICAgc2l6ZW9mKEdlbmVyYXRvck9iamVjdCksCS8q IHRwX2Jhc2ljc2l6ZSAqLwogICAgICAgIDAsCQkJCS8qIHRwX2l0ZW1zaXplICovCiAgICAg ICAgMCwJCQkJLyogdHBfZGVhbGxvYyAqLwogICAgICAgIDAsCQkJCS8qIHRwX3ByaW50ICov CiAgICAgICAgMCwJCQkJLyogdHBfZ2V0YXR0ciAqLwogICAgICAgIDAsCQkJCS8qIHRwX3Nl dGF0dHIgKi8KICAgICAgICAwLAkJCQkvKiB0cF9jb21wYXJlICovCiAgICAgICAgMCwJCQkJ LyogdHBfcmVwciAqLwogICAgICAgIDAsCQkJCS8qIHRwX2FzX251bWJlciAqLwogICAgICAg IDAsCQkJCS8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgICAgMCwJCQkJLyogdHBfYXNfbWFw cGluZyAqLwogICAgICAgIDAsCQkJCS8qIHRwX2hhc2ggKi8KICAgICAgICAwLAkJCQkvKiB0 cF9jYWxsICovCiAgICAgICAgMCwJCQkJLyogdHBfc3RyICovCiAgICAgICAgUHlPYmplY3Rf R2VuZXJpY0dldEF0dHIsCS8qIHRwX2dldGF0dHJvICovCiAgICAgICAgMCwJCQkJLyogdHBf c2V0YXR0cm8gKi8KICAgICAgICAwLAkJCQkvKiB0cF9hc19idWZmZXIgKi8KICAgICAgICBQ eV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLAkJLyogdHBfZmxhZ3Mg Ki8KICAgICAgICAwLAkJCQkvKiB0cF9kb2MgKi8KICAgICAgICAwLAkJCQkvKiB0cF90cmF2 ZXJzZSAqLwogICAgICAgIDAsCQkJCS8qIHRwX2NsZWFyICovCiAgICAgICAgMCwJCQkJLyog dHBfcmljaGNvbXBhcmUgKi8KICAgICAgICAwLAkJCQkvKiB0cF93ZWFrbGlzdG9mZnNldCAq LwogICAgICAgIDAsCQkJCS8qIHRwX2l0ZXIgKi8KICAgICAgICAwLAkJCQkvKiB0cF9pdGVy bmV4dCAqLwogICAgICAgIHBsZXJhbmRvbV9tZXRob2RzLAkJLyogdHBfbWV0aG9kcyAqLwog ICAgICAgIDAsCQkJCS8qIHRwX21lbWJlcnMgKi8KICAgICAgICAwLAkJCQkvKiB0cF9nZXRz ZXQgKi8KICAgICAgICAwLAkJCQkvKiB0cF9iYXNlICovCiAgICAgICAgMCwJCQkJLyogdHBf ZGljdCAqLwogICAgICAgIDAsCQkJCS8qIHRwX2Rlc2NyX2dldCAqLwogICAgICAgIDAsCQkJ CS8qIHRwX2Rlc2NyX3NldCAqLwogICAgICAgIDAsCQkJCS8qIHRwX2RpY3RvZmZzZXQgKi8K ICAgICAgICAoaW5pdHByb2MpcGxlcmFuZG9tX2luaXQsCS8qIHRwX2luaXQgKi8KICAgICAg ICBQeVR5cGVfR2VuZXJpY0FsbG9jLAkJLyogdHBfYWxsb2MgKi8KICAgICAgICBQeVR5cGVf R2VuZXJpY05ldywJCS8qIHRwX25ldyAqLwogICAgICAgIDAsCQkJCS8qIHRwX2ZyZWUgKi8K ICAgICAgICAwLAkJCQkvKiB0cF9pc19nYyAqLwp9OwoKUHlNT0RJTklUX0ZVTkMKaW5pdHBs ZXJhbmRvbSh2b2lkKQp7CiAgICAgICAgUHlPYmplY3QgKm1vZDsKCiAgICAgICAgbW9kID0g UHlfSW5pdE1vZHVsZTMoInBsZXJhbmRvbSIsIHBsZXJhbmRvbV9tZXRob2RzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBsZXJhbmRvbV9kb2MpOwogICAgICAgIGlmIChtb2Qg PT0gTlVMTCkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgUHlwbGVyYW5kb21f VHlwZS5vYl90eXBlID0gJlB5VHlwZV9UeXBlOwogICAgICAgIFB5cGxlcmFuZG9tX1R5cGUu dHBfZGVhbGxvYyA9IChkZXN0cnVjdG9yKSZQeU9iamVjdF9EZWw7CiAgICAgICAgaWYgKCFQ eU9iamVjdF9TZXRBdHRyU3RyaW5nKG1vZCwgInBsZXJhbmRvbSIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeXBsZXJhbmRvbV9UeXBlKSkK ICAgICAgICAgICAgICAgIHJldHVybjsKCn0K --rquOkQCFkL Content-Type: application/octet-stream Content-Disposition: attachment; filename="setup.py" Content-Transfer-Encoding: base64 ZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KZnJvbSBkaXN0dXRp bHMuY29yZSBpbXBvcnQgc2V0dXAKCnNldHVwKG5hbWU9InBsZXJhbmRvbSIsCiAgICAgIGRl c2NyaXB0aW9uPSJBIGhpZ2ggcXVhbGl0eSB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJh dG9yLiIsCiAgICAgIGV4dF9tb2R1bGVzID0gW0V4dGVuc2lvbihuYW1lPSJwbGVyYW5kb20i LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcz1bInBsZXJhbmRvbW1v ZHVsZS5jIl0pXQogICAgICApCgppbXBvcnQgcGxlcmFuZG9tCnIgPSBwbGVyYW5kb20ucGxl cmFuZG9tKCkKcHJpbnQgci5yYW5kb20oKQpwcmludCByLnJhbmRvbSgpCg== --rquOkQCFkL--
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4