U
    ;qLeD                    @   s4  d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d d	lmZmZmZ d d
lm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 dd Z5edd Z6edd Z7edd Z8G dd deZ9dd Z:G dd de9Z;G dd de9Z<G dd  d e9Z=G d!d" d"e9Z>G d#d$ d$e9Z?G d%d& d&e?Z@G d'd( d(e?ZAG d)d* d*eZBG d+d, d,eBZCG d-d. d.eBZDG d/d0 d0eBZEG d1d2 d2eBZFG d3d4 d4eBZGG d5d6 d6eBZHd7S )8    )Ssympifycacheit)Add)FunctionArgumentIndexError)fuzzy_or	fuzzy_and	FuzzyBool)IpiRational)Dummy)binomial	factorialRisingFactorial)	bernoullieulernC)Absimre)explogmatch_real_imag)floor)sqrt)acosacotasinatancoscotcscsecsintan_imaginary_unit_as_coefficient)symmetric_polyc                 C   s   |  dd | tD S )Nc                 S   s   i | ]}|| tqS  )rewriter   ).0hr)   r)   |/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/sympy/functions/elementary/hyperbolic.py
<dictcomp>   s    z/_rewrite_hyperbolics_as_exp.<locals>.<dictcomp>)xreplaceatomsHyperbolicFunction)exprr)   r)   r-   _rewrite_hyperbolics_as_exp   s    
r3   c                +   C   s  t tt dtd  t  tt  dtd  tjtd tddttdd tdd td td d ttdd dtd td dtd ttdd tdd td td d ttdd tdd td ttdd	 tdd  td ttd
d	 tdtd d td tdtd  d ttd
d tdtd d ttdd tdtd  d ttdd dtd dtd  td	 dtd  dtd  ttdd	 tdd d td tdd  d ttdd iS )N                              )r   r   r   r   Halfr   r   r)   r)   r)   r-   _acosh_table   sR        
  
 
 
            r@   c                   C   sB  t t d t tdtd  t d t dtd  t d t d tdtd  t d t d t d t tddtd   t d t td t d t tdd  d	t d t d td
 t d
 t d tdtd  d	t d t tddtd   dt d t tdtd  dt d tdt  tdtd d  iS )Nr5   r9   r<   r4   r:   
   r;   r8   r6   )r   r   r   r   r   r)   r)   r)   r-   _acsch_table3   s6          
  
  
 
 
 rE   c                5   C   sN  t tt  d  tdtd  t  tt  d tdtd  tdtd td tdtd dt d tddtd  td tddtd   dt d dtdtd  td	 d
tdtd  dt d	 dtd td d
td dt d tdd td dtd dt d tdtd td dt d tddtd  dt d tddtd   dt d tdtd td dt d tddtd  dt d	 tddtd   dt d	 dtd dt d dtd dt d tdtd dt d td td dt d t tj t t  d t tj tt  d iS )Nr5   r4   r9   r<   r>   r:   rA   	   r;   rC   r=   r6   r8   r7   )r   r   r   r   r   InfinityNegativeInfinityr)   r)   r)   r-   _asech_tableF   sj        
  
  

 
 

 
 
  
 
 
  
 
 

 

 
 
 
  
rI   c                   @   s   e Zd ZdZdZdS )r1   ze
    Base class for hyperbolic functions.

    See Also
    ========

    sinh, cosh, tanh, coth
    TN)__name__
__module____qualname____doc__
unbranchedr)   r)   r)   r-   r1   j   s   	r1   c                 C   s|   t t }t| D ]<}||kr*tj} qZq|jr| \}}||kr|jr qZq| tj	fS |tj
 }|| }| ||  |fS )a  
    Split ARG into two parts, a "rest" and a multiple of $I\pi$.
    This assumes ARG to be an ``Add``.
    The multiple of $I\pi$ returned in the second position is always a ``Rational``.

    Examples
    ========

    >>> from sympy.functions.elementary.hyperbolic import _peeloff_ipi as peel
    >>> from sympy import pi, I
    >>> from sympy.abc import x, y
    >>> peel(x + I*pi/2)
    (x, 1/2)
    >>> peel(x + I*2*pi/3 + I*pi*y)
    (x + I*pi*y + I*pi/6, 1/2)
    )r   r   r   	make_argsr   Oneis_Mulas_two_termsis_RationalZeror?   )argipiaKpm1m2r)   r)   r-   _peeloff_ipiw   s    

r\   c                   @   s   e Zd ZdZd4ddZd5ddZedd Zee	d	d
 Z
dd Zd6ddZd7ddZd8ddZd9ddZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd:d&d'Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS );sinha  
    ``sinh(x)`` is the hyperbolic sine of ``x``.

    The hyperbolic sine function is $\frac{e^x - e^{-x}}{2}$.

    Examples
    ========

    >>> from sympy import sinh
    >>> from sympy.abc import x
    >>> sinh(x)
    sinh(x)

    See Also
    ========

    cosh, tanh, asinh
    r4   c                 C   s$   |dkrt | jd S t| |dS )z@
        Returns the first derivative of this function.
        r4   r   N)coshargsr   selfargindexr)   r)   r-   fdiff   s    z
