a
    <b                     @   s  d dl mZ d dlmZmZmZ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 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 d
d ZG dd deZdd ZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd de"Z#G dd de"Z$G dd deZ%G d d! d!e%Z&G d"d# d#e%Z'G d$d% d%e%Z(G d&d' d'e%Z)G d(d) d)e%Z*G d*d+ d+e%Z+d,S )-    )	FuzzyBool)SsympifycacheitpiIRational)Add)FunctionArgumentIndexError)	factorialRisingFactorial)explogmatch_real_imag)sqrt)floor)fuzzy_or	fuzzy_andc                 C   s"   t | } | dd | tD S )Nc                 S   s   i | ]}|| tqS  )Zrewriter   ).0hr   r   u/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/functions/elementary/hyperbolic.py
<dictcomp>   s   z/_rewrite_hyperbolics_as_exp.<locals>.<dictcomp>)r   ZxreplaceZatomsHyperbolicFunction)exprr   r   r   _rewrite_hyperbolics_as_exp   s    
r   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      s   	r   c                 C   s   t jt j }t| D ]<}||kr.t j} q^q|jr| \}}||kr|jr q^q| 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   PiImaginaryUnitr	   Z	make_argsOneis_Mulas_two_termsZis_RationalZeroHalf)argZipiaKpm1m2r   r   r   _peeloff_ipi%   s    

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d0ddZd1ddZd2ddZd3d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 )5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
       c                 C   s$   |dkrt | jd S t| |dS )z@
        Returns the first derivative of this function.
        r0   r   N)coshargsr   selfargindexr   r   r   fdiff[   s    z
sinh.fdiffc                 C   s   t S z7
        Returns the inverse of this function.
        )asinhr3   r   r   r   inversed   s    zsinh.inversec                 C   s  ddl m} t|}|jrl|tju r*tjS |tju r:tjS |tju rJtjS |jrVtj	S |j
rh| |  S n>|tju r|tjS |tj}|d urtj|| S | r| |  S |j rt|\}}| r|tj tj }t|t| t|t|  S |jr
tj	S |jtkr |jd S |jtkrN|jd }t|d t|d  S |jtkrx|jd }|td|d   S |jtkr|jd }dt|d t|d   S d S )Nr   )sinr0      )(sympy.functions.elementary.trigonometricr:   r   	is_Numberr   NaNInfinityNegativeInfinityis_zeror&   is_negativeComplexInfinityas_coefficientr"   could_extract_minus_signis_Addr.   r!   r/   r1   funcr8   r2   acoshr   atanhacoth)clsr(   r:   i_coeffxmr   r   r   evalj   sL    



 



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   r;   r0   Nr   r&   r   lenr   nrM   previous_termsr+   r   r   r   taylor_term   s    zsinh.taylor_termc                 C   s   |  | jd  S Nr   rG   r2   	conjugater4   r   r   r   _eval_conjugate   s    zsinh._eval_conjugateTc                 K   s   ddl m}m} | jd jrJ|r@d|d< | j|fi |tjfS | tjfS |rp| jd j|fi | \}}n| jd  \}}t	||| t
||| fS )z@
        Returns this function as a complex coordinate.
        r   cosr:   Fcomplexr<   r]   r:   r2   is_extended_realexpandr   r&   as_real_imagr/   r1   r4   deephintsr]   r:   reimr   r   r   rb      s    
