Re: [Python-Dev] Error in PEP3118?

2008-02-19 Thread Travis Oliphant
Lisandro Dalcin wrote:
> On 2/11/08, Travis Oliphant <[EMAIL PROTECTED]> wrote:
>> My perception is that you are seeing too much of a connection between
>> the C-compiler and the PEP description of memory.   Perhaps that's not
>> it, and I'm missing something else.
>>
> 
> Travis, all this make me believe that (perhaps) the 'format'
> specification in the new buffer interface is missing the 'C' or 'F'
> ordering in the case of a countiguos block. I'm missing something? Or
> should we always assume a 'C' ordering?

There is an ability to specify 'F' for the overall buffer.   In the 
description of each element, however, (i.e. in the struct-syntax), the 
multi-dimensional character is always communicated in 'C' order 
(last-dimension varies the fastest).

I thought about adding the ability to specify the multi-dimensional 
order as 'F' in the struct-syntax for each element, but felt against it 
as you can simulate 'F' order by thinking of the array in transpose 
fashion:  i.e.  your 3x5 Fortran-order array is really a 5x3 (C-order 
array).

Of course, the same is true on the larger scale when we are talking 
about multi-dimensional arrays of "elements," but on that level 
connecting with Fortran libraries is much more common and so we have 
found the help useful in NumPy.

-Travis O.

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-16 Thread Nick Coghlan
Greg Ewing wrote:
> It might help to add a note to the effect that this
> example is meant to illustrate that the descriptor doesn't
> have to exactly match the C description, as long as it
> describes the same memory layout.

This sounds like a good idea to me. I doubt Thomas will be the last 
person to miss the distinction between how the C compiler thinks the 
memory is arranged (just a simple list of values) and how the 
application interprets that memory (a 2-dimensional array).

Cheers,
Nick.

-- 
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---
 http://www.boredomandlaziness.org
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-15 Thread Thomas Heller
Travis Oliphant schrieb:
> Thomas Heller wrote:
>> Travis Oliphant schrieb:
>> 
>>> So, I think the example is correct (and intentional).
>> 
>> Sorry, I do not think so.  If you use a 2-d array in the example, you
>> must describe it correctly.  The difference between this pep and the old
> 
> I don't understand what you mean by "must describe it correctly".   The 
[...]

Travis,  it seems anyone except me understands what you say and thinks it
is fine.  So, IMO it would be best to live with this misunderstanding and
close the discussion.

Thanks and sorry about the confusion,
Thomas

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-11 Thread Greg Ewing
Lisandro Dalcin wrote:
> Travis, all this make me believe that (perhaps) the 'format'
> specification in the new buffer interface is missing the 'C' or 'F'
> ordering in the case of a countiguos block.

Not strictly necessary, since you can always reverse the
indices when dealing with Fortran if need be.

You would have to do that anyway when accessing the array
from C, so it's probably better to have the description
always match the C ordering.

(Makes things a bit harder for those people writing their
Python extensions in Fortran, of course. :-)

--
Greg
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-11 Thread Greg Ewing
Travis Oliphant wrote:
> You could 
> argue that it would be more informative by showing the C-equivalent 
> structure as a 2-d array.  However, it would also create the possibility 
> of confusion by implying an absolute relationship between the C-compiler 
> and the type description.

Just to check on something here -- does the C standard
guarantee that

int a[16][4];

and

int b[64];

have the same memory layout, or is it allowed to insert
padding at the ends of the rows or something?

If they are guaranteed to have the same layout, then I'd
agree that the example is correct, but perhaps somewhat
confusing.

It might help to add a note to the effect that this
example is meant to illustrate that the descriptor doesn't
have to exactly match the C description, as long as it
describes the same memory layout.

--
Greg
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-11 Thread Lisandro Dalcin
On 2/11/08, Travis Oliphant <[EMAIL PROTECTED]> wrote:
> My perception is that you are seeing too much of a connection between
> the C-compiler and the PEP description of memory.   Perhaps that's not
> it, and I'm missing something else.
>

Travis, all this make me believe that (perhaps) the 'format'
specification in the new buffer interface is missing the 'C' or 'F'
ordering in the case of a countiguos block. I'm missing something? Or
should we always assume a 'C' ordering?


