U
    ZÊ¹j§  ã                   @   s¨  d dl mZ d dlmZ d dl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 d dlmZmZmZ d dlmZ d d	lmZmZmZmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 G dd„ deƒZ9G dd„ de9ƒZ:G dd„ deƒZ;G dd„ de9e;d�Z<dd„ Z=G dd „ d eƒZ>G d!d"„ d"eƒZ?ed#d$„ ƒZ@d%S )&é    )Úproduct)ÚTuple)ÚAdd)Úcacheit)ÚExpr)ÚFunctionÚArgumentIndexErrorÚ
expand_logÚ
expand_mulÚFunctionClassÚ	PoleErrorÚexpand_multinomialÚexpand_complex)Ú	fuzzy_andÚ	fuzzy_notÚfuzzy_or)ÚMul)ÚIntegerÚRationalÚpiÚI)Úglobal_parameters)ÚPow)ÚS)ÚWildÚDummy)Úsympify)Ú	factorial)ÚargÚ
unpolarifyÚimÚreÚAbs)Úsqrt)ÚmultiplicityÚperfect_power)Ú	factorintc                   @   sŠ   e Zd ZdZejfZedd„ ƒZddd„Z	dd„ Z
ed	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„ Zdd„ ZdS )ÚExpBaseTc                 C   s   | j jS ©N)ÚexpÚkind©Úself© r-   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/functions/elementary/exponential.pyr*   (   s    zExpBase.kindé   c                 C   s   t S )z=
        Returns the inverse function of ``exp(x)``.
        ©Úlog©r,   Úargindexr-   r-   r.   Úinverse,   s    zExpBase.inversec                 C   sP   | j s| tjfS | j}|j}|s0| js0| ¡ }|rFtj|  | ¡fS | tjfS )a-  
        Returns this with a positive exponent as a 2-tuple (a fraction).

        Examples
        ========

        >>> from sympy import exp
        >>> from sympy.abc import x
        >>> exp(-x).as_numer_denom()
        (1, exp(x))
        >>> exp(x).as_numer_denom()
        (exp(x), 1)
        )Úis_commutativer   ÚOner)   Úis_negativeÚcould_extract_minus_signÚfunc)r,   r)   Zneg_expr-   r-   r.   Úas_numer_denom2   s    
zExpBase.as_numer_denomc                 C   s
   | j d S )z7
        Returns the exponent of the function.
        r   )Úargsr+   r-   r-   r.   r)   L   s    zExpBase.expc                 C   s   |   d¡t| jŽ fS )z7
        Returns the 2-tuple (base, exponent).
        r/   )r9   r   r;   r+   r-   r-   r.   Úas_base_expS   s    zExpBase.as_base_expc                 C   s   |   | j ¡ ¡S r(   )r9   r)   Zadjointr+   r-   r-   r.   Ú_eval_adjointY   s    zExpBase._eval_adjointc                 C   s   |   | j ¡ ¡S r(   )r9   r)   Ú	conjugater+   r-   r-   r.   Ú_eval_conjugate\   s    zExpBase._eval_conjugatec                 C   s   |   | j ¡ ¡S r(   )r9   r)   Z	transposer+   r-   r-   r.   Ú_eval_transpose_   s    zExpBase._eval_transposec                 C   s.   | j }|jr |jrdS |jr dS |jr*dS d S ©NTF)r)   Úis_infiniteÚis_extended_negativeÚis_extended_positiveÚ	is_finite©r,   r   r-   r-   r.   Ú_eval_is_finiteb   s    zExpBase._eval_is_finitec                 C   sH   | j | jŽ }|j | j kr>|jj}|r(dS |jjrDt|ƒrDdS n|jS d S rA   )r9   r;   r)   Úis_zeroÚis_rationalr   )r,   ÚsÚzr-   r-   r.   Ú_eval_is_rationall   s    zExpBase._eval_is_rationalc                 C   s   | j tjkS r(   )r)   r   ÚNegativeInfinityr+   r-   r-   r.   Ú_eval_is_zerow   s    zExpBase._eval_is_zeroc                 C   s"   |   ¡ \}}t t||dd�|¡S )z;exp(arg)**e -> exp(arg*e) if assumptions allow it.
        F©Úevaluate)r<   r   Ú_eval_power)r,   ÚotherÚbÚer-   r-   r.   rQ   z   s    zExpBase._eval_powerc                    sz   ddl m} ddlm} ˆ jd }|jrH|jrHt ‡ fdd„|jD ƒ¡S t	||ƒrp|jrp|ˆ  
|j¡f|jžŽ S ˆ  
|¡S )Nr   )ÚProduct)ÚSumc                 3   s   | ]}ˆ   |¡V  qd S r(   )r9   )Ú.0Úxr+   r-   r.   Ú	<genexpr>…   s     z1ExpBase._eval_expand_power_exp.<locals>.<genexpr>)Zsympy.concrete.productsrU   Zsympy.concrete.summationsrV   r;   Úis_Addr5   r   ZfromiterÚ
isinstancer9   ÚfunctionÚlimits)r,   ÚhintsrU   rV   r   r-   r+   r.   Ú_eval_expand_power_exp€   s    
zExpBase._eval_expand_power_expN)r/   )Ú__name__Ú
__module__Ú__qualname__Z
unbranchedr   ÚComplexInfinityÚ_singularitiesÚpropertyr*   r4   r:   r)   r<   r=   r?   r@   rG   rL   rN   rQ   r_   r-   r-   r-   r.   r'   #   s"   



