<div class="gmail_quote">On Fri, Jul 17, 2009 at 10:03 AM, Darren Dale <span dir="ltr">&lt;<a href="mailto:dsdale24@gmail.com">dsdale24@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="gmail_quote"><div><div></div><div class="h5">On Mon, Jul 13, 2009 at 7:12 PM, Darren Dale <span dir="ltr">&lt;<a href="mailto:dsdale24@gmail.com" target="_blank">dsdale24@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div class="gmail_quote">2009/7/13 Stéfan van der Walt <span dir="ltr">&lt;<a href="mailto:stefan@sun.ac.za" target="_blank">stefan@sun.ac.za</a>&gt;</span><div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


Hi Darren<br>
<br>
2009/7/13 Darren Dale &lt;<a href="mailto:dsdale24@gmail.com" target="_blank">dsdale24@gmail.com</a>&gt;:<br>
<div>&gt; I&#39;ve put together a first cut at implementing __array_prepare__, which<br>
&gt; appears to work, and I would like to request feedback. Here is an overview<br>
&gt; of the approach:<br>
<br>
</div>This is pretty neat!  Do you have a quick snippet at hand illustrating its use?</blockquote></div><div><br>That would be helpful, wouldn&#39;t it? The attached script is a modified version of RealisticInfoArray from <a href="http://docs.scipy.org/doc/numpy/user/basics.subclassing.html" target="_blank">http://docs.scipy.org/doc/numpy/user/basics.subclassing.html</a> . It should yield the following output:<br>


<br> <br></div></div>starting with [0 1 2 3 4]<br>which is of type &lt;class &#39;__main__.MyArray&#39;&gt;<br>and has info attribute = &quot;information&quot;<br>subtracting 3 from [0 1 2 3 4]<br>subtract calling __array_prepare__ on [0 1 2 3 4] input<br>


output array is now of type &lt;class &#39;__main__.MyArray&#39;&gt;<br>output array values are still uninitialized:<br>        [139911601789568        39578752 139911614885536        39254560<br>              48]<br>__array_prepare__ is updating info attribute on output<br>


__array_prepare__ finished, subtract ufunc is taking over<br>subtract calling __array_wrap__ on [0 1 2 3 4] input<br>output array has initial value: [-3 -2 -1  0  1]<br>__array_wrap__ is setting output endpoints to 0<br>

yielding [ 0 -2 -1  0  0]<br>
which is of type &lt;class &#39;__main__.MyArray&#39;&gt;<br>and has info attribute = &quot;new_information&quot;<br><font color="#888888"></font></blockquote></div></div><div><br>This is a gentle ping, hoping to get some feedback so this feature has a chance of being included in the next release.</div>
</div></blockquote><div><br>I have a question about the C-api. If I want to make the default implementation of __array_prepare__ (or __array_wrap__, is anyone out there?) simply pass through the output array:<br><br> static PyObject *<br>
array_preparearray(PyArrayObject *self, PyObject *args)<br>{<br>    PyObject *arr;<br><br>    if (PyTuple_Size(args) &lt; 1) {<br>        PyErr_SetString(PyExc_TypeError,<br>                        &quot;only accepts 1 argument&quot;);<br>
        return NULL;<br>    }<br>    arr = PyTuple_GET_ITEM(args, 0);<br>    if (!PyArray_Check(arr)) {<br>        PyErr_SetString(PyExc_TypeError,<br>                        &quot;can only be called with ndarray object&quot;);<br>
        return NULL;<br>    }<br>    return arr;<br>} <br></div></div><br>Is this sufficient, or do I need to worry about calling Py_INCREF?<br><br>Thanks,<br>Darren<br>