U
    9%eD                    @   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)   d/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/functions/elementary/hyperbolic.py
<dictcomp>   s    z/_rewrite_hyperbolics_as_exp.<locals>.<dictcomp>)ZxreplaceZatomsHyperbolicFunction)exprr)   r)   r-   _rewrite_hyperbolics_as_exp   s    
r1   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 )Nr3   r7   r:   r2   r8   
   r9   r6   r4   )r   r   r   r   r   r)   r)   r)   r-   _acsch_table3   s6          
  
  
 
 
 rC   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 )Nr3   r2   r7   r:   r<   r8   r?   	   r9   rA   r;   r4   r6   r5   )r   r   r   r   r   InfinityNegativeInfinityr)   r)   r)   r-   _asech_tableF   sj        
  
  

 
 

 
 
  
 
 
  
 
 

 

 
 
 
  
rG   c                   @   s   e Zd ZdZdZdS )r/   ze
    Base class for hyperbolic functions.

    See Also
    ========

    sinh, cosh, tanh, coth
    TN)__name__
__module____qualname____doc__Z
unbranchedr)   r)   r)   r-   r/   j   s   	r/   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   Z	make_argsr   Oneis_Mulas_two_termsZis_RationalZeror=   )argZipiaKpm1m2r)   r)   r-   _peeloff_ipiw   s    

rV   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
    r2   c                 C   s$   |dkrt | jd S t| |dS )z@
        Returns the first derivative of this function.
        r2   r   N)coshargsr   selfargindexr)   r)   r-   fdiff   s    z
sinh.fdiffc                 C   s   t S z7
        Returns the inverse of this function.
        asinhrZ   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   r2   r3   )	is_Numberr   NaNrE   rF   is_zerorO   is_negativeComplexInfinityr'   r   r%   could_extract_minus_signis_AddrV   r   rW   rX   funcr`   rY   acoshr   atanhacoth)clsrP   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   r3   rA   r2   Nr   rO   r   lenr   nrp   previous_termsrS   r)   r)   r-   taylor_term   s    zsinh.taylor_termc                 C   s   |  | jd  S Nr   rj   rY   	conjugater[   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
rY   is_extended_realexpandr   rO   as_real_imagrW   r!   rX   r%   r[   deephintsr   r   r)   r)   r-   r     s    
zsinh.as_real_imagc                 K   s$   | j f d|i|\}}||t  S Nr   r   r   r[   r   r   Zre_partZ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Zrationalr2   )Ztrig)
rY   r   ri   rN   as_coeff_Mulr   rL   
is_IntegerrW   rX   r[   r   r   rP   rp   ycoefftermsr)   r)   r-   _eval_expand_trig  s    
(zsinh._eval_expand_trigNc                 K   s   t |t |  d S Nr3   r   r[   rP   limitvarkwargsr)   r)   r-   _eval_rewrite_as_tractable&  s    zsinh._eval_rewrite_as_tractablec                 K   s   t |t |  d S r   r   r[   rP   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   rX   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 Nr3   r2   tanhr   r=   r[   rP   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=   r[   rP   r   Z	coth_halfr)   r)   r-   _eval_rewrite_as_coth9  s    zsinh._eval_rewrite_as_cothc                 K   s   dt | S Nr2   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)
rY   as_leading_termsubsr   rd   limitrf   re   	is_finiterj   r[   rp   r   r   rP   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rY   is_realr   r   re   r[   rP   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   rY   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 ry   rY   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 ry   rY   r   rf   r|   r)   r)   r-   _eval_is_negative_  s    zsinh._eval_is_negativec                 C   s   | j d }|jS ry   rY   r   r[   rP   r)   r)   r-   _eval_is_finitec  s    
zsinh._eval_is_finitec                 C   s"   t | jd \}}|jr|jS d S ry   )rV   rY   re   
is_integerr[   restZipi_multr)   r)   r-   _eval_is_zerog  s    zsinh._eval_is_zero)r2   )r2   )T)T)T)N)Nr   )rH   rI   rJ   rK   r]   ra   classmethodrr   staticmethodr   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   rW      s6   
	

0