"zsinh.as_real_imagc                 K   s&   | j f d|i|\}}||tj  S Nrd   rb   r   r"   r4   rd   re   Zre_partZim_partr   r   r   _eval_expand_complex   s    zsinh._eval_expand_complexc                 K   s   |r| j d j|fi |}n
| j d }d }|jr@| \}}n:|jdd\}}|tjurz|jrz|tjurz|}|d | }|d urt|t	| t|t	|  jddS t|S Nr   TZrationalr0   )Ztrig)
r2   ra   rF   r%   as_coeff_Mulr   r#   
is_Integerr/   r1   r4   rd   re   r(   rM   ycoefftermsr   r   r   _eval_expand_trig   s    
(zsinh._eval_expand_trigNc                 K   s   t |t |  d S Nr;   r   r4   r(   limitvarkwargsr   r   r   _eval_rewrite_as_tractable   s    zsinh._eval_rewrite_as_tractablec                 K   s   t |t |  d S ru   rv   r4   r(   ry   r   r   r   _eval_rewrite_as_exp   s    zsinh._eval_rewrite_as_expc                 K   s    t j t|t jt j d   S ru   r   r"   r1   r!   r{   r   r   r   _eval_rewrite_as_cosh   s    zsinh._eval_rewrite_as_coshc                 K   s"   t tj| }d| d|d   S Nr;   r0   tanhr   r'   r4   r(   ry   Z	tanh_halfr   r   r   _eval_rewrite_as_tanh   s    zsinh._eval_rewrite_as_tanhc                 K   s"   t tj| }d| |d d  S r   cothr   r'   r4   r(   ry   Z	coth_halfr   r   r   _eval_rewrite_as_coth   s    zsinh._eval_rewrite_as_cothr   c                 C   sh   | j d j|||d}||d}|tju rF|j|d|jr>dndd}|jrP|S |jr`| 	|S | S d S Nr   )logxcdir-+)dir)
r2   as_leading_termsubsr   r>   limitrB   rA   	is_finiterG   r4   rM   r   r   r(   Z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r2   is_realrb   r   rA   r4   r(   rf   rg   r   r   r   _eval_is_real   s
    
zsinh._eval_is_realc                 C   s   | j d jrdS d S r   r2   r`   rZ   r   r   r   _eval_is_extended_real  s    zsinh._eval_is_extended_realc                 C   s   | j d jr| j d jS d S rW   r2   r`   is_positiverZ   r   r   r   _eval_is_positive  s    zsinh._eval_is_positivec                 C   s   | j d jr| j d jS d S rW   r2   r`   rB   rZ   r   r   r   _eval_is_negative	  s    zsinh._eval_is_negativec                 C   s   | j d }|jS rW   r2   r   r4   r(   r   r   r   _eval_is_finite  s    
zsinh._eval_is_finitec                 C   s"   t | jd \}}|jr|jS d S rW   )r.   r2   rA   
is_integerr4   restZipi_multr   r   r   _eval_is_zero  s    zsinh._eval_is_zero)r0   )r0   )T)T)T)N)Nr   )r   r   r   r    r6   r9   classmethodrO   staticmethodr   rV   r[   rb   rk   rt   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   G   s0   
	

4





r/   c                   @   s   e Zd Z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dZd.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d(d) ZdS )0r1   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
    r0   c                 C   s$   |dkrt | jd S t| |d S Nr0   r   r/   r2   r   r3   r   r   r   r6   +  s    z