-- 
Lisandro Dalcín
---
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-02-11 Thread Travis Oliphant
Thomas Heller wrote:
> Travis Oliphant schrieb:
> 
>>
>> The intent of the struct syntax is to handle describing memory.  The 
>> point is not to replicate how the C-compiler deals with statically 
>> defined N-D arrays.  Thus, even though the struct syntax allows 
>> *communicating* the intent of a contiguous block of memory inside a 
>> structure as an N-d array, the fundamental memory block is the 
>> equivalent of a 1-d array in C.
>>
>> So, I think the example is correct (and intentional).
> 
> Sorry, I do not think so.  If you use a 2-d array in the example, you
> must describe it correctly.  The difference between this pep and the old
> buffer interface is that the pep allows to describe both how the compiler
> sees the memory block plus the size and layout of the memory block, while
> the old buffer interface only describes single-segment memory blocks.
> And 'double data[16][4]' *is* a single memory block containing a 2-d array,
> and *not* an array of pointers.
> 

I don't understand what you mean by "must describe it correctly".   The 
size and layout of the memory block description of the PEP is not 
supposed to be dependent on the C-compiler.  It should also be able to 
define memory as used in Fortran, C#, a file, or whatever.  So, I don't 
understand the insistence that the example use C-specific 2-d array syntax.

The example as indicated is correct.  It is true that the 2-d nature of 
the block of data is only known by Python in this example.  You could 
argue that it would be more informative by showing the C-equivalent 
structure as a 2-d array.  However, it would also create the possibility 
of confusion by implying an absolute relationship between the C-compiler 
and the type description.

Your insistence that the example is incorrect makes me wonder what point 
is not being communicated between us.  Clearly there is overlap between 
C structure syntax and the PEP syntax, but the PEP type syntax allows 
for describing data in ways that the C compiler doesn't.

I'd rather steer people away from statically defined arrays in C and 
don't want to continually explain how they are subtly different.

My perception is that you are seeing too much of a connection between 
the C-compiler and the PEP description of memory.   Perhaps that's not 
it, and I'm missing something else.

Best regards,


-Travis O.

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-01-23 Thread Robert Kern
Thomas Heller wrote:

> Here is another typo (?) in the pep; I think it should be changed:
> 
> Index: pep-3118.txt
> ===
> --- pep-3118.txt  (revision 60037)
> +++ pep-3118.txt  (working copy)
> @@ -338,7 +338,7 @@
>  
>  ``len``
>  the total bytes of memory the object uses.  This should be the
> -same as the product of the shape array multiplied by the number of
> +same as the length of the shape array multiplied by the number of
>  bytes per item of memory.
>  
>  ``readonly``