r'   c                   @   s@   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )Ú	exp_polara<  
    Represent a *polar number* (see g-function Sphinx documentation).

    Explanation
    ===========

    ``exp_polar`` represents the function
    `Exp: \mathbb{C} \rightarrow \mathcal{S}`, sending the complex number
    `z = a + bi` to the polar number `r = exp(a), \theta = b`. It is one of
    the main functions to construct polar numbers.

    Examples
    ========

    >>> from sympy import exp_polar, pi, I, exp

    The main difference is that polar numbers do not "wrap around" at `2 \pi`:

    >>> exp(2*pi*I)
    1
    >>> exp_polar(2*pi*I)
    exp_polar(2*I*pi)

    apart from that they behave mostly like classical complex numbers:

    >>> exp_polar(2)*exp_polar(3)
    exp_polar(5)

    See Also
    ========

    sympy.simplify.powsimp.powsimp
    polar_lift
    periodic_argument
    principal_branch
    TFc                 C   s   t t| jd ƒƒS ©Nr   )r)   r!   r;   r+   r-   r-   r.   Ú	_eval_Abs´   s    zexp_polar._eval_Absc                 C   sz   t | jd ƒ}z|t kp |tk}W n tk
r<   d}Y nX |rF| S t| jd ƒ |¡}|dkrvt |ƒdk rvt|ƒS |S )z. Careful! any evalf of polar numbers is flaky r   T)r    r;   r   Ú	TypeErrorr)   Ú_eval_evalfr!   )r,   ÚprecÚiÚbadÚresr-   r-   r.   rj   ·   s    
zexp_polar._eval_evalfc                 C   s   |   | jd | ¡S rg   )r9   r;   )r,   rR   r-   r-   r.   rQ   Æ   s    zexp_polar._eval_powerc                 C   s   | j d jrdS d S )Nr   T)r;   Úis_extended_realr+   r-   r-   r.   Ú_eval_is_extended_realÉ   s    z exp_polar._eval_is_extended_realc                 C   s"   | j d dkr| tjfS t | ¡S rg   )r;   r   r6   r'   r<   r+   r-   r-   r.   r<   Í   s    
zexp_polar.as_base_expN)r`   ra   rb   Ú__doc__Úis_polarÚis_comparablerh   rj   rQ   rp   r<   r-   r-   r-   r.   rf   ‹   s   %rf   c                   @   s   e Zd Zdd„ ZdS )ÚExpMetac                 C   s&   t |jjkrdS t|tƒo$|jtjkS )NT)r)   Ú	__class__Ú__mro__r[   r   Úbaser   ÚExp1)ÚclsÚinstancer-   r-   r.   Ú__instancecheck__Õ   s    zExpMeta.__instancecheck__N)r`   ra   rb   r{   r-   r-   r-   r.   rt   Ô   s   rt   c                   @   sÀ   e Zd ZdZd,dd„Zdd„ Ze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„ 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d*d+„ ZdS )0r)   a9  
    The exponential function, :math:`e^x`.

    Examples
    ========

    >>> from sympy import exp, I, pi
    >>> from sympy.abc import x
    >>> exp(x)
    exp(x)
    >>> exp(x).diff(x)
    exp(x)
    >>> exp(I*pi)
    -1

    Parameters
    ==========

    arg : Expr

    See Also
    ========

    log
    r/   c                 C   s   |dkr| S t | |ƒ‚dS )z@
        Returns the first derivative of this function.
        r/   N)r   r2   r-   r-   r.   Úfdiffö   s    z	exp.fdiffc                 C   sÀ   ddl m}m} | jd }|jr¼ttj }||| fkr>tjS | 	t
t ¡}|r¼|| d| ¡ƒr¼|| |¡ƒrvtjS || |¡ƒrŠtjS || |tj ¡ƒr¤t S || |tj ¡ƒr¼tS d S )Nr   )ÚaskÚQé   )Zsympy.assumptionsr}   r~   r;   Úis_Mulr   r   ÚInfinityÚNaNÚas_coefficientr   ÚintegerZevenr6   ZoddÚNegativeOneÚHalf)r,   Zassumptionsr}   r~   r   ZIooÚcoeffr-   r-   r.   Ú_eval_refineÿ   s"    

zexp._eval_refinec                 C   s~  ddl m} ddlm} ddlm} ddlm} t||ƒrB| 	¡ S t
jrTttj|ƒS |jrª|tjkrjtjS |jrvtjS |tjkr†tjS |tjkr–tjS |tjkr¦tjS �nÂ|tjkrºtjS t|tƒrÎ|jd S t||ƒ� rð|t	|jƒt	|jƒƒS t||ƒ�r| | ¡S |j�r¼| tt ¡}|�r®d| j �rr|j!�r<tjS |j"�rJtj#S |tj$ j!�r^t S |tj$ j"�r®tS n<|j%�r®|d }|dk�r”|d8 }||k�r®| |t t ƒS | &¡ \}}|tjtjfk�r<|j'�r8|tjk�ræ| }t(|ƒj�r|tjk	�rtjS t(|ƒj)�r&t*|ƒtjk	�r&tjS t(|ƒj+�r8tjS d S |gd  }	}
t, -|¡D ]R}||ƒ}t|tƒ�rˆ|
d k�r€|jd }
n d S n|j.�rœ|	 /|¡ n d S �qR|
�r¸|
t,|	Ž  S d S |j0�rlg }g }d}|jD ]p}|tjk�rô| /|¡ �qÖ| |ƒ}t|| ƒ�r:|jd |k�r.| /|jd ¡ d	}n
| /|¡ n
| /|¡ �qÖ|�sT|�rlt,|Ž | t1|Ž dd
� S |j�rztjS d S )Nr   ©ÚAccumBounds)Ú
MatrixBase©ÚSetExpr©Ú
logcombiner   r/   FTrO   )2Úsympy.calculusrŠ   Zsympy.matrices.matrixbaser‹   Úsympy.sets.setexprr�   Úsympy.simplify.simplifyr�   r[   r)   r   Z
exp_is_powr   r   rx   Ú	is_Numberr‚   rH   r6   r�   rM   ÚZerorc   r1   r;   ÚminÚmaxÚ
_eval_funcr€   rƒ   r   r   Ú
is_integerÚis_evenZis_oddr…   r†   Úis_RationalZas_coeff_MulÚ	is_numberr!   Úis_positiver    r7   r   Ú	make_argsrs   ÚappendrZ   r   )ry   r   rŠ   r‹   r�   r�   r‡   ZncoeffÚtermsZcoeffsZlog_termÚtermZterm_ÚoutÚaddZ
argchangedÚaZnewar-   r-   r.   Úeval  s®    