cosh.fdiffc                 C   s  ddl m} t|}|jrj|tju r*tjS |tju r:tjS |tju rJtjS |jrVtj	S |j
rf| | S n"|tju rztjS |tj}|d ur||S | r| | S |jrt|\}}|r|tj tj }t|t| t|t|  S |j rtj	S |jtkrtd|jd d  S |jtkr4|jd S |jtkrZdtd|jd d   S |jtkr|jd }|t|d t|d   S d S )Nr   r]   r0   r;   )r<   r]   r   r=   r   r>   r?   r@   rA   r#   rB   rC   rD   r"   rE   rF   r.   r!   r1   r/   rG   r8   r   r2   rH   rI   rJ   )rK   r(   r]   rL   rM   rN   r   r   r   rO   1  sH    




 

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   r;   r0   rP   rQ   rS   r   r   r   rV   c  s    zcosh.taylor_termc                 C   s   |  | jd  S rW   rX   rZ   r   r   r   r[   q  s    zcosh._eval_conjugateTc                 K   s   ddl m}m} | jd jrJ|r@d|d< | j|fi |tjfS | tjfS |rp| jd j|fi | \}}n| jd  \}}t	||| t
||| fS )Nr   r\   Fr^   )r<   r]   r:   r2   r`   ra   r   r&   rb   r1   r/   rc   r   r   r   rb   t  s    
"zcosh.as_real_imagc                 K   s&   | j f d|i|\}}||tj  S rh   ri   rj   r   r   r   rk     s    zcosh._eval_expand_complexc                 K   s   |r| j d j|fi |}n
| j d }d }|jr@| \}}n:|jdd\}}|tjurz|jrz|tjurz|}|d | }|d urt|t| t	|t	|  jddS t|S rl   )
r2   ra   rF   r%   rn   r   r#   ro   r1   r/   rp   r   r   r   rt     s    
(zcosh._eval_expand_trigNc                 K   s   t |t |  d S ru   rv   rw   r   r   r   rz     s    zcosh._eval_rewrite_as_tractablec                 K   s   t |t |  d S ru   rv   r{   r   r   r   r|     s    zcosh._eval_rewrite_as_expc                 K   s    t j t|t jt j d   S ru   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_cothr   c                 C   sj   | j d j|||d}||d}|tju rF|j|d|jr>dndd}|jrRtjS |j	rb| 
|S | S d S r   )r2   r   r   r   r>   r   rB   rA   r#   r   rG   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   )r2   r   is_imaginaryrb   r   rA   r   r   r   r   r     s
    
zcosh._eval_is_realc              	   C   sr   | j d }| \}}|dt  }|j}|r0dS |j}|du rB|S t|t|t|td k |dt d kgggS Nr   r;   TF   r2   rb   r   rA   r   r   r4   zrM   rq   ZymodZyzeroZxzeror   r   r   r     s     
zcosh._eval_is_positivec              	   C   sr   | j d }| \}}|dt  }|j}|r0dS |j}|du 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 rW   r   r   r   r   r   r     s    
zcosh._eval_is_finitec                 C   s,   t | jd \}}|r(|jr(|tj jS d S rW   )r.   r2   rA   r   r'   r   r   r   r   r   r     s    
zcosh._eval_is_zero)r0   )T)T)T)N)Nr   )r   r   r   r    r6   r   rO   r   r   rV   r[   rb   rk   rt   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r1     s,   

1




 r1   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 Zd/ddZdd Zdd Zdd Zdd Zd0ddZd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ ZdS )1r   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
    r0   c                 C   s.   |dkr t jt| jd d  S t| |d S Nr0   r   r;   )r   r#   r   r2   r   r3   r   r   r   r6     s    z
tanh.fdiffc                 C   s   t S r7   )rI   r3   r   r   r   r9   !  s    ztanh.inversec                 C   s  ddl m} t|}|jrl|tju r*tjS |tju r:tjS |tju rJtj	S |j
rVtjS |jrh| |  S nD|tju r|tjS |tj}|d ur| rtj ||  S tj|| S | r| |  S |jrt|\}}|rt|tj tj }|tju rt|S t|S |j
r$tjS |jtkrN|jd }|td|d   S |jtkr|jd }t|d t|d  | S |jtkr|jd S |jtkrd|jd  S d S )Nr   )tanr0   r;   )r<   r   r   r=   r   r>   r?   r#   r@   NegativeOnerA   r&   rB   rC   rD   r"   rE   rF   r.   r   r!   r   rG   r8   r2   r   rH   rI   rJ   )rK   r(   r   rL   rM   rN   Ztanhmr   r   r   rO   '  sR    






z	tanh.evalc                 G   sr   ddl m} | dk s | d dkr&tjS t|}d| d  }|| d }t| d }||d  | | ||   S d S )Nr   	bernoullir;   r0   )%sympy.functions.combinatorial.numbersr   r   r&   r   r   )rT   rM   rU   r   r)   BFr   r   r   rV   _  s    ztanh.taylor_termc                 C   s   |  | jd  S rW   rX   rZ   r   r   r   r[   o  s    ztanh._eval_conjugateTc                 K   s   ddl m}m} | jd jrJ|r@d|d< | j|fi |tjfS | tjfS |rp| jd j|fi | \}}n| jd  \}}t	|d ||d  }t	|t
| | |||| | fS Nr   r\   Fr^   r;   r_   r4   rd   re   r]   r:   rf   rg   denomr   r   r   rb   r  s    
"ztanh.as_real_imagc                 K   s:  | j d }|jrzddlm} t|j }dd |j D }ddg}t|d D ]}||d   |||7  < qJ|d |d  S |jr2ddlm} |	 \}	}
|	j
r2|	dkr2g }g }t|
}td|	d dD ] }||t|	|||   qtd|	d dD ]"}||t|	|||    qt| t|  S t|S )Nr   symmetric_polyc                 S   s   g | ]}t |d d qS Fevaluate)r   rt   r   rM   r   r   r   
<listcomp>  s   z*tanh._eval_expand_trig.<locals>.<listcomp>r0   r;   )nC)r2   rF   sympy.polys.specialpolysr   rR   ranger$   r   r   rn   ro   r   appendr	   )r4   re   r(   r   rT   ZTXr+   ir   rr   rs   dTkr   r   r   rt     s0    

 ztanh._eval_expand_trigNc                 K   s$   t | t | }}|| ||  S Nrv   r4   r(   rx   ry   neg_exppos_expr   r   r   rz     s    ztanh._eval_rewrite_as_tractablec                 K   s$   t | t | }}|| ||  S r   rv   r4   r(   ry   r   r   r   r   r   r|     s    ztanh._eval_rewrite_as_expc                 K   s&   t jt| tt jt j d |  S ru   r   r{   r   r   r   r     s    ztanh._eval_rewrite_as_sinhc                 K   s&   t jtt jt j d |  t| S ru   r}   r{   r   r   r   r~     s    ztanh._eval_rewrite_as_coshc                 K   s   dt | S Nr0   r   r{   r   r   r   r     s    ztanh._eval_rewrite_as_cothr   c                 C   sH   ddl m} | jd |}||jv r:|d||r:|S | |S d S Nr   Orderr0   sympy.series.orderr   r2   r   free_symbolscontainsrG   r4   rM   r   r   r   r(   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   Tr;   r   r   r   r   r   r     s    
ztanh._eval_is_realc                 C   s   | j d jrdS d S r   r   rZ   r   r   r   r     s    ztanh._eval_is_extended_realc                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r     s    ztanh._eval_is_positivec                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r     s    ztanh._eval_is_negativec                 C   s^   ddl m} | jd }| \}}||d t|d  }|dkrFdS |jrPdS |jrZdS d S )Nr   r   r;   FT)r<   r]   r2   rb   r/   	is_numberr`   )r4   r]   r(   rf   rg   r   r   r   r   r     s    
ztanh._eval_is_finitec                 C   s   | j d }|jrdS d S r   r2   rA   r   r   r   r   r     s    
ztanh._eval_is_zero)r0   )r0   )T)N)Nr   )r   r   r   r    r6   r9   r   rO   r   r   rV   r[   rb   rt   rz   r|   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r     s.   


7


	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
    r0   c                 C   s,   |dkrdt | jd d  S t| |d S )Nr0   r   r;   r   r3   r   r   r   r6     s    z
