2013/6/14 Mike Beller <mike@tradeworx.com>
It seems to me one needs to modify ndarray.__new__ so it can take a named buffer= argument, where that argument can be an mmap object.   Currently the python ndarray.__new__ can accept such an argument, but the numpypy one does not appear to.

Correct. 
 
When I try to figure out the changes to interp_numarray.py to make it work, it goes way over my head.

Hey, you need to get used to our RPython language. At least you opened the correct file, that's a great first step :-). In interp_numarray.py:

- the block starting with "W_NDimArray.typedef" describe the type and the methods. There is a "__new__" entry, which describes the constructor. The implementation is descr_new_array().

- in descr_new_array(), the variables that start with "w_" are Wrapped objects, i.e. visible to Python (similar to PyObject* in the CPython implementation). At the moment there is a check for "space.is_none(w_buffer)", we'll have to remove it of course.

- The goal is to use the memory allocated for w_buffer memory instead of allocating a new one.
So don't call W_NDimArray.from_shape(), call W_NDimArray.from_shape_and_storage() instead, it takes the raw address of the buffer. That's it!

Of course I skipped over all the details, so the first thing to do is to write a unit test to be sure that everything works correctly before building a new PyPy.

--
Amaury Forgeot d'Arc