zexp.evalc                 C   s   t jS )z?
        Returns the base of the exponential function.
        )r   rx   r+   r-   r-   r.   rw   }  s    zexp.basec                 G   sT   | dk rt jS | dkrt jS t|ƒ}|rD|d }|dk	rD|| |  S ||  t| ƒ S )zJ
        Calculates the next term in the Taylor series expansion.
        r   éÿÿÿÿN)r   r”   r6   r   r   )ÚnrX   Úprevious_termsÚpr-   r-   r.   Útaylor_term„  s    zexp.taylor_termTc                 K   sl   ddl m}m} | jd  ¡ \}}|rB|j|f|Ž}|j|f|Ž}||ƒ||ƒ }}t|ƒ| t|ƒ| fS )aJ  
        Returns this function as a 2-tuple representing a complex number.

        Examples
        ========

        >>> from sympy import exp, I
        >>> from sympy.abc import x
        >>> exp(x).as_real_imag()
        (exp(re(x))*cos(im(x)), exp(re(x))*sin(im(x)))
        >>> exp(1).as_real_imag()
        (E, 0)
        >>> exp(I).as_real_imag()
        (cos(1), sin(1))
        >>> exp(1+I).as_real_imag()
        (E*cos(1), E*sin(1))

        See Also
        ========

        sympy.functions.elementary.complexes.re
        sympy.functions.elementary.complexes.im
        r   )ÚcosÚsin)Ú(sympy.functions.elementary.trigonometricrª   r«   r;   Úas_real_imagÚexpandr)   )r,   Údeepr^   rª   r«   r!   r    r-   r-   r.   r­   •  s    zexp.as_real_imagc                 C   s�   |j rt|jt|jƒ ƒ}n|tjkr0|jr0t}t|tƒsD|tjkrbdd„ }t 	|| ƒ||ƒ|¡S |tkr‚|js‚|| j 
||¡ S t 	| ||¡S )Nc                 S   s&   | j st| tƒr"t|  ¡ ddiŽS | S )NrP   F)Úis_Powr[   r)   r   r<   )r£   r-   r-   r.   Ú<lambda>¼  s
    ÿÿz exp._eval_subs.<locals>.<lambda>)r°   r)   r1   rw   r   rx   Zis_Functionr[   r   Ú
_eval_subsÚ_subsr   )r,   ÚoldÚnewÚfr-   r-   r.   r²   µ  s    zexp._eval_subsc                 C   sB   | j d jrdS | j d jr>tdƒ t | j d  t }|jS d S )Nr   Tr   )r;   ro   Úis_imaginaryr   r   r   r™   ©r,   Zarg2r-   r-   r.   rp   Ä  s
    zexp._eval_is_extended_realc                 C   s   dd„ }t || jd ƒƒS )Nc                 s   s   | j V  | jV  d S r(   )Ú
