[Numpy-discussion] Adopt Mersenne Twister 64bit?
Neal Becker
ndbecker2 at gmail.com
Thu Mar 14 07:00:39 EDT 2013
Robert Kern wrote:
> On Wed, Mar 13, 2013 at 12:16 AM, Neal Becker <ndbecker2 at gmail.com> wrote:
>> I guess I talked to you about 100 years ago about sharing state between numpy
>> rng and code I have in c++ that wraps boost::random. So is there a C-api for
>> this RandomState object I could use to call from c++? Maybe I could do
>> something with that.
>
> There is not one currently. Cython has provisions for sharing such
> low-level access to other Cython extensions, but I'm not sure how well
> it works for exporting data pointers and function pointers to general
> C/++ code. We could probably package the necessities into a struct and
> export a pointer to it via a PyCapsule.
>
One thing this code doesn't do: it requires construction of the wrapper class
passing in a RandomState object. It doesn't verify you actually gave it a
RandomState object. It's hard to do that. The problem as I see it is to
perform this check, I need the RandomStateType object, which unfortunately
mtrand.so does not export.
The only way to do it is in c++ code:
1. import numpy.random
2. get RandomState class
3. call it to create RandomState instance
4. get the ob_type pointer.
Pretty ugly:
object mod = object (handle<>
(borrowed((PyImport_ImportModule("numpy.random")))));
object rs_obj = mod.attr("RandomState");
object rs_inst = call<object> (rs_obj.ptr(), 0);
RandomStateTypeObj = rs_inst.ptr()->ob_type;
More information about the NumPy-Discussion
mailing list