plot3d/symbolics Cannot evaluate symbolic expression to a numeric value.

142 views
Skip to first unread message

Harald Schilly

unread,
Aug 19, 2016, 6:23:29 PM8/19/16
to sage-support
Hi, we're here at SageDays 81 and there is some odd issue with 3d plotting symbolic functions. Sage version is 7.4.beta0. One of the examples is

var('x y z')

plot3d
( real_part(sqrt(x + i*y)), (x,-3,3), (y,-3,3), color='seagreen' )

which works without the sqrt ...

Probably related, this also doesn't work:

var('x y z')
g999
( x,y ) = exp(i*CC(x + i*y).argument()/2)*sqrt( sqrt( x^2 + y^2 ) )
g999
( 3, 4 )



Stacktraces:

Error in lines 1-1
Traceback (most recent call last):
 
File "/usr/local/lib/python2.7/dist-packages/smc_sagews/sage_server.py", line 947, in execute
   
exec compile(block+'\n', '', 'single') in namespace, locals
 
File "", line 1, in <module>
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/rings/complex_field.py", line 352, in __call__
   
return Parent.__call__(self, x)
 
File "sage/structure/parent.pyx", line 1107, in sage.structure.parent.Parent.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/structure/parent.c:10005)
   
return mor._call_(x)
 
File "sage/structure/coerce_maps.pyx", line 110, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/projects/sage/sage-dev/src/build/cythonized/sage/structure/coerce_maps.c:4754)
   
raise
  File "sage/structure/coerce_maps.pyx", line 105, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/projects/sage/sage-dev/src/build/cythonized/sage/structure/coerce_maps.c:4642)
   
return C._element_constructor(x)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/rings/complex_field.py", line 391, in _element_constructor_
   
return x._complex_mpfr_field_( self )
 
File "sage/symbolic/expression.pyx", line 1342, in sage.symbolic.expression.Expression._complex_mpfr_field_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:10277)
   
return self._eval_self(R)
 
File "sage/symbolic/expression.pyx", line 1205, in sage.symbolic.expression.Expression._eval_self (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:9595)
   
raise TypeError("Cannot evaluate symbolic expression to a numeric value.")
TypeError: Cannot evaluate symbolic expression to a numeric value.


and

Error in lines 1-1
Traceback (most recent call last):
 
File "/usr/local/lib/python2.7/dist-packages/smc_sagews/sage_server.py", line 947, in execute
   
exec compile(block+'\n', '', 'single') in namespace, locals
 
File "", line 1, in <module>
 
File "<string>", line 26, in newPlot3d
 
File "sage/misc/lazy_import.pyx", line 386, in sage.misc.lazy_import.LazyImport.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/misc/lazy_import.c:3636)
   
return self._get_object()(*args, **kwds)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/plot/plot3d/implicit_plot3d.py", line 317, in implicit_plot3d
    G
= ImplicitSurface(f, xrange, yrange, zrange, **kwds)
 
File "sage/plot/plot3d/implicit_surface.pyx", line 982, in sage.plot.plot3d.implicit_surface.ImplicitSurface.__init__ (/projects/sage/sage-dev/src/build/cythonized/sage/plot/plot3d/implicit_surface.c:13474)
   
self.f, ranges, self.vars = setup_for_eval_on_grid(f, [xrange, yrange, zrange], return_vars=True)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/plot/misc.py", line 148, in setup_for_eval_on_grid
   
return fast_float(funcs, *vars,**options), [tuple(range+[range_step]) for range,range_step in zip(ranges, range_steps)], vars
 
File "sage/ext/fast_eval.pyx", line 1429, in sage.ext.fast_eval.fast_float (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_eval.c:11151)
   
return fast_callable(f, vars=vars, domain=float, _autocompute_vars_for_backward_compatibility_with_deprecated_fast_float_functionality=True, expect_one_var=expect_one_var)
 
File "sage/ext/fast_callable.pyx", line 456, in sage.ext.fast_callable.fast_callable (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:4490)
    et
= x._fast_callable_(etb)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 221, in __call__
   
return self.relation(ex, operator)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1456, in relation
   
return self(ex.lhs() - ex.rhs())
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 219, in __call__
   
return self.arithmetic(ex, operator)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in arithmetic
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in <lambda>
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 218, in __call__
   
return self.arithmetic(div, div.operator())
  File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in arithmetic
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in <lambda>
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 219, in __call__
   
return self.arithmetic(ex, operator)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1498, in arithmetic
   
return self.etb.call(sqrt, operands[0])
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 227, in __call__
   
return self.composition(ex, operator)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1546, in composition
   
return self.etb.call(function, *ex.operands())
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 219, in __call__
   
return self.arithmetic(ex, operator)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in arithmetic
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in <lambda>
    return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 218, in __call__
   
return self.arithmetic(div, div.operator())
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in arithmetic
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1508, in <lambda>
   
return reduce(lambda x,y: self.etb.call(operator, x,y), operands)
 
File "sage/ext/fast_callable.pyx", line 734, in sage.ext.fast_callable.ExpressionTreeBuilder.call (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:6839)
   
return ExpressionCall(self, fn, map(self, args))
 
File "sage/ext/fast_callable.pyx", line 609, in sage.ext.fast_callable.ExpressionTreeBuilder.__call__ (/projects/sage/sage-dev/src/build/cythonized/sage/ext/fast_callable.c:5933)
   
return fc(self)
 
File "sage/symbolic/expression.pyx", line 11152, in sage.symbolic.expression.Expression._fast_callable_ (/projects/sage/sage-dev/src/build/cythonized/sage/symbolic/expression.cpp:58401)
   
return fast_callable(self, etb)
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 1580, in fast_callable
   
return FastCallableConverter(ex, etb)()
 
File "/projects/sage/sage-dev/local/lib/python2.7/site-packages/sage/symbolic/expression_conversions.py", line 209, in __call__
   
raise err
TypeError: unable to coerce to a real number



Dima Pasechnik

unread,
Aug 20, 2016, 4:29:26 AM8/20/16
to sage-support
On Friday, August 19, 2016 at 11:23:29 PM UTC+1, Harald Schilly wrote:
Hi, we're here at SageDays 81 and there is some odd issue with 3d plotting symbolic functions. Sage version is 7.4.beta0. One of the examples is

var('x y z')

plot3d
( real_part(sqrt(x + i*y)), (x,-3,3), (y,-3,3), color='seagreen' )

which works without the sqrt ...

it's most probably due to real_part() not getting eliminated properly (as in real_part(x+I*y) 
one cannot stipulate that x and y are real.)

Indeed,
sage: real_part(sqrt(x + i*y))
sqrt(abs(x + I*y))*cos(1/2*arctan2(imag_part(x) + real_part(y), -imag_part(y) + real_part(x)))

which (assuming x, y real) simpifies to 

sage: gg(x,y)=sqrt(x^2+y^2)*cos(1/2*arctan2(y, x))

and this works just fine:

plot3d(gg(x,y), (x,-3,3), (y,-3,3), color='seagreen' )

Reply all
Reply to author
Forward
0 new messages