
    Xh                       d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ 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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! d dl"m#Z#  G d de          Z$ G d de          Z% G d de          Z& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d de          Z, G d de          Z-d  Z. G d! d"e          Z/d*d$Z0d+d&Z1d*d'Z2d,d)Z3d(S )-    )annotations)SAddMulsympifySymbolDummyBasic)Expr)factor_terms)DefinedFunction
DerivativeArgumentIndexErrorAppliedUndef
expand_mul	PoleError)	fuzzy_notfuzzy_or)piIoo)Pow)Eq)sqrt)	Piecewisec                  l    e Zd ZU dZded<   dZdZdZed             Z	ddZ
d Zd Zd	 Zd
 Zd Zd ZdS )rea  
    Returns real part of expression. This function performs only
    elementary analysis and so it will fail to decompose properly
    more complicated expressions. If completely simplified result
    is needed then use ``Basic.as_real_imag()`` or perform complex
    expansion on instance of this function.

    Examples
    ========

    >>> from sympy import re, im, I, E, symbols
    >>> x, y = symbols('x y', real=True)
    >>> re(2*E)
    2*E
    >>> re(2*I + 17)
    17
    >>> re(2*I)
    0
    >>> re(im(x) + x*I + 2)
    2
    >>> re(5 + I + 2)
    7

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    Returns
    =======

    expr : Expr
        Real part of expression.

    See Also
    ========

    im
    tuple[Expr]argsTc                   |t           j        u rt           j        S |t           j        u rt           j        S |j        r|S |j        st
          |z  j        rt           j        S |j        r|                                d         S |j	        r/t          |t                    rt          |j        d                   S g g g }}}t          j        |          }|D ]}|                    t
                    }||j        s|                    |           ;|                    t
                    s|j        r|                    |           r|                    |          }|r|                    |d                    |                    |           t'          |          t'          |          k    r1d |||fD             \  }	}
} | |	          t)          |
          z
  |z   S d S )Nr   ignorec              3  (   K   | ]}t          | V  d S Nr   .0xss     v/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/functions/elementary/complexes.py	<genexpr>zre.eval.<locals>.<genexpr>i   &      MM38MMMMMM    )r   NaNComplexInfinityis_extended_realis_imaginaryr   Zero	is_Matrixas_real_imagis_Function
isinstance	conjugater   r   r   	make_argsas_coefficientappendhaslenimclsargincludedrevertedexcludedr   termcoeff	real_imagabcs               r)   evalzre.evalD   s   !%<<5LA%%%5L! !	*J 	*!C%!9 	*6M] 	*##%%a((_ 	*C!;!; 	*chqk??" ,.r2hH=%%D . .++A..$ 1 / ...! 
.)> 
.OOD))))
 !% 1 1 1 = =I  . 	!5555 ----4yyCMM))MMx8.LMMM1as1vv1~)) *)r,   c                    | t           j        fS )zF
        Returns the real number with a zero imaginary part.

        r   r1   selfdeephintss      r)   r3   zre.as_real_imagm       
 af~r,   c                $   |j         s| j        d         j         r*t          t          | j        d         |d                    S |j        s| j        d         j        r3t
           t          t          | j        d         |d                    z  S d S Nr   Tevaluate)r/   r   r   r   r0   r   r<   rM   xs     r)   _eval_derivativezre._eval_derivativet        	B1!> 	Bj1q4@@@AAA> 	ATYq\6 	A2Z	!a$???@@A A	A 	Ar,   c                b    | j         d         t          t          | j         d                   z  z
  S Nr   )r   r   r<   rM   r?   kwargss      r)   _eval_rewrite_as_imzre._eval_rewrite_as_im{   s&    y|a49Q< 0 0000r,   c                &    | j         d         j        S rZ   r   is_algebraicrM   s    r)   _eval_is_algebraiczre._eval_is_algebraic~       y|((r,   c                d    t          | j        d         j        | j        d         j        g          S rZ   )r   r   r0   is_zerora   s    r)   _eval_is_zerozre._eval_is_zero   s'    12DIaL4HIJJJr,   c                .    | j         d         j        rdS d S Nr   Tr   	is_finitera   s    r)   _eval_is_finitezre._eval_is_finite   "    9Q<! 	4	 	r,   c                .    | j         d         j        rdS d S rh   ri   ra   s    r)   _eval_is_complexzre._eval_is_complex   rl   r,   NT)__name__
