Velocity Reviews > decimal and context objects!

# decimal and context objects!

MooMaster
Guest
Posts: n/a

 03-02-2007
Hey guys, I'm trying to do some black magic voodoo and it's a little
late, so forgive me if this question seems obvious or has been asked
before. I tried doing a search on context objects and didn't find
anything that popped out, and I'm too tired to keep digging.

I'm making a little program that is trying to do weird and sexy things
by fully leveraging the power of all the built-in beauty of Python. I
was trying to play around with the new features added into Python 2.5,
and ran into an unexpected issue...check this out:

>>> moo = lambda x, y : decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) + decimal.Context(3).power(y,2))
>>> moo

<function <lambda> at 0x02CD0EB0>
>>> row = [1,2,3,4,5]
>>> weight_vector = .00556
>>> moo(sum(row), weight_vector)

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
moo(sum(row), weight_vector)
File "<pyshell#1>", line 1, in <lambda>
moo = lambda x, y :
decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) +
decimal.Context(3).power(y,2))
File "C:\Python25\lib\decimal.py", line 2662, in power
return a.__pow__(b, modulo, context=self)
TypeError: wrapper __pow__ doesn't take keyword arguments

I have no idea what keyword argument is getting passed to __pow__,
anyone know what's going on?

This should compute sqrt(5^2 + 3^2)

MooMaster
Guest
Posts: n/a

 03-02-2007
On Mar 2, 3:08 am, "MooMaster" <(E-Mail Removed)> wrote:
> Hey guys, I'm trying to do some black magic voodoo and it's a little
> late, so forgive me if this question seems obvious or has been asked
> before. I tried doing a search on context objects and didn't find
> anything that popped out, and I'm too tired to keep digging.
>
> I'm making a little program that is trying to do weird and sexy things
> by fully leveraging the power of all the built-in beauty of Python. I
> was trying to play around with the new features added into Python 2.5,
> and ran into an unexpected issue...check this out:
>
> >>> moo = lambda x, y : decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) + decimal.Context(3).power(y,2))
> >>> moo

>
> <function <lambda> at 0x02CD0EB0>>>> row = [1,2,3,4,5]
> >>> weight_vector = .00556
> >>> moo(sum(row), weight_vector)

>
> Traceback (most recent call last):
> File "<pyshell#5>", line 1, in <module>
> moo(sum(row), weight_vector)
> File "<pyshell#1>", line 1, in <lambda>
> moo = lambda x, y :
> decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) +
> decimal.Context(3).power(y,2))
> File "C:\Python25\lib\decimal.py", line 2662, in power
> return a.__pow__(b, modulo, context=self)
> TypeError: wrapper __pow__ doesn't take keyword arguments
>
> I have no idea what keyword argument is getting passed to __pow__,
> anyone know what's going on?
>
> This should compute sqrt(5^2 + 3^2)

Oh sorry, ignore that last line, that was a copy/paste from another
example I forgot to remove...OBVIOUSLY it's going to compute something

Peter Otten
Guest
Posts: n/a

 03-02-2007
MooMaster wrote:

> Hey guys, I'm trying to do some black magic voodoo and it's a little
> late, so forgive me if this question seems obvious or has been asked
> before. I tried doing a search on context objects and didn't find
> anything that popped out, and I'm too tired to keep digging.
>
> I'm making a little program that is trying to do weird and sexy things
> by fully leveraging the power of all the built-in beauty of Python. I
> was trying to play around with the new features added into Python 2.5,
> and ran into an unexpected issue...check this out:
>
>>>> moo = lambda x, y :
>>>> decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) +
>>>> decimal.Context(3).power(y,2)) moo

> <function <lambda> at 0x02CD0EB0>
>>>> row = [1,2,3,4,5]
>>>> weight_vector = .00556
>>>> moo(sum(row), weight_vector)

> Traceback (most recent call last):
> File "<pyshell#5>", line 1, in <module>
> moo(sum(row), weight_vector)
> File "<pyshell#1>", line 1, in <lambda>
> moo = lambda x, y :
> decimal.Context(3).sqrt(decimal.Context(3).power(x ,2) +
> decimal.Context(3).power(y,2))
> File "C:\Python25\lib\decimal.py", line 2662, in power
> return a.__pow__(b, modulo, context=self)
> TypeError: wrapper __pow__ doesn't take keyword arguments
>
> I have no idea what keyword argument is getting passed to __pow__,
> anyone know what's going on?

Weird implementation hacks distorting error messages
Context.power() expects a Decimal instance as its first argument:

>>> from decimal import *
>>> ctx = getcontext()
>>> ctx.power(10, 2)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/decimal.py", line 2662, in power
return a.__pow__(b, modulo, context=self)
TypeError: wrapper __pow__ doesn't take keyword arguments
>>> ctx.power(Decimal("10"), 2)

Decimal("100")

Peter