sinh.fdiffc                 C   s   t S z7
        Returns the inverse of this function.
        asinhr`   r)   r)   r-   inverse   s    zsinh.inversec                 C   s  |j rX|tjkrtjS |tjkr&tjS |tjkr6tjS |jrBtjS |jrT| |  S n.|tjkrhtjS t	|}|d k	rt
t| S | r| |  S |jrt|\}}|r|t t
 }t|t| t|t|  S |jrtjS |jtk r|jd S |jtkr*|jd }t|d t|d  S |jtkrT|jd }|td|d   S |jtkr|jd }dt|d t|d   S d S Nr   r4   r5   )	is_Numberr   NaNrG   rH   is_zerorT   is_negativeComplexInfinityr'   r   r%   could_extract_minus_signis_Addr\   r   r]   r^   funcrf   r_   acoshr   atanhacoth)clsrU   i_coeffxmr)   r)   r-   eval   sH    



 



z	sinh.evalc                 G   sb   | dk s| d dkrt jS t|}t|dkrN|d }||d  | | d   S ||  t|  S dS )zG
        Returns the next term in the Taylor series expansion.
        r   r5   rC   r4   Nr   rT   r   lenr   nrv   previous_termsrY   r)   r)   r-   taylor_term   s    zsinh.taylor_termc                 C   s   |  | jd  S Nr   rp   r_   	conjugatera   r)   r)   r-   _eval_conjugate   s    zsinh._eval_conjugateTc                 K   s   | j d jr6|r,d|d< | j|f|tjfS | tjfS |rX| j d j|f| \}}n| j d  \}}t|t| t|t	| fS )z@
        Returns this function as a complex coordinate.
        r   Fcomplex
r_   is_extended_realexpandr   rT   as_real_imagr]   r!   r^   r%   ra   deephintsr   r   r)   r)   r-   r     s    
zsinh.as_real_imagc                 K   s$   | j f d|i|\}}||t  S Nr   r   r   ra   r   r   re_partim_partr)   r)   r-   _eval_expand_complex  s    zsinh._eval_expand_complexc                 K   s   |r| j d j|f|}n
| j d }d }|jr<| \}}n:|jdd\}}|tjk	rv|jrv|tjk	rv|}|d | }|d k	rt|t	| t|t	|  jddS t|S Nr   Trationalr4   )trig)
r_   r   ro   rR   as_coeff_Mulr   rP   
is_Integerr]   r^   ra   r   r   rU   rv   ycoefftermsr)   r)   r-   _eval_expand_trig  s    
(zsinh._eval_expand_trigNc                 K   s   t |t |  d S Nr5   r   ra   rU   limitvarkwargsr)   r)   r-   _eval_rewrite_as_tractable&  s    zsinh._eval_rewrite_as_tractablec                 K   s   t |t |  d S r   r   ra   rU   r   r)   r)   r-   _eval_rewrite_as_exp)  s    zsinh._eval_rewrite_as_expc                 K   s   t  tt |  S Nr   r%   r   r)   r)   r-   _eval_rewrite_as_sin,  s    zsinh._eval_rewrite_as_sinc                 K   s   t  tt |  S r   r   r#   r   r)   r)   r-   _eval_rewrite_as_csc/  s    zsinh._eval_rewrite_as_cscc                 K   s   t  t|tt  d   S r   r   r^   r   r   r)   r)   r-   _eval_rewrite_as_cosh2  s    zsinh._eval_rewrite_as_coshc                 K   s"   t tj| }d| d|d   S Nr5   r4   tanhr   r?   ra   rU   r   Z	tanh_halfr)   r)   r-   _eval_rewrite_as_tanh5  s    zsinh._eval_rewrite_as_tanhc                 K   s"   t tj| }d| |d d  S r   cothr   r?   ra   rU   r   Z	coth_halfr)   r)   r-   _eval_rewrite_as_coth9  s    zsinh._eval_rewrite_as_cothc                 K   s   dt | S Nr4   cschr   r)   r)   r-   _eval_rewrite_as_csch=  s    zsinh._eval_rewrite_as_cschr   c                 C   sh   | j d j|||d}||d}|tjkrF|j|d|jr>dndd}|jrP|S |jr`| 	|S | S d S Nr   logxcdir-+)dir)
r_   as_leading_termsubsr   rj   limitrl   rk   	is_finiterp   ra   rv   r   r   rU   arg0r)   r)   r-   _eval_as_leading_term@  s    

zsinh._eval_as_leading_termc                 C   s*   | j d }|jrdS | \}}|t jS Nr   Tr_   is_realr   r   rk   ra   rU   r   r   r)   r)   r-   _eval_is_realM  s
    
zsinh._eval_is_realc                 C   s   | j d jrdS d S r   r_   r   r   r)   r)   r-   _eval_is_extended_realW  s    zsinh._eval_is_extended_realc                 C   s   | j d jr| j d jS d S r   r_   r   is_positiver   r)   r)   r-   _eval_is_positive[  s    zsinh._eval_is_positivec                 C   s   | j d jr| j d jS d S r   r_   r   rl   r   r)   r)   r-   _eval_is_negative_  s    zsinh._eval_is_negativec                 C   s   | j d }|jS r   r_   r   ra   rU   r)   r)   r-   _eval_is_finitec  s    
zsinh._eval_is_finitec                 C   s"   t | jd \}}|jr|jS d S r   )r\   r_   rk   
is_integerra   restZipi_multr)   r)   r-   _eval_is_zerog  s    zsinh._eval_is_zero)r4   )r4   )T)T)T)N)Nr   )rJ   rK   rL   rM   rc   rg   classmethodrx   staticmethodr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   r]      s6   
	

0





r]   c                   @   s   e Zd ZdZd0ddZedd Zeedd Z	d	d
 Z
d1ddZd2ddZd3ddZd4ddZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd5d$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ ZdS )6r^   a"  
    ``cosh(x)`` is the hyperbolic cosine of ``x``.

    The hyperbolic cosine function is $\frac{e^x + e^{-x}}{2}$.

    Examples
    ========

    >>> from sympy import cosh
    >>> from sympy.abc import x
    >>> cosh(x)
    cosh(x)

    See Also
    ========

    sinh, tanh, acosh
    r4   c                 C   s$   |dkrt | jd S t| |d S Nr4   r   r]   r_   r   r`   r)   r)   r-   rc     s    z
cosh.fdiffc                 C   s~  ddl m} |jrb|tjkr"tjS |tjkr2tjS |tjkrBtjS |jrNtjS |j	r^| | S n|tj
krrtjS t|}|d k	r||S | r| | S |jrt|\}}|r|t t }t|t| t|t|  S |jrtjS |jtkrtd|jd d  S |jtkr"|jd S |jtkrHdtd|jd d   S |jtkrz|jd }|t|d t|d   S d S )Nr   )r!   r4   r5   )(sympy.functions.elementary.trigonometricr!   ri   r   rj   rG   rH   rk   rP   rl   rm   r'   rn   ro   r\   r   r   r^   r]   rp   rf   r   r_   rq   rr   rs   )rt   rU   r!   ru   rv   rw   r)   r)   r-   rx     sF    




 

z	cosh.evalc                 G   sb   | dk s| d dkrt jS t|}t|dkrN|d }||d  | | d   S ||  t|  S d S )Nr   r5   r4   rC   ry   r{   r)   r)   r-   r~     s    zcosh.taylor_termc                 C   s   |  | jd  S r   r   r   r)   r)   r-   r     s    zcosh._eval_conjugateTc                 K   s   | j d jr6|r,d|d< | j|f|tjfS | tjfS |rX| j d j|f| \}}n| j d  \}}t|t| t|t	| fS )Nr   Fr   )
r_   r   r   r   rT   r   r^   r!   r]   r%   r   r)   r)   r-   r     s    
zcosh.as_real_imagc                 K   s$   | j f d|i|\}}||t  S r   r   r   r)   r)   r-   r     s    zcosh._eval_expand_complexc                 K   s   |r| j d j|f|}n
| j d }d }|jr<| \}}n:|jdd\}}|tjk	rv|jrv|tjk	rv|}|d | }|d k	rt|t| t	|t	|  jddS t|S r   )
r_   r   ro   rR   r   r   rP   r   r^   r]   r   r)   r)   r-   r     s    
(zcosh._eval_expand_trigNc                 K   s   t |t |  d S r   r   r   r)   r)   r-   r     s    zcosh._eval_rewrite_as_tractablec                 K   s   t |t |  d S r   r   r   r)   r)   r-   r     s    zcosh._eval_rewrite_as_expc                 K   s   t t| S r   r!   r   r   r)   r)   r-   _eval_rewrite_as_cos  s    zcosh._eval_rewrite_as_cosc                 K   s   dt t|  S r   r$   r   r   r)   r)   r-   _eval_rewrite_as_sec  s    zcosh._eval_rewrite_as_secc                 K   s   t  t|tt  d   S r   r   r]   r   r   r)   r)   r-   _eval_rewrite_as_sinh  s    zcosh._eval_rewrite_as_sinhc                 K   s"   t tj| d }d| d|  S r   r   r   r)   r)   r-   r     s    zcosh._eval_rewrite_as_tanhc                 K   s"   t tj| d }|d |d  S r   r   r   r)   r)   r-   r     s    zcosh._eval_rewrite_as_cothc                 K   s   dt | S r   sechr   r)   r)   r-   _eval_rewrite_as_sech  s    zcosh._eval_rewrite_as_sechr   c                 C   sj   | j d j|||d}||d}|tjkrF|j|d|jr>dndd}|jrRtjS |j	rb| 
|S | S d S r   )r_   r   r   r   rj   r   rl   rk   rP   r   rp   r   r)   r)   r-   r     s    

zcosh._eval_as_leading_termc                 C   s0   | j d }|js|jrdS | \}}|t jS r   )r_   r   is_imaginaryr   r   rk   r   r)   r)   r-   r     s
    
zcosh._eval_is_realc              	   C   sr   | j d }| \}}|dt  }|j}|r0dS |j}|dkrB|S t|t|t|td k |dt d kgggS Nr   r5   TFr6   r_   r   r   rk   r   r	   ra   zrv   r   ZymodZyzeroZxzeror)   r)   r-   r     s     
zcosh._eval_is_positivec              	   C   sr   | j d }| \}}|dt  }|j}|r0dS |j}|dkrB|S t|t|t|td k|dt d kgggS r   r   r   r)   r)   r-   _eval_is_nonnegative?  s     
zcosh._eval_is_nonnegativec                 C   s   | j d }|jS r   r   r   r)   r)   r-   r   Y  s    
zcosh._eval_is_finitec                 C   s,   t | jd \}}|r(|jr(|tj jS d S r   )r\   r_   rk   r   r?   r   r   r)   r)   r-   r   ]  s    
zcosh._eval_is_zero)r4   )T)T)T)N)Nr   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   r^   m  s2   

/




 r^   c                   @   s   e Zd ZdZd0ddZd1ddZedd Zee	d	d
 Z
dd Zd2ddZdd Zd3ddZdd Zdd Zdd Zdd Zdd Zdd  Zd4d"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ ZdS )5r   a'  
    ``tanh(x)`` is the hyperbolic tangent of ``x``.

    The hyperbolic tangent function is $\frac{\sinh(x)}{\cosh(x)}$.

    Examples
    ========

    >>> from sympy import tanh
    >>> from sympy.abc import x
    >>> tanh(x)
    tanh(x)

    See Also
    ========

    sinh, cosh, atanh
    r4   c                 C   s.   |dkr t jt| jd d  S t| |d S Nr4   r   r5   )r   rP   r   r_   r   r`   r)   r)   r-   rc   w  s    z
