1from sympy import (
2    symbols, sin, simplify, cos, trigsimp, tan, exptrigsimp,sinh,
3    cosh, diff, cot, Subs, exp, tanh, S, integrate, I,Matrix,
4    Symbol, coth, pi, log, count_ops, sqrt, E, expand, Piecewise , Rational
5    )
6
7from sympy.testing.pytest import XFAIL
8
9from sympy.abc import x, y
10
11
12
13def test_trigsimp1():
14    x, y = symbols('x,y')
15
16    assert trigsimp(1 - sin(x)**2) == cos(x)**2
17    assert trigsimp(1 - cos(x)**2) == sin(x)**2
18    assert trigsimp(sin(x)**2 + cos(x)**2) == 1
19    assert trigsimp(1 + tan(x)**2) == 1/cos(x)**2
20    assert trigsimp(1/cos(x)**2 - 1) == tan(x)**2
21    assert trigsimp(1/cos(x)**2 - tan(x)**2) == 1
22    assert trigsimp(1 + cot(x)**2) == 1/sin(x)**2
23    assert trigsimp(1/sin(x)**2 - 1) == 1/tan(x)**2
24    assert trigsimp(1/sin(x)**2 - cot(x)**2) == 1
25
26    assert trigsimp(5*cos(x)**2 + 5*sin(x)**2) == 5
27    assert trigsimp(5*cos(x/2)**2 + 2*sin(x/2)**2) == 3*cos(x)/2 + Rational(7, 2)
28
29    assert trigsimp(sin(x)/cos(x)) == tan(x)
30    assert trigsimp(2*tan(x)*cos(x)) == 2*sin(x)
31    assert trigsimp(cot(x)**3*sin(x)**3) == cos(x)**3
32    assert trigsimp(y*tan(x)**2/sin(x)**2) == y/cos(x)**2
33    assert trigsimp(cot(x)/cos(x)) == 1/sin(x)
34
35    assert trigsimp(sin(x + y) + sin(x - y)) == 2*sin(x)*cos(y)
36    assert trigsimp(sin(x + y) - sin(x - y)) == 2*sin(y)*cos(x)
37    assert trigsimp(cos(x + y) + cos(x - y)) == 2*cos(x)*cos(y)
38    assert trigsimp(cos(x + y) - cos(x - y)) == -2*sin(x)*sin(y)
39    assert trigsimp(tan(x + y) - tan(x)/(1 - tan(x)*tan(y))) == \
40        sin(y)/(-sin(y)*tan(x) + cos(y))  # -tan(y)/(tan(x)*tan(y) - 1)
41
42    assert trigsimp(sinh(x + y) + sinh(x - y)) == 2*sinh(x)*cosh(y)
43    assert trigsimp(sinh(x + y) - sinh(x - y)) == 2*sinh(y)*cosh(x)
44    assert trigsimp(cosh(x + y) + cosh(x - y)) == 2*cosh(x)*cosh(y)
45    assert trigsimp(cosh(x + y) - cosh(x - y)) == 2*sinh(x)*sinh(y)
46    assert trigsimp(tanh(x + y) - tanh(x)/(1 + tanh(x)*tanh(y))) == \
47        sinh(y)/(sinh(y)*tanh(x) + cosh(y))
48
49    assert trigsimp(cos(0.12345)**2 + sin(0.12345)**2) == 1
50    e = 2*sin(x)**2 + 2*cos(x)**2
51    assert trigsimp(log(e)) == log(2)
52
53
54def test_trigsimp1a():
55    assert trigsimp(sin(2)**2*cos(3)*exp(2)/cos(2)**2) == tan(2)**2*cos(3)*exp(2)
56    assert trigsimp(tan(2)**2*cos(3)*exp(2)*cos(2)**2) == sin(2)**2*cos(3)*exp(2)
57    assert trigsimp(cot(2)*cos(3)*exp(2)*sin(2)) == cos(3)*exp(2)*cos(2)
58    assert trigsimp(tan(2)*cos(3)*exp(2)/sin(2)) == cos(3)*exp(2)/cos(2)
59    assert trigsimp(cot(2)*cos(3)*exp(2)/cos(2)) == cos(3)*exp(2)/sin(2)
60    assert trigsimp(cot(2)*cos(3)*exp(2)*tan(2)) == cos(3)*exp(2)
61    assert trigsimp(sinh(2)*cos(3)*exp(2)/cosh(2)) == tanh(2)*cos(3)*exp(2)
62    assert trigsimp(tanh(2)*cos(3)*exp(2)*cosh(2)) == sinh(2)*cos(3)*exp(2)
63    assert trigsimp(coth(2)*cos(3)*exp(2)*sinh(2)) == cosh(2)*cos(3)*exp(2)
64    assert trigsimp(tanh(2)*cos(3)*exp(2)/sinh(2)) == cos(3)*exp(2)/cosh(2)
65    assert trigsimp(coth(2)*cos(3)*exp(2)/cosh(2)) == cos(3)*exp(2)/sinh(2)
66    assert trigsimp(coth(2)*cos(3)*exp(2)*tanh(2)) == cos(3)*exp(2)
67
68
69def test_trigsimp2():
70    x, y = symbols('x,y')
71    assert trigsimp(cos(x)**2*sin(y)**2 + cos(x)**2*cos(y)**2 + sin(x)**2,
72            recursive=True) == 1
73    assert trigsimp(sin(x)**2*sin(y)**2 + sin(x)**2*cos(y)**2 + cos(x)**2,
74            recursive=True) == 1
75    assert trigsimp(
76        Subs(x, x, sin(y)**2 + cos(y)**2)) == Subs(x, x, 1)
77
78
79def test_issue_4373():
80    x = Symbol("x")
81    assert abs(trigsimp(2.0*sin(x)**2 + 2.0*cos(x)**2) - 2.0) < 1e-10
82
83
84def test_trigsimp3():
85    x, y = symbols('x,y')
86    assert trigsimp(sin(x)/cos(x)) == tan(x)
87    assert trigsimp(sin(x)**2/cos(x)**2) == tan(x)**2
88    assert trigsimp(sin(x)**3/cos(x)**3) == tan(x)**3
89    assert trigsimp(sin(x)**10/cos(x)**10) == tan(x)**10
90
91    assert trigsimp(cos(x)/sin(x)) == 1/tan(x)
92    assert trigsimp(cos(x)**2/sin(x)**2) == 1/tan(x)**2
93    assert trigsimp(cos(x)**10/sin(x)**10) == 1/tan(x)**10
94
95    assert trigsimp(tan(x)) == trigsimp(sin(x)/cos(x))
96
97
98def test_issue_4661():
99    a, x, y = symbols('a x y')
100    eq = -4*sin(x)**4 + 4*cos(x)**4 - 8*cos(x)**2
101    assert trigsimp(eq) == -4
102    n = sin(x)**6 + 4*sin(x)**4*cos(x)**2 + 5*sin(x)**2*cos(x)**4 + 2*cos(x)**6
103    d = -sin(x)**2 - 2*cos(x)**2
104    assert simplify(n/d) == -1
105    assert trigsimp(-2*cos(x)**2 + cos(x)**4 - sin(x)**4) == -1
106    eq = (- sin(x)**3/4)*cos(x) + (cos(x)**3/4)*sin(x) - sin(2*x)*cos(2*x)/8
107    assert trigsimp(eq) == 0
108
109
110def test_issue_4494():
111    a, b = symbols('a b')
112    eq = sin(a)**2*sin(b)**2 + cos(a)**2*cos(b)**2*tan(a)**2 + cos(a)**2
113    assert trigsimp(eq) == 1
114
115
116def test_issue_5948():
117    a, x, y = symbols('a x y')
118    assert trigsimp(diff(integrate(cos(x)/sin(x)**7, x), x)) == \
119           cos(x)/sin(x)**7
120
121
122def test_issue_4775():
123    a, x, y = symbols('a x y')
124    assert trigsimp(sin(x)*cos(y)+cos(x)*sin(y)) == sin(x + y)
125    assert trigsimp(sin(x)*cos(y)+cos(x)*sin(y)+3) == sin(x + y) + 3
126
127
128def test_issue_4280():
129    a, x, y = symbols('a x y')
130    assert trigsimp(cos(x)**2 + cos(y)**2*sin(x)**2 + sin(y)**2*sin(x)**2) == 1
131    assert trigsimp(a**2*sin(x)**2 + a**2*cos(y)**2*cos(x)**2 + a**2*cos(x)**2*sin(y)**2) == a**2
132    assert trigsimp(a**2*cos(y)**2*sin(x)**2 + a**2*sin(y)**2*sin(x)**2) == a**2*sin(x)**2
133
134
135def test_issue_3210():
136    eqs = (sin(2)*cos(3) + sin(3)*cos(2),
137        -sin(2)*sin(3) + cos(2)*cos(3),
138        sin(2)*cos(3) - sin(3)*cos(2),
139        sin(2)*sin(3) + cos(2)*cos(3),
140        sin(2)*sin(3) + cos(2)*cos(3) + cos(2),
141        sinh(2)*cosh(3) + sinh(3)*cosh(2),
142        sinh(2)*sinh(3) + cosh(2)*cosh(3),
143        )
144    assert [trigsimp(e) for e in eqs] == [
145        sin(5),
146        cos(5),
147        -sin(1),
148        cos(1),
149        cos(1) + cos(2),
150        sinh(5),
151        cosh(5),
152        ]
153
154
155def test_trigsimp_issues():
156    a, x, y = symbols('a x y')
157
158    # issue 4625 - factor_terms works, too
159    assert trigsimp(sin(x)**3 + cos(x)**2*sin(x)) == sin(x)
160
161    # issue 5948
162    assert trigsimp(diff(integrate(cos(x)/sin(x)**3, x), x)) == \
163        cos(x)/sin(x)**3
164    assert trigsimp(diff(integrate(sin(x)/cos(x)**3, x), x)) == \
165        sin(x)/cos(x)**3
166
167    # check integer exponents
168    e = sin(x)**y/cos(x)**y
169    assert trigsimp(e) == e
170    assert trigsimp(e.subs(y, 2)) == tan(x)**2
171    assert trigsimp(e.subs(x, 1)) == tan(1)**y
172
173    # check for multiple patterns
174    assert (cos(x)**2/sin(x)**2*cos(y)**2/sin(y)**2).trigsimp() == \
175        1/tan(x)**2/tan(y)**2
176    assert trigsimp(cos(x)/sin(x)*cos(x+y)/sin(x+y)) == \
177        1/(tan(x)*tan(x + y))
178
179    eq = cos(2)*(cos(3) + 1)**2/(cos(3) - 1)**2
180    assert trigsimp(eq) == eq.factor()  # factor makes denom (-1 + cos(3))**2
181    assert trigsimp(cos(2)*(cos(3) + 1)**2*(cos(3) - 1)**2) == \
182        cos(2)*sin(3)**4
183
184    # issue 6789; this generates an expression that formerly caused
185    # trigsimp to hang
186    assert cot(x).equals(tan(x)) is False
187
188    # nan or the unchanged expression is ok, but not sin(1)
189    z = cos(x)**2 + sin(x)**2 - 1
190    z1 = tan(x)**2 - 1/cot(x)**2
191    n = (1 + z1/z)
192    assert trigsimp(sin(n)) != sin(1)
193    eq = x*(n - 1) - x*n
194    assert trigsimp(eq) is S.NaN
195    assert trigsimp(eq, recursive=True) is S.NaN
196    assert trigsimp(1).is_Integer
197
198    assert trigsimp(-sin(x)**4 - 2*sin(x)**2*cos(x)**2 - cos(x)**4) == -1
199
200
201def test_trigsimp_issue_2515():
202    x = Symbol('x')
203    assert trigsimp(x*cos(x)*tan(x)) == x*sin(x)
204    assert trigsimp(-sin(x) + cos(x)*tan(x)) == 0
205
206
207def test_trigsimp_issue_3826():
208    assert trigsimp(tan(2*x).expand(trig=True)) == tan(2*x)
209
210
211def test_trigsimp_issue_4032():
212    n = Symbol('n', integer=True, positive=True)
213    assert trigsimp(2**(n/2)*cos(pi*n/4)/2 + 2**(n - 1)/2) == \
214        2**(n/2)*cos(pi*n/4)/2 + 2**n/4
215
216
217def test_trigsimp_issue_7761():
218    assert trigsimp(cosh(pi/4)) == cosh(pi/4)
219
220
221def test_trigsimp_noncommutative():
222    x, y = symbols('x,y')
223    A, B = symbols('A,B', commutative=False)
224
225    assert trigsimp(A - A*sin(x)**2) == A*cos(x)**2
226    assert trigsimp(A - A*cos(x)**2) == A*sin(x)**2
227    assert trigsimp(A*sin(x)**2 + A*cos(x)**2) == A
228    assert trigsimp(A + A*tan(x)**2) == A/cos(x)**2
229    assert trigsimp(A/cos(x)**2 - A) == A*tan(x)**2
230    assert trigsimp(A/cos(x)**2 - A*tan(x)**2) == A
231    assert trigsimp(A + A*cot(x)**2) == A/sin(x)**2
232    assert trigsimp(A/sin(x)**2 - A) == A/tan(x)**2
233    assert trigsimp(A/sin(x)**2 - A*cot(x)**2) == A
234
235    assert trigsimp(y*A*cos(x)**2 + y*A*sin(x)**2) == y*A
236
237    assert trigsimp(A*sin(x)/cos(x)) == A*tan(x)
238    assert trigsimp(A*tan(x)*cos(x)) == A*sin(x)
239    assert trigsimp(A*cot(x)**3*sin(x)**3) == A*cos(x)**3
240    assert trigsimp(y*A*tan(x)**2/sin(x)**2) == y*A/cos(x)**2
241    assert trigsimp(A*cot(x)/cos(x)) == A/sin(x)
242
243    assert trigsimp(A*sin(x + y) + A*sin(x - y)) == 2*A*sin(x)*cos(y)
244    assert trigsimp(A*sin(x + y) - A*sin(x - y)) == 2*A*sin(y)*cos(x)
245    assert trigsimp(A*cos(x + y) + A*cos(x - y)) == 2*A*cos(x)*cos(y)
246    assert trigsimp(A*cos(x + y) - A*cos(x - y)) == -2*A*sin(x)*sin(y)
247
248    assert trigsimp(A*sinh(x + y) + A*sinh(x - y)) == 2*A*sinh(x)*cosh(y)
249    assert trigsimp(A*sinh(x + y) - A*sinh(x - y)) == 2*A*sinh(y)*cosh(x)
250    assert trigsimp(A*cosh(x + y) + A*cosh(x - y)) == 2*A*cosh(x)*cosh(y)
251    assert trigsimp(A*cosh(x + y) - A*cosh(x - y)) == 2*A*sinh(x)*sinh(y)
252
253    assert trigsimp(A*cos(0.12345)**2 + A*sin(0.12345)**2) == 1.0*A
254
255
256def test_hyperbolic_simp():
257    x, y = symbols('x,y')
258
259    assert trigsimp(sinh(x)**2 + 1) == cosh(x)**2
260    assert trigsimp(cosh(x)**2 - 1) == sinh(x)**2
261    assert trigsimp(cosh(x)**2 - sinh(x)**2) == 1
262    assert trigsimp(1 - tanh(x)**2) == 1/cosh(x)**2
263    assert trigsimp(1 - 1/cosh(x)**2) == tanh(x)**2
264    assert trigsimp(tanh(x)**2 + 1/cosh(x)**2) == 1
265    assert trigsimp(coth(x)**2 - 1) == 1/sinh(x)**2
266    assert trigsimp(1/sinh(x)**2 + 1) == 1/tanh(x)**2
267    assert trigsimp(coth(x)**2 - 1/sinh(x)**2) == 1
268
269    assert trigsimp(5*cosh(x)**2 - 5*sinh(x)**2) == 5
270    assert trigsimp(5*cosh(x/2)**2 - 2*sinh(x/2)**2) == 3*cosh(x)/2 + Rational(7, 2)
271
272    assert trigsimp(sinh(x)/cosh(x)) == tanh(x)
273    assert trigsimp(tanh(x)) == trigsimp(sinh(x)/cosh(x))
274    assert trigsimp(cosh(x)/sinh(x)) == 1/tanh(x)
275    assert trigsimp(2*tanh(x)*cosh(x)) == 2*sinh(x)
276    assert trigsimp(coth(x)**3*sinh(x)**3) == cosh(x)**3
277    assert trigsimp(y*tanh(x)**2/sinh(x)**2) == y/cosh(x)**2
278    assert trigsimp(coth(x)/cosh(x)) == 1/sinh(x)
279
280    for a in (pi/6*I, pi/4*I, pi/3*I):
281        assert trigsimp(sinh(a)*cosh(x) + cosh(a)*sinh(x)) == sinh(x + a)
282        assert trigsimp(-sinh(a)*cosh(x) + cosh(a)*sinh(x)) == sinh(x - a)
283
284    e = 2*cosh(x)**2 - 2*sinh(x)**2
285    assert trigsimp(log(e)) == log(2)
286
287    # issue 19535:
288    assert trigsimp(sqrt(cosh(x)**2 - 1)) == sqrt(sinh(x)**2)
289
290    assert trigsimp(cosh(x)**2*cosh(y)**2 - cosh(x)**2*sinh(y)**2 - sinh(x)**2,
291            recursive=True) == 1
292    assert trigsimp(sinh(x)**2*sinh(y)**2 - sinh(x)**2*cosh(y)**2 + cosh(x)**2,
293            recursive=True) == 1
294
295    assert abs(trigsimp(2.0*cosh(x)**2 - 2.0*sinh(x)**2) - 2.0) < 1e-10
296
297    assert trigsimp(sinh(x)**2/cosh(x)**2) == tanh(x)**2
298    assert trigsimp(sinh(x)**3/cosh(x)**3) == tanh(x)**3
299    assert trigsimp(sinh(x)**10/cosh(x)**10) == tanh(x)**10
300    assert trigsimp(cosh(x)**3/sinh(x)**3) == 1/tanh(x)**3
301
302    assert trigsimp(cosh(x)/sinh(x)) == 1/tanh(x)
303    assert trigsimp(cosh(x)**2/sinh(x)**2) == 1/tanh(x)**2
304    assert trigsimp(cosh(x)**10/sinh(x)**10) == 1/tanh(x)**10
305
306    assert trigsimp(x*cosh(x)*tanh(x)) == x*sinh(x)
307    assert trigsimp(-sinh(x) + cosh(x)*tanh(x)) == 0
308
309    assert tan(x) != 1/cot(x)  # cot doesn't auto-simplify
310
311    assert trigsimp(tan(x) - 1/cot(x)) == 0
312    assert trigsimp(3*tanh(x)**7 - 2/coth(x)**7) == tanh(x)**7
313
314
315def test_trigsimp_groebner():
316    from sympy.simplify.trigsimp import trigsimp_groebner
317
318    c = cos(x)
319    s = sin(x)
320    ex = (4*s*c + 12*s + 5*c**3 + 21*c**2 + 23*c + 15)/(
321        -s*c**2 + 2*s*c + 15*s + 7*c**3 + 31*c**2 + 37*c + 21)
322    resnum = (5*s - 5*c + 1)
323    resdenom = (8*s - 6*c)
324    results = [resnum/resdenom, (-resnum)/(-resdenom)]
325    assert trigsimp_groebner(ex) in results
326    assert trigsimp_groebner(s/c, hints=[tan]) == tan(x)
327    assert trigsimp_groebner(c*s) == c*s
328    assert trigsimp((-s + 1)/c + c/(-s + 1),
329                    method='groebner') == 2/c
330    assert trigsimp((-s + 1)/c + c/(-s + 1),
331                    method='groebner', polynomial=True) == 2/c
332
333    # Test quick=False works
334    assert trigsimp_groebner(ex, hints=[2]) in results
335    assert trigsimp_groebner(ex, hints=[int(2)]) in results
336
337    # test "I"
338    assert trigsimp_groebner(sin(I*x)/cos(I*x), hints=[tanh]) == I*tanh(x)
339
340    # test hyperbolic / sums
341    assert trigsimp_groebner((tanh(x)+tanh(y))/(1+tanh(x)*tanh(y)),
342                             hints=[(tanh, x, y)]) == tanh(x + y)
343
344
345def test_issue_2827_trigsimp_methods():
346    measure1 = lambda expr: len(str(expr))
347    measure2 = lambda expr: -count_ops(expr)
348                                       # Return the most complicated result
349    expr = (x + 1)/(x + sin(x)**2 + cos(x)**2)
350    ans = Matrix([1])
351    M = Matrix([expr])
352    assert trigsimp(M, method='fu', measure=measure1) == ans
353    assert trigsimp(M, method='fu', measure=measure2) != ans
354    # all methods should work with Basic expressions even if they
355    # aren't Expr
356    M = Matrix.eye(1)
357    assert all(trigsimp(M, method=m) == M for m in
358        'fu matching groebner old'.split())
359    # watch for E in exptrigsimp, not only exp()
360    eq = 1/sqrt(E) + E
361    assert exptrigsimp(eq) == eq
362
363def test_issue_15129_trigsimp_methods():
364    t1 = Matrix([sin(Rational(1, 50)), cos(Rational(1, 50)), 0])
365    t2 = Matrix([sin(Rational(1, 25)), cos(Rational(1, 25)), 0])
366    t3 = Matrix([cos(Rational(1, 25)), sin(Rational(1, 25)), 0])
367    r1 = t1.dot(t2)
368    r2 = t1.dot(t3)
369    assert trigsimp(r1) == cos(Rational(1, 50))
370    assert trigsimp(r2) == sin(Rational(3, 50))
371
372def test_exptrigsimp():
373    def valid(a, b):
374        from sympy.testing.randtest import verify_numerically as tn
375        if not (tn(a, b) and a == b):
376            return False
377        return True
378
379    assert exptrigsimp(exp(x) + exp(-x)) == 2*cosh(x)
380    assert exptrigsimp(exp(x) - exp(-x)) == 2*sinh(x)
381    assert exptrigsimp((2*exp(x)-2*exp(-x))/(exp(x)+exp(-x))) == 2*tanh(x)
382    assert exptrigsimp((2*exp(2*x)-2)/(exp(2*x)+1)) == 2*tanh(x)
383    e = [cos(x) + I*sin(x), cos(x) - I*sin(x),
384         cosh(x) - sinh(x), cosh(x) + sinh(x)]
385    ok = [exp(I*x), exp(-I*x), exp(-x), exp(x)]
386    assert all(valid(i, j) for i, j in zip(
387        [exptrigsimp(ei) for ei in e], ok))
388
389    ue = [cos(x) + sin(x), cos(x) - sin(x),
390          cosh(x) + I*sinh(x), cosh(x) - I*sinh(x)]
391    assert [exptrigsimp(ei) == ei for ei in ue]
392
393    res = []
394    ok = [y*tanh(1), 1/(y*tanh(1)), I*y*tan(1), -I/(y*tan(1)),
395        y*tanh(x), 1/(y*tanh(x)), I*y*tan(x), -I/(y*tan(x)),
396        y*tanh(1 + I), 1/(y*tanh(1 + I))]
397    for a in (1, I, x, I*x, 1 + I):
398        w = exp(a)
399        eq = y*(w - 1/w)/(w + 1/w)
400        res.append(simplify(eq))
401        res.append(simplify(1/eq))
402    assert all(valid(i, j) for i, j in zip(res, ok))
403
404    for a in range(1, 3):
405        w = exp(a)
406        e = w + 1/w
407        s = simplify(e)
408        assert s == exptrigsimp(e)
409        assert valid(s, 2*cosh(a))
410        e = w - 1/w
411        s = simplify(e)
412        assert s == exptrigsimp(e)
413        assert valid(s, 2*sinh(a))
414
415def test_exptrigsimp_noncommutative():
416    a,b = symbols('a b', commutative=False)
417    x = Symbol('x', commutative=True)
418    assert exp(a + x) == exptrigsimp(exp(a)*exp(x))
419    p = exp(a)*exp(b) - exp(b)*exp(a)
420    assert p == exptrigsimp(p) != 0
421
422def test_powsimp_on_numbers():
423    assert 2**(Rational(1, 3) - 2) == 2**Rational(1, 3)/4
424
425
426@XFAIL
427def test_issue_6811_fail():
428    # from doc/src/modules/physics/mechanics/examples.rst, the current `eq`
429    # at Line 576 (in different variables) was formerly the equivalent and
430    # shorter expression given below...it would be nice to get the short one
431    # back again
432    xp, y, x, z = symbols('xp, y, x, z')
433    eq = 4*(-19*sin(x)*y + 5*sin(3*x)*y + 15*cos(2*x)*z - 21*z)*xp/(9*cos(x) - 5*cos(3*x))
434    assert trigsimp(eq) == -2*(2*cos(x)*tan(x)*y + 3*z)*xp/cos(x)
435
436
437def test_Piecewise():
438    e1 = x*(x + y) - y*(x + y)
439    e2 = sin(x)**2 + cos(x)**2
440    e3 = expand((x + y)*y/x)
441    # s1 = simplify(e1)
442    s2 = simplify(e2)
443    # s3 = simplify(e3)
444
445    # trigsimp tries not to touch non-trig containing args
446    assert trigsimp(Piecewise((e1, e3 < e2), (e3, True))) == \
447        Piecewise((e1, e3 < s2), (e3, True))
448
449
450def test_issue_21594():
451    assert simplify(exp(Rational(1,2)) + exp(Rational(-1,2))) == cosh(S.Half)*2
452
453
454def test_trigsimp_old():
455    x, y = symbols('x,y')
456
457    assert trigsimp(1 - sin(x)**2, old=True) == cos(x)**2
458    assert trigsimp(1 - cos(x)**2, old=True) == sin(x)**2
459    assert trigsimp(sin(x)**2 + cos(x)**2, old=True) == 1
460    assert trigsimp(1 + tan(x)**2, old=True) == 1/cos(x)**2
461    assert trigsimp(1/cos(x)**2 - 1, old=True) == tan(x)**2
462    assert trigsimp(1/cos(x)**2 - tan(x)**2, old=True) == 1
463    assert trigsimp(1 + cot(x)**2, old=True) == 1/sin(x)**2
464    assert trigsimp(1/sin(x)**2 - cot(x)**2, old=True) == 1
465
466    assert trigsimp(5*cos(x)**2 + 5*sin(x)**2, old=True) == 5
467
468    assert trigsimp(sin(x)/cos(x), old=True) == tan(x)
469    assert trigsimp(2*tan(x)*cos(x), old=True) == 2*sin(x)
470    assert trigsimp(cot(x)**3*sin(x)**3, old=True) == cos(x)**3
471    assert trigsimp(y*tan(x)**2/sin(x)**2, old=True) == y/cos(x)**2
472    assert trigsimp(cot(x)/cos(x), old=True) == 1/sin(x)
473
474    assert trigsimp(sin(x + y) + sin(x - y), old=True) == 2*sin(x)*cos(y)
475    assert trigsimp(sin(x + y) - sin(x - y), old=True) == 2*sin(y)*cos(x)
476    assert trigsimp(cos(x + y) + cos(x - y), old=True) == 2*cos(x)*cos(y)
477    assert trigsimp(cos(x + y) - cos(x - y), old=True) == -2*sin(x)*sin(y)
478
479    assert trigsimp(sinh(x + y) + sinh(x - y), old=True) == 2*sinh(x)*cosh(y)
480    assert trigsimp(sinh(x + y) - sinh(x - y), old=True) == 2*sinh(y)*cosh(x)
481    assert trigsimp(cosh(x + y) + cosh(x - y), old=True) == 2*cosh(x)*cosh(y)
482    assert trigsimp(cosh(x + y) - cosh(x - y), old=True) == 2*sinh(x)*sinh(y)
483
484    assert trigsimp(cos(0.12345)**2 + sin(0.12345)**2, old=True) == 1
485
486    assert trigsimp(sin(x)/cos(x), old=True, method='combined') == tan(x)
487    assert trigsimp(sin(x)/cos(x), old=True, method='groebner') == sin(x)/cos(x)
488    assert trigsimp(sin(x)/cos(x), old=True, method='groebner', hints=[tan]) == tan(x)
489
490    assert trigsimp(1-sin(sin(x)**2+cos(x)**2)**2, old=True, deep=True) == cos(1)**2
491