__module____qualname____doc____annotations__r/   
unbranched_singularitiesclassmethodrI   r3   rW   r]   rb   rf   rk   rn    r,   r)   r   r      s         ' 'R JN&* &* [&*P   A A A1 1 1) ) )K K K      r,   r   c                  l    e Zd ZU dZded<   dZdZdZed             Z	ddZ
d Zd Zd	 Zd
 Zd Zd ZdS )r<   a  
    Returns imaginary part of expression. This function performs only
    elementary analysis and so it will fail to decompose properly more
    complicated expressions. If completely simplified result is needed then
    use ``Basic.as_real_imag()`` or perform complex expansion on instance of
    this function.

    Examples
    ========

    >>> from sympy import re, im, E, I
    >>> from sympy.abc import x, y
    >>> im(2*E)
    0
    >>> im(2*I + 17)
    2
    >>> im(x*I)
    re(x)
    >>> im(re(x) + y)
    im(y)
    >>> im(2 + 3*I)
    3

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    Returns
    =======

    expr : Expr
        Imaginary part of expression.

    See Also
    ========

    re
    r   r   Tc                   |t           j        u rt           j        S |t           j        u rt           j        S |j        rt           j        S |j        st          |z  j        rt           |z  S |j        r|                                d         S |j	        r0t          |t                    rt          |j        d                    S g g g }}}t          j        |          }|D ]}|                    t                    }|3|j        s|                    |           ;|                    |           Q|                    t                    s|j        sI|                    |          }|r|                    |d                    |                    |           t'          |          t'          |          k    r1d |||fD             \  }	}
} | |	          t)          |
          z   |z   S d S )N   r   r!   c              3  (   K   | ]}t          | V  d S r$   r%   r&   s     r)   r*   zim.eval.<locals>.<genexpr>   r+   r,   )r   r-   r.   r/   r1   r0   r   r2   r3   r4   r5   r6   r<   r   r   r7   r8   r9   r:   r;   r   r=   s               r)   rI   zim.eval   s   !%<<5LA%%%5L!  	*6M 	*!C%!9 	*28O] 	*##%%a((_ 	*C!;!; 	*sx{OO##+-r2hH=%%D . .++A..$ 1 / .... ....XXa[[ .(= . !% 1 1 1 = =I  . 	!5555 ---4yyCMM))MMx8.LMMM1as1vv1~)) *)r,   c                    | t           j        fS )zC
        Return the imaginary part with a zero real part.

        rK   rL   s      r)   r3   zim.as_real_imag   rP   r,   c                $   |j         s| j        d         j         r*t          t          | j        d         |d                    S |j        s| j        d         j        r3t
           t          t          | j        d         |d                    z  S d S rR   )r/   r   r<   r   r0   r   r   rU   s     r)   rW   zim._eval_derivative   rX   r,   c                d    t            | j        d         t          | j        d                   z
  z  S rZ   )r   r   r   r[   s      r)   _eval_rewrite_as_rezim._eval_rewrite_as_re   s(    r49Q<"TYq\"2"2233r,   c                &    | j         d         j        S rZ   r_   ra   s    r)   rb   zim._eval_is_algebraic   rc   r,   c                &    | j         d         j        S rZ   r   r/   ra   s    r)   rf   zim._eval_is_zero       y|,,r,   c                .    | j         d         j        rdS d S rh   ri   ra   s    r)   rk   zim._eval_is_finite   rl   r,   c                .    | j         d         j        rdS d S rh   ri   ra   s    r)   rn   zim._eval_is_complex  rl   r,   Nro   )rp   rq   rr   rs   rt   r/   ru   rv   rw   rI   r3   rW   r   rb   rf   rk   rn   rx   r,   r)   r<   r<      s         ' 'R JN%* %* [%*N   A A A4 4 4) ) )- - -      r,   r<   c                       e Zd ZdZdZdZ fdZed             Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd ZddZd Zd Zd Zd Z xZS )signa  
    Returns the complex sign of an expression:

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

    If the expression is real the sign will be:

        * $1$ if expression is positive
        * $0$ if expression is equal to zero
        * $-1$ if expression is negative

    If the expression is imaginary the sign will be:

        * $I$ if im(expression) is positive
        * $-I$ if im(expression) is negative

    Otherwise an unevaluated expression will be returned. When evaluated, the
    result (in general) will be ``cos(arg(expr)) + I*sin(arg(expr))``.

    Examples
    ========

    >>> from sympy import sign, I

    >>> sign(-1)
    -1
    >>> sign(0)
    0
    >>> sign(-3*I)
    -I
    >>> sign(1 + I)
    sign(1 + I)
    >>> _.evalf()
    0.707106781186548 + 0.707106781186548*I

    Parameters
    ==========

    arg : Expr
        Real or imaginary expression.

    Returns
    =======

    expr : Expr
        Complex sign of expression.

    See Also
    ========

    Abs, conjugate
    Tc                    t                                                      }|| k    r<| j        d         j        du r(| j        d         t	          | j        d                   z  S |S )Nr   F)superdoitr   re   Abs)rM   rO   s	__class__s      r)   r   z	sign.doitC  sT    GGLLNN991-669Q<#dil"3"333r,   c                `   |j         r|                                \  }}g }t          |          }|D ]r}|j        r| }|j        r|j        rAt          |          }|j        r|t          z  }|j        r| }G|	                    |           ]|	                    |           s|t          j        u r"t          |          t          |          k    rd S | |  |j        |           z  S |t          j        u rt          j        S |j        rt          j        S |j        rt          j        S |j        rt          j        S |j        rt'          |t                    r|S |j        rI|j        r|j        t          j        u rt          S t           |z  }|j        rt          S |j        r
t           S d S d S r$   )is_Mulas_coeff_mulr   is_extended_negativeis_extended_positiver0   r<   is_comparabler   r9   r   Oner;   _new_rawargsr-   re   r1   NegativeOner4   r5   is_PowexpHalf)	r>   r?   rH   r   unkr   rF   aiarg2s	            r)   rI   z	sign.evalI  s    : 	3&&((GAtCQA & &) &AA+ &~ &UU+ *FA!6 ' &'BJJqMMMM

1AEzzc#hh#d))33tss+3+S12222!%<<5L; 	6M# 	5L# 	!= ? 	#t$$ 
 		z cg// 28D( ( r			 		 r,   c                \    t          | j        d         j                  rt          j        S d S rZ   )r   r   re   r   r   ra   s    r)   	_eval_Abszsign._eval_Abs{  s,    TYq\)** 	5L	 	r,   c                P    t          t          | j        d                             S rZ   )r   r6   r   ra   s    r)   _eval_conjugatezsign._eval_conjugate  s    Idil++,,,r,   c                T   | j         d         j        r=ddlm} dt	          | j         d         |d          z   || j         d                   z  S | j         d         j        rFddlm} dt	          | j         d         |d          z   |t           | j         d         z            z  S d S )Nr   )
DiracDelta   TrS   )r   r/   'sympy.functions.special.delta_functionsr   r   r0   r   )rM   rV   r   s      r)   rW   zsign._eval_derivative  s    9Q<( 	0JJJJJJz$)A,DAAAA*TYq\**+ +Yq\& 	0JJJJJJz$)A,DAAAA*aR$)A,.//0 0	0 	0r,   c                .    | j         d         j        rdS d S rh   )r   is_nonnegativera   s    r)   _eval_is_nonnegativezsign._eval_is_nonnegative  "    9Q<& 	4	 	r,   c                .    | j         d         j        rdS d S rh   )r   is_nonpositivera   s    r)   _eval_is_nonpositivezsign._eval_is_nonpositive  r   r,   c                &    | j         d         j        S rZ   )r   r0   ra   s    r)   _eval_is_imaginaryzsign._eval_is_imaginary  rc   r,   c                &    | j         d         j        S rZ   r   ra   s    r)   _eval_is_integerzsign._eval_is_integer  r   r,   c                &    | j         d         j        S rZ   )r   re   ra   s    r)   rf   zsign._eval_is_zero  s    y|##r,   c                    t          | j        d         j                  r|j        r|j        rt
          j        S d S d S d S rZ   )r   r   re   
is_integeris_evenr   r   )rM   others     r)   _eval_powerzsign._eval_power  sY    dil*++		 M	
 5L	 	 	 	 	 	r,   r   c                   | j         d         }|                    |d          }|dk    r|                     |          S |dk    r|                    ||          }t	          |          dk     rt
          j         nt
          j        S rZ   )r   subsfuncdirr   r   r   )rM   rV   nlogxcdirarg0x0s          r)   _eval_nserieszsign._eval_nseries  sq    y|YYq!__7799R== 19988At$$DDAvv150r,   c                N    |j         rt          d|dk    fd|dk     fd          S d S )Nr{   r   )r   T)r/   r   r[   s      r)   _eval_rewrite_as_Piecewisezsign._eval_rewrite_as_Piecewise  s<     	Eaq\Ba=)DDD	E 	Er,   c                B    ddl m} |j        r ||          dz  dz
  S d S )Nr   	Heavisider   r{   r   r   r/   rM   r?   r\   r   s       r)   _eval_rewrite_as_Heavisidezsign._eval_rewrite_as_Heaviside  sA    EEEEEE 	*9S>>A%))	* 	*r,   c                f    t          dt          |d          f|t          |          z  df          S rh   )r   r   r   r[   s      r)   _eval_rewrite_as_Abszsign._eval_rewrite_as_Abs  s-    !RQZZ3S>4*@AAAr,   c                \    |                      t          | j        d                             S rZ   )r   r   r   )rM   r\   s     r)   _eval_simplifyzsign._eval_simplify  s"    yydil33444r,   r   )rp   rq   rr   rs   