coth.fdiffc                 C   s   t S r7   )rJ   r3   r   r   r   r9     s    zcoth.inversec                 C   s  ddl m} t|}|jrl|tju r*tjS |tju r:tjS |tju rJtj	S |j
rVtjS |jrh| |  S nD|tju r|tjS |tj}|d ur| rtj||  S tj || S | r| |  S |jrt|\}}|rt|tj tj }|tju rt|S t|S |j
r$tjS |jtkrN|jd }td|d  | S |jtkr|jd }|t|d t|d   S |jtkrd|jd  S |jtkr|jd S d S )Nr   )cotr0   r;   )r<   r   r   r=   r   r>   r?   r#   r@   r   rA   rC   rB   rD   r"   rE   rF   r.   r   r!   r   rG   r8   r2   r   rH   rI   rJ   )rK   r(   r   rL   rM   rN   Zcothmr   r   r   rO     sR    





z	coth.evalc                 G   sz   ddl m} | dkr dt| S | dk s4| d dkr:tjS t|}|| d }t| d }d| d  | | ||   S d S )Nr   r   r0   r;   r   r   r   r   r&   r   rT   rM   rU   r   r   r   r   r   r   rV   :  s    zcoth.taylor_termc                 C   s   |  | jd  S rW   rX   rZ   r   r   r   r[   J  s    zcoth._eval_conjugateTc                 K   s   ddl m}m} | jd jrJ|r@d|d< | j|fi |tjfS | tjfS |rp| jd j|fi | \}}n| jd  \}}t	|d ||d  }t	|t
| | || || | fS r   r_   r   r   r   r   rb   M  s    
"zcoth.as_real_imagNc                 K   s$   t | t | }}|| ||  S r   rv   r   r   r   r   rz   \  s    zcoth._eval_rewrite_as_tractablec                 K   s$   t | t | }}|| ||  S r   rv   r   r   r   r   r|   `  s    zcoth._eval_rewrite_as_expc                 K   s(   t j tt jt j d |  t| S ru   r   r{   r   r   r   r   d  s    zcoth._eval_rewrite_as_sinhc                 K   s(   t j t| tt jt j d |  S ru   r}   r{   r   r   r   r~   g  s    zcoth._eval_rewrite_as_coshc                 K   s   dt | S r   r   r{   r   r   r   r   j  s    zcoth._eval_rewrite_as_tanhc                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r   m  s    zcoth._eval_is_positivec                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r   q  s    zcoth._eval_is_negativer   c                 C   sL   ddl m} | jd |}||jv r>|d||r>d| S | |S d S r   r   r   r   r   r   r   u  s
    zcoth._eval_as_leading_termc                 K   s$  | j d }|jrddlm} dd |j D }g g g}t|j }t|ddD ] }||| d  ||| qJt|d  t|d   S |jrddl	m
} |jd	d
\}	}
|	jr|	dkrt|
dd}g g g}t|	ddD ](}||	| d  ||	|||   qt|d  t|d   S t|S )Nr   r   c                 S   s   g | ]}t |d d qS r   )r   rt   r   r   r   r   r         z*coth._eval_expand_trig.<locals>.<listcomp>r   r;   r0   )binomialTrm   Fr   )r2   rF   r   r   rR   r   r   r	   r$   (sympy.functions.combinatorial.factorialsr   rn   ro   r   )r4   re   r(   r   ZCXr+   rT   r   r   rr   rM   cr   r   r   rt   ~  s&    

&zcoth._eval_expand_trig)r0   )r0   )T)N)Nr   )r   r   r   r    r6   r9   r   rO   r   r   rV   r[   rb   rz   r|   r   r~   r   r   r   r   rt   r   r   r   r   r     s&   


7


	r   c                   @   s   e Zd ZdZdZdZdZ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. Nc                 C   sj   |  r*| jr| | S | jr*| |  S | j|}t|drV| | krV|jd S |d urfd| S |S )Nr9   r   r0   )rE   _is_even_is_odd_reciprocal_ofrO   hasattrr9   r2   )rK   r(   tr   r   r   rO     s    

z!ReciprocalHyperbolicFunction.evalc                 O   s$   |  | jd }t|||i |S rW   )r   r2   getattr)r4   method_namer2   ry   or   r   r   _call_reciprocal  s    z-ReciprocalHyperbolicFunction._call_reciprocalc                 O   s,   | j |g|R i |}|d ur(d| S |S r   )r   )r4   r   r2   ry   r   r   r   r   _calculate_reciprocal  s    z2ReciprocalHyperbolicFunction._calculate_reciprocalc                 C   s.   |  ||}|d ur*|| |kr*d| S d S r   )r   r   )r4   r   r(   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 )Nrz   r   rw   r   r   r   rz     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i |S r   )r   r2   rb   )r4   rd   re   r   r   r   rb     s    z)ReciprocalHyperbolicFunction.as_real_imagc                 C   s   |  | jd  S rW   rX   rZ   r   r   r   r[     s    z,ReciprocalHyperbolicFunction._eval_conjugatec                 K   s&   | j f ddi|\}}|tj|  S )Nrd   Tri   rj   r   r   r   rk     s    z1ReciprocalHyperbolicFunction._eval_expand_complexc                 K   s   | j di |S )Nrt   )rt   )r   )r4   re   r   r   r   rt     s    z.ReciprocalHyperbolicFunction._eval_expand_trigr   c                 C   s   d|  | jd  |S r   )r   r2   r   )r4   rM   r   r   r   r   r   r     s    z2ReciprocalHyperbolicFunction._eval_as_leading_termc                 C   s   |  | jd jS rW   )r   r2   r`   rZ   r   r   r   r     s    z3ReciprocalHyperbolicFunction._eval_is_extended_realc                 C   s   d|  | jd  jS r   )r   r2   r   rZ   r   r   r   r     s    z,ReciprocalHyperbolicFunction._eval_is_finite)N)T)T)Nr   )r   r   r   r    r   r   r   r   rO   r   r   r   r|   rz   r   r   rb   r[   rk   rt   r   r   r   r   r   r   r   r     s(   




r   c                   @   sJ   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S )cscha8  
    ``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
    Tr0   c                 C   s4   |dkr&t | jd  t| jd  S t| |dS )z?
        Returns the first derivative of this function
        r0   r   N)r   r2   r   r   r3   r   r   r   r6     s    z
csch.fdiffc                 G   s~   ddl m} | dkr dt| S | dk s4| d dkr:tjS t|}|| d }t| d }ddd|    | | ||   S dS )zF
        Returns the next term in the Taylor series expansion
        r   r   r0   r;   Nr   r   r   r   r   rV     s    zcsch.taylor_termc                 K   s   t jt|t jt j d   S ru   r}   r{   r   r   r   r~     s    zcsch._eval_rewrite_as_coshc                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r     s    zcsch._eval_is_positivec                 C   s   | j d jr| j d jS d S rW   r   rZ   r   r   r   r     s    zcsch._eval_is_negativeN)r0   )r   r   r   r    r/   r   r   r6   r   r   rV   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S )secha:  
    ``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
    Tr0   c                 C   s4   |dkr&t | jd  t| jd  S t| |d S r   )r   r2   r   r   r3   r   r   r   r6   4  s    z
sech.fdiffc                 G   sJ   ddl m} | dk s | d dkr&tjS t|}|| t|  ||   S d S )Nr   )eulerr;   r0   )r   r   r   r&   r   r   )rT   rM   rU   r   r   r   r   rV   :  s
    zsech.taylor_termc                 K   s   t jt|t jt j d   S ru   r   r{   r   r   r   r   D  s    zsech._eval_rewrite_as_sinhc                 C   s   | j d jrdS d S r   r   rZ   r   r   r   r   G  s    zsech._eval_is_positiveN)r0   )r   r   r   r    r1   r   r   r6   r   r   rV   r   r   r   r   r   r   r     s   
r   c                   @   s   e Zd ZdZdS )InverseHyperbolicFunctionz,Base class for inverse hyperbolic functions.N)r   r   r   r    r   r   r   r   r   P  s   r   c                   @   sZ   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 ZdddZdd Zd	S )r8   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
    r0   c                 C   s0   |dkr"dt | jd d d  S t| |d S r   r   r2   r   r3   r   r   r   r6   l  s    zasinh.fdiffc           
      C   s  ddl m} t|}|jr|tju r*tjS |tju r:tjS |tju rJtjS |jrVtj	S |tj
u rpttdd S |tju rttdd S |jr| |  S nR|tju rtjS |jrtj	S |tj}|d urtj|| S | r| |  S t|tr|jd jr|jd }|jr |S t|\}}|d ur|d urt|td  t }|tt |  }|j}	|	du rx|S |	du r| S d S )Nr   )asinr;   r0   TF)r<   r   r   r=   r   r>   r?   r@   rA   r&   r#   r   r   r   rB   rC   rD   r"   rE   
isinstancer/   r2   r   r   r   r   r   r   is_even)
rK   r(   r   rL   r   rr   frN   evenr   r   r   rO   r  sN    








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   r;   rP   r0   )r   r&   r   rR   r   r'   r   r   rT   rM   rU   r+   r   Rr   r   r   r   rV     s    &zasinh.taylor_termNr   c                 C   sH   ddl m} | jd |}||jv r:|d||r:|S | |S d S r   r   r   r   r   r   r     s
    zasinh._eval_as_leading_termc                 K   s   t |t|d d  S r   r   r   r4   rM   ry   r   r   r   _eval_rewrite_as_log  s    zasinh._eval_rewrite_as_logc                 C   s   t S r7   )r/   r3   r   r   r   r9     s    zasinh.inversec                 C   s   | j d jS rW   r   rZ   r   r   r   r     s    zasinh._eval_is_zero)r0   )Nr   )r0   r   r   r   r    r6   r   rO   r   r   rV   r   r  r9   r   r   r   r   r   r8   V  s   

0
	
r8   c                   @   sZ   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 ZdddZdd Zd	S )rH   aB  
    ``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**2 - 1)
    >>> acosh(1)
    0

    See Also
    ========

    asinh, atanh, cosh
    r0   c                 C   s0   |dkr"dt | jd d d  S t| |d S r   r   r3   r   r   r   r6     s    zacosh.fdiffc           
   +   C   s  t |}|jrz|tju rtjS |tju r.tjS |tju r>tjS |jrTtjtj d S |tj	u rdtj
S |tju rztjtj S |jrtjttjdtd  tj ttj dtd  tjtjd tddtjtdd tdd tjd td d tjtdd dtd tjd dtd tjtdd tdd tjd td d tjtdd tdd td tjtdd	 tdd  td tjtd
d	 tdtd d tjd tdtd  d tjtd
d tdtd d tjtdd tdtd  d tjtdd dtd dtd  tjd	 dtd  dtd  tjtdd	 tdd d tjd tdd  d tjtdd i}||v r|jr|| tj S || S |tju rtjS |tjtj krtjtjtj d  S |tj tj kr"tjtjtj d  S |jr<tjtj tj S t|tr|jd jr|jd }|jr|ddlm} ||S t|\}}|d ur|d urt|t }|tt |  }|j}	|	du r|jr|S |jr| S n0|	du r|tt 8 }|j r| S |j!r|S d S )Nr;   r0   r   r                        r   )AbsTF)"r   r=   r   r>   r?   r@   rA   r!   r"   r#   r&   r   r   r   r   r'   r   r`   rC   r   r1   r2   r   Z$sympy.functions.elementary.complexesr  r   r   r   r   r   Zis_nonnegativerB   Zis_nonpositiver   )
rK   r(   	cst_tabler   r  r   r   r   rN   r   r   r   r   rO     s    




 "" "&



z
acosh.evalc                 G   s   | dkrt jt j d S | dk s,| d dkr2t jS t|}t|dkrz| dkrz|d }|| d d  | | d   |d  S | d d }tt j|}t|}| | t j ||   |  S d S r  )	r   r!   r"   r&   r   rR   r   r'   r   r  r   r   r   rV   4  s    $zacosh.taylor_termNr   c                 C   sT   ddl m} | jd |}||jv rF|d||rFtjtj d S | 	|S d S Nr   r   r0   r;   
r   r   r2   r   r   r   r   r"   r!   rG   r   r   r   r   r   F  s
    zacosh._eval_as_leading_termc                 K   s    t |t|d t|d   S r   r  r  r   r   r   r  O  s    zacosh._eval_rewrite_as_logc                 C   s   t S r7   )r1   r3   r   r   r   r9   R  s    zacosh.inversec                 C   s   | j d d jrdS d S )Nr   r0   Tr   rZ   r   r   r   r   X  s    zacosh._eval_is_zero)r0   )Nr   )r0   r  r   r   r   r   rH     s   

