Skip to content

Commit f341893

Browse files
committed
Merge pull request sympy#8303 from skirpichev/8298-fix
Fix automatic evaluation for sin/cos(pi*n/2): consider n.is_even case
2 parents 398447c + 762dd8c commit f341893

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

sympy/functions/elementary/tests/test_trigonometric.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,13 @@ def test_sin():
5050
assert sin(5*pi/2) == 1
5151
assert sin(7*pi/2) == -1
5252

53-
n = symbols('n', integer=True)
54-
assert sin(pi*n/2) == (-1)**(n/2 - S.Half)
53+
ne = symbols('ne', integer=True, even=False)
54+
e = symbols('e', even=True)
55+
assert sin(pi*ne/2) == (-1)**(ne/2 - S.Half)
56+
assert sin(pi*k/2).func == sin
57+
assert sin(pi*e/2) == 0
58+
assert sin(pi*k) == 0
59+
assert sin(pi*k).subs(k, 3) == sin(pi*k/2).subs(k, 6) # issue 8298
5560

5661
assert sin(pi/3) == S.Half*sqrt(3)
5762
assert sin(-2*pi/3) == -S.Half*sqrt(3)
@@ -223,8 +228,10 @@ def test_cos():
223228
assert cos((-3*10**73 + 1)*pi/2) == 0
224229
assert cos((7*10**103 + 1)*pi/2) == 0
225230

226-
n = symbols('n', integer=True)
231+
n = symbols('n', integer=True, even=False)
232+
e = symbols('e', even=True)
227233
assert cos(pi*n/2) == 0
234+
assert cos(pi*e/2) == (-1)**(e/2)
228235

229236
assert cos(pi) == -1
230237
assert cos(-pi) == -1

sympy/functions/elementary/trigonometric.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,10 @@ def eval(cls, arg):
231231
return S.Zero
232232

233233
if (2*pi_coeff).is_integer:
234-
return S.NegativeOne**(pi_coeff - S.Half)
234+
if pi_coeff.is_even:
235+
return S.Zero
236+
elif pi_coeff.is_even is False:
237+
return S.NegativeOne**(pi_coeff - S.Half)
235238

236239
if not pi_coeff.is_Rational:
237240
narg = pi_coeff*S.Pi
@@ -463,7 +466,10 @@ def eval(cls, arg):
463466
return (S.NegativeOne)**pi_coeff
464467

465468
if (2*pi_coeff).is_integer:
466-
return S.Zero
469+
if pi_coeff.is_even:
470+
return (S.NegativeOne)**(pi_coeff/2)
471+
elif pi_coeff.is_even is False:
472+
return S.Zero
467473

468474
if not pi_coeff.is_Rational:
469475
narg = pi_coeff*S.Pi

0 commit comments

Comments
 (0)