is_complexrC   ©r   r-   r-   r.   Úcomplex_extended_negativeÌ  s    z7exp._eval_is_complex.<locals>.complex_extended_negativer   )r   r;   )r,   r»   r-   r-   r.   Ú_eval_is_complexË  s    zexp._eval_is_complexc                 C   s@   | j t t jrdS t| j jƒr<| j jr,dS | j t jr<dS d S rA   )r)   r   r   rI   r   rH   Úis_algebraicr+   r-   r-   r.   Ú_eval_is_algebraicÑ  s    zexp._eval_is_algebraicc                 C   s>   | j jr| jd tjk	S | j jr:t | jd  t }|jS d S rg   )	r)   ro   r;   r   rM   r·   r   r   r™   r¸   r-   r-   r.   Ú_eval_is_extended_positiveÚ  s
    zexp._eval_is_extended_positiver   c              	      s  ddl m‰  ddlm} ddlm} ddlm} ddlm	} | j
}	|	j|||d�}
|
jr`d|
 S ||
 ¡ |dƒ}|tjkrˆ||| |ƒS |tjkr–| S |jr¨td	|  ƒ‚t‡ fd
d„|jD ƒƒrÄ| S tdƒ}|}z||	j||d�|ƒ ¡ }W n ttfk
�r
   d}Y nX |�r(|dk�r(||| ƒ}t
|ƒ ||¡}t
|ƒ| ||
| ¡ }|d k	�rf|t|ƒini }| |¡| k�r~|S |�r¶|dk�r¶|||
| | |ƒ||d |   7 }n|||
| | |ƒ7 }| ¡ }||ddd�}dd„ }td|gd�}| tj| t tj| ƒ¡}|S )Nr   ©Úsign©Úceiling)Úlimit©ÚOrder©Úpowsimp©r¦   Úlogxr/   úCannot expand %s around 0c                 3   s   | ]}t |ˆ ƒV  qd S r(   )r[   )rW   r   rÀ   r-   r.   rY   õ  s     z$exp._eval_nseries.<locals>.<genexpr>Út©rÊ   Tr)   ©r¯   Úcombinec                 S   s   | j o| jdkS )N)é   é   é   )rš   Úq)rX   r-   r-   r.   r±     ó    z#exp._eval_nseries.<locals>.<lambda>Úw)Ú
properties)!Ú$sympy.functions.elementary.complexesrÁ   Ú#sympy.functions.elementary.integersrÃ   Zsympy.series.limitsrÄ   Úsympy.series.orderrÆ   Úsympy.simplify.powsimprÈ   r)   Ú_eval_nseriesÚis_OrderÚremoveOr   rM   r�   rB   r   Úanyr;   r   Úas_leading_termÚgetnÚNotImplementedErrorÚ_taylorÚsubsr1   r®   r   Úreplacer…   r   )r,   rX   r¦   rÊ   ÚcdirrÃ   rÄ   rÆ   rÈ   r   Z
arg_seriesÚarg0rÌ   ZntermsÚcfZ
exp_seriesÚrÚrepZ	simpleratrÕ   r-   rÀ   r.   rÛ   á  sP    


(zexp._eval_nseriesc                 C   sN   g }d }t |ƒD ]4}|  || jd |¡}|j||d�}| | ¡ ¡ qt|Ž S )Nr   ©r¦   )Úranger©   r;   Únseriesrž   rÝ   r   )r,   rX   r¦   ÚlÚgrl   r-   r-   r.   râ     s    zexp._taylorNc                 C   s¢   ddl m} | jd  ¡ j||d�}| |d¡}|tjkr@tjS t||ƒrjt	|ƒtj
k rbt| ƒS t|ƒS |tjkr€| |d¡}|jdkr’t|ƒS td|  ƒ‚d S )Nr   r‰   rÍ   FrË   )Zsympy.calculus.utilrŠ   r;   Úcancelrß   rã   r   r‚   r[   r!   r”   r)   rÄ   rB   r   )r,   rX   rÊ   rå   rŠ   r   ræ   r-   r-   r.   Ú_eval_as_leading_term  s    




zexp._eval_as_leading_termc                 K   s0   ddl m} |t| td  ƒt|t| ƒ  S )Nr   )r«   r   )r¬   r«   r   r   )r,   r   Úkwargsr«   r-   r-   r.   Ú_eval_rewrite_as_sin.  s    zexp._eval_rewrite_as_sinc                 K   s0   ddl m} |t| ƒt|t| td  ƒ  S )Nr   )rª   r   )r¬   rª   r   r   )r,   r   rñ   rª   r-   r-   r.   Ú_eval_rewrite_as_cos2  s    zexp._eval_rewrite_as_cosc                 K   s,   ddl m} d||d ƒ d||d ƒ  S )Nr   )Útanhr/   r   )Z%sympy.functions.elementary.hyperbolicrô   )r,   r   rñ   rô   r-   r-   r.   Ú_eval_rewrite_as_tanh6  s    zexp._eval_rewrite_as_tanhc                 K   sl   ddl m}m} |jrh| tt ¡}|rh|jrh|t| ƒ|t| ƒ }}t||ƒsht||ƒsh|t|  S d S )Nr   )r«   rª   )	r¬   r«   rª   r€   r‡   r   r   r›   r[   )r,   r   rñ   r«   rª   r‡   ZcosineZsiner-   r-   r.   Ú_eval_rewrite_as_sqrt:  s    
zexp._eval_rewrite_as_sqrtc                 K   s<   |j r8dd„ |jD ƒ}|r8t|d jd | |d ¡ƒS d S )Nc                 S   s(   g | ] }t |tƒrt|jƒd kr|‘qS )r/   )r[   r1   Úlenr;   )rW   r£   r-   r-   r.   Ú
<listcomp>E  s     
  z,exp._eval_rewrite_as_Pow.<locals>.<listcomp>r   )r€   r;   r   r‡   )r,   r   rñ   Zlogsr-   r-   r.   Ú_eval_rewrite_as_PowC  s    zexp._eval_rewrite_as_Pow)r/   )T)r   )Nr   )r`   ra   rb   rq   r|   rˆ   Úclassmethodr¤   re   rw   Ústaticmethodr   r©   r­   r²   rp   r¼   r¾   r¿   rÛ   râ   rð   rò   ró   rõ   rö   rù   r-   r-   r-   r.   r)   Û   s0   
	
