On Sun, Mar 28, 2010 at 10:08 PM, Aaron S. Meurer <asmeu...@gmail.com> wrote:
>
> On Mar 28, 2010, at 11:02 PM, Ondrej Certik wrote:
>
>> On Sun, Mar 28, 2010 at 9:30 PM, Brian Granger <ellisonbg....@gmail.com> 
>> wrote:
>>>> For what it's worth, I am +1 on adding these common functions as methods.  
>>>> It is easier than ^Asimplify(^E), and the parentheses are nicer. Frankly, 
>>>> the ability to do f(x).diff(x) is one of my favorite features of sympy.
>>>
>>> I am also +1.  The *most annoying* aspect of sympy right now is that
>>> only *some* things are methods and others are functions.  To the new
>>> user the choices seem completely arbitrary and it makes using/learning
>>> sympy a pain.  In my opinion, it is too late to go back now.  When
>>
>> What do you mean "go back"? It's never late to fix things.
>>
>>> something makes sense to be a method and a function is should be
>>
>>>
>>>> Wasn't the point of splitting Basic so that we could put this bloating 
>>>> crap in the one class and have only the essentials in the other?  In other 
>>>> words, the one level isn't so much at the "core" as the other.
>>>>
>>>> Here's an interesting question:  Matrix.simplify() simplifies in place.  
>>>> Should Basic.simplify() do the same?
>>>
>>> No, I do think that Basic.simplify should just call the global.  If
>>> subclasses need to override it (containers like Matrix will probably
>>> want to do it inplace).  Possibly better would be to make
>>> inplace=False a keyword argument of simplify.
>>
>> simplify(), diff(), expand(), factor() and all the other functions
>> never do things in place. The only exception is Matrix, which is a
>> container and it makes sense to do that inplace (possibly turning this
>> off if the user doesn't want it).
>>
>>>
>>> NOTE: I think the question of how a function like simplify is
>>> implemented is a different question than how users call it.  The
>>> current discussion only pertains to how users call it.
>>>
>>> THE OTHER ISSUE:  Personally, I think all sympy classes should be able
>>> to declare a _simplify_ method that the global simplify might use to
>>> simplify the logic.  Something like what we have in the printers.
>>> Otherwise it is very difficult to implement new sympy types that know
>>> how to simplify themselves - an issue that I am running into in the
>>> new quantum stuff I am doing.  Also, this is the essence of object
>>> oriented excapsulation: put all the logic pertaining to the class *in*
>>> the class.  But, as our experience with printerss has shown it is also
>>> useful to be able to put some logic of a certain type (printing,
>>> refine, simplify) in a location outside of Basic.  In many ways, it
>>> looks like we need both.
>>
>> I am +1 to _simplify_.
>>
>> As the zen of python says:
>>
>> "
>> Special cases aren't special enough to break the rules.
>> Although practicality beats purity.
>> "
>>
>> I think it's convenient to have things like expand() both as a
>> function and as a method. I don't know if everything should be
>> accessible as methods, but I think that most of the things should be,
>> in particular simplify() should be there as a method too.
>>
>>>
>>> a side question:  My understanding of Mathematica's simplification
>>> algorithm is that it is based on rules.  Has anyone looked into
>>> something like this for sympy?
>>
>> In sympy, most of the simplifications are done by the polys I think.
>> Is simplification an issue?
>>
>> Ondrej
>>
> Simplification is one of the weak points of sympy.  Polynomial based 
> simplification is pretty strong, especially with the new polys.  But, for 
> example, our trig simplification is very poor.  The fu, et. al. paper that 
> has been mentioned here a few times uses rules.  I think we should finish up 
> Luke's work on that one.

Yes, we should finish it.

>
> Also, maybe he means things like "does it contain logs in this certain form, 
> then try calling logcombine(); does it contain trig functions, then try 
> calling trigsimp(), does it contain nested squareroots, then try calling 
> sqrtdenest(), etc.".  We have all these functions, and some of them work 
> quite well, but simplify() by itself is quite stupid (it doesn't even call 
> any of these three that I just mentioned).  This is because calling 
> everything would be a waste of time, and it could actually make things less 
> simple in many cases, but it should be smarter about this IMHO, because 
> simplify() is the first thing people are going to try on a complex expression.


I see. Yes, we should keep improving simplify(). One has to be careful
so that simplify() is sufficiently robust, which it is currently. But
I can imagine once trigsimp() becomes robust, it can be called from
simplify().

Ondrej

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sy...@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to