rW   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 )6rX   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
    r2   c                 C   s$   |dkrt | jd S t| |d S Nr2   r   rW   rY   r   rZ   r)   r)   r-   r]     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!   r2   r3   )(sympy.functions.elementary.trigonometricr!   rc   r   rd   rE   rF   re   rL   rf   rg   r'   rh   ri   rV   r   r   rX   rW   rj   r`   r   rY   rk   rl   rm   )rn   rP   r!   ro   rp   rq   r)   r)   r-   rr     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   r3   r2   rA   rs   ru   r)   r)   r-   rx     s    zcosh.taylor_termc                 C   s   |  | jd  S ry   rz   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~   )
rY   r   r   r   rO   r   rX   r!   rW   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   )
rY   r   ri   rN   r   r   rL   r   rX   rW   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   rW   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   )rY   r   r   r   rd   r   rf   re   rL   r   rj   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   )rY   r   is_imaginaryr   r   re   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   r3   TFr4   rY   r   r   re   r   r	   r[   zrp   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 ry   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 ry   )rV   rY   re   r   r=   r   r   r)   r)   r-   r   ]  s    
zcosh._eval_is_zero)r2   )T)T)T)N)Nr   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r-   rX   m  s2   

/




 rX   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
    r2   c                 C   s.   |dkr t jt| jd d  S t| |d S Nr2   r   r3   )r   rL   r   rY   r   rZ   r)   r)   r-   r]   w  s    z
tanh.fdiffc                 C   s   t S r^   rl   rZ   r)   r)   r-   ra   }  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 rb   )rc   r   rd   rE   rL   rF   NegativeOnere   rO   rf   rg   r'   rh   r   r&   ri   rV   r   r   r   rj   r`   rY   r   rk   rl   rm   )rn   rP   ro   rp   rq   Ztanhmr)   r)   r-   rr     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   r3   r2   )r   rO   r   r   r   )rv   rp   rw   rQ   BFr)   r)   r-   rx     s    ztanh.taylor_termc                 C   s   |  | jd  S ry   rz   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~   r3   r   )r[   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+   rp   r)   r)   r-   
<listcomp>  s   z*tanh._eval_expand_trig.<locals>.<listcomp>r2   r3   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     )
rY   ri   rt   r   r(   rM   r   r   r   r   )	r[   r   rP   rv   ZTXrS   ir   dr)   r   r-   r     s$    

  ztanh._eval_expand_trigNc                 K   s$   t | t | }}|| ||  S r   r   r[   rP   r   r   neg_exppos_expr)   r)   r-   r     s    ztanh._eval_rewrite_as_tractablec                 K   s$   t | t | }}|| ||  S r   r   r[   rP   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   )Orderr2   sympy.series.orderr   rY   r   Zfree_symbolscontainsrj   r[   rp   r   r   r   rP   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   Tr3   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 ry   r   r|   r)   r)   r-   r     s    ztanh._eval_is_positivec                 C   s   | j d jr| j d jS d S ry   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   r3   FT)rY   r   r!   rW   	is_numberr   )r[   rP   r   r   r   r)   r)   r-   r   &  s    
ztanh._eval_is_finitec                 C   s   | j d }|jrdS d S r   rY   re   r   r)   r)   r-   r   2  s    
ztanh._eval_is_zero)r2   )r2   )T)N)Nr   )rH   rI   rJ   rK   r]   ra   r   rr   r   r   rx   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
    r2   c                 C   s,   |dkrdt | jd d  S t| |d S )Nr2   r5   r   r3   r   rZ   r)   r)   r-   r]   L  s    z
coth.fdiffc                 C   s   t S r^   )rm   rZ   r)   r)   r-   ra   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 rb   )rc   r   rd   rE   rL   rF   r   re   rg   rf   r'   rh   r   r"   ri   rV   r   r   r   rj   r`   rY   r   rk   rl   rm   )rn   rP   ro   rp   rq   Zcothmr)   r)   r-   rr   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 rb   r   r   rO   r   r   rv   rp   rw   r   r   r)   r)   r-   rx     s    zcoth.taylor_termc                 C   s   |  | jd  S ry   rz   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~   r3   )r   r!   r%   rY   r   r   r   rO   r   rW   rX   )r[   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 ry   r   r|   r)   r)   r-   r     s    zcoth._eval_is_positivec                 C   s   | j d jr| j d jS d S ry   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>r5   r3   r2   Tr   Fr   )rY   ri   rt   r   appendr(   r   rM   r   r   r   r   )
r[   r   rP   ZCXrS   rv   r   r   rp   cr)   r)   r-   r     s"    

&zcoth._eval_expand_trig)r2   )r2   )T)N)Nr   )rH   rI   rJ   rK   r]   ra   r   rr   r   r   rx   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 )Nra   r   r2   )rh   r  r  _reciprocal_ofrr   hasattrra   rY   )rn   rP   tr)   r)   r-   rr     s    