tanh.fdiffc                 C   s   t S rd   rr   r`   r)   r)   r-   rg   }  s    ztanh.inversec                 C   s  |j rX|tjkrtjS |tjkr&tjS |tjkr6tjS |jrBtjS |j	rT| |  S n2|tj
krhtjS t|}|d k	r| rt t|  S tt| S | r| |  S |jrt|\}}|rt|t t }|tj
krt|S t|S |j rtjS |jtkr(|jd }|td|d   S |jtkrZ|jd }t|d t|d  | S |jtkrp|jd S |jtkrd|jd  S d S rh   )ri   r   rj   rG   rP   rH   NegativeOnerk   rT   rl   rm   r'   rn   r   r&   ro   r\   r   r   r   rp   rf   r_   r   rq   rr   rs   )rt   rU   ru   rv   rw   Ztanhmr)   r)   r-   rx     sN    







z	tanh.evalc                 G   sf   | dk s| d dkrt jS t|}d| d  }t| d }t| d }||d  | | ||   S d S Nr   r5   r4   )r   rT   r   r   r   )r|   rv   r}   rW   BFr)   r)   r-   r~     s    ztanh.taylor_termc                 C   s   |  | jd  S r   r   r   r)   r)   r-   r     s    ztanh._eval_conjugateTc                 K   s   | j d jr6|r,d|d< | j|f|tjfS | tjfS |rX| j d j|f| \}}n| j d  \}}t|d t|d  }t|t| | t	|t| | fS )Nr   Fr   r5   r   )ra   r   r   r   r   denomr)   r)   r-   r     s    
ztanh.as_real_imagc           	         s   | j d }|jrnt|j }dd |j D }ddg}t|d D ]}||d   t||7  < q>|d |d  S |jr| \}jrdkrt|  fddtdd dD } fddtdd dD }t	| t	|  S t|S )Nr   c                 S   s   g | ]}t |d d qS Fevaluate)r   r   r+   rv   r)   r)   r-   
<listcomp>  s   z*tanh._eval_expand_trig.<locals>.<listcomp>r4   r5   c                    s"   g | ]}t t| |  qS r)   r   ranger+   kTr   r)   r-   r     s     c                    s"   g | ]}t t| |  qS r)   r   r   r   r)   r-   r     s     )
r_   ro   rz   r   r(   rQ   r   r   r   r   )	ra   r   rU   r|   TXrY   ir   dr)   r   r-   r     s$    

  ztanh._eval_expand_trigNc                 K   s$   t | t | }}|| ||  S r   r   ra   rU   r   r   neg_exppos_expr)   r)   r-   r     s    ztanh._eval_rewrite_as_tractablec                 K   s$   t | t | }}|| ||  S r   r   ra   rU   r   r  r  r)   r)   r-   r     s    ztanh._eval_rewrite_as_expc                 K   s   t  tt |  S r   )r   r&   r   r)   r)   r-   _eval_rewrite_as_tan  s    ztanh._eval_rewrite_as_tanc                 K   s   t  tt |  S r   )r   r"   r   r)   r)   r-   _eval_rewrite_as_cot  s    ztanh._eval_rewrite_as_cotc                 K   s    t t| ttt  d |  S r   r   r   r)   r)   r-   r     s    ztanh._eval_rewrite_as_sinhc                 K   s    t ttt  d |  t| S r   r   r   r)   r)   r-   r     s    ztanh._eval_rewrite_as_coshc                 K   s   dt | S r   r   r   r)   r)   r-   r     s    ztanh._eval_rewrite_as_cothr   c                 C   sH   ddl m} | jd |}||jkr:|d||r:|S | |S d S Nr   )Orderr4   sympy.series.orderr  r_   r   free_symbolscontainsrp   ra   rv   r   r   r  rU   r)   r)   r-   r     s
    ztanh._eval_as_leading_termc                 C   sJ   | j d }|jrdS | \}}|dkr<|t td kr<d S |td  jS )Nr   Tr5   r   r   r)   r)   r-   r     s    
ztanh._eval_is_realc                 C   s   | j d jrdS d S r   r   r   r)   r)   r-   r     s    ztanh._eval_is_extended_realc                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r     s    ztanh._eval_is_positivec                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r   "  s    ztanh._eval_is_negativec                 C   sR   | j d }| \}}t|d t|d  }|dkr:dS |jrDdS |jrNdS d S )Nr   r5   FT)r_   r   r!   r]   	is_numberr   )ra   rU   r   r   r   r)   r)   r-   r   &  s    
ztanh._eval_is_finitec                 C   s   | j d }|jrdS d S r   r_   rk   r   r)   r)   r-   r   2  s    
ztanh._eval_is_zero)r4   )r4   )T)N)Nr   )rJ   rK   rL   rM   rc   rg   r   rx   r   r   r~   r   r   r   r   r   r  r  r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   r   c  s2   


4


	r   c                   @   s   e Zd ZdZd$ddZd%ddZedd Zee	d	d
 Z
dd Zd&ddZd'ddZdd Zdd Zdd Zdd Zdd Zdd Zd(d d!Zd"d# ZdS ))r   a+  
    ``coth(x)`` is the hyperbolic cotangent of ``x``.

    The hyperbolic cotangent function is $\frac{\cosh(x)}{\sinh(x)}$.

    Examples
    ========

    >>> from sympy import coth
    >>> from sympy.abc import x
    >>> coth(x)
    coth(x)

    See Also
    ========

    sinh, cosh, acoth
    r4   c                 C   s,   |dkrdt | jd d  S t| |d S )Nr4   r7   r   r5   r   r`   r)   r)   r-   rc   L  s    z