i

 	
/	
	r)   )Ú	metaclassc                 C   sR   | j tdd�\}}|dkr(|jr(||fS | t¡}|rJ|jrJ|jrJ||fS dS dS )a´  
    Try to match expr with $a + Ib$ for real $a$ and $b$.

    ``match_real_imag`` returns a tuple containing the real and imaginary
    parts of expr or ``(None, None)`` if direct matching is not possible. Contrary
    to :func:`~.re`, :func:`~.im``, and ``as_real_imag()``, this helper will not force things
    by returning expressions themselves containing ``re()`` or ``im()`` and it
    does not expand its argument either.

    T©Zas_Addr   )NNN)Úas_independentr   Úis_realrƒ   )ÚexprÚr_Úi_r-   r-   r.   Úmatch_real_imagJ  s    
r  c                   @   sÔ   e Zd ZU dZee ed< ejej	fZ
d+dd„Zd,dd„Zed-d	d
„ƒZdd„ Zee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dd„ Zd d!„ Zd"d#„ Zd$d%„ Zd0d'd(„Zd1d)d*„ZdS )2r1   aÄ  
    The natural logarithm function `\ln(x)` or `\log(x)`.

    Explanation
    ===========

    Logarithms are taken with the natural base, `e`. To get
    a logarithm of a different base ``b``, use ``log(x, b)``,
    which is essentially short-hand for ``log(x)/log(b)``.

    ``log`` represents the principal branch of the natural
    logarithm. As such it has a branch cut along the negative
    real axis and returns values having a complex argument in
    `(-\pi, \pi]`.

    Examples
    ========

    >>> from sympy import log, sqrt, S, I
    >>> log(8, 2)
    3
    >>> log(S(8)/3, 2)
    -log(3)/log(2) + 3
    >>> log(-1 + I*sqrt(3))
    log(2) + 2*I*pi/3

    See Also
    ========

    exp

    r;   r/   c                 C   s$   |dkrd| j d  S t| |ƒ‚dS )z?
        Returns the first derivative of the function.
        r/   r   N)r;   r   r2   r-   r-   r.   r|   …  s    z	log.fdiffc                 C   s   t S )zC
        Returns `e^x`, the inverse function of `\log(x)`.
        )r)   r2   r-   r-   r.   r4   Ž  s    zlog.inverseNc                 C   sÚ  ddl m} ddlm} t|ƒ}|d k	rÆt|ƒ}|dkrL|dkrFtjS tjS zBt||ƒ}|rz|t	|||  ƒt	|ƒ  W S t	|ƒt	|ƒ W S W n t
k
r¢   Y nX |tjk	r¾| |ƒ| |ƒ S | |ƒS |j�r@|jrÚtjS |tjkrêtjS |tjk� rütjS |tjk�rtjS |tjk�r tjS |j�r@|jdk�r@| |jƒ S |j�rf|jtjk�rf|jj�rf|jS t|tƒ�r‚|jj�r‚|jS t|tƒ�rì|jj�rìt|jƒ\}}|�rh|j�rh|dt ; }|tk�rÖ|dt 8 }|t|t dd� S n|t|t ƒ�rt!|jƒS t||ƒ�rR|j"j#�r.|t	|j"ƒt	|j$ƒƒS |j"j�rJ|tjt	|j$ƒƒS tjS nt||ƒ�rh| %| ¡S |j�r®|j&�rŠtt | | ƒ S |tjk�rœtjS |tjk�r®tjS |j�r¼tjS |j'�s<| (t¡}|d k	�r<|tjk�rêtjS |tjk�rütjS |j�r<|j)�r"tt tj* | |ƒ S t t tj* | | ƒ S |j�rÖ|j+�rÖ|j,tdd�\}}	|j&�rv|d	9 }|	d	9 }	t|	dd�}	|	j,td
d�\}}| (t¡}|j-�rÖ|�rÖ|j-�rÖ|j-�rÖ|j�r|j#�rætt tj* | || ƒ S |j&�rÖt t tj* | ||  ƒ S nÈddl.m/}
 ||  0¡ }|  0¡ }t1ƒ }||k�r†|
|t2|	ƒ ƒ}|j#�rl| |ƒt||   S | |ƒt|| t   S nP||k�rÖ|
|t2|	ƒ ƒ}|j#�r¾| |ƒt||    S | |ƒtt||    S d S )Nr   r‰   rŒ   r/   r   F©r¯   rý   r¥   T)Úratsimp)3r�   rŠ   r‘   r�   r   r   r‚   rc   r$   r1   Ú
ValueErrorrx   r“   rH   r6   r”   r�   rM   rš   r¨   rÓ   r°   rw   r)   ro   r[   r›   r  rs   r   r
   r   rf   r   r•   rœ   r–   r—   r7   rZ   rƒ   Úis_nonnegativer†   r½   rþ   rÿ   Zsympy.simplifyr  rï   Ú_log_atan_tabler"   )ry   r   rw   rŠ   r�   r¦   r  r  r‡   Zarg_r  rÌ   Út1Z
atan_tableÚmodulusr-   r-   r.   r¤   ”  sÊ    


 







 


zlog.evalc                 C   s
   | t jfS )zE
        Returns this function in the form (base, exponent).
        )r   r6   r+   r-   r-   r.   r<     s    zlog.as_base_expc                 G   s†   ddl m} | dk rtjS t|ƒ}| dkr.|S |rb|d }|dk	rb||  | | | d  ddd�S dd	| d	   || d   | d  S )
zV
        Returns the next term in the Taylor series expansion of `\log(1+x)`.
        r   rÇ   r¥   Nr/   Tr)   rÎ   r   )rÚ   rÈ   r   r”   r   )r¦   rX   r§   rÈ   r¨   r-   r-   r.   r©     s     zlog.taylor_termTc                 K   sn  ddl m}m} | dd¡}| dd¡}t| jƒdkrLt| j| jŽ ||d�S | jd }|jrÈt	|ƒ}d }	d}
|dk	r†|\}}
|  |¡}	|r´t
|ƒ}|| ¡ kr´td	d
„ | ¡ D ƒƒ}	|	d k	rÄ|
|	 S �nœ|jrât|jƒt|jƒ S |j�ršg }g }|jD ]Œ}|�s|j�s|j�rN|  |¡}t|tƒ�rB| |  |¡jf |Ž¡ n
| |¡ qø|j�rz|  | ¡}| |¡ | tj¡ qø| |¡ qøt|Ž tt|Ž ƒ S |j�s®t|tƒ�r2|�sî|jj�rä|j j�sî|jd j�rä|jd j!�sî|j j�rd|j }|j}|  |¡}t|tƒ�r$t"|ƒ|jf |Ž S t"|ƒ| S n2t||ƒ�rd|�sN|j#j�rd|t|j#ƒf|j$žŽ S |  |¡S )Nr   )rV   rU   ÚforceFÚfactorr   )r¯   r  r/   c                 s   s   | ]\}}|t |ƒ V  qd S r(   r0   )rW   Úvalr¦   r-   r-   r.   rY   =  s     z'log._eval_expand_log.<locals>.<genexpr>)%Zsympy.concreterV   rU   Úgetr÷   r;   r	   r9   Z
is_Integerr%   r&   ÚkeysÚsumÚitemsrš   r1   r¨   rÓ   r€   rœ   rr   r[   rž   Ú_eval_expand_logr7   r   r…   r   r   r°   r)   ro   rw   Úis_nonpositiver   r\   r]   )r,   r¯   r^   rV   rU   r  r  r   r¨   Zlogargr‡   r   ZnonposrX   r£   rS   rT   r-   r-   r.   r  *  sh    




(
ÿÿ
zlog._eval_expand_logc                 K   s~   ddl m}m}m} t| jƒdkr6|| j| jŽ f|ŽS |  || jd f|Ž¡}|d r^||ƒ}||dd�}t|| g|d d�S )	Nr   )r	   ÚsimplifyÚinversecombiner   r4   Tr  Úmeasure)Úkey)r’   r	   r  r  r÷   r;   r9   r•   )r,   rñ   r	   r  r  r   r-   r-   r.   Ú_eval_simplifyc  s    zlog._eval_simplifyc                 K   s~   | j d }|r"| j d j|f|Ž}t|ƒ}||kr<| tjfS t|ƒ}| dd¡rnd|d< t|ƒj|f|Ž|fS t|ƒ|fS dS )a©  
        Returns this function as a complex coordinate.

        Examples
        ========

        >>> from sympy import I, log
        >>> from sympy.abc import x
        >>> log(x).as_real_imag()
        (log(Abs(x)), arg(x))
        >>> log(I).as_real_imag()
        (0, pi/2)
        >>> log(1 + I).as_real_imag()
        (log(sqrt(2)), pi/4)
        >>> log(I*x).as_real_imag()
        (log(Abs(x)), arg(I*x))

        r   r1   FÚcomplexN)r;   r®   r"   r   r”   r   r  r1   )r,   r¯   r^   ZsargZsarg_absZsarg_argr-   r-   r.   r­   n  s    

zlog.as_real_imagc                 C   s\   | j | jŽ }|j | j krR| jd d jr,dS |jd jrXt| jd d jƒrXdS n|jS d S ©Nr   r/   TF)r9   r;   rH   rI   r   ©r,   rJ   r-   r-   r.   rL   Ž  s     zlog._eval_is_rationalc                 C   s\   | j | jŽ }|j | j krR| jd d jr,dS t| jd d jƒrX| jd jrXdS n|jS d S r  )r9   r;   rH   r   r½   r  r-   r-   r.   r¾   ˜  s    zlog._eval_is_algebraicc                 C   s   | j d jS rg   ©r;   rD   r+   r-   r-   r.   rp   £  s    zlog._eval_is_extended_realc                 C   s   | j d }t|jt|jƒgƒS rg   )r;   r   r¹   r   rH   )r,   rK   r-   r-   r.   r¼   ¦  s    
zlog._eval_is_complexc                 C   s   | j d }|jrdS |jS ©Nr   F)r;   rH   rE   rF   r-   r-   r.   rG   ª  s    
zlog._eval_is_finitec                 C   s   | j d d jS ©Nr   r/   r  r+   r-   r-   r.   r¿   °  s    zlog._eval_is_extended_positivec                 C   s   | j d d jS r  )r;   rH   r+   r-   r-   r.   rN   ³  s    zlog._eval_is_zeroc                 C   s   | j d d jS r  )r;   Zis_extended_nonnegativer+   r-   r-   r.   Ú_eval_is_extended_nonnegative¶  s    z!log._eval_is_extended_nonnegativer   c           $         s¢  ddl m} ddlm} ddlm} | jd |krF|d krBt|ƒS |S | jd }|ddd�}	|dkrhd}| |||	 ¡}
t	d	ƒt	d
ƒ }}|
 
||	|  ¡}|d k	�r|| ||  }}|dk�r| |	¡�s| |	¡�s|d krî|t|ƒ n|| }|t|ƒ|t|ƒ  7 }|S dd„ }z|
j|	|dd�\}}W n  tttfk
�rÒ   |
j|	ˆ |dd�}|j�r‚ˆ d7 ‰ |
j|	ˆ |dd�}�q\z| ¡ j|	dd�\}}W n0 tk
�rÌ   | ¡ j|	dd�tj }}Y nX Y nX |
||	|   d j|	ˆ |dd�}| t¡�r
||ƒ}t||ƒ�r| ¡ ‰ |||	ƒ\}}|d k�r>t|ƒn|}|j�søt|ƒ|t|ƒ  ||  }|}ddddddddddœ	}| jf |Ž}| ¡ �sÀ| ¡ �rÀ| | t|ƒ ¡jf |Ž}n| |t|ƒ¡jf |Ž}||k�ræ|S |||ˆ  |ƒ S ‡ fdd„}i }t | ¡ ¡D ]*}|||	ƒ\}}| |tj¡| ||< �qtj}i }|}|| ˆ k �r¸tj |  | } |D ],}!| |!tj¡| ||!   }| !¡ ||!< �qr|||ƒ}|tj7 }�qPt|ƒ|t|ƒ  ||  }|D ]}!|||! |	|!  7 }�qØ|j"�r€t#|
ƒdk�r€ddl$m%}" t&|
 '|	¡ƒD ]"\}#}|j(�r>|#dk�r$ �qH�q$|#dk �r€| )|	¡\} }|dt* t+ |"t#| ƒ dƒ 7 }| |	|| ¡}|||ˆ  |ƒ S )Nr   rÅ   rŽ   )r   rÌ   T©Zpositiver/   Úkrí   c              	   S   s‚   t jt j }}t | ¡D ]`}| |¡rp| ¡ \}}||krxz|  |¡W   S  tk