is_complexrv   r   rw   rI   r   r   rW   r   r   r   r   rf   r   r   r   r   r   r   __classcell__)r   s   @r)   r   r   	  sH       4 4l JN     / / [/b  - - -0 0 0    ) ) )- - -$ $ $  1 1 1 1E E E* * *
B B B5 5 5 5 5 5 5r,   r   c                      e Zd ZU dZded<   dZdZdZdZdZ	ddZ
ed             Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd ZdS )r   ab  
    Return the absolute value of the argument.

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

    This is an extension of the built-in function ``abs()`` to accept symbolic
    values.  If you pass a SymPy expression to the built-in ``abs()``, it will
    pass it automatically to ``Abs()``.

    Examples
    ========

    >>> from sympy import Abs, Symbol, S, I
    >>> Abs(-1)
    1
    >>> x = Symbol('x', real=True)
    >>> Abs(-x)
    Abs(x)
    >>> Abs(x**2)
    x**2
    >>> abs(-x) # The Python built-in
    Abs(x)
    >>> Abs(3*x + 2*I)
    sqrt(9*x**2 + 4)
    >>> Abs(8*I)
    8

    Note that the Python built-in will return either an Expr or int depending on
    the argument::

        >>> type(abs(-1))
        <... 'int'>
        >>> type(abs(S.NegativeOne))
        <class 'sympy.core.numbers.One'>

    Abs will always return a SymPy object.

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    Returns
    =======

    expr : Expr
        Absolute value returned can be an expression or integer depending on
        input arg.

    See Also
    ========

    sign, conjugate
    r   r   TFr{   c                b    |dk    rt          | j        d                   S t          | |          )zE
        Get the first derivative of the argument to Abs().

        r{   r   )r   r   r   )rM   argindexs     r)   fdiffz	Abs.fdiff   s1    
 q==	!%%%$T8444r,   c                6
   ddl m} t          d          r                                }||S t	          t
                    st          dt                    z             |d                                          \  }}|j	        r|j	        s | |           | |          z  S j
        rg }g }j        D ]}|j        rw|j        j        rk|j        j        r_ | |j                  }	t	          |	|           r|                    |           W|                    t%          |	|j                              | |          }
t	          |
|           r|                    |           |                    |
           t'          | }|r | t'          | d          nt(          j        }||z  S t(          j        u rt(          j        S t(          j        u rt0          S ddlm}m} j        r                                \  }}|j        r|j        r5|j        rS |t(          j        u rt(          j        S t?          |          |z  S |j         r|tC          |          z  S |j"        r5| tC          |          z   |tF           tI          |          z            z  S d S |%                    tL                    sH ||          '                                \  }}|tP          |z  z   } |tC          ||z                      S t	          |          r# |tC          j        d                             S t	          tR                    rj*        rS j        r S d S j+        rW%                    t0          t(          j,                  r2t[          d '                                D                       rt0          S j.        rt(          j/        S j         rS j0        r S j1        rtP           z  }|j         r|S j        rd S  |2                                d          3                    td                    3                    td                    z
  }|rti          fd	|D                       rd S k    r k    r3                    t>                    }5                    d
 |D                       }d |j	        D             }|rti          fd|D                       s#tm          to          z                      S d S d S d S )Nr   )signsimpr   zBad argument type for Abs(): %sFrS   )r   logc              3  $   K   | ]}|j         V  d S r$   )is_infiniter'   rF   s     r)   r*   zAbs.eval.<locals>.<genexpr>P  s$      ==Q1=======r,   c              3  X   K   | ]$}                     |j        d                    V  %dS )r   N)r:   r   )r'   ir?   s     r)   r*   zAbs.eval.<locals>.<genexpr>b  s5      AA1CGGAF1I..AAAAAAr,   c                0    i | ]}|t          d           S )T)real)r	   r'   r   s     r)   
<dictcomp>zAbs.eval.<locals>.<dictcomp>f  s%    (M(M(MEt,<,<,<(M(M(Mr,   c                     g | ]}|j         	|S r$   )r/   r   s     r)   
<listcomp>zAbs.eval.<locals>.<listcomp>g  s     VVV1;M;U1;U;U;Ur,   c              3  \   K   | ]&}                     t          |                    V  'd S r$   )r:   r6   )r'   uconjs     r)   r*   zAbs.eval.<locals>.<genexpr>h  s5      !F!FQ$((9Q<<"8"8!F!F!F!F!F!Fr,   )8sympy.simplify.simplifyr   hasattrr   r5   r   	TypeErrortypeas_numer_denomfree_symbolsr   r   r   r   r   is_negativebaser9   r   r   r   r   r-   r.   r   &sympy.functions.elementary.exponentialr   as_base_expr/   r   r   r   is_extended_nonnegativer   r   r   r<   r:   r   r3   r   r   is_positiveis_AddNegativeInfinityanyre   r1   is_extended_nonpositiver0   r6   atomsallxreplacer   r   )r>   r?   r   objr   dknownr   tbnewtnewr   r   r   exponentrF   rG   zr   new_conjr"   abs_free_argr   s    `                    @r)   rI   zAbs.eval
  sw   4444443$$ 	--//C
#t$$ 	K=S		IJJJ hsU+++!!##1> 	!!. 	!3q66##a&&= : 	ECX + +8 + 0 +QU5F +3qv;;D!$,, 7

1Squ%5%566663q66D!$,, +