z!ReciprocalHyperbolicFunction.evalc                 O   s    |  | jd }t||||S ry   )r  rY   getattr)r[   method_namerY   r   or)   r)   r-   _call_reciprocal  s    z-ReciprocalHyperbolicFunction._call_reciprocalc                 O   s&   | j |f||}|d k	r"d| S |S r   )r  )r[   r  rY   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  )r[   r  rP   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  rY   r   )r[   r   r   r)   r)   r-   r     s    z)ReciprocalHyperbolicFunction.as_real_imagc                 C   s   |  | jd  S ry   rz   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  )r[   r   r)   r)   r-   r   !  s    z.ReciprocalHyperbolicFunction._eval_expand_trigr   c                 C   s   d|  | jd  |S r   )r  rY   r   )r[   rp   r   r   r)   r)   r-   r   $  s    z2ReciprocalHyperbolicFunction._eval_as_leading_termc                 C   s   |  | jd jS ry   )r  rY   r   r|   r)   r)   r-   r   '  s    z3ReciprocalHyperbolicFunction._eval_is_extended_realc                 C   s   d|  | jd  jS r   )r  rY   r   r|   r)   r)   r-   r   *  s    z,ReciprocalHyperbolicFunction._eval_is_finite)N)T)T)Nr   )rH   rI   rJ   rK   r  r  r
   __annotations__r  r   rr   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
    Tr2   c                 C   s4   |dkr&t | jd  t| jd  S t| |dS )z?
        Returns the first derivative of this function
        r2   r   N)r   rY   r   r   rZ   r)   r)   r-   r]   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   r2   r3   Nr  r  r)   r)   r-   rx   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   rW   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 ry   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 ry   r   r|   r)   r)   r-   r   p  s    zcsch._eval_is_negativeN)r2   )rH   rI   rJ   rK   rW   r  r  r]   r   r   rx   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
    Tr2   c                 C   s4   |dkr&t | jd  t| jd  S t| |d S r   )r   rY   r   r   rZ   r)   r)   r-   r]     s    z
sech.fdiffc                 G   s>   | dk s| d dkrt jS t|}t| t|  ||   S d S r   )r   rO   r   r   r   rv   rp   rw   r)   r)   r-   rx     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   rX   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)r2   )rH   rI   rJ   rK   rX   r  r  r]   r   r   rx   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)rH   rI   rJ   rK   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 )!r`   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
    r2   c                 C   s0   |dkr"dt | jd d d  S t| |d S r   )r   rY   r   rZ   r)   r)   r-   r]     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 )Nr3   r2   r   TF)rc   r   rd   rE   rF   re   rO   rL   r   r   r   rf   rg   r'   r   r   rh   
isinstancerW   rY   r  r   r   r   r   is_even)	rn   rP   ro   r   rr   frq   evenr)   r)   r-   rr     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   r3   rA   r2   )r   rO   r   rt   r   r=   r   r   rv   rp   rw   rS   r   Rr   r)   r)   r-   rx      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   r2   r3   )rY   r   cancelre   r   r   r   rg   r*   r   r   rf   r   r   r   r   rj   r   r[   rp   r   r   rP   Z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   rv   r   r2   r3   )rY   r   r   r*   r   _eval_nseriesr   r   rg   rf   r   r   r   r   r   	r[   rp   rv   r   r   rP   r   resr)  r)   r)   r-   r,  %  s"    





zasinh._eval_nseriesc                 K   s   t |t|d d  S r   r   r   r[   rp   r   r)   r)   r-   _eval_rewrite_as_log>  s    zasinh._eval_rewrite_as_logc                 K   s   t |td|d   S Nr2   r3   )rl   r   r0  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 r2  )r   r   rk   r   )r[   rp   r   Zixr)   r)   r-   _eval_rewrite_as_acoshF  s    zasinh._eval_rewrite_as_acoshc                 K   s   t  tt |  S r   )r   r   r0  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   r0  r)   r)   r-   _eval_rewrite_as_acosM  s    zasinh._eval_rewrite_as_acosc                 C   s   t S r^   r  rZ   r)   r)   r-   ra   P  s    zasinh.inversec                 C   s   | j d jS ry   r  r|   r)   r)   r-   r   V  s    zasinh._eval_is_zero)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  r1  r   r3  r4  r5  r6  ra   r   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 )!rk   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
    r2   c                 C   s<   |dkr.| j d }dt|d t|d   S t| |d S r   rY   r   r   )r[   r\   rP   r)   r)   r-   r]   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 )Nr3   r   TF)rc   r   rd   rE   rF   re   r   r   rL   rO   r   r  r>   r   rg   r=   r  rX   rY   r   r   r   r   r  Zis_nonnegativerf   Zis_nonpositiver   )	rn   rP   	cst_tabler   r   r   r!  rq   r"  r)   r)   r-   rr   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 r#  )	r   r   r   rO   r   rt   r   r=   r   r$  r)   r)   r-   rx     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 r&  )rY   r   r'  r   rL   rO   rg   r*   r   r   rf   r   r   rj   r   r   r   r(  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 r*  rY   r   r   rL   r   r*   r   r,  r   rg   rf   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/  r0  r)   r)   r-   r1    s    zacosh._eval_rewrite_as_logc                 K   s    t |d t d|  t| S r   )r   r   r0  r)   r)   r-   r6    s    zacosh._eval_rewrite_as_acosc                 K   s(   t |d t d|  td t|  S r2  )r   r   r   r0  r)   r)   r-   r5    s    zacosh._eval_rewrite_as_asinc                 K   s0   t |d t d|  td ttt|    S r2  )r   r   r   r`   r0  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 r2  )r   r   rl   )r[   rp   r   Zsxm1Zs1mxZsx2m1r)   r)   r-   r3    s    &zacosh._eval_rewrite_as_atanhc                 C   s   t S r^   r  rZ   r)   r)   r-   ra     s    zacosh.inversec                 C   s   | j d d jrdS d S )Nr   r2   Tr  r|   r)   r)   r-   r     s    zacosh._eval_is_zero)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  r1  r   r6  r5  r:  r3  ra   r   r)   r)   r)   r-   rk   Z  s"   