rl   | t jf Y   S X q||9 }q||fS r(   )	r   r6   r”   r   r�   Úhasr<   Úleadtermr  )r    rX   r‡   r)   r  rw   r-   r-   r.   Ú	coeff_expÑ  s    

z$log._eval_nseries.<locals>.coeff_exp©rÊ   rå   )r¦   rÊ   rå   )rå   F)	r¯   r1   ÚmulZ	power_expZ
power_baseZmultinomialÚbasicr  r  c                    sN   i }t | |ƒD ]:\}}|| }|ˆ k r| |tj¡| | ||   ||< q|S r(   )r   r  r   r”   )Zd1Zd2rn   Úe1Úe2Úexrê   r-   r.   r&    s    $zlog._eval_nseries.<locals>.mul©Ú	Heavisideé   éþÿÿÿ),rÙ   rÆ   r’   r�   Úsympy.core.symbolr   r;   r1   rã   r   Úmatchr"  r#  r  rá   r   rÛ   rÜ   rÝ   rß   r   r”   r)   r[   rà   rœ   r®   r8   r   r�   r  r6   r…   Z	nsimplifyr7   r    Ú'sympy.functions.special.delta_functionsr,  Ú	enumerateÚlseriesrÿ   Úas_coeff_exponentr   r   )$r,   rX   r¦   rÊ   rå   rÆ   r�   r   r   rÌ   rK   r!  rí   rè   r$  r£   rS   rJ   r¨   Ú_Údrn   Z_resZlogflagsr   r&  Zptermsr    Zco1r(  rŸ   Úpkr‡   r*  r,  rl   r-   rê   r.   rÛ   ¹  s¨    