coth.fdiffc                 C   s   t S rd   )rs   r`   r)   r)   r-   rg   R  s    zcoth.inversec                 C   s  |j rX|tjkrtjS |tjkr&tjS |tjkr6tjS |jrBtjS |j	rT| |  S n2|tjkrhtjS t
|}|d k	r| rtt|  S t t| S | r| |  S |jrt|\}}|rt|t t }|tjkrt|S t|S |j rtjS |jtkr(|jd }td|d  | S |jtkrZ|jd }|t|d t|d   S |jtkrtd|jd  S |jtkr|jd S d S rh   )ri   r   rj   rG   rP   rH   r   rk   rm   rl   r'   rn   r   r"   ro   r\   r   r   r   rp   rf   r_   r   rq   rr   rs   )rt   rU   ru   rv   rw   Zcothmr)   r)   r-   rx   X  sN    






z	coth.evalc                 G   sn   | dkrdt | S | dk s(| d dkr.tjS t |}t| d }t| d }d| d  | | ||   S d S rh   r   r   rT   r   r   r|   rv   r}   r   r   r)   r)   r-   r~     s    zcoth.taylor_termc                 C   s   |  | jd  S r   r   r   r)   r)   r-   r     s    zcoth._eval_conjugateTc                 K   s   ddl m}m} | jd jrF|r<d|d< | j|f|tjfS | tjfS |rh| jd j|f| \}}n| jd  \}}t	|d ||d  }t	|t
| | || || | fS )Nr   )r!   r%   Fr   r5   )r   r!   r%   r_   r   r   r   rT   r   r]   r^   )ra   r   r   r!   r%   r   r   r   r)   r)   r-   r     s    
zcoth.as_real_imagNc                 K   s$   t | t | }}|| ||  S r   r   r  r)   r)   r-   r     s    zcoth._eval_rewrite_as_tractablec                 K   s$   t | t | }}|| ||  S r   r   r  r)   r)   r-   r     s    zcoth._eval_rewrite_as_expc                 K   s"   t  ttt  d |  t| S r   r   r   r)   r)   r-   r     s    zcoth._eval_rewrite_as_sinhc                 K   s"   t  t| ttt  d |  S r   r   r   r)   r)   r-   r     s    zcoth._eval_rewrite_as_coshc                 K   s   dt | S r   r   r   r)   r)   r-   r     s    zcoth._eval_rewrite_as_tanhc                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r     s    zcoth._eval_is_positivec                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r     s    zcoth._eval_is_negativer   c                 C   sL   ddl m} | jd |}||jkr>|d||r>d| S | |S d S r
  r  r  r)   r)   r-   r     s
    zcoth._eval_as_leading_termc           
      K   s  | j d }|jrxdd |j D }g g g}t|j }t|ddD ] }||| d  t|| q>t|d  t|d   S |jr|jdd\}}|j	r|dkrt
|d	d
}	g g g}t|ddD ](}||| d  t|||	|   qt|d  t|d   S t
|S )Nr   c                 S   s   g | ]}t |d d qS r   )r   r   r   r)   r)   r-   r     s     z*coth._eval_expand_trig.<locals>.<listcomp>r7   r5   r4   Tr   Fr   )r_   ro   rz   r   appendr(   r   rQ   r   r   r   r   )
ra   r   rU   CXrY   r|   r  r   rv   cr)   r)   r-   r     s"    

&zcoth._eval_expand_trig)r4   )r4   )T)N)Nr   )rJ   rK   rL   rM   rc   rg   r   rx   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   r   8  s&   


4


	r   c                   @   s   e Zd ZU dZdZdZeed< dZeed< e	dd Z
dd Zd	d
 Zdd Zdd Zd%ddZdd Zdd Zd&ddZdd Zd'ddZdd Zd(dd Zd!d" Zd#d$ ZdS ))ReciprocalHyperbolicFunctionz=Base class for reciprocal functions of hyperbolic functions. N_is_even_is_oddc                 C   sj   |  r*| jr| | S | jr*| |  S | j|}t|drV| | krV|jd S |d k	rfd| S |S )Nrg   r   r4   )rn   r  r  _reciprocal_ofrx   hasattrrg   r_   )rt   rU   tr)   r)   r-   rx     s    

z!ReciprocalHyperbolicFunction.evalc                 O   s    |  | jd }t||||S r   )r  r_   getattr)ra   method_namer_   r   or)   r)   r-   _call_reciprocal  s    z-ReciprocalHyperbolicFunction._call_reciprocalc                 O   s&   | j |f||}|d k	r"d| S |S r   )r"  )ra   r   r_   r   r  r)   r)   r-   _calculate_reciprocal  s    z2ReciprocalHyperbolicFunction._calculate_reciprocalc                 C   s.   |  ||}|d k	r*|| |kr*d| S d S r   )r"  r  )ra   r   rU   r  r)   r)   r-   _rewrite_reciprocal  s    z0ReciprocalHyperbolicFunction._rewrite_reciprocalc                 K   s   |  d|S )Nr   r$  r   r)   r)   r-   r     s    z1ReciprocalHyperbolicFunction._eval_rewrite_as_expc                 K   s   |  d|S )Nr   r%  r   r)   r)   r-   r     s    z7ReciprocalHyperbolicFunction._eval_rewrite_as_tractablec                 K   s   |  d|S )Nr   r%  r   r)   r)   r-   r     s    z2ReciprocalHyperbolicFunction._eval_rewrite_as_tanhc                 K   s   |  d|S )Nr   r%  r   r)   r)   r-   r     s    z2ReciprocalHyperbolicFunction._eval_rewrite_as_cothTc                 K   s   d|  | jd  j|f|S r   )r  r_   r   )ra   r   r   r)   r)   r-   r     s    z)ReciprocalHyperbolicFunction.as_real_imagc                 C   s   |  | jd  S r   r   r   r)   r)   r-   r     s    z,ReciprocalHyperbolicFunction._eval_conjugatec                 K   s$   | j f ddi|\}}|t|  S )Nr   Tr   r   r)   r)   r-   r     s    z1ReciprocalHyperbolicFunction._eval_expand_complexc                 K   s   | j d|S )Nr   )r   )r#  )ra   r   r)   r)   r-   r   !  s    z.ReciprocalHyperbolicFunction._eval_expand_trigr   c                 C   s   d|  | jd  |S r   )r  r_   r   )ra   rv   r   r   r)   r)   r-   r   $  s    z2ReciprocalHyperbolicFunction._eval_as_leading_termc                 C   s   |  | jd jS r   )r  r_   r   r   r)   r)   r-   r   '  s    z3ReciprocalHyperbolicFunction._eval_is_extended_realc                 C   s   d|  | jd  jS r   )r  r_   r   r   r)   r)   r-   r   *  s    z,ReciprocalHyperbolicFunction._eval_is_finite)N)T)T)Nr   )rJ   rK   rL   rM   r  r  r
   __annotations__r  r   rx   r"  r#  r$  r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   r    s(   





r  c                   @   sb   e Zd ZdZeZdZdddZee	dd Z
dd	 Zd
d Zdd Zdd Zdd Zdd ZdS )r   a8  
    ``csch(x)`` is the hyperbolic cosecant of ``x``.

    The hyperbolic cosecant function is $\frac{2}{e^x - e^{-x}}$

    Examples
    ========

    >>> from sympy import csch
    >>> from sympy.abc import x
    >>> csch(x)
    csch(x)

    See Also
    ========

    sinh, cosh, tanh, sech, asinh, acosh
    Tr4   c                 C   s4   |dkr&t | jd  t| jd  S t| |dS )z?
        Returns the first derivative of this function
        r4   r   N)r   r_   r   r   r`   r)   r)   r-   rc   E  s    z
