Re: [sage-devel] Re: should hard integrals be evaluated numericaly if they fail to be evaluated?

2010-03-18 Thread Mike Hansen
On Wed, Mar 17, 2010 at 10:47 PM, Nick Alexander ncalexan...@gmail.com wrote:
 At the time I worked with this code, which was several months ago, there was
 no public interface for crawling the structures.  Testing for whether one
 was looking at a sage value (meaning something with a parent) versus a
 function application versus a derivative was really hard.  When you have one
 very general expr class, how else do you determine if you're looking at an
 indefinite integral?  (Or an addition, for that matter?)

You can traverse the structure with operator and operands.  For
example, everything in sage.symbolic.expression_conversions just walks
the structure and does stuff based on that.

--Mike

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


Re: [sage-devel] Re: should hard integrals be evaluated numericaly if they fail to be evaluated?

2010-03-17 Thread Nick Alexander


On 17-Mar-10, at 10:18 AM, Mike Hansen wrote:

On Wed, Mar 17, 2010 at 5:21 AM, Pablo Angulo pablo.ang...@uam.es  
wrote:
Sorry to come back to this (two weeks) old topic, but what do you  
think
about raising an exception whenever a symbolic integral (or any  
symbolic

computation) fails? Otherwise, is there a simple way to distinguish a
succesful integration from failed ones that are just indicated (e.g.,
integrate(e^(x*sin(x)), x))?


You can check whether or not you get an unevaluated integral like  
this:


sage: f = integrate(x^2, x)
sage: isinstance(f.operator(),
sage.symbolic.integration.integral.IndefiniteIntegral)
False
sage: f
1/3*x^3
sage: f = integrate(e^(x*sin(x)), x)
sage: isinstance(f.operator(),
sage.symbolic.integration.integral.IndefiniteIntegral)
True
sage: f
integrate(e^(x*sin(x)), x)


Using isinstance is such a strong code smell.  Maybe we should add  
some interrogation routines, is_definite_integral/ 
is_indefinite_integral/...?


Nick

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


Re: [sage-devel] Re: should hard integrals be evaluated numericaly if they fail to be evaluated?

2010-03-17 Thread Nick Alexander


On 17-Mar-10, at 10:12 PM, Jason Grout wrote:


On 03/17/2010 11:40 AM, Nick Alexander wrote:


On 17-Mar-10, at 10:18 AM, Mike Hansen wrote:


On Wed, Mar 17, 2010 at 5:21 AM, Pablo Angulo pablo.ang...@uam.es
wrote:
Sorry to come back to this (two weeks) old topic, but what do you  
think
about raising an exception whenever a symbolic integral (or any  
symbolic
computation) fails? Otherwise, is there a simple way to  
distinguish a
succesful integration from failed ones that are just indicated  
(e.g.,

integrate(e^(x*sin(x)), x))?


You can check whether or not you get an unevaluated integral like  
this:


sage: f = integrate(x^2, x)
sage: isinstance(f.operator(),
sage.symbolic.integration.integral.IndefiniteIntegral)
False
sage: f
1/3*x^3
sage: f = integrate(e^(x*sin(x)), x)
sage: isinstance(f.operator(),
sage.symbolic.integration.integral.IndefiniteIntegral)
True
sage: f
integrate(e^(x*sin(x)), x)


Using isinstance is such a strong code smell. Maybe we should add  
some
interrogation routines, is_definite_integral/ 
is_indefinite_integral/...?



Are you saying every symbolic expression should have an  
is_indefinite_integral method?  That seems a little clumsy to me; I  
must be misunderstanding what you are proposing.  What other  
interrogation methods should be added if that is what you are  
proposing.  Obviously a person could get carried away, adding an  
is_addition, for example.


At the time I worked with this code, which was several months ago,  
there was no public interface for crawling the structures.  Testing  
for whether one was looking at a sage value (meaning something with a  
parent) versus a function application versus a derivative was really  
hard.  When you have one very general expr class, how else do you  
determine if you're looking at an indefinite integral?  (Or an  
addition, for that matter?)


Nick

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