"&"   þ
ÿ



 zlog._eval_nseriesc                 C   s   | j d  ¡ }tddd�}|dkr&d}| ||| ¡}z|j||dd�\}}W n, tk
rz   |j|||d�}	t|	ƒ Y S X | |¡r²| ||| ¡}|dkrªt	d|  ƒ‚t|ƒS |t
jkrÚ|t
jkrÚ|t
j j||d�S t|ƒ|t|ƒ  }
|d k�r t|ƒn|}|
|| 7 }
|j�rœt|ƒdk�rœdd	lm} t| |¡ƒD ]"\}}|j�rZ|d
k�r@ �qd�q@|d
k �rœ| |¡\}}|
dt t |t|ƒ dƒ 7 }
|
S )Nr   rÌ   Tr   r/   r%  rË   rÍ   r+  r-  r.  )r;   Ztogetherr   rã   r#  r  rß   r1   r"  r   r   r6   r”   r7   r    r1  r,  r2  r3  rÿ   r4  r   r   )r,   rX   rÊ   rå   ræ   rÌ   rK   ÚcrT   r   rn   r,  rl   r    r‡   r5  r-   r-   r.   rð   .  s:    


 zlog._eval_as_leading_term)r/   )r/   )N)T)T)r   )Nr   ) r`   ra   rb   rq   ÚtTupler   Ú__annotations__r   r”   rc   rd   r|   r4   rú   r¤   r<   rû   r   r©   r  r  r­   rL   r¾   rp   r¼   rG   r¿   rN   r  rÛ   rð   r-   r-   r-   r.   r1   _  s0   
!
	
}
9
 

ur1   c                       s|   e Zd ZdZeejddd� ejfZe	ddd„ƒZ
dd	d
„Zdd„ Zdd„ Zdd„ Zddd„Zd‡ fdd„	Zdd„ Z‡  ZS )ÚLambertWaù  
    The Lambert W function $W(z)$ is defined as the inverse
    function of $w \exp(w)$ [1]_.

    Explanation
    ===========

    In other words, the value of $W(z)$ is such that $z = W(z) \exp(W(z))$
    for any complex number $z$.  The Lambert W function is a multivalued
    function with infinitely many branches $W_k(z)$, indexed by
    $k \in \mathbb{Z}$.  Each branch gives a different solution $w$
    of the equation $z = w \exp(w)$.

    The Lambert W function has two partially real branches: the
    principal branch ($k = 0$) is real for real $z > -1/e$, and the
    $k = -1$ branch is real for $-1/e < z < 0$. All branches except
    $k = 0$ have a logarithmic singularity at $z = 0$.

    Examples
    ========

    >>> from sympy import LambertW
    >>> LambertW(1.2)
    0.635564016364870
    >>> LambertW(1.2, -1).n()
    -1.34747534407696 - 4.41624341514535*I
    >>> LambertW(-1).is_real
    False

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Lambert_W_function
    r¥   FrO   Nc                 C   sB  |t jkr| |ƒS |d kr t j}|jrÌ|jr2t jS |t jkrBt jS |dt j krVt jS |tdƒ d krrtdƒ S |dtdƒ krŠtdƒS |t d kr¤tt d S |t	dt j ƒkr¼t jS |t j
krÌt j
S t|jƒrâ|jrât jS |t jk�r>|t d k�rt t d S |dt j k�r"t jS |dt	dƒ k�r>tdƒ S d S )Nr¥   r   r/   r.  )r   r”   rH   rx   r6   r…   r1   r   r   r)   r�   r   rM   r   )ry   rX   r!  r-   r-   r.   r¤   €  s>    




zLambertW.evalr/   c                 C   sv   | j d }t| j ƒdkr:|dkrht|ƒ|dt|ƒ   S n.| j d }|dkrht||ƒ|dt||ƒ   S t| |ƒ‚dS )z?
        Return the first derivative of this function.
        r   r/   N)r;   r÷   r;  r   )r,   r3   rX   r!  r-   r-   r.   r|   ¤  s    

zLambertW.fdiffc                 C   sÀ   | j d }t| j ƒdkr tj}n
| j d }|jrZ|dtj  jrDdS |dtj  jr¼dS nb|d jrš|jr~|dtj  jr~dS |js”|dtj  j	r¼dS n"t
|jƒr¼t
|d jƒr¼|jr¼dS d S r  )r;   r÷   r   r”   rH   rx   rœ   r  r7   r  r   ro   )r,   rX   r!  r-   r-   r.   rp   ´  s"    


zLambertW._eval_is_extended_realc                 C   s   | j d jS rg   )r;   rE   r+   r-   r-   r.   rG   È  s    zLambertW._eval_is_finitec                 C   sD   | j | jŽ }|j | j kr:t| jd jƒr@| jd jr@dS n|jS d S r  )r9   r;   r   rH   r½   r  r-   r-   r.   r¾   Ë  s
    zLambertW._eval_is_algebraicr   c                 C   sF   t | jƒdkrB| jd }| |d¡ ¡ }|js8|  |¡S | |¡S d S )Nr/   r   )r÷   r;   rã   rï   rH   r9   rß   )r,   rX   rÊ   rå   r   ræ   r-   r-   r.   rð   Ó  s    

zLambertW._eval_as_leading_termc           
         sÀ   t | jƒdkr°ddlm} ddlm} | jd j|||d�‰ ˆ j||d�}d}|jrZ|j	}||| ƒdkr˜t
‡ fdd„td||| ƒƒD ƒŽ }	t|	ƒ}	ntj}	|	||| |ƒ S tƒ  |||¡S )	Nr/   r   rÂ   rÅ   rÉ   rÍ   c                    s@   g | ]8}t j |d   t|ƒ|d   t|d  ƒ ˆ |  ‘qS )r/   r   )r   r6   r   r   )rW   r!  rº   r-   r.   rø   å  s   ÿ
ÿÿz*LambertW._eval_nseries.<locals>.<listcomp>)r÷   r;   rØ   rÃ   rÙ   rÆ   rì   rß   r°   r)   r   rë   r   r   r”   ÚsuperrÛ   )
r,   rX   r¦   rÊ   rå   rÃ   rÆ   ÚltZlterJ   ©ru   rº   r.   rÛ   Û  s     ÿ
zLambertW._eval_nseriesc                 C   s8   | j d }t| j ƒdkr|jS t|j| j d jgƒS d S r  )r;   r÷   rH   r   )r,   rX   r-   r-   r.   rN   î  s    
zLambertW._eval_is_zero)N)r/   )Nr   )r   )r`   ra   rb   rq   r   r   rx   rc   rd   rú   r¤   r|   rp   rG   r¾   rð   rÛ   rN   Ú__classcell__r-   r-   r>  r.   r;  [  s   "#

r;  c                )   C   s"  t dƒtd dtd t ddt dƒ  ƒtd t dƒt dt dƒ ƒ dt dƒ  td t ddt dƒ  ƒttddƒ t dƒt t dƒd ƒ dt dƒ  ttddƒ t dƒd td t dƒd td t dt dƒ ƒt t dƒd ƒ td t dƒd ttddƒ t t dƒd ƒt dt dƒ ƒ ttddƒ t ddt dƒ d  ƒtd	 t dƒ t d	ƒ dt t dƒd ƒ  td	 t ddt dƒ d  ƒttdd	ƒ t dƒt d	ƒ dt dt dƒ ƒ  ttdd	ƒ dt dƒ td
 dt dƒ dt dƒ  td
 dt dƒ ttdd
ƒ dt dƒ dt dƒ  ttdd
ƒ iS )NrÐ   r/   rÑ   r-  r   r¥   rÒ   é   é
   é   )r#   r   r   r-   r-   r-   r.   r  ö  sN       "  " 
 
  
   $  " 
  
  ìr  N)AÚ	itertoolsr   Útypingr   r9  Zsympy.core.addr   Zsympy.core.cacher   Zsympy.core.exprr   Zsympy.core.functionr   r   r	   r
   r   r   r   r   Zsympy.core.logicr   r   r   Zsympy.core.mulr   Zsympy.core.numbersr   r   r   r   Zsympy.core.parametersr   Zsympy.core.powerr   Zsympy.core.singletonr   r/  r   r   Zsympy.core.sympifyr   Z(sympy.functions.combinatorial.factorialsr   r×   r   r   r    r!   r"   Z(sympy.functions.elementary.miscellaneousr#   Zsympy.ntheoryr$   r%   Zsympy.ntheory.factor_r&   r'   rf   rt   r)   r  r1   r;  r  r-   r-   r-   r.   Ú<module>   sD   (hI  q      