
    Цi                        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  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&)+    )Tuple)SAddMulsympifySymbolDummyBasic)Expr)factor_terms)Function
DerivativeArgumentIndexErrorAppliedUndef
expand_mul)	fuzzy_notfuzzy_or)piIoo)Pow)Eq)sqrt)	Piecewisec                   t    \ rS rSr% Sr\\   \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
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     c/var/www/html/ai-image-ml/venv/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   r1   selfdeephintss      r(   r3   re.as_real_imagm       
 aff~rK   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)r/   r   r   r   r0   r   r<   rO   xs     r(   _eval_derivativere._eval_derivativet   }    1!>!>j1q4@AA>>TYYq\662Z		!a$?@A A 7rK   c                 `    U R                   S   [        [        U R                   S   5      -  -
  $ Nr   )r   r   r<   rO   r?   kwargss      r(   _eval_rewrite_as_imre._eval_rewrite_as_im{   s'    yy|a499Q< 0000rK   c                 4    U R                   S   R                  $ r^   r   is_algebraicrO   s    r(   _eval_is_algebraicre._eval_is_algebraic~       yy|(((rK   c                 x    [        U R                  S   R                  U R                  S   R                  /5      $ r^   )r   r   r0   is_zerorf   s    r(   _eval_is_zerore._eval_is_zero   s.    122DIIaL4H4HIJJrK   c                 B    U R                   S   R                  (       a  gg Nr   Tr   	is_finiterf   s    r(   _eval_is_finitere._eval_is_finite       99Q<!! "rK   c                 B    U R                   S   R                  (       a  gg ro   rp   rf   s    r(   _eval_is_complexre._eval_is_complex   rt   rK    NT)__name__
__module____qualname____firstlineno____doc__tTupler   __annotations__r/   
unbranched_singularitiesclassmethodrI   r3   rZ   ra   rg   rl   rr   rv   __static_attributes__rx   rK   r(   r   r      s\    'R ,JN&* &*PA1)KrK   r   c                   t    \ rS rSr% Sr\\   \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   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-   r.   r/   r1   r0   r   r2   r3   r4   r5   r6   r<   r   r   r7   r8   r9   r:   r;   r   r=   s               r(   rI   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~)) *rK   c                 &    U [         R                  4$ )z3
Return the imaginary part with a zero real part.

rM   rN   s      r(   r3   im.as_real_imag   rS   rK   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 rU   )r/   r   r<   r   r0   r   r   rX   s     r(   rZ   im._eval_derivative   r\   rK   c                 b    [         * U R                  S   [        U R                  S   5      -
  -  $ r^   )r   r   r   r_   s      r(   _eval_rewrite_as_reim._eval_rewrite_as_re   s)    r499Q<"TYYq\"2233rK   c                 4    U R                   S   R                  $ r^   rd   rf   s    r(   rg   im._eval_is_algebraic   ri   rK   c                 4    U R                   S   R                  $ r^   r   r/   rf   s    r(   rl   im._eval_is_zero       yy|,,,rK   c                 B    U R                   S   R                  (       a  gg ro   rp   rf   s    r(   rr   im._eval_is_finite   rt   rK   c                 B    U R                   S   R                  (       a  gg ro   rp   rf   s    r(   rv   im._eval_is_complex  rt   rK   rx   Nry   )rz   r{   r|   r}   r~   r   r   r   r/   r   r   r   rI   r3   rZ   r   rg   rl   rr   rv   r   rx   rK   r(   r<   r<      s[    'R ,JN%* %*NA4)-rK   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   rk   Abs)rO   rQ   s	__class__s      r(   r   	sign.doitC  sM    GLN91--699Q<#diil"333rK   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_positiver0   r<   is_comparabler   r9   r   Oner;   _new_rawargsr-   rk   r1   NegativeOner4   r5   is_PowexpHalf)	r>   r?   rH   r   unkr   rF   aiarg2s	            r(   rI   	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	 ) rK   c                 r    [        U R                  S   R                  5      (       a  [        R                  $ g r^   )r   r   rk   r   r   rf   s    r(   	_eval_Abssign._eval_Abs{  s)    TYYq\))**55L +rK   c                 D    [        [        U R                  S   5      5      $ r^   )r   r6   r   rf   s    r(   _eval_conjugatesign._eval_conjugate  s    Idiil+,,rK   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   TrV   )r   r/   'sympy.functions.special.delta_functionsr   r   r0   r   )rO   rY   r   s      r(   rZ   sign._eval_derivative  s    99Q<((Jz$))A,DAATYYq\*+ +YYq\&&Jz$))A,DAAaR$))A,./0 0 'rK   c                 B    U R                   S   R                  (       a  gg ro   )r   is_nonnegativerf   s    r(   _eval_is_nonnegativesign._eval_is_nonnegative      99Q<&& 'rK   c                 B    U R                   S   R                  (       a  gg ro   )r   is_nonpositiverf   s    r(   _eval_is_nonpositivesign._eval_is_nonpositive  r   rK   c                 4    U R                   S   R                  $ r^   )r   r0   rf   s    r(   _eval_is_imaginarysign._eval_is_imaginary  ri   rK   c                 4    U R                   S   R                  $ r^   r   rf   s    r(   _eval_is_integersign._eval_is_integer  r   rK   c                 4    U R                   S   R                  $ r^   )r   rk   rf   s    r(   rl   sign._eval_is_zero  s    yy|###rK   c                     [        U R                  S   R                  5      (       a4  UR                  (       a"  UR                  (       a  [
        R                  $ g g g r^   )r   r   rk   
is_integeris_evenr   r   )rO   others     r(   _eval_powersign._eval_power  sC    diil**++MM55L   ,rK   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   )rO   rY   nlogxcdirarg0x0s          r(   _eval_nseriessign._eval_nseries  sg    yy|YYq!_799R= 1988A$DDAv01550rK   c                 T    UR                   (       a  [        SUS:  4SUS:  4S5      $ g )Nr   r   )r   T)r/   r   r_   s      r(   _eval_rewrite_as_Piecewisesign._eval_rewrite_as_Piecewise  s/    aq\Ba=)DD  rK   c                 N    SSK Jn  UR                  (       a  U" U5      S-  S-
  $ g )Nr   	Heavisider   r   r   r   r/   rO   r?   r`   r   s       r(   _eval_rewrite_as_Heavisidesign._eval_rewrite_as_Heaviside  s'    ES>A%))  rK   c                 N    [        S[        US5      4U[        U5      -  S45      $ ro   )r   r   r   r_   s      r(   _eval_rewrite_as_Abssign._eval_rewrite_as_Abs  s&    !RQZ3S>4*@AArK   c                 P    U R                  [        U R                  S   5      5      $ r^   )r   r   r   )rO   r`   s     r(   _eval_simplifysign._eval_simplify  s    yydiil344rK   rx   r   )rz   r{   r|   r}   r~   
is_complexr   r   r   rI   r   r   rZ   r   r   r   r   rl   r   r   r   r   r   r   r   __classcell__)r   s   @r(   r   r   	  s|    4l JN / /b-0)-$1E*
B5 5rK   r   c                       \ rS rSr% Sr\\   \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   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   )rO   argindexs     r(   fdiff	Abs.fdiff   s)    
 q=		!%%$T44rK   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(): %sFrV   )r   logc              3   8   #    U  H  oR                   v   M     g 7fr#   )is_infinite)r&   rF   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&   ir?   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:   r6   )r&   uconjs     r(   r)   r  h  s!     !F#Q$((9Q<"8"8#s   '*)9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anyrk   r1   is_extended_nonpositiver0   r6   atomsallxreplacer	   r   r   )r>   r?   r   objr   dknownr   tbnewtnewr   r   r  exponentrF   rG   zr   new_conjr!   r  abs_free_argr  s    `                     @r(   rI   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 ro   rp   rf   s    r(   _eval_is_realAbs._eval_is_realk  rt   rK   c                 r    U R                   S   R                  (       a  U R                   S   R                  $ g r^   )r   r/   r   rf   s    r(   r   Abs._eval_is_integero  s,    99Q<((99Q<*** )rK   c                 F    [        U R                  S   R                  5      $ r^   r   _argsrk   rf   s    r(   _eval_is_extended_nonzeroAbs._eval_is_extended_nonzeros      A..//rK   c                 4    U R                   S   R                  $ r^   )r-  rk   rf   s    r(   rl   Abs._eval_is_zerov  s    zz!}$$$rK   c                 F    [        U R                  S   R                  5      $ r^   r,  rf   s    r(   _eval_is_extended_positiveAbs._eval_is_extended_positivey  r0  rK   c                 r    U R                   S   R                  (       a  U R                   S   R                  $ g r^   )r   r/   is_rationalrf   s    r(   _eval_is_rationalAbs._eval_is_rational|  s,    99Q<((99Q<+++ )rK   c                 r    U R                   S   R                  (       a  U R                   S   R                  $ g r^   )r   r/   r   rf   s    r(   _eval_is_evenAbs._eval_is_even  s,    99Q<((99Q<''' )rK   c                 r    U R                   S   R                  (       a  U R                   S   R                  $ g r^   )r   r/   is_oddrf   s    r(   _eval_is_oddAbs._eval_is_odd  s,    99Q<((99Q<&&& )rK   c                 4    U R                   S   R                  $ r^   rd   rf   s    r(   rg   Abs._eval_is_algebraic  ri   rK   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   r/   r   r   r   r   
