On Mon, May 7, 2012 at 11:40 AM, Dag Sverre Seljebotn
<d.s.seljeb...@astro.uio.no> wrote:
>
> mark florisson <markflorisso...@gmail.com> wrote:
>
>>On 7 May 2012 17:00, Dag Sverre Seljebotn <d.s.seljeb...@astro.uio.no>
>>wrote:
>>> On 05/07/2012 04:16 PM, Stefan Behnel wrote:
>>>>
>>>> Stefan Behnel, 07.05.2012 15:04:
>>>>>
>>>>> Dag Sverre Seljebotn, 07.05.2012 13:48:
>>>>>>
>>>>>> BTW, with the coming of memoryviews, me and Mark talked about just
>>>>>> deprecating the "mytype[...]" meaning buffers, and rather treat it
>>as
>>>>>> np.ndarray, array.array etc. being some sort of "template types".
>>That
>>>>>> is,
>>>>>> we disallow "object[int]" and require some special declarations in
>>the
>>>>>> relevant pxd files.
>>>>>
>>>>>
>>>>> Hmm, yes, it's unfortunate that we have two different types of
>>syntax
>>>>> now,
>>>>> one that declares the item type before the brackets and one that
>>declares
>>>>> it afterwards.
>>>>
>>>>
>>>> I actually think this merits some more discussion. Should we
>>consider the
>>>> buffer interface syntax deprecated and focus on the memory view
>>syntax?
>>>
>>>
>>> I think that's the very-long-term intention. Then again, it may be
>>too early
>>> to really tell yet, we just need to see how the memory views play out
>>in
>>> real life and whether they'll be able to replace np.ndarray[double]
>>among
>>> real users. We don't want to shove things down users throats.
>>>
>>> But the use of the trailing-[] syntax needs some cleaning up. Me and
>>Mark
>>> agreed we'd put this proposal forward when we got around to it:
>>>
>>>  - Deprecate the "object[double]" form, where [dtype] can be stuck on
>>any
>>> extension type
>>>
>>>  - But, do NOT (for the next year at least) deprecate
>>np.ndarray[double],
>>> array.array[double], etc. Basically, there should be a magic flag in
>>> extension type declarations saying "I can be a buffer".
>>>
>>> For one thing, that is sort of needed to open up things for templated
>>cdef
>>> classes/fused types cdef classes, if that is ever implemented.
>>
>>Deprecating is definitely a good start. I think at least if you only
>>allow two types as buffers it will be at least reasonably clear when
>>one is dealing with fused types or buffers.
>>
>>Basically, I think memoryviews should live up to demands of the users,
>>which would mean there would be no reason to keep the buffer syntax.
>
> But they are different approaches -- use a different type/API, or just try to 
> speed up parts of NumPy..

Part of the question here is whether using np.ndarray[...] currently
(or will) offer any additional functionality.

While we should likely start steering people this direction,
especially over object[...], it seems too soon to deprecate the
old-style buffer access.

>>One thing to do is make memoryviews coerce cheaply back to the
>>original objects if wanted (which is likely). Writting
>>np.asarray(mymemview) is kind of annoying.
>>
>
>
> It is going to be very confusing to have type(mymemview), repr(mymemview), 
> and so on come out as NumPy arrays, but not have the full API of NumPy. 
> Unless you auto-convert on getattr to...
>
> If you want to eradicate the distinction between the backing array and the 
> memory view and make it transparent, I really suggest you kick back alive 
> np.ndarray (it can exist in some 'unrealized' state with delayed construction 
> after slicing, and so on). Implementation much the same either way, it is all 
> about how it is presented to the user.
>
> Something like mymemview.asobject() could work though, and while not much 
> shorter, it would have some polymorphism that np.asarray does not have (based 
> probably on some custom PEP 3118 extension)

I think it's valuable to have a single name refer to both the Python
object (on which methods can be called, and a new one might have to be
created if there was slicing) and the memory view. In this light,
being able to specify something is both a NumPy array (to use some
(overlay optimized?) methods on it and a memory view (for fast
indexing) without having two different variables can result in much
cleaner code (and an easier transition from untyped NumPy).

>>Also, OT (sorry), but I'm kind of worried about the memoryview ABI. If
>>it changes (and I intend to do so), cython modules compiled with
>>different cython versions will become incompatible if they call each
>>other through pxds. Maybe that should be defined as UB...
>>
>>> The semantic meaning of trailing [] is still sort of like the C++
>>meaning;
>>> that it templates the argument types (except it's lots of special
>>cases in
>>> the compiler for various things rather than a Turing-complete
>>template
>>> language...)
>>>
>>> Dag
>>>
>>>>
>>>> The words-to-punctuation ratio of the latter may hurt the eyes when
>>>> encountering it unprepared, but at least it doesn't require two type
>>>> names,
>>>> of which the one before the brackets (i.e. "object") is mostly
>>useless.
>>>> (Although it does reflect the notion that we are dealing with an
>>object
>>>> here ...)
>>>>
>>>> Stefan
>>>> _______________________________________________
>>>> cython-devel mailing list
>>>> cython-devel@python.org
>>>> http://mail.python.org/mailman/listinfo/cython-devel
>>>
>>>
>>> _______________________________________________
>>> cython-devel mailing list
>>> cython-devel@python.org
>>> http://mail.python.org/mailman/listinfo/cython-devel
>>_______________________________________________
>>cython-devel mailing list
>>cython-devel@python.org
>>http://mail.python.org/mailman/listinfo/cython-devel
>
> --
> Sent from my Android phone with K-9 Mail. Please excuse my brevity.
> _______________________________________________
> cython-devel mailing list
> cython-devel@python.org
> http://mail.python.org/mailman/listinfo/cython-devel
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to