
    \h                       S SK Jr  S SKJrJrJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJrJrJrJrJrJr  S SKJrJr  S SKJrJrJr  S SKJr  S S	KJr  S S
K J!r!  S SK"J#r#   " S S\5      r$ " S S\5      r% " S S\5      r& " S S\5      r' " S S\5      r( " S S\5      r) " S S\5      r* " S S\5      r+ " S S\5      r, " S S\5      r-S  r. " S! S"\5      r/S(S# jr0S)S$ jr1S(S% jr2S*S' jr3g&)+    )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                  n    \ rS rSr% SrS\S'   SrSrSr\	S 5       r
SS jrS rS	 rS
 rS rS rS rSrg)re   a{  
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                    U[         R                  L a  [         R                  $ U[         R                  L a  [         R                  $ UR                  (       a  U$ UR                  (       d  [
        U-  R                  (       a  [         R                  $ UR                  (       a  UR                  5       S   $ UR                  (       a-  [        U[        5      (       a  [        UR                  S   5      $ / / / pCn[        R                  " U5      nU H  nUR!                  [
        5      nUb&  UR                  (       d  UR#                  U5        M?  MA  UR%                  [
        5      (       d$  UR                  (       a  UR#                  U5        M  UR                  US9nU(       a  UR#                  US   5        M  UR#                  U5        M     ['        U5      ['        U5      :w  a%  S X#U4 5       u  pnU " U	5      [)        U
5      -
  U-   $ g )Nr   ignorec              3  2   #    U  H  n[        U6 v   M     g 7fNr   .0xss     \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/functions/elementary/complexes.py	<genexpr>re.eval.<locals>.<genexpr>i        M.L38.L   )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*   evalre.evalD   s   !%%<55LA%%%55L!!J!C%!9!966M]]##%a((__C!;!;chhqk?" ,.r2H==%D++A.$ 11 . 2!)>)>OOD)
 !% 1 1 1 =I  	!5 -! $ 4yCM)Mx8.LMa1v1~)) *    c                &    U [         R                  4$ )z6
Returns the real number with a zero imaginary part.

r   r3   selfdeephintss      r*   r5   re.as_real_imagm       
 aff~rM   c           	     T   UR                   (       d  U R                  S   R                   (       a!  [        [        U R                  S   USS95      $ UR                  (       d  U R                  S   R                  (       a)  [
        * [        [        U R                  S   USS95      -  $ g Nr   Tevaluate)r1   r    r   r   r2   r   r>   rQ   xs     r*   _eval_derivativere._eval_derivativet   }    1!>!>j1q4@AA>>TYYq\662Z		!a$?@A A 7rM   c                `    U R                   S   [        [        U R                   S   5      -  -
  $ Nr   )r    r   r>   rQ   rA   kwargss      r*   _eval_rewrite_as_imre._eval_rewrite_as_im{   s'    yy|a499Q< 0000rM   c                4    U R                   S   R                  $ r`   r    is_algebraicrQ   s    r*   _eval_is_algebraicre._eval_is_algebraic~       yy|(((rM   c                x    [        U R                  S   R                  U R                  S   R                  /5      $ r`   )r   r    r2   is_zerorh   s    r*   _eval_is_zerore._eval_is_zero   s.    122DIIaL4H4HIJJrM   c                B    U R                   S   R                  (       a  gg Nr   Tr    	is_finiterh   s    r*   _eval_is_finitere._eval_is_finite       99Q<!! "rM   c                B    U R                   S   R                  (       a  gg rq   rr   rh   s    r*   _eval_is_complexre._eval_is_complex   rv   rM    NT)__name__
__module____qualname____firstlineno____doc____annotations__r1   
unbranched_singularitiesclassmethodrK   r5   r\   rc   ri   rn   rt   rx   __static_attributes__rz   rM   r*   r   r      sX    'R JN&* &*PA1)KrM   r   c                  n    \ rS rSr% SrS\S'   SrSrSr\	S 5       r
SS jrS rS	 rS
 rS rS rS rSrg)r>      as  
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                2   U[         R                  L a  [         R                  $ U[         R                  L a  [         R                  $ UR                  (       a  [         R                  $ UR
                  (       d  [        U-  R                  (       a
  [        * U-  $ UR                  (       a  UR                  5       S   $ UR                  (       a.  [        U[        5      (       a  [        UR                  S   5      * $ / / / pCn[        R                  " U5      nU H  nUR!                  [        5      nUb7  UR                  (       d  UR#                  U5        M?  UR#                  U5        MR  UR%                  [        5      (       d  UR                  (       a  M  UR                  US9nU(       a  UR#                  US   5        M  UR#                  U5        M     ['        U5      ['        U5      :w  a%  S X#U4 5       u  pnU " U	5      [)        U
5      -   U-   $ g )N   r   r"   c              3  2   #    U  H  n[        U6 v   M     g 7fr%   r&   r'   s     r*   r+   im.eval.<locals>.<genexpr>   r-   r.   )r   r/   r0   r1   r3   r2   r   r4   r5   r6   r7   r8   r>   r    r   r9   r:   r;   r<   r=   r   r?   s               r*   rK   im.eval   s   !%%<55LA%%%55L!!66M!C%!9!928O]]##%a((__C!;!;sxx{O##+-r2H==%D++A.$ 11 . .XXa[[(=(=(= !% 1 1 1 =I  	!5 -! $ 4yCM)Mx8.LMa1v1~)) *rM   c                &    U [         R                  4$ )z3
Return the imaginary part with a zero real part.

rO   rP   s      r*   r5   im.as_real_imag   rU   rM   c           	     T   UR                   (       d  U R                  S   R                   (       a!  [        [        U R                  S   USS95      $ UR                  (       d  U R                  S   R                  (       a)  [
        * [        [        U R                  S   USS95      -  $ g rW   )r1   r    r>   r   r2   r   r   rZ   s     r*   r\   im._eval_derivative   r^   rM   c                b    [         * U R                  S   [        U R                  S   5      -
  -  $ r`   )r   r    r   ra   s      r*   _eval_rewrite_as_reim._eval_rewrite_as_re   s)    r499Q<"TYYq\"2233rM   c                4    U R                   S   R                  $ r`   rf   rh   s    r*   ri   im._eval_is_algebraic   rk   rM   c                4    U R                   S   R                  $ r`   r    r1   rh   s    r*   rn   im._eval_is_zero       yy|,,,rM   c                B    U R                   S   R                  (       a  gg rq   rr   rh   s    r*   rt   im._eval_is_finite   rv   rM   c                B    U R                   S   R                  (       a  gg rq   rr   rh   s    r*   rx   im._eval_is_complex  rv   rM   rz   Nr{   )r|   r}   r~   r   r   r   r1   r   r   r   rK   r5   r\   r   ri   rn   rt   rx   r   rz   rM   r*   r>   r>      sW    'R JN%* %*NA4)-rM   r>   c                     ^  \ rS rSrSrSrSrU 4S jr\S 5       r	S r
S rS rS	 rS
 rS rS rS rS rSS jrS rS rS rS rSrU =r$ )signi	  aR  
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U ]  5       nX :X  aD  U R                  S   R                  SL a(  U R                  S   [	        U R                  S   5      -  $ U$ )Nr   F)superdoitr    rm   Abs)rQ   rS   s	__class__s      r*   r   	sign.doitC  sM    GLN91--699Q<#diil"333rM   c                   UR                   (       Ga  UR                  5       u  p#/ n[        U5      nU H  nUR                  (       a  U* nM  UR                  (       a  M,  UR
                  (       aP  [        U5      nUR                  (       a!  U[        -  nUR                  (       a  U* nMx  Mz  UR                  U5        M  UR                  U5        M     U[        R                  L a  [        U5      [        U5      :X  a  g XP" UR                  " U6 5      -  $ U[        R                  L a  [        R                  $ UR                  (       a  [        R                   $ UR                  (       a  [        R                  $ UR                  (       a  [        R"                  $ UR$                  (       a  ['        U[        5      (       a  U$ UR
                  (       an  UR(                  (       a#  UR*                  [        R,                  L a  [        $ [        * U-  nUR                  (       a  [        $ UR                  (       a  [        * $ g g r%   )is_Mulas_coeff_mulr   is_extended_negativeis_extended_positiver2   r>   is_comparabler   r;   r   Oner=   _new_rawargsr/   rm   r3   NegativeOner6   r7   is_PowexpHalf)	r@   rA   rJ   r    unkr   rH   aiarg2s	            r*   rK   	sign.evalI  s    :::&&(GACQA))A++~~U++FA!66 &'B  7
  JJqM

1# $ AEEzc#h#d)3s3++S1222!%%<55L;;66M##55L##== ??#t$$
zzcgg/ 28D((((r	 ) rM   c                r    [        U R                  S   R                  5      (       a  [        R                  $ g r`   )r   r    rm   r   r   rh   s    r*   	_eval_Abssign._eval_Abs{  s)    TYYq\))**55L +rM   c                D    [        [        U R                  S   5      5      $ r`   )r   r8   r    rh   s    r*   _eval_conjugatesign._eval_conjugate  s    Idiil+,,rM   c                h   U R                   S   R                  (       a7  SSKJn  S[	        U R                   S   USS9-  U" U R                   S   5      -  $ U R                   S   R
                  (       a?  SSKJn  S[	        U R                   S   USS9-  U" [        * U R                   S   -  5      -  $ g )Nr   )
DiracDelta   TrX   )r    r1   'sympy.functions.special.delta_functionsr   r   r2   r   )rQ   r[   r   s      r*   r\   sign._eval_derivative  s    99Q<((Jz$))A,DAATYYq\*+ +YYq\&&Jz$))A,DAAaR$))A,./0 0 'rM   c                B    U R                   S   R                  (       a  gg rq   )r    is_nonnegativerh   s    r*   _eval_is_nonnegativesign._eval_is_nonnegative      99Q<&& 'rM   c                B    U R                   S   R                  (       a  gg rq   )r    is_nonpositiverh   s    r*   _eval_is_nonpositivesign._eval_is_nonpositive  r   rM   c                4    U R                   S   R                  $ r`   )r    r2   rh   s    r*   _eval_is_imaginarysign._eval_is_imaginary  rk   rM   c                4    U R                   S   R                  $ r`   r   rh   s    r*   _eval_is_integersign._eval_is_integer  r   rM   c                4    U R                   S   R                  $ r`   )r    rm   rh   s    r*   rn   sign._eval_is_zero  s    yy|###rM   c                    [        U R                  S   R                  5      (       a4  UR                  (       a"  UR                  (       a  [
        R                  $ g g g r`   )r   r    rm   
is_integeris_evenr   r   )rQ   others     r*   _eval_powersign._eval_power  sC    diil**++MM55L   ,rM   c                    U R                   S   nUR                  US5      nUS:w  a  U R                  U5      $ US:w  a  UR                  X5      n[	        U5      S:  a  [
        R                  * $ [
        R                  $ r`   )r    subsfuncdirr   r   r   )rQ   r[   nlogxcdirarg0x0s          r*   _eval_nseriessign._eval_nseries  sg    yy|YYq!_799R= 1988A$DDAv01550rM   c                T    UR                   (       a  [        SUS:  4SUS:  4S5      $ g )Nr   r   )r   T)r1   r   ra   s      r*   _eval_rewrite_as_Piecewisesign._eval_rewrite_as_Piecewise  s/    aq\Ba=)DD  rM   c                N    SSK Jn  UR                  (       a  U" U5      S-  S-
  $ g )Nr   	Heavisider   r   r   r   r1   rQ   rA   rb   r   s       r*   _eval_rewrite_as_Heavisidesign._eval_rewrite_as_Heaviside  s'    ES>A%))  rM   c                N    [        S[        US5      4U[        U5      -  S45      $ rq   )r   r   r   ra   s      r*   _eval_rewrite_as_Abssign._eval_rewrite_as_Abs  s&    !RQZ3S>4*@AArM   c                P    U R                  [        U R                  S   5      5      $ r`   )r   r   r    )rQ   rb   s     r*   _eval_simplifysign._eval_simplify  s    yydiil344rM   rz   r   )r|   r}   r~   r   r   
is_complexr   r   r   rK   r   r   r\   r   r   r   r   rn   r   r   r   r   r   r   r   __classcell__)r   s   @r*   r   r   	  s|    4l JN / /b-0)-$1E*
B5 5rM   r   c                      \ rS rSr% SrS\S'   SrSrSrSr	Sr
SS jr\S 5       rS	 rS
 rS rS rS rS rS rS rS rS rSS jrS rS rS rS rS rSrg)r   i  a  
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    TFc                T    US:X  a  [        U R                  S   5      $ [        X5      e)z5
Get the first derivative of the argument to Abs().

r   r   )r   r    r   )rQ   argindexs     r*   fdiff	Abs.fdiff   s)    
 q=		!%%$T44rM   c           
       ^^ SSK Jn  [        TS5      (       a  TR                  5       nUb  U$ [	        T[
        5      (       d  [        S[        T5      -  5      eU" TSS9mTR                  5       u  pEUR                  (       a"  UR                  (       d  U " U5      U " U5      -  $ TR                  (       Ga%  / n/ nTR                   H  nUR                  (       a  UR                  R                  (       av  UR                  R                  (       a[  U " UR                   5      n	[	        X5      (       a  UR#                  U5        M  UR#                  [%        XR                  5      5        M  U " U5      n
[	        X5      (       a  UR#                  U5        M  UR#                  U
5        M     ['        U6 nU(       a  U " ['        U6 SS9O[(        R*                  nXg-  $ T[(        R,                  L a  [(        R,                  $ T[(        R.                  L a  [0        $ SSKJnJn  TR                  (       Ga%  TR7                  5       u  pUR8                  (       a  UR                  (       aD  UR:                  (       a  T$ U[(        R<                  L a  [(        R*                  $ [?        U5      U-  $ UR@                  (       a  U[C        U5      -  $ URD                  (       a)  U* [C        U5      -  U" [F        * [I        U5      -  5      -  $ g URK                  [L        5      (       d9  U" U5      RO                  5       u  nnU[P        U-  -   nU" [C        UU-  5      5      $ [	        TU5      (       a  U" [C        TR                  S   5      5      $ [	        T[R        5      (       a(  TRT                  (       a  T$ TR                  (       a  T* $ g TRV                  (       aT  TRK                  [0        [(        RX                  5      (       a+  [[        S TRO                  5        5       5      (       a  [0        $ TR\                  (       a  [(        R^                  $ TR@                  (       a  T$ TR`                  (       a  T* $ TRb                  (       a  [P        * T-  nUR@                  (       a  U$ TR8                  (       a  g U" TRe                  5       SS9mTRg                  [d        5      TRg                  [d        5      -
  nU(       a  [i        U4S	 jU 5       5      (       a  g TT:w  a  TT* :w  a  TRg                  [>        5      nTRk                  U Vs0 s H  nU[m        S
S9_M     sn5      nUR                   Vs/ s H  oR8                  b  M  UPM     nnU(       a  [i        U4S jU 5       5      (       d  [o        [q        TT-  5      5      $ g g g s  snf s  snf )Nr   )signsimpr   zBad argument type for Abs(): %sFrX   )r   logc              3  8   #    U  H  oR                   v   M     g 7fr%   )is_infinite)r(   rH   s     r*   r+   Abs.eval.<locals>.<genexpr>P  s     =*<Q==*<s   c              3  `   >#    U  H#  nTR                  UR                  S    5      v   M%     g7f)r   N)r<   r    )r(   irA   s     r*   r+   r  b  s%     A1CGGAFF1I..s   +.T)realc              3  X   >#    U  H  nTR                  [        U5      5      v   M!     g 7fr%   )r<   r8   )r(   uconjs     r*   r+   r  h  s!     !F#Q$((9Q<"8"8#s   '*)9sympy.simplify.simplifyr   hasattrr   r7   r   	TypeErrortypeas_numer_denomfree_symbolsr   r    r   r   r   is_negativebaser;   r   r   r   r   r/   r0   r   &sympy.functions.elementary.exponentialr   as_base_expr1   r   r   r   is_extended_nonnegativer   r   r   r>   r<   r   r5   r   r   is_positiveis_AddNegativeInfinityanyrm   r3   is_extended_nonpositiver2   r8   atomsallxreplacer	   r   r   )r@   rA   r   objr   dknownr   tbnewtnewr   r   r  exponentrH   rI   zr   new_conjr#   r  abs_free_argr  s    `                     @r*   rK   Abs.eval
  s4   43$$--/C
#t$$=S	IJJ sU+!!#>>!..q6#a&= :::ECXX88 0 0QUU5F5Fqvv;D!$,,

1Suu%56q6D!$,,

1T*  KE47#c3i%0QUUC9!%%<55L!###IC::: __.ND$$&&''"
q}}, uut9h..//H--,,!EBxL0bSH5E1FFFXXf%%4y--/1!G2hqj>**c3r#((1+''c<((
t::#''"a&8&899=#*:*:*<===	;;66M&&J&&4K28D++ %8::i(399Y+??AAAA$;34%<YYs^F<<f(MfEt,<)<f(MNL*77V7;M;M17CVc!F#!FFFJs4x011 G	 (;(MVs   W.W
W
c                B    U R                   S   R                  (       a  gg rq   rr   rh   s    r*   _eval_is_realAbs._eval_is_realk  rv   rM   c                r    U R                   S   R                  (       a  U R                   S   R                  $ g r`   )r    r1   r   rh   s    r*   r   Abs._eval_is_integero  s,    99Q<((99Q<*** )rM   c                F    [        U R                  S   R                  5      $ r`   r   _argsrm   rh   s    r*   _eval_is_extended_nonzeroAbs._eval_is_extended_nonzeros      A..//rM   c                4    U R                   S   R                  $ r`   )r.  rm   rh   s    r*   rn   Abs._eval_is_zerov  s    zz!}$$$rM   c                F    [        U R                  S   R                  5      $ r`   r-  rh   s    r*   _eval_is_extended_positiveAbs._eval_is_extended_positivey  r1  rM   c                r    U R                   S   R                  (       a  U R                   S   R                  $ g r`   )r    r1   is_rationalrh   s    r*   _eval_is_rationalAbs._eval_is_rational|  s,    99Q<((99Q<+++ )rM   c                r    U R                   S   R                  (       a  U R                   S   R                  $ g r`   )r    r1   r   rh   s    r*   _eval_is_evenAbs._eval_is_even  s,    99Q<((99Q<''' )rM   c                r    U R                   S   R                  (       a  U R                   S   R                  $ g r`   )r    r1   is_oddrh   s    r*   _eval_is_oddAbs._eval_is_odd  s,    99Q<((99Q<&&& )rM   c                4    U R                   S   R                  $ r`   rf   rh   s    r*   ri   Abs._eval_is_algebraic  rk   rM   c                    U R                   S   R                  (       ap  UR                  (       a_  UR                  (       a  U R                   S   U-  $ U[        R
                  La)  UR                  (       a  U R                   S   US-
  -  U -  $ g )Nr   r   )r    r1   r   r   r   r   
is_Integer)rQ   r"  s     r*   r   Abs._eval_power  sj    99Q<((X-@-@yy|X--.83F3Fyy|hl3D88rM   c                *   SSK Jn  U R                  S   R                  U5      S   nUR	                  U" U5      5      (       a  UR                  U" U5      U5      nU R                  S   R                  XUS9n[        U5      U-  R                  5       $ )Nr   )r   )r   r   )	r  r   r    leadtermr<   r   r   r   expand)rQ   r[   r   r   r   r   	directionr   s           r*   r   Abs._eval_nseries  s~    >IIaL))!,Q/	==Q  !s1vt4IIIaL&&qD&9Y!))++rM   c                4   U R                   S   R                  (       d  U R                   S   R                  (       a:  [        U R                   S   USS9[	        [        U R                   S   5      5      -  $ [        U R                   S   5      [        [        U R                   S   5      USS9-  [        U R                   S   5      [        [        U R                   S   5      USS9-  -   [        U R                   S   5      -  nUR                  [        5      $ rW   )
r    r1   r2   r   r   r8   r   r>   r   rewrite)rQ   r[   rvs      r*   r\   Abs._eval_derivative  s    99Q<((DIIaL,E,EdiilA=y1./0 01Btyy|,<a" 		!-
2diil;KD1" ""%(1%67 zz$rM   c                Z    SSK Jn  UR                  (       a  X" U5      U" U* 5      -
  -  $ g )Nr   r   r   r   s       r*   r   Abs._eval_rewrite_as_Heaviside  s0     	F	#C4899  rM   c                    UR                   (       a  [        XS:  4U* S45      $ UR                  (       a)  [        [        U-  [        U-  S:  4[        * U-  S45      $ g rq   )r1   r   r2   r   ra   s      r*   r   Abs._eval_rewrite_as_Piecewise  sZ    c!8_tTl;;aeQsUaZ0A2c64.AA rM   c                    U[        U5      -  $ r%   )r   ra   s      r*   _eval_rewrite_as_signAbs._eval_rewrite_as_sign  s    49}rM   c                0    [        U[        U5      -  5      $ r%   )r   r8   ra   s      r*   _eval_rewrite_as_conjugateAbs._eval_rewrite_as_conjugate  s    C	#&''rM   rz   N)r   r   )r|   r}   r~   r   r   r   r1   r   r  r   r   r   r   rK   r(  r   r/  rn   r5  r9  r<  r@  ri   r   r   r\   r   r   rU  rX  r   rz   rM   r*   r   r     s    7r  "JN5 ^2 ^2@+0%0,('), :B(rM   r   c                  T    \ rS rSrSrSrSrSrSr\	S 5       r
S rS rS rSS jrS	rg
)rA   i  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                   Un[        S5       HM  n[        X 5      (       a  UR                  S   nM$  US:X  a#  UR                  (       a  [        R
                  s  $   O   [        R
                  $ SSKJnJn  [        X5      (       a  [        U[        5      $ [        X5      (       ak  [        UR                  S   5      nUR                  (       aB  US[        R                  -  -  nU[        R                  :  a  US[        R                  -  -  nU$ UR                  (       dx  [        U5      R!                  5       u  pxUR"                  (       a=  [%        UR                   Vs/ s H  n['        U5      S;  a  UO
['        U5      PM!     sn6 n['        U5      U-  nOUn[)        S UR+                  [,        5       5       5      (       a  g SSKJn	  UR3                  5       u  pU	" X5      nUR4                  (       a  U$ X:w  a  U " USS	9$ g s  snf )
N   r   r   r   	exp_polar)r   r   c              3  <   #    U  H  oR                   S L v   M     g 7fr%   )r   )r(   r  s     r*   r+   arg.eval.<locals>.<genexpr>  s     P7O!%%-7Os   atan2FrX   )ranger7   r    r1   r   r/   r  r   r^  periodic_argumentr   r>   r   Piis_Atomr   as_coeff_Mulr   r   r   r  r  r   (sympy.functions.elementary.trigonometricrb  r5   	is_number)r@   rA   rH   r  r   r^  i_rJ   arg_rb  r[   yrN  s                r*   rK   arg.eval  s   qA!!!FF1I6a0055L  55LIc%%$S"--!!CHHQKBaf9!ADD&LB	{{"3'446GA{{%)YY0%. $(7'#9QG%.0 174<DDPtzz,7OPPPB  "1[<<I;te,, 0s   "&Hc                    U R                   S   R                  5       u  p#U[        X1SS9-  U[        X!SS9-  -
  US-  US-  -   -  $ )Nr   TrX   r   )r    r5   r   )rQ   r  r[   rl  s       r*   r\   arg._eval_derivative  sZ    yy|((*Jqd33aqd374 4891q!tE 	ErM   c                \    SSK Jn  U R                  S   R                  5       u  pEU" XT5      $ )Nr   ra  )rh  rb  r    r5   )rQ   rA   rb   rb  r[   rl  s         r*   _eval_rewrite_as_atan2arg._eval_rewrite_as_atan2  s'    Byy|((*Q{rM   c                   U R                   S   n[        SSS9nUS:X  a  SnUR                  XU-  5      nUR                  (       a  [        R
                  $ UR                  (       a  [        R                  $ [        SU -  5      e)Nr   r  T)positiver   zCannot expand %s around 0)	r    r	   r   r  r   r3   r  re  r   )rQ   r[   r   r   r   r  r#  s          r*   _eval_as_leading_termarg._eval_as_leading_term   sj    yy|#%19DIIaa ==66M]]44K74@AArM   c                J    SSK Jn  US::  a  U" S5      $ U R                  XUS9$ )Nr   )Orderr   )r   r   )sympy.series.orderrx  ru  )rQ   r[   r   r   r   rx  s         r*   r   arg._eval_nseries-  s+    ,68O))!T)BBrM   rz   Nr   )r|   r}   r~   r   r   r1   is_realrs   r   r   rK   r\   rq  ru  r   r   rz   rM   r*   rA   rA     sI    -^ GIN&- &-PE

BCrM   rA   c                  V    \ rS rSrSrSr\S 5       rS rS r	S r
S rS	 rS
 rS rSrg)r8   i4  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                .    UR                  5       nUb  U$ g r%   )r   r@   rA   r  s      r*   rK   conjugate.evalb      !!#?J rM   c                    [         $ r%   )r8   rh   s    r*   inverseconjugate.inverseh  s    rM   c                0    [        U R                  S   SS9$ rW   r   r    rh   s    r*   r   conjugate._eval_Absk      499Q<$//rM   c                2    [        U R                  S   5      $ r`   	transposer    rh   s    r*   _eval_adjointconjugate._eval_adjointn      1&&rM   c                     U R                   S   $ r`   r    rh   s    r*   r   conjugate._eval_conjugateq      yy|rM   c                    UR                   (       a!  [        [        U R                  S   USS95      $ UR                  (       a"  [        [        U R                  S   USS95      * $ g rW   )r{  r8   r   r    r2   rZ   s     r*   r\   conjugate._eval_derivativet  sP    99Z		!a$GHH^^j1q4HIII rM   c                2    [        U R                  S   5      $ r`   adjointr    rh   s    r*   _eval_transposeconjugate._eval_transposez      tyy|$$rM   c                4    U R                   S   R                  $ r`   rf   rh   s    r*   ri   conjugate._eval_is_algebraic}  rk   rM   rz   N)r|   r}   r~   r   r   r   r   rK   r  r   r  r   r\   r  ri   r   rz   rM   r*   r8   r8   4  sE    *V N 
0'J%)rM   r8   c                  :    \ rS rSrSr\S 5       rS rS rS r	Sr
g)	r  i  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                .    UR                  5       nUb  U$ g r%   )r  r~  s      r*   rK   transpose.eval  r  rM   c                2    [        U R                  S   5      $ r`   r8   r    rh   s    r*   r  transpose._eval_adjoint  r  rM   c                2    [        U R                  S   5      $ r`   r  rh   s    r*   r   transpose._eval_conjugate  r  rM   c                     U R                   S   $ r`   r  rh   s    r*   r  transpose._eval_transpose  r  rM   rz   N)r|   r}   r~   r   r   r   rK   r  r   r  r   rz   rM   r*   r  r    s+    &P  
'%rM   r  c                  J    \ rS rSrSr\S 5       rS rS rS r	SS jr
S	 rS
rg)r  i  aq  
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                j    UR                  5       nUb  U$ UR                  5       nUb  [        U5      $ g r%   )r  r  r8   r~  s      r*   rK   adjoint.eval  s<    !?J!!#?S>! rM   c                     U R                   S   $ r`   r  rh   s    r*   r  adjoint._eval_adjoint  r  rM   c                2    [        U R                  S   5      $ r`   r  rh   s    r*   r   adjoint._eval_conjugate  r  rM   c                2    [        U R                  S   5      $ r`   r  rh   s    r*   r  adjoint._eval_transpose  r  rM   Nc                p    UR                  U R                  S   5      nSU-  nU(       a  SU< SU< S3nU$ )Nr   z%s^{\dagger}z\left(z	\right)^{})_printr    )rQ   printerr   r    rA   texs         r*   _latexadjoint._latex  s4    nnTYYq\*#-0#6C
rM   c                    SSK Jn  UR                  " U R                  S   /UQ76 nUR                  (       a  XC" S5      -  nU$ XC" S5      -  nU$ )Nr   )
prettyFormu   †+) sympy.printing.pretty.stringpictr  r  r    _use_unicode)rQ   r  r    r  pforms        r*   _prettyadjoint._pretty  sT    ?tyy|3d3:l33E  :c?*ErM   rz   r%   )r|   r}   r~   r   r   r   rK   r  r   r  r  r  r   rz   rM   r*   r  r    s4    4 " "''rM   r  c                  <    \ rS rSrSrSrSr\S 5       rS r	S r
Srg	)

polar_lifti  a2  
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                N   SSK Jn  UR                  (       aF  U" U5      nUS[        S-  [        * S-  [        4;   a!  SSKJn  U" [        U-  5      [        U5      -  $ UR                  (       a  UR                  nOU/n/ n/ n/ nU H8  nUR                  (       a  Xa/-  nM  UR                  (       a  X/-  nM3  Xq/-  nM:     [        U5      [        U5      :  aK  U(       a  [        Xh-   6 [        [        U6 5      -  $ U(       a
  [        Xh-   6 $ SSKJn  [        U6 U" S5      -  $ g )Nr   rA   r   r^  )$sympy.functions.elementary.complexesrA   ri  r   r  r^  r   absr   r    is_polarr  r=   r   r  )	r@   rA   argumentarr^  r    rB   rD   rt  s	            r*   rK   polar_lift.eval%  s   H==#B
 aAs1ub))L 2s3x//::88D5DC||E!E!E!  x=3t9$X02:c8n3MMMX022LH~il22 %rM   c                >    U R                   S   R                  U5      $ )z-Careful! any evalf of polar numbers is flaky r   )r    _eval_evalf)rQ   precs     r*   r  polar_lift._eval_evalfI  s    yy|''--rM   c                0    [        U R                  S   SS9$ rW   r  rh   s    r*   r   polar_lift._eval_AbsM  r  rM   rz   N)r|   r}   r~   r   r   r  r   r   rK   r  r   r   rz   rM   r*   r  r    s1    #J HM!3 !3F.0rM   r  c                  >    \ rS rSrSr\S 5       r\S 5       rS rSr	g)rd  iQ  aI  
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   SSK JnJn  UR                  (       a  UR                  nOU/nSnU H  nUR
                  (       d  U[        U5      -  nM$  [        Xb5      (       a!  XVR                  R                  5       S   -  nMU  UR                  (       aV  UR                  R                  5       u  pxXW[        UR                  5      -  X" [        UR                  5      5      -  -   -  nM  [        U[        5      (       a  U[        UR                  S   5      -  nM    g    U$ )Nr   )r^  r   r   )r  r^  r   r   r    r  rA   r7   r   r5   r   unbranched_argumentr  r  r  )	r@   r  r^  r   r    r   rH   r   r>   s	            r*   _getunbranched periodic_argument._getunbranchedz  s    I9977D4D
A::c!f$
A))ee002155
++-!4FF"  S[!112 2
Az**c!&&)n,
  rM   c                   UR                   (       d  g U[        :X  a'  [        U[        5      (       a  [	        UR
                  6 $ [        U[        5      (       a&  US[        -  :  a  [	        UR
                  S   U5      $ UR                  (       ab  UR
                   Vs/ s H  o3R                  (       a  M  UPM     nn[        U5      [        UR
                  5      :w  a  [	        [        U6 U5      $ U R                  U5      nUc  g SSKJnJn  UR!                  [        Xv5      (       a  g U[        :X  a  U$ U[        :w  a?  SSKJn  U" XR-  [&        R(                  -
  5      U-  n	U	R!                  U5      (       d  XY-
  $ g g s  snf )Nr   r   )atanrb  ceiling)r   r   r7   principal_branchrd  r    r  r   r   r  r=   r   r  rh  r  rb  r<   #sympy.functions.elementary.integersr  r   r   )
r@   r  periodr[   newargsr   r  rb  r  r   s
             r*   rK   periodic_argument.eval  s/    **R<Jr+;<<$bgg..b*%%&AbD.$RWWQZ8899"$''?'Qq'G?7|s277|+(g??''+
H>>+U99R<R<C
)AFF23F:A55>>!~% "  @s   F6Fc                0   U R                   u  p#U[        :X  a+  [        R                  U5      nUc  U $ UR	                  U5      $ [        U[        5      R	                  U5      nSSKJn  XV" XS-  [        R                  -
  5      U-  -
  R	                  U5      $ )Nr   r  )	r    r   rd  r  r  r  r  r   r   )rQ   r  r#  r  r   ubr  s          r*   r  periodic_argument._eval_evalf  s    II	R<*99!<J!))$//q"%11$7?WRY/077DDTJJrM   rz   N)
r|   r}   r~   r   r   r   r  rK   r  r   rz   rM   r*   rd  rd  Q  s6    &P  , & &:	KrM   rd  c                "    [        U [        5      $ )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
)rd  r   r  s    r*   r  r    s    & S"%%rM   c                  6    \ rS rSrSrSrSr\S 5       rS r	Sr
g)	r  i  aZ  
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                    SSK Jn  [        U[        5      (       a  [	        UR
                  S   U5      $ U[        :X  a  U$ [        U[        5      n[        X5      nXE:w  a  UR                  [        5      (       d  UR                  [        5      (       d  [        U5      nS nUR                  [        U5      n[        U[        5      nUR                  [        5      (       dO  XE:w  a  U" [        XT-
  -  5      U-  nOUnUR                  (       d   UR                  U5      (       d
  X" S5      -  nU$ UR                  (       d  USpOUR                  " UR                  6 u  p/ nU
 H  nUR                  (       a  X-  n	M  X/-  nM!     [        U5      n
[        X5      nUR                  [        5      (       a  g UR                   (       as  [#        U	5      U:w  d  US:X  a^  U
S:w  aX  U	S:w  aR  US:X  a  [%        U	5      [	        ['        U
6 U5      -  $ [	        U" [        U-  5      ['        U
6 -  U5      [%        U	5      -  $ UR                   (       a@  [%        U5      US-  :  S:X  d  XS-  :X  a"  U
S:X  a  U" U[        -  5      [%        U	5      -  $ g g g )Nr   r  c                F    [        U [        5      (       d  [        U 5      $ U $ r%   )r7   r   r  )exprs    r*   mr!principal_branch.eval.<locals>.mr
  s    !$//%d++rM   rz   r   r   T)r  r^  r7   r  r  r    r   rd  r<   replacer   r  r  r   r  tupleri  r  r  r   )rQ   r[   r  r^  r  bargplr  resrJ   mothersrl  rA   s                 r*   rK   principal_branch.eval  s    Da$$#AFF1Iv66R<Hq"% +:bff%677!233AB J+B"2r*B66*%%:#AtyM225CC||CGGI,>,>9Q<'C
~~bq>>1>>2DAA}}#	 
 &M*77$%%==1!4;"axAGQax1v.sAw???#Iae$4S!W$<fEc!fLL==s3x&(2t;sQhGSU#CF**  @O=rM   c                    U R                   u  p#[        X#5      R                  U5      n[        U5      [        :  d  U[        * :X  a  U $ SSKJn  [        U5      U" [        U-  5      -  R                  U5      $ )Nr   )r   )r    rd  r  r  r   r  r   r   )rQ   r  r#  r  pr   s         r*   r  principal_branch._eval_evalf1  s^    II	a(44T:q6B;!s(K>As1Q3x,,T22rM   rz   N)r|   r}   r~   r   r   r  r   r   rK   r  r   rz   rM   r*   r  r    s,    &P HM1+ 1+f3rM   r  c                   SSK Jn  U R                  (       a  U $ U R                  (       a  U(       d  [	        U 5      $ [        U [        5      (       a  U(       d  U(       a  [	        U 5      $ U R                  (       a  U $ U R                  (       aF  U R                  " U R                   Vs/ s H  n[        XASS9PM     sn6 nU(       a  [	        U5      $ U$ U R                  (       aQ  U R                  [        R                  :X  a3  U R                  [        R                  [        U R                   USS95      $ U R"                  (       a2  U R                  " U R                   Vs/ s H  n[        XASS9PM     sn6 $ [        X5      (       an  [        U R$                  XS9n/ nU R                  SS   H3  n[        US   SUS9n	[        USS  XS9n
UR'                  U	4U
-   5        M5     U" U4[)        U5      -   6 $ U R                  " U R                   Vs/ s H$  n[        U[*        5      (       a
  [        XAUS9OUPM&     sn6 $ s  snf s  snf s  snf )Nr   )IntegralT)pauseFr   )liftr  )sympy.integrals.integralsr  r  ri  r  r7   r   rf  r  r   r    	_polarifyr   r  r   Exp1r   r6   functionr;   r  r   )eqr  r  r  rA   rr   limitslimitvarrests              r*   r  r  :  s   2	{{		||E"~"fe"~			GG"''J'3i6'JKa= 	rww!&&(wwqvvyUCDD	wwbggNgs3E:gNOO	B	!	!d8WWQR[EE!H5>CU12YT?DMM3&4-( ! 4'E&M133wwFHggOFMsJsD11 #3E:7:;FMO P 	P% K OOs   )I"I+Ic           	     0   U(       a  Sn[        [        U 5      U5      n U(       d  U $ U R                   Vs0 s H  o3[        UR                  SS9_M     nnU R                  U5      n XR                  5        VVs0 s H  u  p5XS_M	     snn4$ s  snf s  snnf )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})
FT)polar)r  r   r  r	   namer   items)r  r   r  r   repsr  s         r*   polarifyr  [  s    P 	72;	%B	24//B/QuQVV4((/DB	B.... C.s   B:Bc           
     
   [        U [        5      (       a  U R                  (       a  U $ U(       GdQ  SSKJnJn  [        X5      (       a  U" [        U R                  U5      5      $ [        U [        5      (       a3  U R                  S   S[        -  :X  a  [        U R                  S   U5      $ U R                  (       dc  U R                  (       dR  U R                  (       dA  U R                  (       ac  U R                  S;   a  SU R                  ;   d  U R                  S;  a3  U R                  " U R                   Vs/ s H  n[        XQ5      PM     sn6 $ [        U [         5      (       a  [        U R                  S   U5      $ U R"                  (       aN  [        U R                  U5      n[        U R$                  UUR&                  =(       a    U(       + (       + 5      nXv-  $ U R(                  (       aP  [+        U R                  SS5      (       a4  U R                  " U R                   Vs/ s H  n[        XQU5      PM     sn6 $ U R                  " U R                   Vs/ s H  n[        XQS5      PM     sn6 $ s  snf s  snf s  snf )	Nr   r]  r   r   )z==z!=r   FT)r7   r
   rf  r  r   r^  _unpolarifyr  r    r   r  r   
is_Booleanis_Relationalrel_opr   r  r   r  r   r6   getattr)r  exponents_onlyr  r   r^  r[   expor  s           r*   r  r    s   b%  BJJ	Ib$${266>:;;b*++
ad0Brwwqz>::IIbmm		\)a277l		-77RWWMW[;WMNNb*%%rwwqz>::	yy266>2277N.Y/1z	~~'"''<??wwWW %QG  	 77277K7a[D97KLL N Ls   ;I6(I;J Nc                j   [        U [        5      (       a  U $ [        U 5      n Ub  [        U R	                  U5      5      $ SnSnU(       a  SnU(       a7  Sn[        XU5      nXP:w  a  SnUn [        U[        5      (       a  U$ U(       a  M7  SSKJn  WR	                  U" S5      S[        S5      S05      $ )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)
TFr   r  r   )	r7   boolr   
unpolarifyr   r  r  r^  r  )r  r   r  changedr  r  r^  s          r*   r  r    s    " "d		B"''$-((GE
"e49GBc4  J ' A88Yq\1jmQ788rM   )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   rA   r8   r  r  r  rd  r  r  r  r  r  r  rz   rM   r*   <module>r     s    " A A A   -) ) 0 ( (   $ 9 :w wtu uvr5? r5jw(/ w(tyC/ yCxJ) J)Z6 6r;o ;DR0 R0jgK gKT&,f3 f3RPB//dMB&9rM   