csch.fdiffc                 G   sr   | dkrdt | S | dk s(| d dkr.tjS t |}t| d }t| d }ddd|    | | ||   S dS )zF
        Returns the next term in the Taylor series expansion
        r   r4   r5   Nr  r  r)   r)   r-   r~   N  s    zcsch.taylor_termc                 K   s   t tt |  S r   r   r   r)   r)   r-   r   `  s    zcsch._eval_rewrite_as_sinc                 K   s   t tt |  S r   r   r   r)   r)   r-   r   c  s    zcsch._eval_rewrite_as_cscc                 K   s   t t|t t d   S r   r   r   r)   r)   r-   r   f  s    zcsch._eval_rewrite_as_coshc                 K   s   dt | S r   r]   r   r)   r)   r-   r   i  s    zcsch._eval_rewrite_as_sinhc                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r   l  s    zcsch._eval_is_positivec                 C   s   | j d jr| j d jS d S r   r   r   r)   r)   r-   r   p  s    zcsch._eval_is_negativeN)r4   )rJ   rK   rL   rM   r]   r  r  rc   r   r   r~   r   r   r   r   r   r   r)   r)   r)   r-   r   .  s   
	r   c                   @   sZ   e Zd ZdZeZdZdddZee	dd Z
dd	 Zd
d Zdd Zdd Zdd ZdS )r   a:  
    ``sech(x)`` is the hyperbolic secant of ``x``.

    The hyperbolic secant function is $\frac{2}{e^x + e^{-x}}$

    Examples
    ========

    >>> from sympy import sech
    >>> from sympy.abc import x
    >>> sech(x)
    sech(x)

    See Also
    ========

    sinh, cosh, tanh, coth, csch, asinh, acosh
    Tr4   c                 C   s4   |dkr&t | jd  t| jd  S t| |d S r   )r   r_   r   r   r`   r)   r)   r-   rc     s    z
sech.fdiffc                 G   s>   | dk s| d dkrt jS t|}t| t|  ||   S d S r   )r   rT   r   r   r   r|   rv   r}   r)   r)   r-   r~     s    zsech.taylor_termc                 K   s   dt t|  S r   r   r   r)   r)   r-   r     s    zsech._eval_rewrite_as_cosc                 K   s   t t| S r   r   r   r)   r)   r-   r     s    zsech._eval_rewrite_as_secc                 K   s   t t|t t d   S r   r   r   r)   r)   r-   r     s    zsech._eval_rewrite_as_sinhc                 K   s   dt | S r   r^   r   r)   r)   r-   r     s    zsech._eval_rewrite_as_coshc                 C   s   | j d jrdS d S r   r   r   r)   r)   r-   r     s    zsech._eval_is_positiveN)r4   )rJ   rK   rL   rM   r^   r  r  rc   r   r   r~   r   r   r   r   r   r)   r)   r)   r-   r   u  s   
r   c                   @   s   e Zd ZdZdS )InverseHyperbolicFunctionz,Base class for inverse hyperbolic functions.N)rJ   rK   rL   rM   r)   r)   r)   r-   r*    s   r*  c                   @   s   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdd ZeZdd Zdd Zdd Zdd Zd ddZdd Zd	S )!rf   aM  
    ``asinh(x)`` is the inverse hyperbolic sine of ``x``.

    The inverse hyperbolic sine function.

    Examples
    ========

    >>> from sympy import asinh
    >>> from sympy.abc import x
    >>> asinh(x).diff(x)
    1/sqrt(x**2 + 1)
    >>> asinh(1)
    log(1 + sqrt(2))

    See Also
    ========

    acosh, atanh, sinh
    r4   c                 C   s0   |dkr"dt | jd d d  S t| |d S r   )r   r_   r   r`   r)   r)   r-   rc     s    zasinh.fdiffc           	      C   sr  |j r|tjkrtjS |tjkr&tjS |tjkr6tjS |jrBtjS |tjkr\tt	dd S |tj
krvtt	dd S |jr| |  S nL|tjkrtjS |jrtjS t|}|d k	rtt| S | r| |  S t|trn|jd jrn|jd }|jr|S t|\}}|d k	rn|d k	rnt|td  t }|tt |  }|j}|dkr^|S |dkrn| S d S )Nr5   r4   r   TF)ri   r   rj   rG   rH   rk   rT   rP   r   r   r   rl   rm   r'   r   r   rn   
isinstancer]   r_   r  r   r   r   r   is_even)	rt   rU   ru   r   rr  frw   evenr)   r)   r-   rx     sJ    








z
asinh.evalc                 G   s   | dk s| d dkrt jS t|}t|dkrd| dkrd|d }| | d d  | | d   |d  S | d d }tt j|}t|}t j| | | ||   |  S d S Nr   r5   rC   r4   )r   rT   r   rz   r   r?   r   r   r|   rv   r}   rY   r   Rr   r)   r)   r-   r~      s    &zasinh.taylor_termNr   c                 C   s   | j d }||d }|jr*||S |t ttjfkrR| t	j
|||dS d|d  jr|||rn|nd}t|jrt|jr| | tt  S n@t|jrt|jr| | tt  S n| t	j
|||dS | |S Nr   r   r4   r5   )r_   r   cancelrk   r   r   r   rm   r*   r   r   rl   r   r   r   r   rp   r   ra   rv   r   r   rU   x0ndirr)   r)   r-   r     s     





zasinh._eval_as_leading_termc           	      C   s   | j d }||d}|tt fkr<| tj||||dS tj| |||d}|tjkr\|S d|d  j	r|
||rx|nd}t|jrt|j	r| tt  S n<t|j	rt|jr| tt  S n| tj||||dS |S Nr   r   r|   r   r4   r5   )r_   r   r   r*   r   _eval_nseriesr   r   rm   rl   r   r   r   r   r   	ra   rv   r|   r   r   rU   r   resr7  r)   r)   r-   r:  %  s"    