1T****KE47B##c3i%0000QUC9!%<<5L!###ICCCCCCCC: 	+ __..ND($ +& /' #"
q},, ut99h../ .H--, G!EBxLL0bSH5E1F1FFFXXf%% +s4yy--//1!Gs2hqj>>***c3 	(3r#(1+'''c<(( 	 
 tF: 	#''"a&899 	==#*:*:*<*<===== 	; 	6M& 	J& 	4K 	28D+  	F x%888::i((399Y+?+?? 	AAAAAAAAA 	F$;;34%<<YYs^^F<<(M(Mf(M(M(MNNLVVl7VVVC 2c!F!F!F!F#!F!F!FFF 2Js4x00111 ;<<2 2r,   c                .    | j         d         j        rdS d S rh   ri   ra   s    r)   _eval_is_realzAbs._eval_is_realk  rl   r,   c                N    | j         d         j        r| j         d         j        S d S rZ   )r   r/   r   ra   s    r)   r   zAbs._eval_is_integero  s,    9Q<( 	+9Q<**	+ 	+r,   c                @    t          | j        d         j                  S rZ   r   _argsre   ra   s    r)   _eval_is_extended_nonzerozAbs._eval_is_extended_nonzeros      A.///r,   c                &    | j         d         j        S rZ   )r  re   ra   s    r)   rf   zAbs._eval_is_zerov  s    z!}$$r,   c                @    t          | j        d         j                  S rZ   r  ra   s    r)   _eval_is_extended_positivezAbs._eval_is_extended_positivey  r
  r,   c                N    | j         d         j        r| j         d         j        S d S rZ   )r   r/   is_rationalra   s    r)   _eval_is_rationalzAbs._eval_is_rational|  s,    9Q<( 	,9Q<++	, 	,r,   c                N    | j         d         j        r| j         d         j        S d S rZ   )r   r/   r   ra   s    r)   _eval_is_evenzAbs._eval_is_even  s,    9Q<( 	(9Q<''	( 	(r,   c                N    | j         d         j        r| j         d         j        S d S rZ   )r   r/   is_oddra   s    r)   _eval_is_oddzAbs._eval_is_odd  s,    9Q<( 	'9Q<&&	' 	'r,   c                &    | j         d         j        S rZ   r_   ra   s    r)   rb   zAbs._eval_is_algebraic  rc   r,   c                    | j         d         j        rI|j        rB|j        r| j         d         |z  S |t          j        ur|j        r| j         d         |dz
  z  | z  S d S )Nr   r{   )r   r/   r   r   r   r   
is_Integer)rM   r   s     r)   r   zAbs._eval_power  sm    9Q<( 	9X-@ 	9 9y|X--..83F.y|hl3D88r,   r   c                b   ddl m} | j        d                             |          d         }|                     ||                    r|                     ||          |          }| j        d                             |||          }t          |          |z                                  S )Nr   )r   )r   r   )	r   r   r   leadtermr:   r   r   r   expand)rM   rV   r   r   r   r   	directionr   s           r)   r   zAbs._eval_nseries  s    >>>>>>IaL))!,,Q/	==Q   	5!ss1vvt44IIaL&&qAD&99Y!))+++r,   c                T   | j         d         j        s| j         d         j        rEt          | j         d         |d          t	          t          | j         d                             z  S t          | j         d                   t          t          | j         d                   |d          z  t          | j         d                   t          t          | j         d                   |d          z  z   t          | j         d                   z  }|	                    t                    S rR   )
r   r/   r0   r   r   r6   r   r<   r   rewrite)rM   rV   rvs      r)   rW   zAbs._eval_derivative  s   9Q<( 	0DIaL,E 	0dilA===y1..//0 01Bty|,<,<a" " " 	!--
2dil;K;KD1" 1" 1" ""%(1%6%67 zz$r,   c                V    ddl m} |j        r| ||           ||           z
  z  S d S )Nr   r   r   r   s       r)   r   zAbs._eval_rewrite_as_Heaviside  sN     	FEEEEE 	:		#C4899	: 	:r,   c                    |j         rt          ||dk    f| df          S |j        r1t          t          |z  t          |z  dk    ft           |z  df          S d S rh   )r/   r   r0   r   r[   s      r)   r   zAbs._eval_rewrite_as_Piecewise  so     	Bc3!8_tTl;;; 	BaeQsUaZ0A2c64.AAA	B 	Br,   c                &    |t          |          z  S r$   r   r[   s      r)   _eval_rewrite_as_signzAbs._eval_rewrite_as_sign  s    499}r,   c                @    t          |t          |          z            S r$   )r   r6   r[   s      r)   _eval_rewrite_as_conjugatezAbs._eval_rewrite_as_conjugate  s    C	#&'''r,   N)r{   r   )rp   rq   rr   rs   rt   r/   r   r   ru   rv   r   rw   rI   r  r   r	  rf   r  r  r  r  rb   r   r   rW   r   r   r$  r&  rx   r,   r)   r   r     sv        7 7r  "JN5 5 5 5 ^2 ^2 [^2@  + + +0 0 0% % %0 0 0, , ,( ( (' ' ') ) )  , , , ,     : : :B B B  ( ( ( ( (r,   r   c                  R    e Zd ZdZdZdZdZdZed             Z	d Z
d Zd Zd
dZd	S )r?   a  
    Returns the argument (in radians) of a complex number. The argument is
    evaluated in consistent convention with ``atan2`` where the branch-cut is
    taken along the negative real axis and ``arg(z)`` is in the interval
    $(-\pi,\pi]$. For a positive number, the argument is always 0; the
    argument of a negative number is $\pi$; and the argument of 0
    is undefined and returns ``nan``. So the ``arg`` function will never nest
    greater than 3 levels since at the 4th application, the result must be
    nan; for a real number, nan is returned on the 3rd application.

    Examples
    ========

    >>> from sympy import arg, I, sqrt, Dummy
    >>> from sympy.abc import x
    >>> arg(2.0)
    0
    >>> arg(I)
    pi/2
    >>> arg(sqrt(2) + I*sqrt(2))
    pi/4
    >>> arg(sqrt(3)/2 + I/2)
    pi/6
    >>> arg(4 + 3*I)
    atan(3/4)
    >>> arg(0.8 + 0.6*I)
    0.643501108793284
    >>> arg(arg(arg(arg(x))))
    nan
    >>> real = Dummy(real=True)
    >>> arg(arg(arg(real)))
    nan

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    Returns
    =======

    value : Expr
        Returns arc tangent of arg measured in radians.

    Tc                   |}t          d          D ]<}t          ||           r|j        d         } |dk    r|j        rt          j        c S  nt          j        S ddlm}m} t          ||          rt          |t                    S t          ||          rWt          |j        d                   }|j        r6|dt          j        z  z  }|t          j        k    r|dt          j        z  z  }|S |j        sVt          |                                          \  }}|j        rt%          d |j        D              }t'          |          |z  }n|}t)          d |                    t,                    D                       rd S ddlm}	 |                                \  }
} |	||
          }|j        r|S ||k    r | |d	          S d S )
