[Python-Dev] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread Travis Oliphant
Hello again,
There is a great discussion going on the numpy list regarding a proposed 
PEP for multidimensional arrays that is in the works.

During this discussion as resurfaced regarding slicing with objects that 
are not IntegerType objects but that
have a tp_as_number-nb_int method to convert to an int. 

Would it be possible to change
_PyEval_SliceIndex  in ceval.c
so that rather than throwing an error if the indexing object is not an 
integer, the code first checks to see if the object has a
tp_as_number-nb_int method and calls it instead.

If this is acceptable, it is an easy patch.
Thanks,
-Travis Oliphant
___
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] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread Guido van Rossum
 Would it be possible to change
 
 _PyEval_SliceIndex  in ceval.c
 
 so that rather than throwing an error if the indexing object is not an
 integer, the code first checks to see if the object has a
 tp_as_number-nb_int method and calls it instead.

I don't think this is the right solution; since float has that method,
it would allow floats to be used as slice indices, but that's not
supposed to work (to protect yourself against irreproducible results
due to rounding errors).

-- 
--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] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread Brett C.
Travis Oliphant wrote:
Hello again,
There is a great discussion going on the numpy list regarding a proposed 
PEP for multidimensional arrays that is in the works.

During this discussion as resurfaced regarding slicing with objects that 
are not IntegerType objects but that
have a tp_as_number-nb_int method to convert to an int.
Would it be possible to change

_PyEval_SliceIndex  in ceval.c
so that rather than throwing an error if the indexing object is not an 
integer, the code first checks to see if the object has a
tp_as_number-nb_int method and calls it instead.

You would also have to change apply_slice() since that also has a guard for 
checking the slice arguments are either NULL, int, or long objects.

But I am +1 with it since the guard is already there for ints and longs to 
handle those properly and thus the common case does not slow down in any way. 
As long as it also accepts Python objects that define __int__ and not just C 
types that have the nb_int slot defined I am okay with this idea.

-Brett
___
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] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread David Ascher
On Fri, 18 Feb 2005 13:28:34 -0800, Guido van Rossum
[EMAIL PROTECTED] wrote:
  Would it be possible to change
 
  _PyEval_SliceIndex  in ceval.c
 
  so that rather than throwing an error if the indexing object is not an
  integer, the code first checks to see if the object has a
  tp_as_number-nb_int method and calls it instead.
 
 I don't think this is the right solution; since float has that method,
 it would allow floats to be used as slice indices, but that's not
 supposed to work (to protect yourself against irreproducible results
 due to rounding errors).

I wonder if floats are the special case here, not integer like objects.

I've never been particularly happy about the confusion between the two
roles of int() and it's C equivalents, i.e. casting and conversion.
___
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] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread Bob Ippolito
On Feb 18, 2005, at 4:36 PM, David Ascher wrote:
On Fri, 18 Feb 2005 13:28:34 -0800, Guido van Rossum
[EMAIL PROTECTED] wrote:
Would it be possible to change
_PyEval_SliceIndex  in ceval.c
so that rather than throwing an error if the indexing object is not 
an
integer, the code first checks to see if the object has a
tp_as_number-nb_int method and calls it instead.
I don't think this is the right solution; since float has that method,
it would allow floats to be used as slice indices, but that's not
supposed to work (to protect yourself against irreproducible results
due to rounding errors).
I wonder if floats are the special case here, not integer like 
objects.

I've never been particularly happy about the confusion between the two
roles of int() and it's C equivalents, i.e. casting and conversion.
All of the __special__ methods for this purpose seem to be usable only 
for conversion, not casting (__str__, __unicode__, etc.).  The only way 
I've found to pass for a particular value type is to subclass one.   We 
do this a lot in PyObjC.

It ends up being a net win anyway, because you get free implementations 
of all the relevant methods, at the expense of having two copies of the 
value.  The fact that these proxy objects are no longer 
visible-from-Python subclasses of Objective-C objects isn't really a 
big deal in our case, because the canonical Objective-C way to checking 
inheritance still work.  The wrapper types use an attribute protocol 
for casting (__pyobjc_object__), and delegate to this object with 
__getattr__.

 from Foundation import *
 one = NSNumber.numberWithInt_(1)
 type(one).mro()
[class 'objc._pythonify.OC_PythonInt', type 'int', type 'object']
 isinstance(one, NSNumber)
False
 isinstance(one.__pyobjc_object__, NSNumber)
True
 one.isKindOfClass_(NSNumber)
1
 type(one)
class 'objc._pythonify.OC_PythonInt'
 type(one.__pyobjc_object__)
objective-c class NSCFNumber at 0x300620
-bob
___
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] Fixing _PyEval_SliceIndex so that integer-like objects can be used

2005-02-18 Thread Travis Oliphant
Guido van Rossum wrote:
Would it be possible to change
_PyEval_SliceIndex  in ceval.c
so that rather than throwing an error if the indexing object is not an
integer, the code first checks to see if the object has a
tp_as_number-nb_int method and calls it instead.
   

I don't think this is the right solution; since float has that method,
it would allow floats to be used as slice indices, 
 

O.K.,
then how about if arrayobjects can make it in the core, then a check for 
a rank-0 integer-type
arrayobject is allowed before raising an exception?

-Travis
___
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