zasinh._eval_nseriesc                 K   s   t |t|d d  S r   r   r   ra   rv   r   r)   r)   r-   _eval_rewrite_as_log>  s    zasinh._eval_rewrite_as_logc                 K   s   t |td|d   S Nr4   r5   )rr   r   r>  r)   r)   r-   _eval_rewrite_as_atanhC  s    zasinh._eval_rewrite_as_atanhc                 K   s4   t | }t td| t|d  t| td   S r@  )r   r   rq   r   )ra   rv   r   ixr)   r)   r-   _eval_rewrite_as_acoshF  s    zasinh._eval_rewrite_as_acoshc                 K   s   t  tt |  S r   )r   r   r>  r)   r)   r-   _eval_rewrite_as_asinJ  s    zasinh._eval_rewrite_as_asinc                 K   s   t tt |  t t d  S r   )r   r   r   r>  r)   r)   r-   _eval_rewrite_as_acosM  s    zasinh._eval_rewrite_as_acosc                 C   s   t S rd   r'  r`   r)   r)   r-   rg   P  s    zasinh.inversec                 C   s   | j d jS r   r  r   r)   r)   r-   r   V  s    zasinh._eval_is_zero)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  r?  r   rA  rC  rD  rE  rg   r   r)   r)   r)   r-   rf     s"   

-


rf   c                   @   s   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdd ZeZdd Zdd Zdd Zdd Zd ddZdd Zd	S )!rq   aM  
    ``acosh(x)`` is the inverse hyperbolic cosine of ``x``.

    The inverse hyperbolic cosine function.

    Examples
    ========

    >>> from sympy import acosh
    >>> from sympy.abc import x
    >>> acosh(x).diff(x)
    1/(sqrt(x - 1)*sqrt(x + 1))
    >>> acosh(1)
    0

    See Also
    ========

    asinh, atanh, cosh
    r4   c                 C   s<   |dkr.| j d }dt|d t|d   S t| |d S r   r_   r   r   )ra   rb   rU   r)   r)   r-   rc   p  s    
zacosh.fdiffc           	      C   s  |j rj|tjkrtjS |tjkr&tjS |tjkr6tjS |jrHtt d S |tjkrXtj	S |tj
krjtt S |jrt }||kr|jr|| t S || S |tjkrtjS |ttj krtjtt d  S |t tj krtjtt d  S |jr tt tj S t|tr|jd jr|jd }|jr4t|S t|\}}|d k	r|d k	rt|t }|tt |  }|j}|dkr|jr|S |jr| S n0|dkr|tt 8 }|jr| S |jr|S d S )Nr5   r   TF)ri   r   rj   rG   rH   rk   r   r   rP   rT   r   r  r@   r   rm   r?   r+  r^   r_   r   r   r   r   r,  is_nonnegativerl   is_nonpositiver   )	rt   rU   	cst_tabler   r-  r  r.  rw   r/  r)   r)   r-   rx   w  s^    








z
acosh.evalc                 G   s   | dkrt t d S | dk s(| d dkr.tjS t|}t|dkrv| dkrv|d }|| d d  | | d   |d  S | d d }ttj|}t|}| | t  ||   |  S d S r0  )	r   r   r   rT   r   rz   r   r?   r   r1  r)   r)   r-   r~     s    $zacosh.taylor_termNr   c                 C   s   | j d }||d }|tj tjtjtjfkrJ| tj	|||dS |d j
r|||rb|nd}t|j
r|d j
r| |dt t  S | | S t|js| tj	|||dS | |S r3  )r_   r   r4  r   rP   rT   rm   r*   r   r   rl   r   r   rp   r   r   r   r5  r)   r)   r-   r     s    




zacosh._eval_as_leading_termc           	      C   s   | j d }||d}|tjtjfkr>| tj||||dS tj| |||d}|tj	kr^|S |d j
r|||rv|nd}t|j
r|d j
r|dt t  S | S t|js| tj||||dS |S r8  r_   r   r   rP   r   r*   r   r:  r   rm   rl   r   r   r   r   r   r;  r)   r)   r-   r:    s     





zacosh._eval_nseriesc                 K   s    t |t|d t|d   S r   r=  r>  r)   r)   r-   r?    s    zacosh._eval_rewrite_as_logc                 K   s    t |d t d|  t| S r   )r   r   r>  r)   r)   r-   rE    s    zacosh._eval_rewrite_as_acosc                 K   s(   t |d t d|  td t|  S r@  )r   r   r   r>  r)   r)   r-   rD    s    zacosh._eval_rewrite_as_asinc                 K   s0   t |d t d|  td ttt|    S r@  )r   r   r   rf   r>  r)   r)   r-   _eval_rewrite_as_asinh  s    zacosh._eval_rewrite_as_asinhc                 K   sp   t |d }t d| }t |d d }td | | d|t d|d     |t |d  | t||   S r@  )r   r   rr   )ra   rv   r   Zsxm1Zs1mxZsx2m1r)   r)   r-   rA    s    &zacosh._eval_rewrite_as_atanhc                 C   s   t S rd   r)  r`   r)   r)   r-   rg     s    zacosh.inversec                 C   s   | j d d jrdS d S )Nr   r4   Tr  r   r)   r)   r-   r     s    zacosh._eval_is_zero)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  r?  r   rE  rD  rK  rA  rg   r   r)   r)   r)   r-   rq   Z  s"   

6


rq   c                   @   sx   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdd ZeZdd Zdd Zdd ZdddZd	S )rr   a)  
    ``atanh(x)`` is the inverse hyperbolic tangent of ``x``.

    The inverse hyperbolic tangent function.

    Examples
    ========

    >>> from sympy import atanh
    >>> from sympy.abc import x
    >>> atanh(x).diff(x)
    1/(1 - x**2)

    See Also
    ========

    asinh, acosh, tanh
    r4   c                 C   s,   |dkrdd| j d d   S t| |d S r   r_   r   r`   r)   r)   r-   rc     s    zatanh.fdiffc           
      C   s  |j r|tjkrtjS |jr"tjS |tjkr2tjS |tjkrBtjS |tjkrZt	 t
| S |tjkrrt	t
|  S |jr| |  S n^|tjkrddlm} t	|t d td  S t|}|d k	rt	t
| S | r| |  S |jrtjS t|tr|jd jr|jd }|jr |S t|\}}|d k	r|d k	rtd| t }|j}|t	| t d  }	|dkrx|	S |dkr|	t	t d  S d S )Nr   AccumBoundsr5   TF)ri   r   rj   rk   rT   rP   rG   r   rH   r   r    rl   rm   !sympy.calculus.accumulationboundsrN  r   r'   rn   r+  r   r_   r  r   r   r   r,  )
rt   rU   rN  ru   r   r-  r  r.  r/  rw   r)   r)   r-   rx   "  sL    








