#6478 NORM Never A: Fairly simple calculations involving pi failing

Zarro Boogs per Child bugtracker at laptop.org
Fri Feb 15 12:35:45 EST 2008


#6478: Fairly simple calculations involving pi failing
---------------------------------+------------------------------------------
 Reporter:  Rmyers               |       Owner:  rwh           
     Type:  defect               |      Status:  new           
 Priority:  normal               |   Milestone:  Never Assigned
Component:  calculator-activity  |     Version:                
 Keywords:                       |    Verified:  0             
 Blocking:                       |   Blockedby:                
---------------------------------+------------------------------------------
 Open Calculate

 (note: I'm using 'uparrow' for the key, so that trac doesn't reformat this
 on me)

 4 uparrow 2 = 16

 x:5

 x uparrow 2 = 25

 pi*4 = 12.5663706

 pi*x = 15.7079632

 so far, so good

 pi*4 uparrow 2 -- no action on enter

 pi*x uparrow 2 -- no action on enter

 The tracebacks follow:

 <type 'exceptions.TypeError'>             Traceback (most recent call
 last)

 /usr/share/activities/Calculate.activity/calculate.py in
 keypress_cb(self=<Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>, widget=<Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>, event=<GdkEvent at 0x8912e88>)
     702                 self.button_pressed(self.TYPE_TEXT, f)
     703             else:
 --> 704                 return f(self)
         f = <function <lambda> at 0x881bed4>
         self = <Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>
     705
     706         return True

 /usr/share/activities/Calculate.activity/calculate.py in
 <lambda>(o=<Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>)
     110
     111     KEYMAP = {
 --> 112         'Return': lambda o: o.process(),
         o = <Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>
         o.process = <bound method Calculate.process of <Calculate object
 at 0x848cdec (SugarActivity at 0x8a18800)>>
     113         'period': '.',
     114         'equal': '=',

 /usr/share/activities/Calculate.activity/calculate.py in
 process(self=<Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>)
     327         label = unicode(self.label_entry.get_text())
     328         _logger.debug('process(): parsing %r, label: %r', s,
 label)
 --> 329         res = self.parser.parse(s)
         res = undefined
         self.parser.parse = <bound method EqnParser.parse of
 <eqnparser.EqnParser instance at 0x8548cac>>
         s = u'pi*4^2'
     330
     331         ansvar = self.parser.get_var('Ans')

 /usr/share/activities/Calculate.activity/eqnparser.py in
 parse(self=<eqnparser.EqnParser instance at 0x8548cac>, eqn=u'pi*4^2',
 reset=True)
     615         oldps = self.ps
     616         self.ps = ParserState(eqn)
 --> 617         ret = self._parse(self.ps)
         ret = undefined
         self._parse = <bound method EqnParser._parse of
 <eqnparser.EqnParser instance at 0x8548cac>>
         self.ps = <eqnparser.ParserState instance at 0x884976c>
     618         if oldps is not None:
     619             oldps.copy_error(self.ps)

 /usr/share/activities/Calculate.activity/eqnparser.py in
 _parse(self=<eqnparser.EqnParser instance at 0x8548cac>,
 ps=<eqnparser.ParserState instance at 0x884976c>, presedence=None)
     545                             return None
     546
 --> 547                         res = of([left_val, right_val])
         res = undefined
         of = <function <lambda> at 0x882bcdc>
         left_val = Decimal("3.1415926535")
         right_val = 16.0
     548                         _logger.debug('OP: %s, %s ==> %s',
 self.ml.format_number(left_val), self.ml.format_number(right_val),
 self.ml.format_number(res))
     549                         left_val = res

 /usr/share/activities/Calculate.activity/eqnparser.py in
 <lambda>(x=[Decimal("3.1415926535"), 16.0])
     208         self.register_operator('-', self.OP_DIADIC, 0, lambda x:
 self.ml.sub(x[0], x[1]))
     209         self.register_operator('-', self.OP_PRE, 1, lambda x:
 self.ml.negate(x[0]))
 --> 210         self.register_operator('*', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))
         global self.register_operator = undefined
         global self.OP_DIADIC = undefined
         x = [Decimal("3.1415926535"), 16.0]
         global self.ml.mul = undefined
     211         self.register_operator(u'⨯', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))
     212         self.register_operator(u'×', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))

 /usr/share/activities/Calculate.activity/mathlib.py in
 mul(self=<mathlib.MathLib instance at 0x854894c>,
 x=Decimal("3.1415926535"), y=16.0)
     200
     201     def mul(self, x, y):
 --> 202         return x * y
         x = Decimal("3.1415926535")
         y = 16.0
     203
     204     def div(self, x, y):

 <type 'exceptions.TypeError'>: unsupported operand type(s) for *:
 'Decimal' and 'float'
 ---------------------------------------------------------------------------
 <type 'exceptions.TypeError'>             Traceback (most recent call
 last)

 /usr/share/activities/Calculate.activity/calculate.py in
 keypress_cb(self=<Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>, widget=<Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>, event=<GdkEvent at 0x8912ca8>)
     702                 self.button_pressed(self.TYPE_TEXT, f)
     703             else:
 --> 704                 return f(self)
         f = <function <lambda> at 0x881bed4>
         self = <Calculate object at 0x848cdec (SugarActivity at
 0x8a18800)>
     705
     706         return True

 /usr/share/activities/Calculate.activity/calculate.py in
 <lambda>(o=<Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>)
     110
     111     KEYMAP = {
 --> 112         'Return': lambda o: o.process(),
         o = <Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>
         o.process = <bound method Calculate.process of <Calculate object
 at 0x848cdec (SugarActivity at 0x8a18800)>>
     113         'period': '.',
     114         'equal': '=',

 /usr/share/activities/Calculate.activity/calculate.py in
 process(self=<Calculate object at 0x848cdec (SugarActivity at 0x8a18800)>)
     327         label = unicode(self.label_entry.get_text())
     328         _logger.debug('process(): parsing %r, label: %r', s,
 label)
 --> 329         res = self.parser.parse(s)
         res = undefined
         self.parser.parse = <bound method EqnParser.parse of
 <eqnparser.EqnParser instance at 0x8548cac>>
         s = u'pi*x^2'
     330
     331         ansvar = self.parser.get_var('Ans')

 /usr/share/activities/Calculate.activity/eqnparser.py in
 parse(self=<eqnparser.EqnParser instance at 0x8548cac>, eqn=u'pi*x^2',
 reset=True)
     615         oldps = self.ps
     616         self.ps = ParserState(eqn)
 --> 617         ret = self._parse(self.ps)
         ret = undefined
         self._parse = <bound method EqnParser._parse of
 <eqnparser.EqnParser instance at 0x8548cac>>
         self.ps = <eqnparser.ParserState instance at 0x8753fec>
     618         if oldps is not None:
     619             oldps.copy_error(self.ps)

 /usr/share/activities/Calculate.activity/eqnparser.py in
 _parse(self=<eqnparser.EqnParser instance at 0x8548cac>,
 ps=<eqnparser.ParserState instance at 0x8753fec>, presedence=None)
     545                             return None
     546
 --> 547                         res = of([left_val, right_val])
         res = undefined
         of = <function <lambda> at 0x882bcdc>
         left_val = Decimal("3.1415926535")
         right_val = 25.0
     548                         _logger.debug('OP: %s, %s ==> %s',
 self.ml.format_number(left_val), self.ml.format_number(right_val),
 self.ml.format_number(res))
     549                         left_val = res

 /usr/share/activities/Calculate.activity/eqnparser.py in
 <lambda>(x=[Decimal("3.1415926535"), 25.0])
     208         self.register_operator('-', self.OP_DIADIC, 0, lambda x:
 self.ml.sub(x[0], x[1]))
     209         self.register_operator('-', self.OP_PRE, 1, lambda x:
 self.ml.negate(x[0]))
 --> 210         self.register_operator('*', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))
         global self.register_operator = undefined
         global self.OP_DIADIC = undefined
         x = [Decimal("3.1415926535"), 25.0]
         global self.ml.mul = undefined
     211         self.register_operator(u'⨯', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))
     212         self.register_operator(u'×', self.OP_DIADIC, 1, lambda x:
 self.ml.mul(x[0], x[1]))

 /usr/share/activities/Calculate.activity/mathlib.py in
 mul(self=<mathlib.MathLib instance at 0x854894c>,
 x=Decimal("3.1415926535"), y=25.0)
     200
     201     def mul(self, x, y):
 --> 202         return x * y
         x = Decimal("3.1415926535")
         y = 25.0
     203
     204     def div(self, x, y):

 <type 'exceptions.TypeError'>: unsupported operand type(s) for *:
 'Decimal' and 'float'

-- 
Ticket URL: <http://dev.laptop.org/ticket/6478>
One Laptop Per Child <http://dev.laptop.org>
OLPC bug tracking system



More information about the Bugs mailing list