B
    [+                 @   s   d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZ dd Zedd Zed	ZdddZdd Zdd ZdS )    )print_functiondivision)range)cacheitDummyNeIntegerRationalSWild)binomialsincos	Piecewisec             C   s
   t | tS )N)
isinstancer   )n r   ;lib/python3.7/site-packages/sympy/integrals/trigonometry.py_integer_instance   s    r   c                sP   t d gd} fdddD \}}t|  | t|  |  }||||fS )Na)excludec                s   g | ]}t | gtgd qS ))r   Z
properties)r   r   ).0s)xr   r   
<listcomp>   s   z_pat_sincos.<locals>.<listcomp>Znm)r   r   r   )r   r   r   mpatr   )r   r   _pat_sincos   s
    
 r   u	piecewisec             C   s  ddl m} t|\}}}}| d} | |}|dkr<dS || ||  }}|tjkrf|tjkrf|S |tjkrt|ntj}	|| }|js|jrt}
|j|j }}|r|r|dk r|dkrd}d}nT|dk r|dkrd}d}n:|dk r
|dk r
||k}||k }n||k }||k  }|rRd|
d  |d d   |
|  }t	|| }n2|r|
| d|
d  |d d   }t
|| }|||
}||
|}|d	krt|| t|df|	dfS || S t|t|k}t|t|k}tj}|r|dkrJxtd|d d D ]2}|d
| t|d | t|d|  | 7 }qW n||dkr`t||}nftd
|d t	||d   t
||d   t|d |d tt	||d  t
||d   |  }n|r|dkr&xtd|d d D ]2}|d
| t|d | t|d|  | 7 }qW n||dkr<t||}nftd|d t	||d   t
||d   t|d |d tt	||d  t
||d   |  }n||kr|tddt
d|  | |}n|| kr|dk rPtd|d t	||d   t
||d   t|d |d |t	||d  t
||d   |  }nftd
|d t	||d   t
||d   t|d |d |t	||d  t
||d   |  }|d	krt|||| | t|df|	dfS |||| | S )a  Integrate f = Mul(trig) over x

       >>> from sympy import Symbol, sin, cos, tan, sec, csc, cot
       >>> from sympy.integrals.trigonometry import trigintegrate
       >>> from sympy.abc import x

       >>> trigintegrate(sin(x)*cos(x), x)
       sin(x)**2/2

       >>> trigintegrate(sin(x)**2, x)
       x/2 - sin(x)*cos(x)/2

       >>> trigintegrate(tan(x)*sec(x), x)
       1/cos(x)

       >>> trigintegrate(sin(x)*tan(x), x)
       -log(sin(x) - 1)/2 + log(sin(x) + 1)/2 - sin(x)

       http://en.wikibooks.org/wiki/Calculus/Integration_techniques

    See Also
    ========

    sympy.integrals.integrals.Integral.doit
    sympy.integrals.integrals.Integral
    r   )	integrateZsincosNTF      r   )Zsympy.integrals.integralsr    r   Zrewritematchr
   ZZeroZis_odd_ur   r   Zsubsr   r   absr   r   _sin_pow_integrater	   trigintegrate_cos_pow_integrate)fr   Zcondsr    r   r   r   r   MZzzr   Zn_Zm_ZffuuZfiZfxZresir   r   r   r(   !   s    


" 



,.

,.
"
,,,*
(r(   c             C   s   | dkrX| dkrt | S td| t | t|| d   t| d | t| d |  S | dk r| dkrztdt| |S td| d t | t|| d   t| d | d t| d |  S |S d S )Nr   r!   r#   r"   )r   r	   r   r'   r(   )r   r   r   r   r   r'      s    
 $"r'   c             C   s   | dkrV| dkrt |S td| t | t|| d   t| d | t| d |  S | dk r| dkrxtdt| |S td| d t | t|| d   t| d | d t| d |  S |S d S )Nr   r!   r"   r#   )r   r	   r   r)   r(   )r   r   r   r   r   r)   &  s     $"r)   N)r   )Z
__future__r   r   Zsympy.core.compatibilityr   Z
sympy.corer   r   r   r   r	   r
   r   Zsympy.functionsr   r   r   r   r   r   r%   r(   r'   r)   r   r   r   r   <module>   s   $
 Y-