<div dir="ltr"><div>On Wed, Jul 20, 2016 at 4:28 AM, Hannah <span dir="ltr"><<a href="mailto:story645@gmail.com" target="_blank">story645@gmail.com</a>></span> wrote:<br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div>Hi, <br></div>I started venturing down the rabbit hole of trying to write a patch to add support for numpy to convert python 3 dictionary keys (collections.abc.ViewMapping objects), which is open issue #5718 and am having trouble orienting myself. I'm unclear as to where the python entry point into array is (basically, what function np.array drops into and if this is in Python or C) and where/what language (fine with writing either) a patch that supports MappingViews would go. Any help getting oriented would be much appreciated. <br></div></div></div></blockquote><div><br></div><div>Hi Hannah,<div><br></div><div><font face="monospace, monospace">ǹp.array</font> is written in C, and is part of the multiarray module that is defined here:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c</a><br></div><div><br></div><div>The "array" name is mapped here:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L4093">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L4093</a><br></div><div><br></div><div>to the function <font face="monospace, monospace">_array_fromobject</font> defined here:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L1557">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L1557</a><br></div><div><br></div><div>That functions does some checking and has a couple of fast paths for the case where the input is already an array or a subclass, but for the general case it relies on <font face="monospace, monospace">PyArray_CheckFromAny</font>:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1848">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1848</a><br></div><div><br></div><div>which in turn calls <font face="monospace, monospace">Pyarray_FromAny</font>:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1674">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1674</a><br></div><div><br></div><div>You will also haveto take a look at what goes on in <font face="monospace, monospace">PyArray_GetArrayParamsFromObject</font>, which gets called by <font face="monospace, monospace">PyArray_FromAny</font>;</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1428">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1428</a><br></div><div><br></div><div>as well as several other places, but I think they are all (or most of them) in ctors.c.</div><div><br></div><div>You may also want to take a llok at <font face="monospace, monospace">PyArray_FromIter</font>, which is the function that ultimately takes care of calls to <font face="monospace, monospace">np.fromiter</font>:</div><div><br></div><div><a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L3657">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L3657</a><br></div><div><br></div><div>It's messy, but not that bad once you get used to it: good luck!</div><div><br></div><div>Jaime</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><br></div><div>The reasoning for the patch is s that dicts are one of the most common Python datatypes and this specifically is because of an upstream issue of wanting dict support in matplotlib. <br><br></div>Thanks, <br></div>Hannah<br></div>
<br>_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">(\__/)<br>( O.o)<br>( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes de dominación mundial.</div>
</div></div>