6


rk   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 )rl   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
    r2   c                 C   s,   |dkrdd| j d d   S t| |d S r   rY   r   rZ   r)   r)   r-   r]     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   AccumBoundsr3   TF)rc   r   rd   re   rO   rL   rE   r   rF   r   r    rf   rg   !sympy.calculus.accumulationboundsr=  r   r'   rh   r  r   rY   r  r   r   r   r  )
rn   rP   r=  ro   r   r   r   r!  r"  rq   r)   r)   r-   rr   "  sL    








z
atanh.evalc                 G   s2   | dk s| d dkrt jS t|}||  |  S d S Nr   r3   )r   rO   r   r  r)   r)   r-   rx   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 r&  )rY   r   r'  re   r   r   rL   rg   r*   r   r   rf   r   r   rj   r   r   r   r(  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 r*  r9  r-  r)   r)   r-   r,  o  s"    



zatanh._eval_nseriesc                 K   s   t d| t d|  d S r2  r   r0  r)   r)   r-   r1    s    zatanh._eval_rewrite_as_logc                 K   s\   t d|d d  }t| dt |d    t | t d|d   t | | t|  S r2  )r   r   r`   )r[   rp   r   r!  r)   r)   r-   r:    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 ry   )rY   r   r|   r)   r)   r-   _eval_is_imaginary  s    zatanh._eval_is_imaginaryc                 C   s   t S r^   r	  rZ   r)   r)   r-   ra     s    zatanh.inverse)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  r1  r   r:  r   rA  ra   r)   r)   r)   r-   rl     s   

.

rl   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 )rm   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
    r2   c                 C   s,   |dkrdd| j d d   S t| |d S r   r;  rZ   r)   r)   r-   r]     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   )rc   r   rd   rE   rO   rF   re   r   r   rL   r   rf   rg   r'   r   rh   r=   )rn   rP   ro   r)   r)   r-   rr     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 r?  )r   r   r   rO   r   r  r)   r)   r-   rx     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   r2   r   r3   )rY   r   r'  r   rg   r   rL   rO   r*   r   r   r   r   r   r   rf   rj   r   r   r(  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 r*  )rY   r   r   rL   r   r*   r   r,  r   rg   r   r   r   r   rf   r   r   r-  r)   r)   r-   r,    s"    



zacoth._eval_nseriesc                 K   s$   t dd|  t dd|   d S r2  r@  r0  r)   r)   r-   r1    s    zacoth._eval_rewrite_as_logc                 K   s   t d| S r   r   r0  r)   r)   r-   r3    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   r`   r0  r)   r)   r-   r:    s    J*zacoth._eval_rewrite_as_asinhc                 C   s   t S r^   r   rZ   r)   r)   r-   ra     s    zacoth.inverse)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  r1  r   r3  r:  ra   r)   r)   r)   r-   rm     s   

	