N
	
rH   c                   @   sb   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 Zdd Zdd ZdddZd	S )rI   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
    r0   c                 C   s,   |dkrdd| j d d   S t| |d S r   r2   r   r3   r   r   r   r6   q  s    zatanh.fdiffc                 C   s  ddl m} t|}|jr|tju r*tjS |jr6tjS |tju rFtj	S |tj
u rVtjS |tj	u rptj || S |tju rtj||  S |jr| |  S nn|tju rddlm} tj|tj d tjd  S |tj}|d u rtj|| S | r| |  S |jrtjS t|tr|jd jr|jd }|jrJ|S t|\}}|d ur|d urtd| t }|j}	|t| t d  }
|	du r|
S |	du r|
tt d  S d S )Nr   )atanAccumBoundsr;   TF)r<   r  r   r=   r   r>   rA   r&   r#   r?   r   r@   r"   rB   rC   !sympy.calculus.accumulationboundsr  r!   rD   rE   r   r   r2   r   r   r   r   r   r   r   )rK   r(   r  r  rL   r   r   r   r   r   rN   r   r   r   rO   w  sP    










z
atanh.evalc                 G   s2   | dk s| d dkrt jS t|}||  |  S d S Nr   r;   )r   r&   r   rT   rM   rU   r   r   r   rV     s    zatanh.taylor_termNr   c                 C   sH   ddl m} | jd |}||jv r:|d||r:|S | |S d S r   r   r   r   r   r   r     s
    zatanh._eval_as_leading_termc                 K   s   t d| t d|  d S Nr0   r;   r   r  r   r   r   r    s    zatanh._eval_rewrite_as_logc                 C   s   | j d jrdS d S r   r   rZ   r   r   r   r     s    zatanh._eval_is_zeroc                 C   s   | j d jS rW   )r2   r   rZ   r   r   r   _eval_is_imaginary  s    zatanh._eval_is_imaginaryc                 C   s   t S r7   r   r3   r   r   r   r9     s    zatanh.inverse)r0   )Nr   )r0   )r   r   r   r    r6   r   rO   r   r   rV   r   r  r   r  r9   r   r   r   r   rI   ]  s   