z
atanh.evalc                 G   s2   | dk s| d dkrt jS t|}||  |  S d S Nr   r5   )r   rT   r   r(  r)   r)   r-   r~   Q  s    zatanh.taylor_termNr   c                 C   s   | j d }||d }|jr*||S |tj tjtjfkrV| t	j
|||dS d|d  jr|||rr|nd}t|jr|jr| |tt  S n:t|jr|jr| |tt  S n| t	j
|||dS | |S r3  )r_   r   r4  rk   r   r   rP   rm   r*   r   r   rl   r   r   rp   r   r   r   r5  r)   r)   r-   r   Z  s     



zatanh._eval_as_leading_termc           	      C   s   | j d }||d}|tjtjfkr>| tj||||dS tj| |||d}|tj	kr^|S d|d  j
r|||rz|nd}t|j
r|j
r|tt  S n6t|jr|jr|tt  S n| tj||||dS |S r8  rJ  r;  r)   r)   r-   r:  o  s"    



zatanh._eval_nseriesc                 K   s   t d| t d|  d S r@  r   r>  r)   r)   r-   r?    s    zatanh._eval_rewrite_as_logc                 K   s\   t d|d d  }t| dt |d    t | t d|d   t | | t|  S r@  )r   r   rf   )ra   rv   r   r.  r)   r)   r-   rK    s    ,zatanh._eval_rewrite_as_asinhc                 C   s   | j d jrdS d S r   r  r   r)   r)   r-   r     s    zatanh._eval_is_zeroc                 C   s   | j d jS r   )r_   r   r   r)   r)   r-   _eval_is_imaginary  s    zatanh._eval_is_imaginaryc                 C   s   t S rd   r  r`   r)   r)   r-   rg     s    zatanh.inverse)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  r?  r   rK  r   rR  rg   r)   r)   r)   r-   rr     s   

.

rr   c                   @   sp   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdd ZeZdd Zdd ZdddZd	S )rs   a-  
    ``acoth(x)`` is the inverse hyperbolic cotangent of ``x``.

    The inverse hyperbolic cotangent function.

    Examples
    ========

    >>> from sympy import acoth
    >>> from sympy.abc import x
    >>> acoth(x).diff(x)
    1/(1 - x**2)

    See Also
    ========

    asinh, acosh, coth
    r4   c                 C   s,   |dkrdd| j d d   S t| |d S r   rL  r`   r)   r)   r-   rc     s    zacoth.fdiffc                 C   s   |j r||tjkrtjS |tjkr&tjS |tjkr6tjS |jrHtt d S |tj	krXtjS |tj
krhtjS |jr| |  S nB|tjkrtjS t|}|d k	rt t| S | r| |  S |jrtt tj S d S r   )ri   r   rj   rG   rT   rH   rk   r   r   rP   r   rl   rm   r'   r   rn   r?   )rt   rU   ru   r)   r)   r-   rx     s0    





z
acoth.evalc                 G   sH   | dkrt  t d S | dk s*| d dkr0tjS t|}||  |  S d S rP  )r   r   r   rT   r   r(  r)   r)   r-   r~     s    zacoth.taylor_termNr   c                 C   s   | j d }||d }|tjkr2d| |S |tj tjtjfkr^| t	j
|||dS |jrd|d  jr|||r|nd}t|jr|jr| |tt  S n:t|jr|jr| |tt  S n| t	j
|||dS | |S )Nr   r4   r   r5   )r_   r   r4  r   rm   r   rP   rT   r*   r   r   r   r   r   r   rl   rp   r   r   r5  r)   r)   r-   r     s     



zacoth._eval_as_leading_termc           	      C   s   | j d }||d}|tjtjfkr>| tj||||dS tj| |||d}|tj	kr^|S |j
rd|d  jr|||r|nd}t|jr|jr|tt  S n6t|jr|jr|tt  S n| tj||||dS |S r8  )r_   r   r   rP   r   r*   r   r:  r   rm   r   r   r   r   rl   r   r   r;  r)   r)   r-   r:    s"    