rm   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/

    r2   c                 C   s8   |dkr*| j d }d|td|d    S t| |d S Nr2   r   r5   r3   r7  r[   r\   r   r)   r)   r-   r]   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 )Nr3   r   r<  )rc   r   rd   rE   r   r   rF   re   rL   rO   r   r  rG   r   rg   r>  r=  )rn   rP   r8  r=  r)   r)   r-   rr   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   r3   r2   rA   r6   r5   )r   r   rO   r   rt   r   r=   r   r$  r)   r)   r-   rx   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 r&  )rY   r   r'  r   rL   rO   rg   r*   r   r   rf   r   r   r   rj   r   r   r(  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)Zpositiver3   r2   r+  r   )r  rF  rY   r   r   rL   r   rB  r*   r   nseriesr   is_meromorphicr   r,  removeOr   powsimpr   r   r   r   rg   rf   r   r   r   r[   rp   rv   r   r   rF  rP   r   r  ZserZarg1r!  gZres1r.  r)  r)   r)   r-   r,    sJ    
&
&&
&&zasech._eval_nseriesc                 C   s   t S r^   r   rZ   r)   r)   r-   ra     s    zasech.inversec                 K   s,   t d| td| d td| d   S r   r/  r   r)   r)   r-   r1    s    zasech._eval_rewrite_as_logc                 K   s   t d| S r   )rk   r   r)   r)   r-   r4    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   r`   r   r   r=   r   r)   r)   r-   r:    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 r2  )r   r   r   rl   r0  r)   r)   r-   r3    s    Z.zasech._eval_rewrite_as_atanhc                 K   s8   t d| d t dd|   td ttt|    S r2  )r   r   r   acschr0  r)   r)   r-   _eval_rewrite_as_acsch  s    zasech._eval_rewrite_as_acsch)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  ra   r1  r   r4  r:  r3  rN  r)   r)   r)   r-   rB  &  s    %



-
rB  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 )rM  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/

    r2   c                 C   s@   |dkr2| j d }d|d tdd|d     S t| |d S rC  r7  rD  r)   r)   r-   r]     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 r2  )rc   r   rd   rE   rO   rF   re   rg   rL   r   r   r   r  rC   r   is_infiniterh   )rn   rP   r8  r)   r)   r-   rr   	  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   r3   r2   rA   r6   )	r   r   rO   r   rt   r   r=   r   r   r$  r)   r)   r-   rx   +  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 r&  )rY   r   r'  r   r   rO   r*   r   r   rg   r   r   r   r   r   r   rj   r   rf   r(  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 rE  )r  rF  rY   r   r   r   rM  r*   r   rG  r   rH  r   r   r   rL   r,  rI  r   rJ  r   r   rg   r   r   r   r   r   rf   rK  r)   r)   r-   r,  R  sN    

$
*&&
*&zacsch._eval_nseriesc                 C   s   t S r^   r   rZ   r)   r)   r-   ra     s    zacsch.inversec                 K   s    t d| td|d  d  S r2  r/  r   r)   r)   r-   r1    s    zacsch._eval_rewrite_as_logc                 K   s   t d| S r   r_   r   r)   r)   r-   r:    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   rk   r   r   r=   r   r)   r)   r-   r4    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=   rl   )r[   rP   r   Zarg2Zarg2p1r)   r)   r-   r3    s
    zacsch._eval_rewrite_as_atanhc                 C   s   | j d jS ry   )rY   rO  r|   r)   r)   r-   r     s    zacsch._eval_is_zero)r2   )Nr   )r   )r2   )rH   rI   rJ   rK   r]   r   rr   r   r   rx   r   r,  ra   r1  r   r:  r4  r3  r   r)   r)   r)   r-   rM    s    %

!

0
rM  N)IZ
sympy.corer   r   r   Zsympy.core.addr   Zsympy.core.functionr   r   Zsympy.core.logicr   r	   r
   Zsympy.core.numbersr   r   r   Zsympy.core.symbolr   Z(sympy.functions.combinatorial.factorialsr   r   r   Z%sympy.functions.combinatorial.numbersr   r   r   Z$sympy.functions.elementary.complexesr   r   r   Z&sympy.functions.elementary.exponentialr   r   r   Z#sympy.functions.elementary.integersr   Z(sympy.functions.elementary.miscellaneousr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Zsympy.polys.specialpolysr(   r1   r>   rC   rG   r/   rV   rW   rX   r   r   r  r   r   r  r`   rk   rl   rm   rB  rM  r)   r)   r)   r-   <module>   sZ   4


#" U w V -JG; % /   7