N   r   r   r   	exp_polarc                R    g | ]$}t          |          d vr|nt          |          %S ))r   r{   r#  r   s     r)   r   zarg.eval.<locals>.<listcomp>  sC     0 0 0 ! $(77'#9#9QQGG0 0 0r,   c              3  (   K   | ]}|j         d u V  d S r$   )r   r   s     r)   r*   zarg.eval.<locals>.<genexpr>  s*      PP!q%-PPPPPPr,   atan2FrS   )ranger5   r   r/   r   r-   r   r   r+  periodic_argumentr   r<   r   Piis_Atomr   as_coeff_Mulr   r   r   r   r   r   (sympy.functions.elementary.trigonometricr/  r3   	is_number)r>   r?   rF   r   r   r+  i_rH   arg_r/  rV   yr  s                r)   rI   zarg.eval  s   q 	 	A!S!! F1I66a065LLL5LIIIIIIIIc9%% 	$S"---S!! 	CHQKB af99!AD&LB	{ 	"3''4466GAt{ 1 0 0%)Y0 0 0 1774<DDDPPtzz,7O7OPPPPP 	FBBBBBB  ""1U1a[[< 	I3;;3te,,,, ;r,   c                    | j         d                                         \  }}|t          ||d          z  |t          ||d          z  z
  |dz  |dz  z   z  S )Nr   TrS   r   )r   r3   r   )rM   r   rV   r9  s       r)   rW   zarg._eval_derivative  sm    y|((**1Jq!d3333aq!d33374 4891q!tE 	Er,   c                j    ddl m} | j        d                                         \  }} |||          S )Nr   r.  )r5  r/  r   r3   )rM   r?   r\   r/  rV   r9  s         r)   _eval_rewrite_as_atan2zarg._eval_rewrite_as_atan2  s?    BBBBBBy|((**1uQ{{r,   c                    | j         d         }t          dd          }|dk    rd}|                    |||z            }|j        rt          j        S |j        rt          j        S t          d| z            )Nr   r   T)positiver{   zCannot expand %s around 0)	r   r	   r   r   r   r1   r   r2  r   )rM   rV   r   r   r   r   r   s          r)   _eval_as_leading_termzarg._eval_as_leading_term   s|    y|#%%%199DIIaa  = 	B6M] 	B4K74@AAAr,   r   c                `    ddl m} |dk    r |d          S |                     |||          S )Nr   )Orderr{   )r   r   )sympy.series.orderrA  r?  )rM   rV   r   r   r   rA  s         r)   r   zarg._eval_nseries-  sE    ,,,,,,66588O))!$T)BBBr,   Nr   )rp   rq   rr   rs   r/   is_realrj   rv   rw   rI   rW   r<  r?  r   rx   r,   r)   r?   r?     s        - -^ GIN&- &- [&-PE E E
  
B B BC C C C C Cr,   r?   c                  V    e Zd ZdZdZed             Zd Zd Zd Z	d Z
d Zd	 Zd
 ZdS )r6   a>  
    Returns the *complex conjugate* [1]_ of an argument.
    In mathematics, the complex conjugate of a complex number
    is given by changing the sign of the imaginary part.

    Thus, the conjugate of the complex number
    :math:`a + ib` (where $a$ and $b$ are real numbers) is :math:`a - ib`

    Examples
    ========

    >>> from sympy import conjugate, I
    >>> conjugate(2)
    2
    >>> conjugate(I)
    -I
    >>> conjugate(3 + 2*I)
    3 - 2*I
    >>> conjugate(5 - I)
    5 + I

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    Returns
    =======

    arg : Expr
        Complex conjugate of arg as real, imaginary or mixed expression.

    See Also
    ========

    sign, Abs

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Complex_conjugation
    Tc                6    |                                 }||S d S r$   )r   r>   r?   r   s      r)   rI   zconjugate.evalb  $    !!##?J ?r,   c                    t           S r$   )r6   ra   s    r)   inversezconjugate.inverseh  s    r,   c                :    t          | j        d         d          S rR   r   r   ra   s    r)   r   zconjugate._eval_Absk      49Q<$////r,   c                6    t          | j        d                   S rZ   	transposer   ra   s    r)   _eval_adjointzconjugate._eval_adjointn      1&&&r,   c                    | j         d         S rZ   r   ra   s    r)   r   zconjugate._eval_conjugateq      y|r,   c                    |j         r*t          t          | j        d         |d                    S |j        r+t          t          | j        d         |d                     S d S rR   )rC  r6   r   r   r0   rU   s     r)   rW   zconjugate._eval_derivativet  sm    9 	JZ	!a$GGGHHH^ 	Jj1q4HHHIIII	J 	Jr,   c                6    t          | j        d                   S rZ   adjointr   ra   s    r)   _eval_transposezconjugate._eval_transposez      ty|$$$r,   c                &    | j         d         j        S rZ   r_   ra   s    r)   rb   zconjugate._eval_is_algebraic}  rc   r,   N)rp   rq   rr   rs   rv   rw   rI   rI  r   rP  r   rW   rY  rb   rx   r,   r)   r6   r6   4  s        * *V N  [
  0 0 0' ' '  J J J% % %) ) ) ) )r,   r6   c                  :    e Zd ZdZed             Zd Zd Zd ZdS )rO  a  
    Linear map transposition.

    Examples
    ========

    >>> from sympy import transpose, Matrix, MatrixSymbol
    >>> A = MatrixSymbol('A', 25, 9)
    >>> transpose(A)
    A.T
    >>> B = MatrixSymbol('B', 9, 22)
    >>> transpose(B)
    B.T
    >>> transpose(A*B)
    B.T*A.T
    >>> M = Matrix([[4, 5], [2, 1], [90, 12]])
    >>> M
    Matrix([
    [ 4,  5],
    [ 2,  1],
    [90, 12]])
    >>> transpose(M)
    Matrix([
    [4, 2, 90],
    [5, 1, 12]])

    Parameters
    ==========

    arg : Matrix
         Matrix or matrix expression to take the transpose of.

    Returns
    =======

    value : Matrix
        Transpose of arg.

    c                6    |                                 }||S d S r$   )rY  rF  s      r)   rI   ztranspose.eval  rG  r,   c                6    t          | j        d                   S rZ   r6   r   ra   s    r)   rP  ztranspose._eval_adjoint  rQ  r,   c                6    t          | j        d                   S rZ   rW  ra   s    r)   r   ztranspose._eval_conjugate  rZ  r,   c                    | j         d         S rZ   rS  ra   s    r)   rY  ztranspose._eval_transpose  rT  r,   N)	rp   rq   rr   rs   rw   rI   rP  r   rY  rx   r,   r)   rO  rO    sg        & &P   [
' ' '% % %    r,   rO  c                  H    e Zd ZdZed             Zd Zd Zd Zd	dZ	d Z
dS )
rX  a  
    Conjugate transpose or Hermite conjugation.

    Examples
    ========

    >>> from sympy import adjoint, MatrixSymbol
    >>> A = MatrixSymbol('A', 10, 5)
    >>> adjoint(A)
    Adjoint(A)

    Parameters
    ==========

    arg : Matrix
        Matrix or matrix expression to take the adjoint of.

    Returns
    =======

    value : Matrix
        Represents the conjugate transpose or Hermite
        conjugation of arg.

    c                    |                                 }||S |                                }|t          |          S d S r$   )rP  rY  r6   rF  s      r)   rI   zadjoint.eval  sF    !!?J!!##?S>>! ?r,   c                    | j         d         S rZ   rS  ra   s    r)   rP  zadjoint._eval_adjoint  rT  r,   c                6    t          | j        d                   S rZ   rN  ra   s    r)   r   zadjoint._eval_conjugate  rQ  r,   c                6    t          | j        d                   S rZ   r_  ra   s    r)   rY  zadjoint._eval_transpose  rQ  r,   Nc                f    |                     | j        d                   }d|z  }|r	d|d|d}|S )Nr   z%s^{\dagger}z\left(z	\right)^{})_printr   )rM   printerr   r   r?   texs         r)   _latexzadjoint._latex  sG    nnTYq\**# 	7 	7-0SS###6C
