<p dir="ltr">I second (and third & fourth &...) this</p>
<p dir="ltr"> Thanks so much for this, Jaime, it's exactly what I was looking for and couldn't find. Maybe this can be linked to in the contribute docs as an "orienting yourself in the codebase" page? <br>
</p>
<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 20, 2016 at 11:07 AM, Joseph Fox-Rabinovitz <span dir="ltr"><<a href="mailto:jfoxrabinovitz@gmail.com" target="_blank">jfoxrabinovitz@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Jaime,<br>
<br>
This is a great intro for people looking to jump into the C side of<br>
things. I have been trying to figure out which bits are the important<br>
ones from looking at the code and the docs. Your post cut out most of<br>
the confusion. Is there some way you would consider adding something<br>
like this this to the docs?<br>
<br>
    -Joe<br>
<div><div><br>
<br>
On Wed, Jul 20, 2016 at 8:52 AM, Jaime Fernández del Río<br>
<<a href="mailto:jaime.frio@gmail.com" target="_blank">jaime.frio@gmail.com</a>> wrote:<br>
> On Wed, Jul 20, 2016 at 4:28 AM, Hannah <<a href="mailto:story645@gmail.com" target="_blank">story645@gmail.com</a>> wrote:<br>
>><br>
>> Hi,<br>
>> I started venturing down the rabbit hole of trying to write a patch to add<br>
>> support for numpy to convert python 3 dictionary keys<br>
>> (collections.abc.ViewMapping objects), which is open issue #5718 and am<br>
>> having trouble orienting myself. I'm unclear as to where the python entry<br>
>> point into array is (basically, what function np.array drops into and if<br>
>> this is in Python or C) and where/what language (fine with writing either) a<br>
>> patch that supports MappingViews would go. Any help getting oriented would<br>
>> be much appreciated.<br>
><br>
><br>
> Hi Hannah,<br>
><br>
> ǹp.array is written in C, and is part of the multiarray module that is<br>
> defined here:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c</a><br>
><br>
> The "array" name is mapped here:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L4093" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L4093</a><br>
><br>
> to the function _array_fromobject defined here:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L1557" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/multiarraymodule.c#L1557</a><br>
><br>
> That functions does some checking and has a couple of fast paths for the<br>
> case where the input is already an array or a subclass, but for the general<br>
> case it relies on PyArray_CheckFromAny:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1848" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1848</a><br>
><br>
> which in turn calls Pyarray_FromAny:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1674" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1674</a><br>
><br>
> You will also haveto take a look at what goes on in<br>
> PyArray_GetArrayParamsFromObject, which gets called by PyArray_FromAny;<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1428" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L1428</a><br>
><br>
> as well as several other places, but I think they are all (or most of them)<br>
> in ctors.c.<br>
><br>
> You may also want to take a llok at PyArray_FromIter, which is the function<br>
> that ultimately takes care of calls to np.fromiter:<br>
><br>
> <a href="https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L3657" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/blob/maintenance/1.11.x/numpy/core/src/multiarray/ctors.c#L3657</a><br>
><br>
> It's messy, but not that bad once you get used to it: good luck!<br>
><br>
> Jaime<br>
><br>
>><br>
>><br>
>> The reasoning for the patch is s that dicts are one of the most common<br>
>> Python datatypes and this specifically is because of an upstream issue of<br>
>> wanting dict support in matplotlib.<br>
>><br>
>> Thanks,<br>
>> Hannah<br>
>><br>
>> _______________________________________________<br>
>> NumPy-Discussion mailing list<br>
>> <a href="mailto:NumPy-Discussion@scipy.org" target="_blank">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>
><br>
><br>
><br>
> --<br>
> (\__/)<br>
> ( O.o)<br>
> ( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes de<br>
> dominación mundial.<br>
><br>
> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@scipy.org" target="_blank">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>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">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>
</div></div></blockquote></div><br></div>