[Python-Dev] [bug?] UserLong.py - pow(5, UserLong(3), 26) fails

Michael Hudson mwh@python.net
01 May 2002 19:33:51 +0100


Luke Kenneth Casson Leighton <lkcl@samba-tng.org> writes:

> one of these - pow(int(5), UserLong(3), 26) - is failing:

What's the point of UserLong now we have 2.2?

> Script started on Wed May  1 19:06:30 2002
> highfield:/usr/local/lib/python2.2# python UserLong.py
> int 3
> long 3
> 5**int(y) 125
> 5**y rpow: (5,)
> 3
> x^y%26 (3L, 26)
> 21L
> 5^y%26
> Traceback (most recent call last):
>   File "UserLong.py", line 153, in ?
>     print "5^y%26", pow(5, y, 26)
> TypeError: unsupported operand type(s) for pow(): 'int', 'instance', 'int'
> highfield:/usr/local/lib/python2.2# 
> Script done on Wed May  1 19:06:37 2002
> 
> now, if i read this correctly, what is happening is that in
> the [optimised] code, Objects/intobject.c, support for types
> other than int, float and long - via the macro CONVERT_TO_LONG -
> are simply not supported.
> 
> this i believe can be demonstrated to be so because if you
> do pow(5, [], 26) you get the same error except replace
> 'instance' above with 'list'.
> 
> now, could someone with a little more knowledge than i kindly
> evaluate, if they have the time, whether:
> 
> - _is_ this happening because i have missed out a function in
> UserLong.py that i do not know the name of?
> 
> or:
> 
> - _is_ this due to a bug in intobject.c's int_pow()
> 
> or:
> 
> - _is_ this due to a bug in the implementation of the pow()
> "spam" function?
> 
> - other?

Are you aware of this text in section 3.3.6 of the lang ref:

  Note that ternary pow() will not try calling __rpow__() (the
  coercion rules would become too complicated).

so I'd say this is, if anything, a "documented limitation", though
that might something of a stretch...

Cheers,
M.

-- 
  The meaning of "brunch" is as yet undefined.
                                             -- Simon Booth, ucam.chat