r,   c                    ddl m}  |j        | j        d         g|R  }|j        r| |d          z  }n| |d          z  }|S )Nr   )
prettyFormu   †+) sympy.printing.pretty.stringpictrn  ri  r   _use_unicode)rM   rj  r   rn  pforms        r)   _prettyzadjoint._pretty  sk    ??????ty|3d333 	+::l333EE::c??*Er,   r$   )rp   rq   rr   rs   rw   rI   rP  r   rY  rl  rs  rx   r,   r)   rX  rX    s         4 " " ["  ' ' '' ' '       r,   rX  c                  <    e Zd ZdZdZdZed             Zd Zd Z	dS )
polar_lifta  
    Lift argument to the Riemann surface of the logarithm, using the
    standard branch.

    Examples
    ========

    >>> from sympy import Symbol, polar_lift, I
    >>> p = Symbol('p', polar=True)
    >>> x = Symbol('x')
    >>> polar_lift(4)
    4*exp_polar(0)
    >>> polar_lift(-4)
    4*exp_polar(I*pi)
    >>> polar_lift(-I)
    exp_polar(-I*pi/2)
    >>> polar_lift(I + 2)
    polar_lift(2 + I)

    >>> polar_lift(4*x)
    4*polar_lift(x)
    >>> polar_lift(4*p)
    4*p

    Parameters
    ==========

    arg : Expr
        Real or complex expression.

    See Also
    ========

    sympy.functions.elementary.exponential.exp_polar
    periodic_argument
    TFc                   ddl m} |j        rR ||          }|dt          dz  t           dz  t          fv r)ddlm}  |t          |z            t          |          z  S |j        r|j	        }n|g}g }g }g }|D ]$}|j
        r||gz  }|j        r||gz  }||gz  }%t          |          t          |          k     rN|r#t          ||z    t          t          |           z  S |rt          ||z    S ddlm} t          |  |d          z  S d S )Nr   r?   r   r+  )$sympy.functions.elementary.complexesr?   r6  r   r   r+  r   absr   r   is_polarr   r;   r   ru  )	r>   r?   argumentarr+  r   r@   rB   r>  s	            r)   rI   zpolar_lift.eval%  sy   HHHHHH= 	0#B
 aAs1ub)))LLLLLL y2s3xx//: 	8DD5D 	" 	"C| "SE! "SE!SE!x==3t99$$ 3X02:c8n3M3MMM 3X022LLLLLLH~iill22 %$r,   c                B    | j         d                             |          S )z. Careful! any evalf of polar numbers is flaky r   )r   _eval_evalf)rM   precs     r)   r  zpolar_lift._eval_evalfI  s    y|''---r,   c                :    t          | j        d         d          S rR   rK  ra   s    r)   r   zpolar_lift._eval_AbsM  rL  r,   N)
rp   rq   rr   rs   r{  r   rw   rI   r  r   rx   r,   r)   ru  ru    sc        # #J HM!3 !3 [!3F. . .0 0 0 0 0r,   ru  c                  D    e Zd ZdZed             Zed             Zd ZdS )r1  a  
    Represent the argument on a quotient of the Riemann surface of the
    logarithm. That is, given a period $P$, always return a value in
    $(-P/2, P/2]$, by using $\exp(PI) = 1$.

    Examples
    ========

    >>> from sympy import exp_polar, periodic_argument
    >>> from sympy import I, pi
    >>> periodic_argument(exp_polar(10*I*pi), 2*pi)
    0
    >>> periodic_argument(exp_polar(5*I*pi), 4*pi)
    pi
    >>> from sympy import exp_polar, periodic_argument
    >>> from sympy import I, pi
    >>> periodic_argument(exp_polar(5*I*pi), 2*pi)
    pi
    >>> periodic_argument(exp_polar(5*I*pi), 3*pi)
    -pi
    >>> periodic_argument(exp_polar(5*I*pi), pi)
    0

    Parameters
    ==========

    ar : Expr
        A polar number.

    period : Expr
        The period $P$.

    See Also
    ========

    sympy.functions.elementary.exponential.exp_polar
    polar_lift : Lift argument to the Riemann surface of the logarithm
    principal_branch
    c           	     
   ddl m}m} |j        r|j        }n|g}d}|D ]}|j        s|t          |          z  }t          ||          r#||j        	                                d         z  }O|j
        rX|j        	                                \  }}||t          |j                  z  | |t          |j                            z  z   z  }t          |t                    r|t          |j        d                   z  } d S |S )Nr   )r+  r   r{   )r   r+  r   r   r   r{  r?   r5   r   r3   r   unbranched_argumentr   rz  ru  )	r>   r}  r+  r   r   ru   rF   r   r<   s	            r)   _getunbranchedz periodic_argument._getunbranchedz  s1   IIIIIIII9 	7DD4D
 	 	A: c!ff$