1
	rI   c                   @   sR   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 ZdddZd	S )rJ   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
    r0   c                 C   s,   |dkrdd| j d d   S t| |d S r   r  r3   r   r   r   r6     s    zacoth.fdiffc                 C   s   ddl m} t|}|jr|tju r*tjS |tju r:tjS |tju rJtjS |j	r`tj
tj d S |tju rptjS |tju rtjS |jr| |  S nH|tju rtjS |tj}|d urtj || S | r| |  S |j	 rtj
tj tj S d S )Nr   )acotr;   )r<   r  r   r=   r   r>   r?   r&   r@   rA   r!   r"   r#   r   rB   rC   rD   rE   r'   )rK   r(   r  rL   r   r   r   rO     s4    





z
acoth.evalc                 G   sJ   | dkrt jt j d S | dk s,| d dkr2t jS t|}||  |  S d S r  )r   r!   r"   r&   r   r  r   r   r   rV   	  s    zacoth.taylor_termNr   c                 C   sT   ddl m} | jd |}||jv rF|d||rFtjtj d S | 	|S d S r  r  r   r   r   r   r     s
    zacoth._eval_as_leading_termc                 K   s$   t dd|  t dd|   d S r  r  r  r   r   r   r    s    zacoth._eval_rewrite_as_logc                 C   s   t S r7   r   r3   r   r   r   r9      s    zacoth.inverse)r0   )Nr   )r0   )r   r   r   r    r6   r   rO   r   r   rV   r   r  r9   r   r   r   r   rJ     s   

"	
	rJ   c                   @   sH   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 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] http://dlmf.nist.gov/4.37
    .. [3] http://functions.wolfram.com/ElementaryFunctions/ArcSech/

    r0   c                 C   s8   |dkr*| j d }d|td|d    S t| |d S Nr0   r   r   r;   r2   r   r   r4   r5   r   r   r   r   r6   M  s    
zasech.fdiffc              1   C   s\  t |}|jr|tju rtjS |tju r8tjtj d S |tju rRtjtj d S |jr^tjS |tj	u rntj
S |tju rtjtj S |jrtjtjtj d  tdtd  tj tjtj d tdtd  tdtd tjd tdtd dtj d tddtd  tjd tddtd   dtj d dtdtd  tjd	 d
tdtd  dtj d	 dtd tjd d
td dtj d tdd tjd dtd dtj d tdtjd td dtj d tddtd  dtj d tddtd   dtj d tdtjd td dtj d tddtd  dtj d	 tddtd   dtj d	 dtd dtj d dtd dtj d tdtd dtj d td td dtj d i}||v r|jr|| tj S || S |tju rJddlm} tj|tj d tjd  S |jrXtjS d S )Nr;   r0   r	  r  r  r
  
   	   r  rP   r  r   r  r   r   r  )r   r=   r   r>   r?   r!   r"   r@   rA   r#   r&   r   r   r   r   r`   rC   r  r  )rK   r(   r  r  r   r   r   rO   T  sb    




$$   
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rz| dkrz|d }|| d d  | d d  |d  d S | d }ttj||  }t||  d |  d }d| | ||   d S d S )Nr   r;   r0   rP   r  r   )r   r   r&   r   rR   r   r'   r   r  r   r   r   expansion_term  s    (zasech.expansion_termc                 C   s   t S r7   )r   r3   r   r   r   r9     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_logN)r0   )r0   )r   r   r   r    r6   r   rO   r   r   r$  r9   r  r   r   r   r   r  '  s   %

