I seem to have fixed my problem by making changing in 
sympy/functions/elementary/trigonometric.py this definition in class sin 
(and making a corresponding change in class cos).  The change was to tell 
sin/cos not evaluate in their constructors.

I haven't run any tests on this except for my code where I found the 
problem.



    def _eval_expand_trig(self, **hints):
        from sympy import expand_mul
        arg = self.args[0]
        x = None
        if arg.is_Add: # TODO, implement more if deep stuff here
            # TODO: Do this more efficiently for more than two terms
            x, y = arg.as_two_terms()
#GCB 120920 added ",evaluate=False" to the next 4 lines
            sx = sin(x,evaluate=False)._eval_expand_trig()
            sy = sin(y,evaluate=False)._eval_expand_trig()
            cx = cos(x,evaluate=False)._eval_expand_trig()
            cy = cos(y,evaluate=False)._eval_expand_trig()
            return sx*cy + sy*cx
        else:
            n, x = arg.as_coeff_Mul(rational=True)
            if n.is_Integer: # n will be positive because of .eval
                # canonicalization

                # See 
http://mathworld.wolfram.com/Multiple-AngleFormulas.html
                if n.is_odd:
                    return (-1)**((n - 1)/2)*C.chebyshevt(n, sin(x))
                else:
                    return expand_mul((-1)**(n/2 - 1)*cos(x)*C.chebyshevu(n 
-
                        1, sin(x)), deep=False)
        return sin(arg)



On Wednesday, September 19, 2012 7:02:11 PM UTC-7, Aaron Meurer wrote:
>
> Ah, that is a bug.  You should report that at 
> http://code.google.com/p/sympy/issues/.  The reason it happens is that 
> it tries to do the expansion recursively, but sin(-x) becomes -sin(x). 
>  The fix is not too hard either, if you want to give it a shot. 
>
> The work around is to do the expansion with +y and then do 
> expr.subs(y, -y) at the end. 
>
> By the way, x - y and x + -y are exactly the same thing in SymPy. 
> Both are represented internally as Add(x, Mul(-1, y)). 
>
> Aaron Meurer 
>
> On Wed, Sep 19, 2012 at 7:55 PM, G B <[email protected] <javascript:>> 
> wrote: 
> > I'm still new to sympy, so I might be doing something stupid, but I 
> think 
> > there's a problem here: 
> > 
> > In [1]: from sympy import * 
> > In [2]: x,y=symbols('x,y') 
> > In [3]: cos(x+y).expand(trig=True) 
> > Out[3]: -sin(x)*sin(y) + cos(x)*cos(y) 
> > 
> > So far so good.  but then: 
> > In [4]: cos(x-y).expand(trig=True) 
> > 
> > Leads to a long traceback that culminates with: AttributeError: 'Mul' 
> object 
> > has no attribute '_eval_expand_trig' 
> > 
> > For giggles, I also tried: 
> > In [5]: cos(x + (-y)).expand(trig=True) 
> > 
> > Which fails in the same way.  I can post the full traceback if it helps. 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sympy" group. 
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msg/sympy/-/-Z8Y7YC_PuEJ. 
> > To post to this group, send email to [email protected]<javascript:>. 
>
> > To unsubscribe from this group, send email to 
> > [email protected] <javascript:>. 
> > For more options, visit this group at 
> > http://groups.google.com/group/sympy?hl=en. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sympy/-/u5JcmqrSlRoJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to