is_Integer)rO   r!  s     r(   r   Abs._eval_power  sj    99Q<((X-@-@yy|X--.83F3Fyy|hl3D88rK   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)rO   rY   r   r   r   r   	directionr   s           r(   r   Abs._eval_nseries  s~    >IIaL))!,Q/	==Q  !s1vt4IIIaL&&qD&9Y!))++rK   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      $ rU   )
r   r/   r0   r   r   r6   r   r<   r   rewrite)rO   rY   rvs      r(   rZ   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$rK   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  rK   c                     UR                   (       a  [        XS:  4U* S45      $ UR                  (       a)  [        [        U-  [        U-  S:  4[        * U-  S45      $ g ro   )r/   r   r0   r   r_   s      r(   r   Abs._eval_rewrite_as_Piecewise  sZ    c!8_tTl;;aeQsUaZ0A2c64.AA rK   c                     U[        U5      -  $ r#   )r   r_   s      r(   _eval_rewrite_as_signAbs._eval_rewrite_as_sign  s    49}rK   c                 0    [        U[        U5      -  5      $ r#   )r   r6   r_   s      r(   _eval_rewrite_as_conjugateAbs._eval_rewrite_as_conjugate  s    C	#&''rK   rx   N)r   r   )!rz   r{   r|   r}   r~   r   r   r   r/   r   r  r   r   r   r   rI   r'  r   r.  rl   r4  r8  r;  r?  rg   r   r   rZ   r   r   rT  rW  r   rx   rK   r(   r   r     s    7r , "JN5 ^2 ^2@+0%0,('), :B(rK   r   c                   D    \ rS rSrSrSrSrSrSr\	S 5       r
S rS rSrg)	r?   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   atan2FrV   )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.trigonometricra  r3   	is_number)r>   r?   rF   r  r   r]  i_rH   arg_ra  rY   yrM  s                r(   rI   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   TrV   r   )r   r3   r   )rO   r  rY   rk  s       r(   rZ   arg._eval_derivative  sZ    yy|((*Jqd33aqd374 4891q!tE 	ErK   c                 \    SSK Jn  U R                  S   R                  5       u  pEU" XT5      $ )Nr   r`  )rg  ra  r   r3   )rO   r?   r`   ra  rY   rk  s         r(   _eval_rewrite_as_atan2arg._eval_rewrite_as_atan2  s'    Byy|((*Q{rK   rx   N)rz   r{   r|   r}   r~   r/   is_realrq   r   r   rI   rZ   rp  r   rx   rK   r(   r?   r?     s=    -^ GIN&- &-PE
rK   r?   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)r6   i!  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>   r?   r  s      r(   rI   conjugate.evalO      !!#?J rK   c                     [         $ r#   )r6   rf   s    r(   inverseconjugate.inverseU  s    rK   c                 0    [        U R                  S   SS9$ rU   r   r   rf   s    r(   r   conjugate._eval_AbsX      499Q<$//rK   c                 2    [        U R                  S   5      $ r^   	transposer   rf   s    r(   _eval_adjointconjugate._eval_adjoint[      1&&rK   c                      U R                   S   $ r^   r   rf   s    r(   r   conjugate._eval_conjugate^      yy|rK   c                     UR                   (       a!  [        [        U R                  S   USS95      $ UR                  (       a"  [        [        U R                  S   USS95      * $ g rU   )rr  r6   r   r   r0   rX   s     r(   rZ   conjugate._eval_derivativea  sP    99Z		!a$GHH^^j1q4HIII rK   c                 2    [        U R                  S   5      $ r^   adjointr   rf   s    r(   _eval_transposeconjugate._eval_transposeg      tyy|$$rK   c                 4    U R                   S   R                  $ r^   rd   rf   s    r(   rg   conjugate._eval_is_algebraicj  ri   rK   rx   N)rz   r{   r|   r}   r~   r   r   rI   ry  r   r  r   rZ   r  rg   r   rx   rK   r(   r6   r6   !  sE    *V N 
0'J%)rK   r6   c                   :    \ rS rSrSr\S 5       rS rS rS r	Sr
g)	r  in  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  ru  s      r(   rI   transpose.eval  rw  rK   c                 2    [        U R                  S   5      $ r^   r6   r   rf   s    r(   r  transpose._eval_adjoint  r  rK   c                 2    [        U R                  S   5      $ r^   r  rf   s    r(   r   transpose._eval_conjugate  r  rK   c                      U R                   S   $ r^   r  rf   s    r(   r  transpose._eval_transpose  r  rK   rx   N)rz   r{   r|   r}   r~   r   rI   r  r   r  r   rx   rK   r(   r  r  n  s+    &P  
'%rK   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  r6   ru  s      r(   rI   adjoint.eval  s<    !?J!!#?S>! rK   c                      U R                   S   $ r^   r  rf   s    r(   r  adjoint._eval_adjoint  r  rK   c                 2    [        U R                  S   5      $ r^   r  rf   s    r(   r   adjoint._eval_conjugate  r  rK   c                 2    [        U R                  S   5      $ r^   r  rf   s    r(   r  adjoint._eval_transpose  r  rK   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   )rO   printerr   r   r?   texs         r(   _latexadjoint._latex  s4    nnTYYq\*#-0#6C
rK   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)rO   r  r   r  pforms        r(   _prettyadjoint._pretty  sT    ?tyy|3d3:l33E  :c?*ErK   rx   r#   )rz   r{   r|   r}   r~   r   rI   r  r   r  r  r  r   rx   rK   r(   r  r    s4    4 " "''rK   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   r?   r   r]  )$sympy.functions.elementary.complexesr?   rh  r   r  r]  r   absr   r   is_polarr  r;   r   r  )	r>   r?   argumentarr]  r   r@   rB   positives	            r(   rI   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 %rK   c                 >    U R                   S   R                  U5      $ )z-Careful! any evalf of polar numbers is flaky r   )r   _eval_evalf)rO   precs     r(   r  polar_lift._eval_evalf6  s    yy|''--rK   c                 0    [        U R                  S   SS9$ rU   r|  rf   s    r(   r   polar_lift._eval_Abs:  r~  rK   rx   N)rz   r{   r|   r}   r~   r  r   r   rI   r  r   r   rx   rK   r(   r  r    s1    #J HM!3 !3F.0rK   r  c                   >    \ rS rSrSr\S 5       r\S 5       rS rSr	g)rc  i>  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  r?   r5   r   r3   r   unbranched_argumentr  r  r  )	r>   r  r]  r   r   r   rF   r   r<   s	            r(   _getunbranched periodic_argument._getunbranchedg  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,
  rK   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   )atanra  ceiling)r   r   r5   principal_branchrc  r   r  r   r   r  r;   r   r  rg  r  ra  r:   #sympy.functions.elementary.integersr  r   r   )
r>   r  periodrY   newargsr   r  ra  r  r   s
             r(   rI   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   rc  r  r  r  r  r   r   )rO   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JrK   rx   N)
rz   r{   r|   r}   r~   r   r  rI   r  r   rx   rK   r(   rc  rc  >  s6    &P  , & &:	KrK   rc  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
)rc  r   r  s    r(   r  r    s    & S"%%rK   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#   )r5   r   r  )exprs    r(   mr!principal_branch.eval.<locals>.mr  s    !$//%d++rK   rx   r   r   T)r  r]  r5   r  r  r   r   rc  r:   replacer   r  r  r   r  tuplerh  r  r  r   )rO   rY   r  r]  r  bargplr  resrH   mothersrk  r?   s                 r(   rI   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=rK   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   rc  r  r  r   r  r   r   )rO   r  r"  r  pr   s         r(   r  principal_branch._eval_evalf  s^    II	a(44T:q6B;!s(K>As1Q3x,,T22rK   rx   N)rz   r{   r|   r}   r~   r  r   r   rI   r  r   rx   rK   r(   r  r    s,    &P HM1+ 1+f3rK   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  rh  r  r5   r   re  r  r   r   	_polarifyr   r  r   Exp1r   r4   functionr9   r  r   )eqr  r  r  r?   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  H  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)r5   r
   re  r  r   r]  _unpolarifyr  r   r   r  r   
is_Booleanis_Relationalrel_opr   r  r   r  r   r4   getattr)r  exponents_onlyr  r   r]  rY   expor  s           r(   r  r  z  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   )	r5   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8rK   )F)TF)NF)4typingr   r   
sympy.corer   r   r   r   r   r	   r
   sympy.core.exprr   sympy.core.exprtoolsr   sympy.core.functionr   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   r  r  r  rc  r  r  r  r  r  r  rx   rK   r(   <module>r     s    " A A A   -  0 ( (   $ 9 :w wtu uvr58 r5jw(( w(tf( fRJ) J)Z6 6r;h ;DR0 R0jgK gKT&,f3x f3RPB//dMB&9rK   