zacoth._eval_nseriesc                 K   s$   t dd|  t dd|   d S r@  rQ  r>  r)   r)   r-   r?    s    zacoth._eval_rewrite_as_logc                 K   s   t d| S r   r   r>  r)   r)   r-   rA    s    zacoth._eval_rewrite_as_atanhc                 K   sx   t t d t|d | t||d   tdd|  t||d     |td|d   ttd|d d    S r   )r   r   r   rf   r>  r)   r)   r-   rK    s    J*zacoth._eval_rewrite_as_asinhc                 C   s   t S rd   r	  r`   r)   r)   r-   rg     s    zacoth.inverse)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  r?  r   rA  rK  rg   r)   r)   r)   r-   rs     s   

	

rs   c                   @   s   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdddZdd ZeZdd Zdd Zdd Zdd Zd	S )asecha  
    ``asech(x)`` is the inverse hyperbolic secant of ``x``.

    The inverse hyperbolic secant function.

    Examples
    ========

    >>> from sympy import asech, sqrt, S
    >>> from sympy.abc import x
    >>> asech(x).diff(x)
    -1/(x*sqrt(1 - x**2))
    >>> asech(1).diff(x)
    0
    >>> asech(1)
    0
    >>> asech(S(2))
    I*pi/3
    >>> asech(-sqrt(2))
    3*I*pi/4
    >>> asech((sqrt(6) - sqrt(2)))
    I*pi/12

    See Also
    ========

    asinh, atanh, cosh, acoth

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hyperbolic_function
    .. [2] https://dlmf.nist.gov/4.37
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcSech/

    r4   c                 C   s8   |dkr*| j d }d|td|d    S t| |d S Nr4   r   r7   r5   rF  ra   rb   r   r)   r)   r-   rc   L  s    
zasech.fdiffc                 C   s   |j rp|tjkrtjS |tjkr,tt d S |tjkrBtt d S |jrNtjS |tjkr^tj	S |tj
krptt S |jrt }||kr|jr|| t S || S |tjkrddlm} t|t d td  S |jrtjS d S )Nr5   r   rM  )ri   r   rj   rG   r   r   rH   rk   rP   rT   r   r  rI   r   rm   rO  rN  )rt   rU   rI  rN  r)   r)   r-   rx   S  s0    





z
asech.evalc                 G   s   | dkrt d| S | dk s(| d dkr.tjS t|}t|dkr~| dkr~|d }|| d | d   |d  d| d d   S | d }ttj||  }t||  d |  d }d| | ||   d S d S )Nr   r5   r4   rC   r8   r7   )r   r   rT   r   rz   r   r?   r   r1  r)   r)   r-   r~   r  s    ,zasech.taylor_termNr   c                 C   s   | j d }||d }|tj tjtjtjfkrJ| tj	|||dS |j
sZd| j
r|||rh|nd}t|jr|js|d j
r| | S | |dt t  S t|j
s| tj	|||dS | |S r3  )r_   r   r4  r   rP   rT   rm   r*   r   r   rl   r   r   r   rp   r   r   r5  r)   r)   r-   r     s    


zasech._eval_as_leading_termc                 C   s  ddl m} | jd }||d}|tjkrtddd}ttj|d  t	
|dd| }	tj| jd  }
|
|}|
| | }||ds|dkr|dS |t|S ttj| j|||d}| t|  }|	 ||  ||| | S |tjkrtddd}ttj|d  t	
|dd| }	tj| jd  }
|
|}|
| | }||ds|dkr|dS tt |t| S ttj| j|||d}| t|  }|	 ||  ||| | S tj| |||d}|tjkr|S |js$d| jr|||r4|nd}t|jrp|jsZ|d jr`| S |dt t  S t|js| t	j||||d	S |S 
Nr   )Or  T)positiver5   r4   r9  r   )r  rW  r_   r   r   rP   r   rS  r*   r   nseriesr   is_meromorphicr   r:  removeOr   powsimpr   r   r   r   rm   rl   r   r   r   ra   rv   r|   r   r   rW  rU   r   r  serarg1r.  gres1r<  r7  r)   r)   r-   r:    sJ    
&
&&
&&zasech._eval_nseriesc                 C   s   t S rd   r   r`   r)   r)   r-   rg     s    zasech.inversec                 K   s,   t d| td| d td| d   S r   r=  r   r)   r)   r-   r?    s    zasech._eval_rewrite_as_logc                 K   s   t d| S r   )rq   r   r)   r)   r-   rC    s    zasech._eval_rewrite_as_acoshc                 K   s:   t d| d t dd|   ttt|  ttj   S r   )r   r   rf   r   r   r?   r   r)   r)   r-   rK    s    ,zasech._eval_rewrite_as_asinhc                 K   s   t t dt|td|   t d t|  t|  t d t|d  t|d     td|d  t|d  ttd|d    S r@  )r   r   r   rr   r>  r)   r)   r-   rA    s    Z.zasech._eval_rewrite_as_atanhc                 K   s8   t d| d t dd|   td ttt|    S r@  )r   r   r   acschr>  r)   r)   r-   _eval_rewrite_as_acsch  s    zasech._eval_rewrite_as_acsch)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  rg   r?  r   rC  rK  rA  rc  r)   r)   r)   r-   rS  &  s    %



-
rS  c                   @   s   e Zd ZdZdddZedd Zeedd Z	dddZ
dddZdddZdd ZeZdd Zdd Zdd Zdd Zd	S )rb  a  
    ``acsch(x)`` is the inverse hyperbolic cosecant of ``x``.

    The inverse hyperbolic cosecant function.

    Examples
    ========

    >>> from sympy import acsch, sqrt, I
    >>> from sympy.abc import x
    >>> acsch(x).diff(x)
    -1/(x**2*sqrt(1 + x**(-2)))
    >>> acsch(1).diff(x)
    0
    >>> acsch(1)
    log(1 + sqrt(2))
    >>> acsch(I)
    -I*pi/2
    >>> acsch(-2*I)
    I*pi/6
    >>> acsch(I*(sqrt(6) - sqrt(2)))
    -5*I*pi/12

    See Also
    ========

    asinh

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hyperbolic_function
    .. [2] https://dlmf.nist.gov/4.37
    .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcCsch/

    r4   c                 C   s@   |dkr2| j d }d|d tdd|d     S t| |d S rT  rF  rU  r)   r)   r-   rc     s    
 zacsch.fdiffc                 C   s   |j rx|tjkrtjS |tjkr&tjS |tjkr6tjS |jrBtjS |tjkr\t	dt
d S |tjkrxt	dt
d  S |jrt }||kr|| t S |tjkrtjS |jrtjS |jrtjS | r| |  S d S r@  )ri   r   rj   rG   rT   rH   rk   rm   rP   r   r   r   r  rE   r   is_infinitern   )rt   rU   rI  r)   r)   r-   rx   	  s2    





z
acsch.evalc                 G   s   | dkrt d| S | dk s(| d dkr.tjS t|}t|dkr| dkr|d }| | d | d   |d  d| d d   S | d }ttj||  }t||  d |  d }tj|d  | | ||   d S d S )Nr   r5   r4   rC   r8   )	r   r   rT   r   rz   r   r?   r   r   r1  r)   r)   r-   r~   +  s    .zacsch.taylor_termNr   c                 C   s   | j d }||d }|t ttjfkrB| tj|||dS |tj	krZd| 
|S |jrd|d  jr|||r||nd}t|jrt|jr| | tt  S n@t|jrt|jr| | tt  S n| tj|||dS | |S r3  )r_   r   r4  r   r   rT   r*   r   r   rm   r   r   r   r   r   r   rp   r   rl   r5  r)   r)   r-   r   =  s     





zacsch._eval_as_leading_termc                 C   s  ddl m} | jd }||d}|tkrtddd}tt|d  t	|dd| }	t | jd  }
|

|}|
| | }||ds|dkr|dS t t d |t| S ttj| j|||d}| t|  }|	 ||  ||| | }|S |tjt krtddd}tt |d  t	|dd| }	t| jd  }
|

|}|
| | }||ds|dkr|dS tt d |t| S ttj| j|||d}| t|  }|	 ||  ||| | S tj| |||d}|tjkr$|S |jrd|d  jr| jd ||rR|nd}t|jrt|jr| tt  S n@t|jrt|jr| tt  S n| tj||||d	S |S rV  )r  rW  r_   r   r   r   rb  r*   r   rY  r   rZ  r   r   r   rP   r:  r[  r   r\  r   r   rm   r   r   r   r   r   rl   r]  r)   r)   r-   r:  R  sN    

$
*&&
*&zacsch._eval_nseriesc                 C   s   t S rd   r   r`   r)   r)   r-   rg     s    zacsch.inversec                 K   s    t d| td|d  d  S r@  r=  r   r)   r)   r-   r?    s    zacsch._eval_rewrite_as_logc                 K   s   t d| S r   re   r   r)   r)   r-   rK    s    zacsch._eval_rewrite_as_asinhc                 K   s:   t tdt |  tt | d  tt |  ttj   S r   )r   r   rq   r   r   r?   r   r)   r)   r-   rC    s
     
zacsch._eval_rewrite_as_acoshc                 K   sF   |d }|d }t | | ttj t |d  | tt |   S r   )r   r   r   r?   rr   )ra   rU   r   arg2Zarg2p1r)   r)   r-   rA    s
    zacsch._eval_rewrite_as_atanhc                 C   s   | j d jS r   )r_   rd  r   r)   r)   r-   r     s    zacsch._eval_is_zero)r4   )Nr   )r   )r4   )rJ   rK   rL   rM   rc   r   rx   r   r   r~   r   r:  rg   r?  r   rK  rC  rA  r   r)   r)   r)   r-   rb    s    %

!

0
rb  N)I
sympy.corer   r   r   Zsympy.core.addr   sympy.core.functionr   r   sympy.core.logicr   r	   r
   sympy.core.numbersr   r   r   sympy.core.symbolr   (sympy.functions.combinatorial.factorialsr   r   r   %sympy.functions.combinatorial.numbersr   r   r   $sympy.functions.elementary.complexesr   r   r   &sympy.functions.elementary.exponentialr   r   r   #sympy.functions.elementary.integersr   (sympy.functions.elementary.miscellaneousr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   sympy.polys.specialpolysr(   r3   r@   rE   rI   r1   r\   r]   r^   r   r   r  r   r   r*  rf   rq   rr   rs   rS  rb  r)   r)   r)   r-   <module>   sZ   4


#" U w V -JG; % /   7