Marshall Hampton wrote:
> That definitely looks like a bug.  It seems to be in the fast_float
> command, called by setup_for_eval_on_grid.  Hopefully someone more
> familiar with fast_float can comment on what is going wrong.
> 

First, there is a bug, presumably in setup_for_eval_on_grid, where the 
variables are erroneously switched.  Here is the call with a bit of 
debugging showing the arguments to fast_float.  Note that the function 
has arguments "y,x", but the variables passed to fast_float are "x,y":

  sage: region_plot(2/x + 1/y > 1/x * 1/y, (x,-10,10), (y,-10,10)).show()
[(y, x) |--> -2/x - 1/y + 1/(x*y)] [x, y] {}

I've made this ticket 7809, and posted a patch (please review!).  In 
practice, this probably does not change anything, but the code should be 
cleaner and more correct after the patch is applied.

Second, the issue above appears to be a bug in fast_callable (which 
fast_float calls).  I've made this 
http://trac.sagemath.org/sage_trac/ticket/7810


sage: fast_float(-1/x-1/y+1/(x*y),x,y)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/grout/.sage/temp/tiny/2056/_home_grout__sage_init_sage_0.py in 
<module>()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_eval.so
 
in sage.ext.fast_eval.fast_float (sage/ext/fast_eval.c:8434)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.fast_callable (sage/ext/fast_callable.c:3134)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression.so
 
in sage.symbolic.expression.Expression._fast_callable_ 
(sage/symbolic/expression.cpp:24715)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     212                 div = self.get_fake_div(ex)
     213                 return self.arithmetic(div, div.operator())
--> 214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:
     216             return self.relation(ex, operator)

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in <lambda>(x, y)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.call 
(sage/ext/fast_callable.c:4986)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ 
(sage/ext/fast_callable.c:4313)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression.so
 
in sage.symbolic.expression.Expression._fast_callable_ 
(sage/symbolic/expression.cpp:24715)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     211             if getattr(self, 'use_fake_div', False) and 
operator is _operator.mul:
     212                 div = self.get_fake_div(ex)
--> 213                 return self.arithmetic(div, div.operator())
     214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in <lambda>(x, y)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.call 
(sage/ext/fast_callable.c:4986)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ 
(sage/ext/fast_callable.c:4313)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in _fast_callable_(self, etb)
     119             [('load_arg', 0), ('load_arg', 1), 'div', 'return']
     120         """
--> 121         return fast_callable(self, etb)
     122
     123     def _fast_float_(self, *vars):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     211             if getattr(self, 'use_fake_div', False) and 
operator is _operator.mul:
     212                 div = self.get_fake_div(ex)
--> 213                 return self.arithmetic(div, div.operator())
     214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

TypeError: reduce() of empty sequence with no initial value
sage: fast_callable(-1/x-1/y+1/(x*y),vars=[x,y])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/grout/.sage/temp/tiny/2056/_home_grout__sage_init_sage_0.py in 
<module>()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.fast_callable (sage/ext/fast_callable.c:3134)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression.so
 
in sage.symbolic.expression.Expression._fast_callable_ 
(sage/symbolic/expression.cpp:24715)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     212                 div = self.get_fake_div(ex)
     213                 return self.arithmetic(div, div.operator())
--> 214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:
     216             return self.relation(ex, operator)

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in <lambda>(x, y)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.call 
(sage/ext/fast_callable.c:4986)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ 
(sage/ext/fast_callable.c:4313)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression.so
 
in sage.symbolic.expression.Expression._fast_callable_ 
(sage/symbolic/expression.cpp:24715)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     211             if getattr(self, 'use_fake_div', False) and 
operator is _operator.mul:
     212                 div = self.get_fake_div(ex)
--> 213                 return self.arithmetic(div, div.operator())
     214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in <lambda>(x, y)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.call 
(sage/ext/fast_callable.c:4986)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/ext/fast_callable.so
 
in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ 
(sage/ext/fast_callable.c:4313)()

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in _fast_callable_(self, etb)
     119             [('load_arg', 0), ('load_arg', 1), 'div', 'return']
     120         """
--> 121         return fast_callable(self, etb)
     122
     123     def _fast_float_(self, *vars):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in fast_callable(ex, etb)
    1353
    1354     """
-> 1355     return FastCallableConverter(ex, etb)()
    1356
    1357 class RingConverter(Converter):

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in __call__(self, ex)
     211             if getattr(self, 'use_fake_div', False) and 
operator is _operator.mul:
     212                 div = self.get_fake_div(ex)
--> 213                 return self.arithmetic(div, div.operator())
     214             return self.arithmetic(ex, operator)
     215         elif operator in relation_operators:

/home/grout/downloads/sage-4.3/local/lib/python2.6/site-packages/sage/symbolic/expression_conversions.pyc
 
in arithmetic(self, ex, operator)
    1293         elif operator is _operator.neg:
    1294             return self.etb.call(operator, operands[0])
-> 1295         return reduce(lambda x,y: self.etb.call(operator, x,y), 
operands)
    1296
    1297     def symbol(self, ex):

TypeError: reduce() of empty sequence with no initial value




-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to