9
r  c                   @   s@   e Zd ZdZdddZedd ZdddZd	d
 Zdd Z	dS )acscha  
    ``acsch(x)`` is the inverse hyperbolic cosecant of ``x``.

    The inverse hyperbolic cosecant function.

    Examples
    ========

    >>> from sympy import acsch, sqrt, S
    >>> 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(S.ImaginaryUnit)
    -I*pi/2
    >>> acsch(-2*S.ImaginaryUnit)
    I*pi/6
    >>> acsch(S.ImaginaryUnit*(sqrt(6) - sqrt(2)))
    -5*I*pi/12

    See Also
    ========

    asinh

    References
    ==========

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

    r0   c                 C   s@   |dkr2| j d }d|d tdd|d     S t| |d S r  r   r!  r   r   r   r6     s    
 zacsch.fdiffc                 C   sN  t |}|jr|tju rtjS |tju r.tjS |tju r>tjS |jrJtjS |tj	u rdt
dtd S |tju rt
dtd  S |jrtjtj d tjtdtd  tj d tjdtd  tj d tjd tdtd  tj d tjd tj d tjtddtd   tj d tjtd tj d tjtdd  d	tj d tjd td
 tj d
 tjd tdtd  d	tj d tjtddtd   dtj d tjtdtd  dtj d tdtj t
dtd d  i}||v r|| tj S |tju r&tjS |jr4tjS | rJ| |  S d S )Nr0   r;   r	  r  r
  r"  r  r  r   rP   )r   r=   r   r>   r?   r&   r@   rA   rC   r#   r   r   r   r   r"   r!   rE   )rK   r(   r  r   r   r   rO     sJ    




""$$  

z
acsch.evalc                 C   s   t S r7   )r   r3   r   r   r   r9     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                 C   s   | j d jS rW   )r2   is_infiniterZ   r   r   r   r     s    zacsch._eval_is_zeroN)r0   )r0   )
r   r   r   r    r6   r   rO   r9   r  r   r   r   r   r   r%    s   %

.
r%  N),Zsympy.core.logicr   Z
sympy.corer   r   r   r   r   r   Zsympy.core.addr	   Zsympy.core.functionr
   r   r   r   r   Z&sympy.functions.elementary.exponentialr   r   r   Z(sympy.functions.elementary.miscellaneousr   Z#sympy.functions.elementary.integersr   r   r   r   r   r.   r/   r1   r   r   r   r   r   r   r8   rH   rI   rJ   r  r%  r   r   r   r   <module>   s>    " Q q \ 3J?3s o[ 