Ay)) 	ae0022155

 ++--Bb!4F" "  S[[!1!112 2

Az** c!&)nn,

ttr,   c                   |j         sd S |t          k    r#t          |t                    rt	          |j         S t          |t                    r)|dt          z  k    rt	          |j        d         |          S |j        rMd |j        D             }t          |          t          |j                  k    rt	          t          | |          S |                     |          }|d S ddlm}m} |                    t          ||          rd S |t          k    r|S |t          k    r>ddlm}  |||z  t$          j        z
            |z  }|                    |          s||z
  S d S d S )Nr   r   c                     g | ]}|j         	|S rx   )r   )r'   rV   s     r)   r   z*periodic_argument.eval.<locals>.<listcomp>  s    ???Q?q???r,   )atanr/  ceiling)r   r   r5   principal_branchr1  r   ru  r   r   r;   r   r  r5  r  r/  r:   #sympy.functions.elementary.integersr  r   r   )	r>   r}  periodnewargsru   r  r/  r  r   s	            r)   rI   zperiodic_argument.eval  s    * 	4R<<Jr+;<<<$bg..b*%% 	9&AbD..$RWQZ8889 	@??"'???G7||s27||++(g???''++
4HHHHHHHH>>+UD99 	4R<<R<<CCCCCC
6)AF233F:A55>> &!A~%	 <& &r,   c                V   | j         \  }}|t          k    r3t                              |          }|| S |                    |          S t          |t                                        |          }ddlm} | |||z  t          j        z
            |z  z
                      |          S )Nr   r  )	r   r   r1  r  r  r  r  r   r   )rM   r  r   r  ru   ubr  s          r)   r  zperiodic_argument._eval_evalf  s    I	6R<<*99!<<J!))$///q"%%11$77??????WWRY/0077DDTJJJr,   N)rp   rq   rr   rs   rw   r  rI   r  rx   r,   r)   r1  r1  Q  si        & &P   [, & & [&:	K 	K 	K 	K 	Kr,   r1  c                ,    t          | t                    S )a\  
    Returns periodic argument of arg with period as infinity.

    Examples
    ========

    >>> from sympy import exp_polar, unbranched_argument
    >>> from sympy import I, pi
    >>> unbranched_argument(exp_polar(15*I*pi))
    15*pi
    >>> unbranched_argument(exp_polar(7*I*pi))
    7*pi

    See also
    ========

    periodic_argument
    )r1  r   rw  s    r)   r  r    s    & S"%%%r,   c                  6    e Zd ZdZdZdZed             Zd ZdS )r  a  
    Represent a polar number reduced to its principal branch on a quotient
    of the Riemann surface of the logarithm.

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

    This is a function of two arguments. The first argument is a polar
    number `z`, and the second one a positive real number or infinity, `p`.
    The result is ``z mod exp_polar(I*p)``.

    Examples
    ========

    >>> from sympy import exp_polar, principal_branch, oo, I, pi
    >>> from sympy.abc import z
    >>> principal_branch(z, oo)
    z
    >>> principal_branch(exp_polar(2*pi*I)*3, 2*pi)
    3*exp_polar(0)
    >>> principal_branch(exp_polar(2*pi*I)*3*z, 2*pi)
    3*principal_branch(z, 2*pi)

    Parameters
    ==========

    x : Expr
        A polar number.

    period : Expr
        Positive real number or infinity.

    See Also
    ========

    sympy.functions.elementary.exponential.exp_polar
    polar_lift : Lift argument to the Riemann surface of the logarithm
    periodic_argument
    TFc                Z   ddl m} t          |t                    rt	          |j        d         |          S |t          k    r|S t          |t                    }t          ||          }||k    r|                    t                    s|                    t                    st          |          }d }|	                    t          |          }t          |t                    }|                    t                    sN||k    r |t          ||z
  z            |z  }n|}|j        s#|                    |          s| |d          z  }|S |j        s|d}
}	n |j        |j         \  }	}
g }|
D ]}|j        r|	|z  }	||gz  }t          |          }
t          |	|          }|                    t                    rd S |j        rt#          |	          |k    s|dk    rt|
dk    rn|	dk    rh|dk    r't%          |	          t	          t'          |
 |          z  S t	           |t          |z            t'          |
 z  |          t%          |	          z  S |j        rLt%          |          |dz  k     dk    s	||dz  k    r-|
dk    r% ||t          z            t%          |	          z  S d S d S d S )Nr   rx  c                N    t          | t                    st          |           S | S r$   )r5   r   ru  )exprs    r)   mrz!principal_branch.eval.<locals>.mr
  s'    !$// ,%d+++r,   rx   r{   r   T)r   r+  r5   ru  r  r   r   r1  r:   replacer   r{  r   r   r   tupler6  r  rz  r   )rM   rV   r  r+  r  bargplr  resrH   mothersr9  r?   s                 r)   rI   zprincipal_branch.eval  s   DDDDDDa$$ 	7#AF1Iv666R<<Hq"%% F++::bff%677:!233 AB   J++B"2r**B66*%% ::#)AtbyM2225CCC| (CGGI,>,> (99Q<<'C
~ 	3bqAA!1>1>2DAq 	 	A} Q1#&MM6**77$%% 	4= 	M1!44;;"axxAGGQaxx1vv.sAw????#IIae$4$4S!W$<fEEc!ffLL= 	+s3xx&(2t;;sfQhGG9SU##CFF**	+ 	+G @Or,   c                    | j         \  }}t          ||                              |          }t          |          t          k    s|t           k    r| S ddlm} t          |           |t          |z            z                      |          S )Nr   )r   )r   r1  r  rz  r   r   r   r   )rM   r  r   r  pr   s         r)   r  zprincipal_branch._eval_evalf1  s    I	6a((44T::q66B;;!s((K>>>>>>Ass1Q3xx,,T222r,   N)	rp   rq   rr   rs   r{  r   rw   rI   r  rx   r,   r)   r  r    sT        & &P HM1+ 1+ [1+f3 3 3 3 3r,   r  Fc                v   ddl m} | j        r| S | j        rst	          |           S t          | t                    rsrt	          |           S | j        r| S | j        r. | j	        fd| j
        D              }rt	          |          S |S | j        rJ| j        t          j        k    r5| 	                    t          j        t          | j        d                    S | j        r | j	        fd| j
        D              S t          | |          rt          | j                  }g }| j
        dd          D ]M}t          |d         d          }t          |dd                    }	|                    |f|	z              N ||ft)          |          z    S  | j	        fd	| j
        D              S )
