<s> from sympy import ( sin , cos , tan , sec , csc , cot , log , exp , atan , asin , acos , <EOL> Symbol , Integral , integrate , pi , Dummy , Derivative , <EOL> diff , I , sqrt , erf , Piecewise , Eq , symbols , <EOL> And , Heaviside , S , asinh , acosh ) <EOL> from sympy . integrals . manualintegrate import manualintegrate , find_substitutions , _parts_rule <EOL> x , y , u , n , a , b = symbols ( '<STR_LIT>' ) <EOL> def test_find_substitutions ( ) : <EOL> assert find_substitutions ( ( cot ( x ) ** <NUM_LIT:2> + <NUM_LIT:1> ) ** <NUM_LIT:2> * csc ( x ) ** <NUM_LIT:2> * cot ( x ) ** <NUM_LIT:2> , x , u ) == [ ( cot ( x ) , <NUM_LIT:1> , - u ** <NUM_LIT:6> - <NUM_LIT:2> * u ** <NUM_LIT:4> - u ** <NUM_LIT:2> ) ] <EOL> assert find_substitutions ( ( sec ( x ) ** <NUM_LIT:2> + tan ( x ) * sec ( x ) ) / ( sec ( x ) + tan ( x ) ) , <EOL> x , u ) == [ ( sec ( x ) + tan ( x ) , <NUM_LIT:1> , <NUM_LIT:1> / u ) ] <EOL> assert find_substitutions ( x * exp ( - x ** <NUM_LIT:2> ) , x , u ) == [ ( - x ** <NUM_LIT:2> , - S . Half , exp ( u ) ) ] <EOL> def test_manualintegrate_polynomials ( ) : <EOL> assert manualintegrate ( y , x ) == x * y <EOL> assert manualintegrate ( exp ( <NUM_LIT:2> ) , x ) == x * exp ( <NUM_LIT:2> ) <EOL> assert manualintegrate ( x ** <NUM_LIT:2> , x ) == x ** <NUM_LIT:3> / <NUM_LIT:3> <EOL> assert manualintegrate ( <NUM_LIT:3> * x ** <NUM_LIT:2> + <NUM_LIT:4> * x ** <NUM_LIT:3> , x ) == x ** <NUM_LIT:3> + x ** <NUM_LIT:4> <EOL> assert manualintegrate ( ( x + <NUM_LIT:2> ) ** <NUM_LIT:3> , x ) == ( x + <NUM_LIT:2> ) ** <NUM_LIT:4> / <NUM_LIT:4> <EOL> assert manualintegrate ( ( <NUM_LIT:3> * x + <NUM_LIT:4> ) ** <NUM_LIT:2> , x ) == ( <NUM_LIT:3> * x + <NUM_LIT:4> ) ** <NUM_LIT:3> / <NUM_LIT:9> <EOL> assert manualintegrate ( ( u + <NUM_LIT:2> ) ** <NUM_LIT:3> , u ) == ( u + <NUM_LIT:2> ) ** <NUM_LIT:4> / <NUM_LIT:4> <EOL> assert manualintegrate ( ( <NUM_LIT:3> * u + <NUM_LIT:4> ) ** <NUM_LIT:2> , u ) == ( <NUM_LIT:3> * u + <NUM_LIT:4> ) ** <NUM_LIT:3> / <NUM_LIT:9> <EOL> def test_manualintegrate_exponentials ( ) : <EOL> assert manualintegrate ( exp ( <NUM_LIT:2> * x ) , x ) == exp ( <NUM_LIT:2> * x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:2> ** x , x ) == ( <NUM_LIT:2> ** x ) / log ( <NUM_LIT:2> ) <EOL> assert manualintegrate ( <NUM_LIT:1> / x , x ) == log ( x ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:2> * x + <NUM_LIT:3> ) , x ) == log ( <NUM_LIT:2> * x + <NUM_LIT:3> ) / <NUM_LIT:2> <EOL> assert manualintegrate ( log ( x ) ** <NUM_LIT:2> / x , x ) == log ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> <EOL> def test_manualintegrate_parts ( ) : <EOL> assert manualintegrate ( exp ( x ) * sin ( x ) , x ) == ( exp ( x ) * sin ( x ) ) / <NUM_LIT:2> - ( exp ( x ) * cos ( x ) ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:2> * x * cos ( x ) , x ) == <NUM_LIT:2> * x * sin ( x ) + <NUM_LIT:2> * cos ( x ) <EOL> assert manualintegrate ( x * log ( x ) , x ) == x ** <NUM_LIT:2> * log ( x ) / <NUM_LIT:2> - x ** <NUM_LIT:2> / <NUM_LIT:4> <EOL> assert manualintegrate ( log ( x ) , x ) == x * log ( x ) - x <EOL> assert manualintegrate ( ( <NUM_LIT:3> * x ** <NUM_LIT:2> + <NUM_LIT:5> ) * exp ( x ) , x ) == - <NUM_LIT:6> * x * exp ( x ) + ( <NUM_LIT:3> * x ** <NUM_LIT:2> + <NUM_LIT:5> ) * exp ( x ) + <NUM_LIT:6> * exp ( x ) <EOL> assert manualintegrate ( atan ( x ) , x ) == x * atan ( x ) - log ( x ** <NUM_LIT:2> + <NUM_LIT:1> ) / <NUM_LIT:2> <EOL> assert _parts_rule ( cos ( x ) , x ) == None <EOL> assert _parts_rule ( exp ( x ) , x ) == None <EOL> assert _parts_rule ( x ** <NUM_LIT:2> , x ) == None <EOL> result = _parts_rule ( atan ( x ) , x ) <EOL> assert result [ <NUM_LIT:0> ] == atan ( x ) and result [ <NUM_LIT:1> ] == <NUM_LIT:1> <EOL> def test_manualintegrate_trigonometry ( ) : <EOL> assert manualintegrate ( sin ( x ) , x ) == - cos ( x ) <EOL> assert manualintegrate ( tan ( x ) , x ) == - log ( cos ( x ) ) <EOL> assert manualintegrate ( sec ( x ) , x ) == log ( sec ( x ) + tan ( x ) ) <EOL> assert manualintegrate ( csc ( x ) , x ) == - log ( csc ( x ) + cot ( x ) ) <EOL> assert manualintegrate ( sin ( x ) * cos ( x ) , x ) in [ sin ( x ) ** <NUM_LIT:2> / <NUM_LIT:2> , - cos ( x ) ** <NUM_LIT:2> / <NUM_LIT:2> ] <EOL> assert manualintegrate ( - sec ( x ) * tan ( x ) , x ) == - sec ( x ) <EOL> assert manualintegrate ( csc ( x ) * cot ( x ) , x ) == - csc ( x ) <EOL> assert manualintegrate ( sec ( x ) ** <NUM_LIT:2> , x ) == tan ( x ) <EOL> assert manualintegrate ( csc ( x ) ** <NUM_LIT:2> , x ) == - cot ( x ) <EOL> assert manualintegrate ( x * sec ( x ** <NUM_LIT:2> ) , x ) == log ( tan ( x ** <NUM_LIT:2> ) + sec ( x ** <NUM_LIT:2> ) ) / <NUM_LIT:2> <EOL> assert manualintegrate ( cos ( x ) * csc ( sin ( x ) ) , x ) == - log ( cot ( sin ( x ) ) + csc ( sin ( x ) ) ) <EOL> def test_manualintegrate_trigpowers ( ) : <EOL> assert manualintegrate ( sin ( x ) ** <NUM_LIT:2> * cos ( x ) , x ) == sin ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> <EOL> assert manualintegrate ( sin ( x ) ** <NUM_LIT:2> * cos ( x ) ** <NUM_LIT:2> , x ) == x / <NUM_LIT:8> - sin ( <NUM_LIT:4> * x ) / <NUM_LIT:32> <EOL> assert manualintegrate ( sin ( x ) * cos ( x ) ** <NUM_LIT:3> , x ) == - cos ( x ) ** <NUM_LIT:4> / <NUM_LIT:4> <EOL> assert manualintegrate ( sin ( x ) ** <NUM_LIT:3> * cos ( x ) ** <NUM_LIT:2> , x ) == cos ( x ) ** <NUM_LIT:5> / <NUM_LIT:5> - cos ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> <EOL> assert manualintegrate ( tan ( x ) ** <NUM_LIT:3> * sec ( x ) , x ) == sec ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> - sec ( x ) <EOL> assert manualintegrate ( tan ( x ) * sec ( x ) ** <NUM_LIT:2> , x ) == sec ( x ) ** <NUM_LIT:2> / <NUM_LIT:2> <EOL> assert manualintegrate ( cot ( x ) ** <NUM_LIT:5> * csc ( x ) , x ) == - csc ( x ) ** <NUM_LIT:5> / <NUM_LIT:5> + <NUM_LIT:2> * csc ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> - csc ( x ) <EOL> assert manualintegrate ( cot ( x ) ** <NUM_LIT:2> * csc ( x ) ** <NUM_LIT:6> , x ) == - cot ( x ) ** <NUM_LIT:7> / <NUM_LIT:7> - <NUM_LIT:2> * cot ( x ) ** <NUM_LIT:5> / <NUM_LIT:5> - cot ( x ) ** <NUM_LIT:3> / <NUM_LIT:3> <EOL> def test_manualintegrate_inversetrig ( ) : <EOL> assert manualintegrate ( exp ( x ) / ( <NUM_LIT:1> + exp ( <NUM_LIT:2> * x ) ) , x ) == atan ( exp ( x ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:4> + <NUM_LIT:9> * x ** <NUM_LIT:2> ) , x ) == atan ( <NUM_LIT:3> * x / <NUM_LIT:2> ) / <NUM_LIT:6> <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:16> + <NUM_LIT:16> * x ** <NUM_LIT:2> ) , x ) == atan ( x ) / <NUM_LIT:16> <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:4> + x ** <NUM_LIT:2> ) , x ) == atan ( x / <NUM_LIT:2> ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:1> + <NUM_LIT:4> * x ** <NUM_LIT:2> ) , x ) == atan ( <NUM_LIT:2> * x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:1> / ( a + b * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( ( sqrt ( a / b ) * atan ( x * sqrt ( b / a ) ) / a ) , And ( a > <NUM_LIT:0> , b > <NUM_LIT:0> ) ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:4> + b * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( sqrt ( <NUM_LIT:1> / b ) * atan ( sqrt ( b ) * x / <NUM_LIT:2> ) / <NUM_LIT:2> , b > <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( a + <NUM_LIT:4> * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( atan ( <NUM_LIT:2> * x * sqrt ( <NUM_LIT:1> / a ) ) / ( <NUM_LIT:2> * sqrt ( a ) ) , a > <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:4> + <NUM_LIT:4> * x ** <NUM_LIT:2> ) , x ) == atan ( x ) / <NUM_LIT:4> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:1> - x ** <NUM_LIT:2> ) , x ) == asin ( x ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:4> - <NUM_LIT:4> * x ** <NUM_LIT:2> ) , x ) == asin ( x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:3> / sqrt ( <NUM_LIT:1> - <NUM_LIT:9> * x ** <NUM_LIT:2> ) , x ) == asin ( <NUM_LIT:3> * x ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:4> - <NUM_LIT:9> * x ** <NUM_LIT:2> ) , x ) == asin ( <NUM_LIT:3> * x / <NUM_LIT:2> ) / <NUM_LIT:3> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( x ** <NUM_LIT:2> + <NUM_LIT:1> ) , x ) == asinh ( x ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( x ** <NUM_LIT:2> + <NUM_LIT:4> ) , x ) == asinh ( x / <NUM_LIT:2> ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:4> * x ** <NUM_LIT:2> + <NUM_LIT:4> ) , x ) == asinh ( x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:4> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) , x ) == asinh ( <NUM_LIT:2> * x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( a * x ** <NUM_LIT:2> + <NUM_LIT:1> ) , x ) == Piecewise ( ( sqrt ( - <NUM_LIT:1> / a ) * asin ( x * sqrt ( - a ) ) , a < <NUM_LIT:0> ) , ( sqrt ( <NUM_LIT:1> / a ) * asinh ( sqrt ( a ) * x ) , a > <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( a + x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( asinh ( x * sqrt ( <NUM_LIT:1> / a ) ) , a > <NUM_LIT:0> ) , ( acosh ( x * sqrt ( - <NUM_LIT:1> / a ) ) , a < <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( x ** <NUM_LIT:2> - <NUM_LIT:1> ) , x ) == acosh ( x ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( x ** <NUM_LIT:2> - <NUM_LIT:4> ) , x ) == acosh ( x / <NUM_LIT:2> ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:4> * x ** <NUM_LIT:2> - <NUM_LIT:4> ) , x ) == acosh ( x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( <NUM_LIT:9> * x ** <NUM_LIT:2> - <NUM_LIT:1> ) , x ) == acosh ( <NUM_LIT:3> * x ) / <NUM_LIT:3> <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( a * x ** <NUM_LIT:2> - <NUM_LIT:4> ) , x ) == Piecewise ( ( sqrt ( <NUM_LIT:1> / a ) * acosh ( sqrt ( a ) * x / <NUM_LIT:2> ) , a > <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( - a + <NUM_LIT:4> * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( asinh ( <NUM_LIT:2> * x * sqrt ( - <NUM_LIT:1> / a ) ) / <NUM_LIT:2> , - a > <NUM_LIT:0> ) , ( acosh ( <NUM_LIT:2> * x * sqrt ( <NUM_LIT:1> / a ) ) / <NUM_LIT:2> , - a < <NUM_LIT:0> ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( a - b * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( sqrt ( a / b ) * asin ( x * sqrt ( b / a ) ) / sqrt ( a ) , And ( - b < <NUM_LIT:0> , a > <NUM_LIT:0> ) ) , <EOL> ( sqrt ( - a / b ) * asinh ( x * sqrt ( - b / a ) ) / sqrt ( a ) , And ( - b > <NUM_LIT:0> , a > <NUM_LIT:0> ) ) , <EOL> ( sqrt ( a / b ) * acosh ( x * sqrt ( b / a ) ) / sqrt ( - a ) , And ( - b > <NUM_LIT:0> , a < <NUM_LIT:0> ) ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / sqrt ( a + b * x ** <NUM_LIT:2> ) , x ) == Piecewise ( ( sqrt ( - a / b ) * asin ( x * sqrt ( - b / a ) ) / sqrt ( a ) , And ( a > <NUM_LIT:0> , b < <NUM_LIT:0> ) ) , <EOL> ( sqrt ( a / b ) * asinh ( x * sqrt ( b / a ) ) / sqrt ( a ) , And ( a > <NUM_LIT:0> , b > <NUM_LIT:0> ) ) , <EOL> ( sqrt ( - a / b ) * acosh ( x * sqrt ( - b / a ) ) / sqrt ( - a ) , And ( a < <NUM_LIT:0> , b > <NUM_LIT:0> ) ) ) <EOL> def test_manualintegrate_trig_substitution ( ) : <EOL> assert manualintegrate ( sqrt ( <NUM_LIT:16> * x ** <NUM_LIT:2> - <NUM_LIT:9> ) / x , x ) == Piecewise ( ( sqrt ( <NUM_LIT:16> * x ** <NUM_LIT:2> - <NUM_LIT:9> ) - <NUM_LIT:3> * acos ( <NUM_LIT:3> / ( <NUM_LIT:4> * x ) ) , <EOL> And ( x < <NUM_LIT:3> * S . One / <NUM_LIT:4> , x > - <NUM_LIT:3> * S . One / <NUM_LIT:4> ) ) ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( x ** <NUM_LIT:4> * sqrt ( <NUM_LIT> - x ** <NUM_LIT:2> ) ) , x ) == Piecewise ( ( - sqrt ( - x ** <NUM_LIT:2> / <NUM_LIT> + <NUM_LIT:1> ) / ( <NUM_LIT> * x ) - <EOL> ( - x ** <NUM_LIT:2> / <NUM_LIT> + <NUM_LIT:1> ) ** ( <NUM_LIT:3> * S . Half ) / ( <NUM_LIT:15> * x ** <NUM_LIT:3> ) , And ( x < <NUM_LIT:5> , x > - <NUM_LIT:5> ) ) ) <EOL> assert manualintegrate ( x ** <NUM_LIT:7> / ( <NUM_LIT> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) ** ( <NUM_LIT:3> * S . Half ) , x ) == ( ( <NUM_LIT> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) ** ( <NUM_LIT:5> * S . Half ) / <NUM_LIT> - <EOL> ( <NUM_LIT> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) ** ( <NUM_LIT:3> * S . Half ) / <NUM_LIT> + <EOL> <NUM_LIT:3> * sqrt ( <NUM_LIT> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) / <NUM_LIT> + <NUM_LIT:1> / ( <NUM_LIT> * sqrt ( <NUM_LIT> * x ** <NUM_LIT:2> + <NUM_LIT:1> ) ) ) <EOL> def test_manualintegrate_rational ( ) : <EOL> assert manualintegrate ( <NUM_LIT:1> / ( <NUM_LIT:4> - x ** <NUM_LIT:2> ) , x ) == - log ( x - <NUM_LIT:2> ) / <NUM_LIT:4> + log ( x + <NUM_LIT:2> ) / <NUM_LIT:4> <EOL> assert manualintegrate ( <NUM_LIT:1> / ( - <NUM_LIT:1> + x ** <NUM_LIT:2> ) , x ) == log ( x - <NUM_LIT:1> ) / <NUM_LIT:2> - log ( x + <NUM_LIT:1> ) / <NUM_LIT:2> <EOL> def test_manualintegrate_derivative ( ) : <EOL> assert manualintegrate ( pi * Derivative ( x ** <NUM_LIT:2> + <NUM_LIT:2> * x + <NUM_LIT:3> ) , x ) == pi * ( ( x ** <NUM_LIT:2> + <NUM_LIT:2> * x + <NUM_LIT:3> ) ) <EOL> assert manualintegrate ( Derivative ( x ** <NUM_LIT:2> + <NUM_LIT:2> * x + <NUM_LIT:3> , y ) , x ) == x * Derivative ( x ** <NUM_LIT:2> + <NUM_LIT:2> * x + <NUM_LIT:3> , y ) <EOL> assert manualintegrate ( Derivative ( sin ( x ) , x , x , y , x ) , x ) == Derivative ( sin ( x ) , x , x , y ) <EOL> def test_manualintegrate_Heaviside ( ) : <EOL> assert manualintegrate ( Heaviside ( x ) , x ) == x * Heaviside ( x ) <EOL> assert manualintegrate ( x * Heaviside ( <NUM_LIT:2> ) , x ) == x ** <NUM_LIT:2> / <NUM_LIT:2> <EOL> assert manualintegrate ( x * Heaviside ( - <NUM_LIT:2> ) , x ) == <NUM_LIT:0> <EOL> assert manualintegrate ( x * Heaviside ( x ) , x ) == x ** <NUM_LIT:2> * Heaviside ( x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( x * Heaviside ( - x ) , x ) == x ** <NUM_LIT:2> * Heaviside ( - x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( Heaviside ( <NUM_LIT:2> * x + <NUM_LIT:4> ) , x ) == ( x + <NUM_LIT:2> ) * Heaviside ( <NUM_LIT:2> * x + <NUM_LIT:4> ) <EOL> assert manualintegrate ( x * Heaviside ( x ) , x ) == x ** <NUM_LIT:2> * Heaviside ( x ) / <NUM_LIT:2> <EOL> assert manualintegrate ( Heaviside ( x + <NUM_LIT:1> ) * Heaviside ( <NUM_LIT:1> - x ) * x ** <NUM_LIT:2> , x ) == ( ( x ** <NUM_LIT:3> / <NUM_LIT:3> + S ( <NUM_LIT:1> ) / <NUM_LIT:3> ) * Heaviside ( x + <NUM_LIT:1> ) - S ( <NUM_LIT:2> ) / <NUM_LIT:3> ) * Heaviside ( - x + <NUM_LIT:1> ) <EOL> y = Symbol ( '<STR_LIT:y>' ) <EOL> assert manualintegrate ( sin ( <NUM_LIT:7> + x ) * Heaviside ( <NUM_LIT:3> * x - <NUM_LIT:7> ) , x ) == ( - cos ( x + <NUM_LIT:7> ) + cos ( S ( <NUM_LIT> ) / <NUM_LIT:3> ) ) * Heaviside ( <NUM_LIT:3> * x - S ( <NUM_LIT:7> ) ) <EOL> assert manualintegrate ( sin ( y + x ) * Heaviside ( <NUM_LIT:3> * x - y ) , x ) == ( cos ( <NUM_LIT:4> * y / <NUM_LIT:3> ) - cos ( x + y ) ) * Heaviside ( <NUM_LIT:3> * x - y ) <EOL> def test_issue_6799 ( ) : <EOL> r , x , phi = map ( Symbol , '<STR_LIT>' . split ( ) ) <EOL> n = Symbol ( '<STR_LIT:n>' , integer = True , positive = True ) <EOL> integrand = ( cos ( n * ( x - phi ) ) * cos ( n * x ) ) <EOL> limits = ( x , - pi , pi ) <EOL> assert manualintegrate ( integrand , x ) . has ( Integral ) <EOL> assert r * integrate ( integrand . expand ( trig = True ) , limits ) / pi == r * cos ( n * phi ) <EOL> assert not integrate ( integrand , limits ) . has ( Dummy ) <EOL> def test_issue_3796 ( ) : <EOL> assert manualintegrate ( diff ( exp ( x + x ** <NUM_LIT:2> ) ) , x ) == exp ( x + x ** <NUM_LIT:2> ) <EOL> assert integrate ( x * exp ( x ** <NUM_LIT:4> ) , x , risch = False ) == - I * sqrt ( pi ) * erf ( I * x ** <NUM_LIT:2> ) / <NUM_LIT:4> <EOL> def test_manual_true ( ) : <EOL> assert integrate ( exp ( x ) * sin ( x ) , x , manual = True ) == ( exp ( x ) * sin ( x ) ) / <NUM_LIT:2> - ( exp ( x ) * cos ( x ) ) / <NUM_LIT:2> <EOL> assert integrate ( sin ( x ) * cos ( x ) , x , manual = True ) in [ sin ( x ) ** <NUM_LIT:2> / <NUM_LIT:2> , - cos ( x ) ** <NUM_LIT:2> / <NUM_LIT:2> ] <EOL> def test_issue_6746 ( ) : <EOL> y = Symbol ( '<STR_LIT:y>' ) <EOL> n = Symbol ( '<STR_LIT:n>' ) <EOL> assert manualintegrate ( y ** x , x ) == Piecewise ( ( x , Eq ( log ( y ) , <NUM_LIT:0> ) ) , ( y ** x / log ( y ) , True ) ) <EOL> assert manualintegrate ( y ** ( n * x ) , x ) == Piecewise ( <EOL> ( x , Eq ( n , <NUM_LIT:0> ) ) , <EOL> ( Piecewise ( <EOL> ( n * x , Eq ( log ( y ) , <NUM_LIT:0> ) ) , <EOL> ( y ** ( n * x ) / log ( y ) , True ) ) / n , True ) ) <EOL> assert manualintegrate ( exp ( n * x ) , x ) == Piecewise ( ( x , Eq ( n , <NUM_LIT:0> ) ) , ( exp ( n * x ) / n , True ) ) <EOL> y = Symbol ( '<STR_LIT:y>' , positive = True ) <EOL> assert manualintegrate ( ( y + <NUM_LIT:1> ) ** x , x ) == ( y + <NUM_LIT:1> ) ** x / log ( y + <NUM_LIT:1> ) <EOL> y = Symbol ( '<STR_LIT:y>' , zero = True ) <EOL> assert manualintegrate ( ( y + <NUM_LIT:1> ) ** x , x ) == x <EOL> y = Symbol ( '<STR_LIT:y>' ) <EOL> n = Symbol ( '<STR_LIT:n>' , nonzero = True ) <EOL> assert manualintegrate ( y ** ( n * x ) , x ) == Piecewise ( ( n * x , Eq ( log ( y ) , <NUM_LIT:0> ) ) , ( y ** ( n * x ) / log ( y ) , True ) ) / n <EOL> y = Symbol ( '<STR_LIT:y>' , positive = True ) <EOL> assert manualintegrate ( ( y + <NUM_LIT:1> ) ** ( n * x ) , x ) == ( y + <NUM_LIT:1> ) ** ( n * x ) / ( n * log ( y + <NUM_LIT:1> ) ) <EOL> a = Symbol ( '<STR_LIT:a>' , negative = True ) <EOL> assert manualintegrate ( <NUM_LIT:1> / ( a + b * x ** <NUM_LIT:2> ) , x ) == Integral ( <NUM_LIT:1> / ( a + b * x ** <NUM_LIT:2> ) , x ) <EOL> def test_issue_2850 ( ) : <EOL> assert manualintegrate ( asin ( x ) * log ( x ) , x ) == - x * asin ( x ) - sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) + ( x * asin ( x ) + sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) ) * log ( x ) - Integral ( sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) / x , x ) <EOL> assert manualintegrate ( acos ( x ) * log ( x ) , x ) == - x * acos ( x ) + sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) + ( x * acos ( x ) - sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) ) * log ( x ) + Integral ( sqrt ( - x ** <NUM_LIT:2> + <NUM_LIT:1> ) / x , x ) <EOL> assert manualintegrate ( atan ( x ) * log ( x ) , x ) == - x * atan ( x ) + ( x * atan ( x ) - log ( x ** <NUM_LIT:2> + <NUM_LIT:1> ) / <NUM_LIT:2> ) * log ( x ) + log ( x ** <NUM_LIT:2> + <NUM_LIT:1> ) / <NUM_LIT:2> + Integral ( log ( x ** <NUM_LIT:2> + <NUM_LIT:1> ) / x , x ) / <NUM_LIT:2> <EOL> def test_constant_independent_of_symbol ( ) : <EOL> assert manualintegrate ( Integral ( y , ( x , <NUM_LIT:1> , <NUM_LIT:2> ) ) , x ) == x * Integral ( y , ( x , <NUM_LIT:1> , <NUM_LIT:2> ) ) </s>
