On Thu, Mar 14, 2013 at 11:00 AM, Neal Becker <[email protected]> wrote: > Robert Kern wrote: > >> On Wed, Mar 13, 2013 at 12:16 AM, Neal Becker <[email protected]> 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;
PyObject_IsInstance() should be sufficient. http://docs.python.org/2/c-api/object.html#PyObject_IsInstance -- Robert Kern _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