While the original could be reworded ("product of the elements of the shape 
array"), the amendment is incorrect. For a shape array like {4*5*6}, the number 
of bytes is (4*5*6)*bytes_per_item, not 3*bytes_per_item.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-01-23 Thread Thomas Heller
Travis Oliphant schrieb:

[...]

> I responded off list to this email and wanted to summarize my response 
> for others to peruse.
> 
> Basically,  the answer is that the struct syntax proposed for 
> multi-dimensional arrays is not intended to mimic how the C-compiler 
> handles statically defined C-arrays (i.e. the pointer-to-pointers style 
> of multi-dimensional arrays).  It is intended to handle the 
> contiguous-block-of-data style of multi-dimensional arrays that NumPy uses.
> 
> I wanted to avoid 2-d static arrays in the examples because it gets 
> confusing and AFAIK the layout of the memory for a double data[16][4] is 
> the same as data[16*4].  The only difference is how the C-compiler 
> translates data[4][3] and data[4].
> 
> The intent of the struct syntax is to handle describing memory.  The 
> point is not to replicate how the C-compiler deals with statically 
> defined N-D arrays.  Thus, even though the struct syntax allows 
> *communicating* the intent of a contiguous block of memory inside a 
> structure as an N-d array, the fundamental memory block is the 
> equivalent of a 1-d array in C.
> 
> So, I think the example is correct (and intentional).

Sorry, I do not think so.  If you use a 2-d array in the example, you
must describe it correctly.  The difference between this pep and the old
buffer interface is that the pep allows to describe both how the compiler
sees the memory block plus the size and layout of the memory block, while
the old buffer interface only describes single-segment memory blocks.
And 'double data[16][4]' *is* a single memory block containing a 2-d array,
and *not* an array of pointers.

---

Here is another typo (?) in the pep; I think it should be changed:

Index: pep-3118.txt
===
--- pep-3118.txt(revision 60037)
+++ pep-3118.txt(working copy)
@@ -338,7 +338,7 @@
 
 ``len``
 the total bytes of memory the object uses.  This should be the
-same as the product of the shape array multiplied by the number of
+same as the length of the shape array multiplied by the number of
 bytes per item of memory.
 
 ``readonly``


After all, imo there's a lot to do to fully implement the pep for python 2.6.

Thomas

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-01-23 Thread Guido van Rossum
Travis,

Perhaps you can add this rationale to the PEP? It seems helpful and
might stave off future confusion.

--Guido

On Jan 23, 2008 8:17 AM, Travis Oliphant <[EMAIL PROTECTED]> wrote:
> Thomas Heller wrote:
> > Hi Travis,
> >
> > The pep contains this sample:
> >
> > """
> > Nested array
> > ::
> >
> > struct {
> >  int ival;
> >  double data[16*4];
> > }
> > """i:ival:
> >(16,4)d:data:
> > """
> > """
> >
> > I think it is wrong and must be changed to the following; is this correct?
> >
> > """
> > Nested array
> > ::
> >
> > struct {
> >  int ival;
> >  double data[16][4];
> > }
> > """i:ival:
> >(16,4)d:data:
> > """
> > """
>
> I responded off list to this email and wanted to summarize my response
> for others to peruse.
>
> Basically,  the answer is that the struct syntax proposed for
> multi-dimensional arrays is not intended to mimic how the C-compiler
> handles statically defined C-arrays (i.e. the pointer-to-pointers style
> of multi-dimensional arrays).  It is intended to handle the
> contiguous-block-of-data style of multi-dimensional arrays that NumPy uses.
>
> I wanted to avoid 2-d static arrays in the examples because it gets
> confusing and AFAIK the layout of the memory for a double data[16][4] is
> the same as data[16*4].  The only difference is how the C-compiler
> translates data[4][3] and data[4].
>
> The intent of the struct syntax is to handle describing memory.  The
> point is not to replicate how the C-compiler deals with statically
> defined N-D arrays.  Thus, even though the struct syntax allows
> *communicating* the intent of a contiguous block of memory inside a
> structure as an N-d array, the fundamental memory block is the
> equivalent of a 1-d array in C.
>
> So, I think the example is correct (and intentional).
>
> -Travis O.
>
>
>
>
>
>
>
> ___
> Python-Dev mailing list
> Python-Dev@python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> http://mail.python.org/mailman/options/python-dev/guido%40python.org
>



-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Error in PEP3118?

2008-01-23 Thread Travis Oliphant
Thomas Heller wrote:
> Hi Travis,
> 
> The pep contains this sample:
> 
> """
> Nested array
> ::
> 
> struct {
>  int ival;
>  double data[16*4];
> }
> """i:ival: 
>(16,4)d:data:
> """
> """
> 
> I think it is wrong and must be changed to the following; is this correct?
> 
> """
> Nested array
> ::
> 
> struct {
>  int ival;
>  double data[16][4];
> }
> """i:ival: 
>(16,4)d:data:
> """
> """

I responded off list to this email and wanted to summarize my response 
for others to peruse.

Basically,  the answer is that the struct syntax proposed for 
multi-dimensional arrays is not intended to mimic how the C-compiler 
handles statically defined C-arrays (i.e. the pointer-to-pointers style 
of multi-dimensional arrays).  It is intended to handle the 
contiguous-block-of-data style of multi-dimensional arrays that NumPy uses.

I wanted to avoid 2-d static arrays in the examples because it gets 
confusing and AFAIK the layout of the memory for a double data[16][4] is 
the same as data[16*4].  The only difference is how the C-compiler 
translates data[4][3] and data[4].

The intent of the struct syntax is to handle describing memory.  The 
point is not to replicate how the C-compiler deals with statically 
defined N-D arrays.  Thus, even though the struct syntax allows 
*communicating* the intent of a contiguous block of memory inside a 
structure as an N-d array, the fundamental memory block is the 
equivalent of a 1-d array in C.

So, I think the example is correct (and intentional).

-Travis O.






___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com