Nr   )Integralc                4    g | ]}t          |d           S )Tpause	_polarifyr'   r?   lifts     r)   r   z_polarify.<locals>.<listcomp>E  s(    JJJ3iT666JJJr,   Fr  c                4    g | ]}t          |d           S )Fr  r  r  s     r)   r   z_polarify.<locals>.<listcomp>L  s(    NNNs3E:::NNNr,   r{   )r  r  c                b    g | ]+}t          |t                    rt          |           n|,S )r  )r5   r   r  )r'   r?   r  r  s     r)   r   z_polarify.<locals>.<listcomp>W  sR     O O O?BJsD11;3E::::7:O O Or,   )sympy.integrals.integralsr  r{  r6  ru  r5   r   r3  r   r   r   r   r   r   Exp1r  r   r4   functionr9   r  )
eqr  r  r  rr   limitslimitvarrests
    ``       r)   r  r  :  s3   222222	{ 		| E "~~"f Pe P P"~~	 P		 PBGJJJJ"'JJJK 	!a== 	 Prw!&((wwqvyUCCCDDD	 PrwNNNNbgNNNOO	B	!	! Pd%888WQRR[ 	) 	)EE!H5>>>CU122YT???DMM3&4-((((x4'E&MM133rw O O O O OFHgO O O P 	Pr,   Tc                    |rd}t          t          |           |          } |s| S d | j        D             }|                     |          } | d |                                D             fS )a  
    Turn all numbers in eq into their polar equivalents (under the standard
    choice of argument).

    Note that no attempt is made to guess a formal convention of adding
    polar numbers, expressions like $1 + x$ will generally not be altered.

    Note also that this function does not promote ``exp(x)`` to ``exp_polar(x)``.

    If ``subs`` is ``True``, all symbols which are not already polar will be
    substituted for polar dummies; in this case the function behaves much
    like :func:`~.posify`.

    If ``lift`` is ``True``, both addition statements and non-polar symbols are
    changed to their ``polar_lift()``ed versions.
    Note that ``lift=True`` implies ``subs=False``.

    Examples
    ========

    >>> from sympy import polarify, sin, I
    >>> from sympy.abc import x, y
    >>> expr = (-x)**y
    >>> expr.expand()
    (-x)**y
    >>> polarify(expr)
    ((_x*exp_polar(I*pi))**_y, {_x: x, _y: y})
    >>> polarify(expr)[0].expand()
    _x**_y*exp_polar(_y*I*pi)
    >>> polarify(x, lift=True)
    polar_lift(x)
    >>> polarify(x*(1+y), lift=True)
    polar_lift(x)*polar_lift(y + 1)

    Adds are treated carefully:

    >>> polarify(1 + sin((1 + I)*x))
    (sin(_x*polar_lift(1 + I)) + 1, {_x: x})
    Fc                <    i | ]}|t          |j        d           S )T)polar)r	   name)r'   r   s     r)   r   zpolarify.<locals>.<dictcomp>  s)    BBBQAuQV4(((BBBr,   c                    i | ]\  }}||	S rx   rx   )r'   r   r  s      r)   r   zpolarify.<locals>.<dictcomp>  s    ...A1...r,   )r  r   r   r   items)r  r   r  repss       r)   polarifyr  [  sz    P  	72;;	%	%B 	BB"/BBBD	B.......r,   c                n   t          | t                    r| j        r| S |sddlm}m} t          | |          r |t          | j                            S t          | t                    r4| j        d         dt          z  k    rt          | j        d                   S | j
        s0| j        s)| j        s"| j        r6| j        dv r	d| j        v s	| j        dvr | j        fd| j        D              S t          | t                     rt          | j        d                   S | j        r9t          | j                  }t          | j        |j        o|            }||z  S | j        r1t+          | j        dd          r | j        fd	| j        D              S  | j        fd
| j        D              S )Nr   r*  r{   r   )z==z!=c                0    g | ]}t          |          S rx   _unpolarifyr'   rV   exponents_onlys     r)   r   z_unpolarify.<locals>.<listcomp>  s#    MMM[N;;MMMr,   ru   Fc                2    g | ]}t          |          S rx   r  r  s     r)   r   z_unpolarify.<locals>.<listcomp>  s5        %QGG   r,   c                2    g | ]}t          |d           S ro   r  r  s     r)   r   z_unpolarify.<locals>.<listcomp>  s%    KKKa[ND99KKKr,   )r5   r
   r3  r   r   r+  r  r  r   r   r   r   
is_Booleanis_Relationalrel_opr   ru  r   r   r   r4   getattr)r  r  r  r   r+  expor   s    `     r)   r  r    s   b%   BJ 	 ;IIIIIIIIb)$$ 	<3{26>::;;;b*++ 	;
ad0B0Brwqz>:::I	O	O&(m	O	O 	\))a27ll	--27MMMMRWMMMNNb*%% 	;rwqz>:::	y 26>2227N.Y/1 1Tz	~ '"'<?? rw    W    	 27KKKK27KKKLLr,   Nc                   t          | t                    r| S t          |           } |"t          |                     |                    S d}d}|rd}|r6d}t          | ||          }|| k    rd}|} t          |t                    r|S |6ddlm} |                     |d          dt          d          di          S )a  
    If `p` denotes the projection from the Riemann surface of the logarithm to
    the complex line, return a simplified version `eq'` of `eq` such that
    `p(eq') = p(eq)`.
    Also apply the substitution subs in the end. (This is a convenience, since
    ``unpolarify``, in a certain sense, undoes :func:`polarify`.)

    Examples
    ========

    >>> from sympy import unpolarify, polar_lift, sin, I
    >>> unpolarify(polar_lift(I + 2))
    2 + I
    >>> unpolarify(sin(polar_lift(I + 7)))
    sin(7 + I)
    NTFr   rx  r{   )	r5   boolr   
unpolarifyr   r  r   r+  ru  )r  r   r  changedr  r  r+  s          r)   r  r    s    " "d 		B"''$--(((GE 
 "ne44"99GBc4   	J   A@@@@@88YYq\\1jmmQ7888r,   )F)TF)NF)4
__future__r   
sympy.corer   r   r   r   r   r	   r
   sympy.core.exprr   sympy.core.exprtoolsr   sympy.core.functionr   r   r   r   r   r   sympy.core.logicr   r   sympy.core.numbersr   r   r   sympy.core.powerr   sympy.core.relationalr   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.piecewiser   r   r<   r   r   r?   r6   rO  rX  ru  r1  r  r  r  r  r  r  rx   r,   r)   <module>r     s   " " " " " " A A A A A A A A A A A A A A A A A A             - - - - - -) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 0 0 0 0 0 0 0 0 ( ( ( ( ( ( ( ( ( (             $ $ $ $ $ $ 9 9 9 9 9 9 : : : : : :w w w w w w w wtu u u u u u u uvr5 r5 r5 r5 r5? r5 r5 r5jw( w( w( w( w(/ w( w( w(tyC yC yC yC yC/ yC yC yCxJ) J) J) J) J) J) J) J)Z6 6 6 6 6 6 6 6r; ; ; ; ;o ; ; ;DR0 R0 R0 R0 R0 R0 R0 R0jgK gK gK gK gK gK gK gKT& & &,f3 f3 f3 f3 f3 f3 f3 f3RP P P PB// // // //dM M M MB&9 &9 &9 &9 &9 &9r,   