[pypy-dev] pickle numpy array from pypy to cpython?
Eli Stevens (Gmail)
wickedgrey at gmail.com
Sat Jun 25 02:01:14 EDT 2016
I was thinking about doing it on import of the micronumpy module
(pypy/module/micronumpy/app_numpy.py).
Right now, when I try and import pickle during the tests:
$ cat pypy/module/micronumpy/test/test_pickling_app.py
import sys
import py
from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest
from pypy.conftest import option
class AppTestPicklingNumpy(BaseNumpyAppTest):
def setup_class(cls):
if option.runappdirect and '__pypy__' not in sys.builtin_module_names:
py.test.skip("pypy only test")
BaseNumpyAppTest.setup_class.im_func(cls)
def test_pickle_module(self):
import pickle
... # more code
I get this error:
> import struct
lib-python/2.7/pickle.py:34:
_ _ _ _ _ _
> from _struct import *
E (application-level) ImportError: No module named _struct
lib-python/2.7/struct.py:1: ImportError
But everything seems fine with struct:
$ ./pytest.py pypy/module/struct/test/test_struct.py
==== test session starts ====
platform linux2 -- Python 2.7.11 -- py-1.4.20 -- pytest-2.5.2
pytest-2.5.2 from /home/elis/edit/play/pypy/pytest.pyc
collected 30 items
pypy/module/struct/test/test_struct.py ..............................
==== 30 passed in 11.95 seconds ====
Any idea what's going on here?
Thanks,
Eli
On Fri, Jun 24, 2016 at 9:19 PM, matti picus <matti.picus at gmail.com> wrote:
> Sounds reasonable. You might want to generalize it a bit by trying to import
> _numpypy /numpy, and setting up the replacement by whichever fails to
> import.
> Matti
>
> On Saturday, 25 June 2016, Eli Stevens (Gmail) <wickedgrey at gmail.com> wrote:
>>
>> Heh, interestingly, if I add the following to the local dir and files
>> when trying to unpickle under cpython, it works (note that cpython to
>> pypy actually works out of the box, which I hadn't realized):
>>
>> $ cat _numpypy/__init__.py
>> from numpy.core import *
>>
>> $ cat _numpypy/multiarray.py
>> from numpy.core.multiarray import *
>> import numpy.core.multiarray as _ncm
>> _reconstruct = _ncm._reconstruct
>>
>> This is obviously a total hack, and not one I'm comfortable with
>> (since I need to use this codebase from both cpython and pypy), but it
>> demonstrates that it's just bookkeeping that needs to change to get
>> things to work.
>>
>> My first approach would be to add a wrapper around save_global here
>>
>> https://bitbucket.org/pypy/pypy/src/a0105e0d00dbd0f73d06fc704db704868a6c6ed2/lib-python/2.7/pickle.py?at=default&fileviewer=file-view-default#pickle.py-814
>> that special-cases the global '_numpypy.multiarray' to instead be
>> 'numpy.core.multiarray'. That seem like a reasonable thing to do?
>>
>> Cheers,
>> Eli
>>
>
More information about the pypy-dev
mailing list