
    g                        d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d d	lmZmZmZmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:  G d de          Z; G d de;          Z< G d de          Z= G d de;e=          Z>d Z? G d d e          Z@ G d! d"e          ZAed#             ZBd$S )%    )product)Tuple)Add)cacheit)Expr)FunctionArgumentIndexError
expand_log
expand_mulFunctionClass	PoleErrorexpand_multinomialexpand_complex)	fuzzy_and	fuzzy_notfuzzy_or)Mul)IntegerRationalpiI)global_parameters)Pow)Ge)S)WildDummy)sympify)	factorial)arg
unpolarifyimreAbs)sqrt)multiplicityperfect_power)	factorintc                       e Zd ZdZej        fZed             ZddZ	d Z
ed             Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )ExpBaseTc                     | j         j        S N)expkindselfs    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/functions/elementary/exponential.pyr.   zExpBase.kind)   s    x}       c                     t           S )z=
        Returns the inverse function of ``exp(x)``.
        logr0   argindexs     r1   inversezExpBase.inverse-   	     
r2   c                     | j         s| t          j        fS | j        }|j        }|s| j        s|                                }|r"t          j        |                     |           fS | t          j        fS )a-  
        Returns this with a positive exponent as a 2-tuple (a fraction).

        Examples
        ========

        >>> from sympy import exp
        >>> from sympy.abc import x
        >>> exp(-x).as_numer_denom()
        (1, exp(x))
        >>> exp(x).as_numer_denom()
        (exp(x), 1)
        )is_commutativer   Oner-   is_negativecould_extract_minus_signfunc)r0   r-   neg_exps      r1   as_numer_denomzExpBase.as_numer_denom3   s{      " 	;h/ 	51 	52244G 	*5$))SD//))QU{r2   c                     | j         d         S )z7
        Returns the exponent of the function.
        r   )argsr/   s    r1   r-   zExpBase.expM   s    
 y|r2   c                 H    |                      d          t          | j         fS )z7
        Returns the 2-tuple (base, exponent).
        r3   )r@   r   rD   r/   s    r1   as_base_expzExpBase.as_base_expT   s     yy||S$)_,,r2   c                 Z    |                      | j                                                  S r,   )r@   r-   adjointr/   s    r1   _eval_adjointzExpBase._eval_adjointZ   s"    yy))++,,,r2   c                 Z    |                      | j                                                  S r,   )r@   r-   	conjugater/   s    r1   _eval_conjugatezExpBase._eval_conjugate]   "    yy++--...r2   c                 Z    |                      | j                                                  S r,   )r@   r-   	transposer/   s    r1   _eval_transposezExpBase._eval_transpose`   rM   r2   c                 X    | j         }|j        r|j        rdS |j        rdS |j        rdS d S NTF)r-   is_infiniteis_extended_negativeis_extended_positive	is_finiter0   r    s     r1   _eval_is_finitezExpBase._eval_is_finitec   sL    h? 	' t' u= 	4	 	r2   c                      | j         | j         }|j         | j         k    r1|j        j        }|rdS |j        j        rt          |          rdS d S d S |j        S rR   )r@   rD   r-   is_zerois_rationalr   )r0   szs      r1   _eval_is_rationalzExpBase._eval_is_rationalm   st    DIty!6TYA t" y|| u    = r2   c                 (    | j         t          j        u S r,   )r-   r   NegativeInfinityr/   s    r1   _eval_is_zerozExpBase._eval_is_zerox   s    x1---r2   c                 z    |                                  \  }}t          j        t          ||d          |          S )z;exp(arg)**e -> exp(arg*e) if assumptions allow it.
        Fevaluate)rF   r   _eval_power)r0   otherbes       r1   re   zExpBase._eval_power{   s:     !!1s1a%888%@@@r2   c                 @    ddl m} ddlm}  j        d         }|j        r,|j        r%t          j         fd|j        D                       S t          ||          r-|j        r& | 
                    |j                  g|j        R  S  
                    |          S )Nr   )Product)Sumc              3   B   K   | ]}                     |          V  d S r,   )r@   ).0xr0   s     r1   	<genexpr>z1ExpBase._eval_expand_power_exp.<locals>.<genexpr>   s-      ??		!??????r2   )sympy.concrete.productsrj   sympy.concrete.summationsrk   rD   is_Addr<   r   fromiter
isinstancer@   functionlimits)r0   hintsrj   rk   r    s   `    r1   _eval_expand_power_expzExpBase._eval_expand_power_exp   s    333333111111il: 	A#, 	A<????ch??????S!! 	Ac&8 	A7499S\22@SZ@@@@yy~~r2   Nr3   )__name__
__module____qualname__
unbranchedr   ComplexInfinity_singularitiespropertyr.   r9   rB   r-   rF   rI   rL   rP   rX   r^   ra   re   rx    r2   r1   r*   r*   $   s       J')N  X     4   X- - -- - -/ / // / /  	! 	! 	!. . .A A A    r2   r*   c                   8    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	S )
	exp_polara<  
    Represent a *polar number* (see g-function Sphinx documentation).

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

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

    Examples
    ========

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

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

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

    apart from that they behave mostly like classical complex numbers:

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

    See Also
    ========

    sympy.simplify.powsimp.powsimp
    polar_lift
    periodic_argument
    principal_branch
    TFc                 P    t          t          | j        d                             S Nr   )r-   r#   rD   r/   s    r1   	_eval_Abszexp_polar._eval_Abs   s    2dil##$$$r2   c                 B   t          | j        d                   }	 |t           k    p
|t          k    }n# t          $ r d}Y nw xY w|r| S t	          | j        d                                       |          }|dk    r"t          |          dk     rt          |          S |S )z. Careful! any evalf of polar numbers is flaky r   T)r"   rD   r   	TypeErrorr-   _eval_evalfr#   )r0   precibadress        r1   r   zexp_polar._eval_evalf   s    ty|	8%q2vCC 	 	 	CCC	 	K$)A,++D11q55RWWq[[c77N
s   4 AAc                 H    |                      | j        d         |z            S r   )r@   rD   )r0   rf   s     r1   re   zexp_polar._eval_power   s    yy1e+,,,r2   c                 .    | j         d         j        rdS d S )Nr   T)rD   is_extended_realr/   s    r1   _eval_is_extended_realz exp_polar._eval_is_extended_real   s"    9Q<( 	4	 	r2   c                 t    | j         d         dk    r| t          j        fS t                              |           S r   )rD   r   r=   r*   rF   r/   s    r1   rF   zexp_polar.as_base_exp   s3    9Q<1;""4(((r2   N)rz   r{   r|   __doc__is_polaris_comparabler   r   re   r   rF   r   r2   r1   r   r      sv        # #J HM% % %  - - -  ) ) ) ) )r2   r   c                       e Zd Zd ZdS )ExpMetac                 |    t           |j        j        v rdS t          |t                    o|j        t          j        u S )NT)r-   	__class____mro__rt   r   baser   Exp1)clsinstances     r1   __instancecheck__zExpMeta.__instancecheck__   s6    ($,,,4(C((DX]af-DDr2   N)rz   r{   r|   r   r   r2   r1   r   r      s(        E E E E Er2   r   c                       e Zd ZdZddZd Zed             Zed             Z	e
ed                         Zdd	Zd
 Zd Zd Zd Zd ZddZd ZddZd Zd Zd Zd Zd ZdS )r-   a9  
    The exponential function, :math:`e^x`.

    Examples
    ========

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

    Parameters
    ==========

    arg : Expr

    See Also
    ========

    log
    r3   c                 2    |dk    r| S t          | |          )z@
        Returns the first derivative of this function.
        r3   )r	   r7   s     r1   fdiffz	exp.fdiff   s"     q==K$T8444r2   c                    ddl m}m} | j        d         }|j        r t
          t          j        z  }||| fv rt          j        S  |j	        t          t
          z            }|r ||                    d|z                      r ||                    |                    rt          j        S  ||                    |                    rt          j        S  ||                    |t          j        z                       rt
           S  ||                    |t          j        z                       rt
          S d S d S d S d S )Nr   )askQ   )sympy.assumptionsr   r   rD   is_Mulr   r   InfinityNaNas_coefficientr   integerevenr=   oddNegativeOneHalf)r0   assumptionsr   r   r    Ioocoeffs          r1   _eval_refinezexp._eval_refine   sU   ,,,,,,,,il: 	!AJ,CsSDk!!u&C&r!t,,E 	!3qyy5))** !s166%==)) ! uQUU5\\** ! },QVVEAFN3344 ! !r	QUU516>2233 ! 	! 	!	! 	!! !! !r2   c                    ddl m} ddlm} ddlm} ddlm} t          ||          r |j	                    S t          j        rt          t          j        |          S |j        r}|t          j        u rt          j        S |j        rt          j        S |t          j        u rt          j        S |t          j        u rt          j        S |t          j        u rt          j        S n|t          j        u rt          j        S t          |t.                    r|j        d         S t          ||          r0 |t          |j                  t          |j                            S t          ||          r |j        |           S |j        r |j        t<          t>          z            }|rd|z  j         r^|j!        rt          j        S |j"        rt          j#        S |t          j$        z   j!        rt>           S |t          j$        z   j"        rt>          S n8|j%        r1|dz  }|dk    r|dz  }||k    r | |t<          z  t>          z            S  |j&                    \  }}|t          j        t          j        fv r|j'        r|t          j        u r| }tQ          |          j        r|t          j        urt          j        S tQ          |          j)        r'tU          |          t          j        urt          j        S tQ          |          j+        rt          j        S d S |gd }
}	tY          j-        |          D ]T} ||          }t          |t.                    r|
|j        d         }
2 d S |j.        r|	/                    |           R d S |
r|
tY          |	 z  nd S |j0        rg }g }d}|j        D ]}|t          j        u r|/                    |           & | |          }t          ||           rJ|j        d         |k    r#|/                    |j        d                    d	}u|/                    |           |/                    |           |s|rtY          |  | tc          | d
          z  S |j        rt          j        S d S )Nr   AccumBounds)
MatrixBaseSetExpr
logcombiner   r3   FTrc   )2sympy.calculusr   sympy.matrices.matrixbaser   sympy.sets.setexprr   sympy.simplify.simplifyr   rt   r-   r   
exp_is_powr   r   r   	is_Numberr   rZ   r=   r   r`   Zeror~   r6   rD   minmax
_eval_funcr   r   r   r   
is_integeris_evenis_oddr   r   is_Rationalas_coeff_Mul	is_numberr#   is_positiver"   r>   r   	make_argsr   appendrr   r   )r   r    r   r   r   r   r   ncoefftermscoeffslog_termtermterm_outadd
argchangedanewas                     r1   evalzexp.eval  s   ......888888......666666c:&& _	@3799) ]	@qvs###] [	@ae||u uv
""z!***v +A%%%5LS!! N	@8A;[)) L	@;s37||S\\:::W%% J	@!3>#&&&Z H	@&C&r!t,,E 0eG' 0} ! u ! },!&.1 ! !r	!&.0 ! !& 0"QYFzz!"s6"9Q;/// ,3+--LE5 +QZ888? & 222!&%yy( %U!&-@-@ u%yy, 1E!&1H1H 00%yy, & vt %wHFe,, 
  
 "
4((eS))  '#(:a=#tt'  MM$''''44-5?8S&\))4?Z 	@CCJX % %::JJqMMMs1vvdC(( %y|q((

49Q<000%)



1JJt$$$$ @j @CyS#Y!?!?!???; 	5L	 	r2   c                     t           j        S )z?
        Returns the base of the exponential function.
        )r   r   r/   s    r1   r   zexp.base~  s    
 vr2   c                     | dk     rt           j        S | dk    rt           j        S t          |          }|r|d         }|||z  | z  S || z  t	          |           z  S )zJ
        Calculates the next term in the Taylor series expansion.
        r   )r   r   r=   r   r   )nrn   previous_termsps       r1   taylor_termzexp.taylor_term  si     q556M665LAJJ 	!r"A}1uqy !tIaLL  r2   Tc                    ddl m}m} | j        d                                         \  }}|r |j        |fi |} |j        |fi |} ||           ||          }}t          |          |z  t          |          |z  fS )aJ  
        Returns this function as a 2-tuple representing a complex number.

        Examples
        ========

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

        See Also
        ========

        sympy.functions.elementary.complexes.re
        sympy.functions.elementary.complexes.im
        r   )cossin)(sympy.functions.elementary.trigonometricr   r   rD   as_real_imagexpandr-   )r0   deeprw   r   r   r#   r"   s          r1   r   zexp.as_real_imag  s    0 	FEEEEEEE1**,,B 	*4))5))B4))5))B3r77CCGGSBSWWS[))r2   c                    |j         r*t          |j        t          |j                  z            }n|t          j        u r|j        rt          }t          |t                    s|t          j        u r+d }t          j	         ||            ||          |          S |t          u r%|j        s|| j        
                    ||          z  S t          j	        | ||          S )Nc                 z    | j         st          | t                    rt          |                                 ddin| S )Nrd   F)is_Powrt   r-   r   rF   )r   s    r1   <lambda>z exp._eval_subs.<locals>.<lambda>  s@    7&q#..7#q}}????56 r2   )r   r-   r6   r   r   r   is_Functionrt   r   
_eval_subs_subsr   )r0   oldnewfs       r1   r   zexp._eval_subs  s    : 	cgc#(mm+,,CCAF]]s]Cc3 	83!&==7 7A>!!D''11S663777#::co:sC0000"4c222r2   c                     | j         d         j        rdS | j         d         j        r5t          d           t          z  | j         d         z  t
          z  }|j        S d S )Nr   Tr   )rD   r   is_imaginaryr   r   r   r   r0   arg2s     r1   r   zexp._eval_is_extended_real  s\    9Q<( 	 4Yq\& 	 aDD519ty|+b0D<	  	 r2   c                 N    d }t           || j        d                             S )Nc              3   .   K   | j         V  | j        V  d S r,   )
is_complexrT   )r    s    r1   complex_extended_negativez7exp._eval_is_complex.<locals>.complex_extended_negative  s)      .   ******r2   r   )r   rD   )r0   r   s     r1   _eval_is_complexzexp._eval_is_complex  s3    	+ 	+ 	+ 11$)A,??@@@r2   c                     | j         t          z  t          z  j        rdS t	          | j         j                  r$| j         j        rdS | j         t          z  j        rdS d S d S rR   )r-   r   r   r[   r   rZ   is_algebraicr/   s    r1   _eval_is_algebraiczexp._eval_is_algebraic  sn    HrMA* 	4TX%&& 	x$ u(R-, u		 	 r2   c                     | j         j        r| j        d         t          j        uS | j         j        r%t           | j        d         z  t          z  }|j        S d S r   )	r-   r   rD   r   r`   r   r   r   r   r   s     r1   _eval_is_extended_positivezexp._eval_is_extended_positive  sY    8$ 	 9Q<q'999X" 	 2	!$r)D<	  	 r2   r   c                    ddl m ddlm} ddlm} ddlm} ddlm	} | j
        }	 |	j        |||          }
|
j        rd|
z   S  ||
                                |d          }|t          j        u r |||z  |          S |t          j        u r| S |j        rt%          d	| z            t'          fd
|j        D                       r| S t+          d          }|}	  | |	j        ||          |                                          }n# t0          t$          f$ r d}Y nw xY w|r|dk    r |||z            }t          |                              ||          }t          |          |                    ||
|z
            z  }||t7          |          ini }|                    |          | k    r|S |r(|dk    r"| ||
|z
  |z  |          ||dz
  |z  z  z  z  }n| ||
|z
  |z  |          z  }|                                } ||dd          }d }t;          d|g          }|                    t          j        |z  tA          t          j        |z                      }|S )Nr   )signceiling)limitOrderpowsimpr   logxr3   Cannot expand %s around 0c              3   8   K   | ]}t          |          V  d S r,   )rt   )rm   r    r  s     r1   ro   z$exp._eval_nseries.<locals>.<genexpr>  s-      ::z#t$$::::::r2   tr  Tr-   r   combinec                 "    | j         o| j        dv S )N)         )r   q)rn   s    r1   r   z#exp._eval_nseries.<locals>.<lambda>  s    am@y0@ r2   w)
properties)!$sympy.functions.elementary.complexesr  #sympy.functions.elementary.integersr  sympy.series.limitsr  sympy.series.orderr  sympy.simplify.powsimpr
  r-   _eval_nseriesis_OrderremoveOr   r`   r   rS   r   anyrD   r   as_leading_termgetnNotImplementedError_taylorsubsr6   r   r   replacer   r   )r0   rn   r   r  cdirr  r  r  r
  r    
arg_seriesarg0r  ntermscf
exp_seriesrrep	simpleratr  r  s                       @r1   r  zexp._eval_nseries  s    	>=====??????------,,,,,,222222h&S&qAD999
 	"z>!uZ''))1a001%%%5Aq>>!1:K 	B74@AAA::::	::::: 	K#JJ	*s*14888!<<AACCBB#Y/ 	 	 	BBB	 	#"q&&WQrT]]FVV^^Av..
IIjooad):;;; $ 0tSVVnnb66#;;$H 	2"q&&
T)A-q11!r!tQh-??AA
T)A-q111AHHJJGAD%000@@	)---IIamQ&q}a7G(H(HIIs   .D D$#D$c                     g }d }t          |          D ]b}|                     || j        d         |          }|                    ||          }|                    |                                           ct          | S )Nr   )r   )ranger   rD   nseriesr   r!  r   )r0   rn   r   lgr   s         r1   r&  zexp._taylor  sy    q 	" 	"A  DIaL!44A		!q	!!AHHQYY[[!!!!Awr2   Nc                    ddl m} | j        d                                                             ||          } |j        |d          }|t          j        u rt          j        S t          ||          r<t          |          t          j
        k     rt          |           S t          |          S |t          j        u r |j        |d          }|j        du rt          |          S t          d| z            )Nr   r   r  Fr  )sympy.calculus.utilr   rD   cancelr#  r'  r   r   rt   r#   r   r-   r  rS   r   )r0   rn   r  r)  r   r    r+  s          r1   _eval_as_leading_termzexp._eval_as_leading_term  s    333333il!!##33AD3AAsx1~~!%<<5LdK(( 	 $xx!&  D5zz!t9915==39Q??Du$$t993t<===r2   c                     ddl m}  |t          |z  t          dz  z             t           |t          |z            z  z
  S )Nr   )r   r   )r   r   r   r   )r0   r    kwargsr   s       r1   _eval_rewrite_as_sinzexp._eval_rewrite_as_sin/  sE    @@@@@@s1S52a4<  1SS3ZZ<//r2   c                     ddl m}  |t          |z            t           |t          |z  t          dz  z             z  z   S )Nr   )r   r   )r   r   r   r   )r0   r    r<  r   s       r1   _eval_rewrite_as_coszexp._eval_rewrite_as_cos3  sF    @@@@@@s1S5zzAcc!C%"Q$,/////r2   c                 T    ddl m} d ||dz            z   d ||dz            z
  z  S )Nr   )tanhr3   r   )%sympy.functions.elementary.hyperbolicrA  )r0   r    r<  rA  s       r1   _eval_rewrite_as_tanhzexp._eval_rewrite_as_tanh7  s?    >>>>>>DDQKK!dd3q5kk/22r2   c                 &   ddl m}m} |j        ry |j        t
          t          z            }|r\|j        rW |t
          |z             |t
          |z            }}t          ||          s#t          ||          s|t          |z  z   S d S d S d S d S d S )Nr   )r   r   )	r   r   r   r   r   r   r   r   rt   )r0   r    r<  r   r   r   cosinesines           r1   _eval_rewrite_as_sqrtzexp._eval_rewrite_as_sqrt;  s    EEEEEEEE: 	+CIbdOOE + +"s2e8}}cc"U(mm!&#.. +z47M7M +!AdF?*	+ 	++ + + ++ + + +r2   c                     |j         rHd |j        D             }|r7t          |d         j        d          |j        |d                             S d S d S )Nc                 l    g | ]1}t          |t                    t          |j                  d k    /|2S ry   )rt   r6   lenrD   )rm   r   s     r1   
<listcomp>z,exp._eval_rewrite_as_Pow.<locals>.<listcomp>F  s:    SSS!:a+=+=S#af++QRBRBRABRBRBRr2   r   )r   rD   r   r   )r0   r    r<  logss       r1   _eval_rewrite_as_Powzexp._eval_rewrite_as_PowD  sm    : 	@SSsxSSSD @47<?ICId1g,>,>???	@ 	@@ @r2   ry   Tr   r   )rz   r{   r|   r   r   r   classmethodr   r   r   staticmethodr   r   r   r   r   r   r   r  r  r&  r:  r=  r?  rC  rG  rM  r   r2   r1   r-   r-      s        45 5 5 5! ! !( g g [gR   X ! ! W \!* * * *@3 3 3     A A A       - - - -^  > > > >*0 0 00 0 03 3 3+ + +@ @ @ @ @r2   r-   )	metaclassc                     |                      t          d          \  }}|dk    r|j        r||fS |                    t                    }|r|j        r|j        r||fS dS )a  
    Try to match expr with $a + Ib$ for real $a$ and $b$.

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

    Tas_Addr   )NN)as_independentr   is_realr   )exprr_i_s      r1   match_real_imagr[  K  ss       4 00FB	Qww2:wBx			1		B	 bj RZ Bx|r2   c                       e Zd ZU dZee         ed<   ej        ej	        fZ
ddZddZedd            Zd Zeed	                         ZddZd ZddZd Zd Zd Zd Zd Zd Zd Zd ZddZddZdS )r6   a  
    The natural logarithm function `\ln(x)` or `\log(x)`.

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

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

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

    Examples
    ========

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

    See Also
    ========

    exp

    rD   r3   c                 N    |dk    rd| j         d         z  S t          | |          )z?
        Returns the first derivative of the function.
        r3   r   )rD   r	   r7   s     r1   r   z	log.fdiff  s-     q==TYq\>!$T8444r2   c                     t           S )zC
        Returns `e^x`, the inverse function of `\log(x)`.
        )r-   r7   s     r1   r9   zlog.inverse  r:   r2   Nc                    ddl m} ddlm} t	          |          }|t	          |          }|dk    r|dk    rt
          j        S t
          j        S 	 t          ||          }|r(|t          |||z  z            t          |          z  z   S t          |          t          |          z  S # t          $ r Y nw xY w|t
          j        ur | |           | |          z  S  | |          S |j        r|j        rt
          j        S |t
          j        u rt
          j        S |t
          j        u rt
          j        S |t
          j        u rt
          j        S |t
          j        u rt
          j        S |j        r|j        dk    r | |j                   S |j        r&|j        t
          j        u r|j        j        r|j        S t3          |t.                    r|j        j        r|j        S t3          |t.                    rn|j        j        rbt7          |j                  \  }}|rH|j        rA|dt:          z  z  }|t:          k    r|dt:          z  z  }|t=          |t>          z  d          z   S nt3          |t@                    rtC          |j                  S t3          ||          r||j"        j#        r0 |t          |j"                  t          |j$                            S |j"        j        r( |t
          j        t          |j$                            S t
          j        S t3          ||          r |j%        |           S |j        rW|j&        rt:          t>          z   | |           z   S |t
          j        u rt
          j        S |t
          j        u rt
          j        S |j        rt
          j        S |j'        s |j(        t>                    }||t
          j        u rt
          j        S |t
          j        u rt
          j        S |j        rY|j)        r(t:          t>          z  t
          j*        z   | |          z   S t:           t>          z  t
          j*        z   | |           z   S |j        r|j+        r |j,        t>          d          \  }}	|j&        r
|d	z  }|	d	z  }	t=          |	d          }	|	,                    t>          d
          \  }}|(                    t>                    }|j-        r|r|j-        r|j-        r|j        rh|j#        r+t:          t>          z  t
          j*        z   | ||z            z   S |j&        r-t:           t>          z  t
          j*        z   | || z            z   S d S ddl.m/}
 ||z  0                                }| 0                                }tc                      }||v rb |
|te          |	          z            }|j#        r | |          t>          ||         z  z   S  | |          t>          ||         t:          z
  z  z   S ||v ro |
|te          |	          z            }|j#        r | |          t>          ||          z  z   S  | |          t>          t:          ||         z
  z  z   S d S d S d S d S d S d S d S )Nr   r   r   r3   r   Fr   rT  r   T)ratsimp)3r   r   r   r   r   r   r   r~   r&   r6   
ValueErrorr   r   rZ   r=   r   r   r`   r   r   r  r   r   r-   r   rt   r   r[  r   r   r   r   r   r!   r   r   r   r   r>   rr   r   is_nonnegativer   r   rV  rW  sympy.simplifyra  r9  _log_atan_tabler$   )r   r    r   r   r   r   rY  rZ  r   arg_ra  r  t1
atan_tablemoduluss                  r1   r   zlog.eval  s   ............cll4==Dqyy!885L,,	 !s++ .s3q=11CII===s88CII--   16!!s3xxD		))s3xx= 	#{ #((v
""z!***z!u #SUaZZCE

{": 	#(af,,1I,7Nc3 	'CG$< 	'7NS!! 	'cg&7 	'$SW--FB ;b& ;ad
77!B$JBJrAvE:::::Y'' 
	'cg&&&[)) 	'w" "{3sw<<SW>>> "{1#5s37||DDDuW%% 	'!3>#&&&= 	 AvSD		)))))((u; 	%$$ z 	>&C&q))E AJ&&:%a000:%& >+ >!AvU;; "sQw/##uf++===  	LS-  	L,#,Qu===KE4  
d///D((4(88FB""1%%B} L L
 Lrz L: L~ C!AvURZ@@ C "sQw/##erck2B2BBBC C 766666B((A"B!0!2!2JJ")'%#d))*;"<"<> K#&3w<<!jm2C#CC#&3w<<!z!}r7I2J#JJz))")'%#d))*;"<"<> L#&3w<<!
22G#GG#&3w<<!rJrN7J2K#KKA 	L  	L  	L  	LL L L L L L L L$ *)s   9B+ B+ +
B87B8c                     | t           j        fS )zE
        Returns this function in the form (base, exponent).
        )r   r=   r/   s    r1   rF   zlog.as_base_exp  s     QU{r2   c                     ddl m} | dk     rt          j        S t	          |          }| dk    r|S |r%|d         }| ||  |z  |z  | dz   z  dd          S dd	| d	z  z  z
  || dz   z  z  | dz   z  S )
zV
        Returns the next term in the Taylor series expansion of `\log(1+x)`.
        r   r	  r   Nr3   Tr-   r  r   )r  r
  r   r   r   )r   rn   r   r
  r   s        r1   r   zlog.taylor_term  s     	322222q556MAJJ66H 	Qr"A}wax!|q1u5D%PPPPAq1uIQU+QU33r2   Tc                    ddl m}m} |                    dd          }|                    dd          }t	          | j                  dk    rt           | j        | j         ||          S | j        d         }|j        rt          |          }d }	d}
|dur|\  }}
|                     |          }	|rPt          |          }||                                vr+t          d	 |                                D                       }	|	|
|	z  S nW|j        r)t          |j                  t          |j                  z
  S |j        rg }g }|j        D ]}|s|j        s|j        rt|                     |          }t+          |t                    r4|                     |                     |          j        d
i |           p|                    |           |j        rK|                     |           }|                    |           |                    t2          j                   |                    |           t7          | t          t9          |           z   S |j        st+          |t<                    r|sB|j        j        r*|j         j        s*|j        dz   j        r|j        dz
  j!        s|j         j        rg|j         }|j        }|                     |          }t+          |t                    rtE          |           |j        d
i |z  S tE          |          |z  S n>t+          ||          r.|s|j#        j        r  |t          |j#                  g|j$        R  S |                     |          S )Nr   )rk   rj   forceFfactorr   )r   rm  r3   c              3   @   K   | ]\  }}|t          |          z  V  d S r,   r5   )rm   valr   s      r1   ro   z'log._eval_expand_log.<locals>.<genexpr>>  s0       D DQ3s88 D D D D D Dr2   r   )%sympy.concreterk   rj   getrJ  rD   r
   r@   
is_Integerr'   r(   keyssumitemsr   r6   r   r  r   r   r   rt   r   _eval_expand_logr>   r   r   r   r   r   r-   r   r   is_nonpositiver!   ru   rv   )r0   r   rw   rk   rj   rm  rn  r    r   logargr   rX  nonposrn   r   rg   rh   s                    r1   rw  zlog._eval_expand_log+  s   ////////		'5))8U++	NNaidi3$eLLLLil> .	;c""AFE~~
U3 EcNNaffhh&&  D D!'')) D D DDDF!V|# "_ 	;su::CE

**Z 	;DFX % % %AM %QZ %		!A!!S)) '$ADIIaLL$A$J$JE$J$JKKKKA] %		1"AKKNNNMM!-0000MM!$$$$:CL 1 111Z 	;:c3// 	; -1 -sx7K -QTQXYZQZ-"%'!)!;-BE(BS-HGIIaLLa%% -%a==+=1+=+F+F+F+FFF%a==1,,- W%% 	; ;0 ;s3s|,,:sz::::yy~~r2   c                 2   ddl m}m}m} t	          | j                  dk    r | | j        | j         fi |S |                      || j        d         fi |          }|d         r ||          } ||d          }t          || g|d                   S )	Nr   )r
   simplifyinversecombiner   r9   Tr`  measure)key)r   r
   r|  r}  rJ  rD   r@   r   )r0   r<  r
   r|  r}  rX  s         r1   _eval_simplifyzlog._eval_simplifyd  s    PPPPPPPPPPty>>Q8IDIty1<<V<<<yy$)A,99&99::) 	(!>$''Dz$T***D$<VI%67777r2   c                 H   | j         d         }|r | j         d         j        |fi |}t          |          }||k    r| t          j        fS t          |          }|                    dd          r"d|d<    t          |          j        |fi ||fS t          |          |fS )a  
        Returns this function as a complex coordinate.

        Examples
        ========

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

        r   r6   Fcomplex)rD   r   r$   r   r   r    rr  r6   )r0   r   rw   sargsarg_abssarg_args         r1   r   zlog.as_real_imago  s    & y| 	6&49Q<&t55u55Dt99t<t9999UE"" 	+$E)(CMM(7777BBx==(**r2   c                      | j         | j         }|j         | j         k    rQ| j        d         dz
  j        rdS |j        d         j        r$t	          | j        d         dz
  j                  rdS d S d S |j        S Nr   r3   TF)r@   rD   rZ   r[   r   r0   r\   s     r1   r^   zlog._eval_is_rational  s    DIty!6TY	!q ) tvay$ DIaL14D3M)N)N u    = r2   c                      | j         | j         }|j         | j         k    rQ| j        d         dz
  j        rdS t          | j        d         dz
  j                  r| j        d         j        rdS d S d S |j        S r  )r@   rD   rZ   r   r   r  s     r1   r   zlog._eval_is_algebraic  s    DIty!6TY	!q ) !tDIaL1,566 !9Q<, ! 5! !! ! >!r2   c                 &    | j         d         j        S r   rD   rU   r/   s    r1   r   zlog._eval_is_extended_real  s    y|00r2   c                 l    | j         d         }t          |j        t          |j                  g          S r   )rD   r   r   r   rZ   )r0   r]   s     r1   r   zlog._eval_is_complex  s,    IaL!,	!)(<(<=>>>r2   c                 <    | j         d         }|j        rdS |j        S Nr   F)rD   rZ   rV   rW   s     r1   rX   zlog._eval_is_finite  s$    il; 	5}r2   c                 ,    | j         d         dz
  j        S Nr   r3   r  r/   s    r1   r  zlog._eval_is_extended_positive  s    	!q 66r2   c                 ,    | j         d         dz
  j        S r  )rD   rZ   r/   s    r1   ra   zlog._eval_is_zero  s    	!q ))r2   c                 ,    | j         d         dz
  j        S r  )rD   is_extended_nonnegativer/   s    r1   _eval_is_extended_nonnegativez!log._eval_is_extended_nonnegative  s    	!q 99r2   r   c           
      H   ddl m} ddlm} ddlm} | j        d         |k    r|t          |          n|S | j        d         } |dd          }	|dk    rd} |j        |||	z            }
t          d	          t          d
          }}|

                    ||	|z  z            }|||         ||         }}|dk    rj|                    |	          sU|                    |	          s@||t          |          z  n||z  }|t          |          |t          |          z  z
  z  }|S d }	 |
                    |	|d          \  }}n# t          t          t          f$ r |
                    |	|d          }|j        r%dz  |
                    |	|d          }|j        %	 |                                                    |	d          \  }}nE# t          $ r8 |                                                    |	d          t(          j        }}Y nw xY wY nw xY w|
||	|z  z  z  dz
                      |	|d          }|                    t,                    r ||          }t/          ||          r|                                 |||	          \  }}|t          |          n|}|j        st          |          |t          |          z  z
  ||z  z   }|}dddddddddd	} | j        di |}|                                sE|                                r1 |                    | t          |                     j        di |}n. |                    |t          |                    j        di |}||k    r|S | ||z  |          z   S fd}i }t9          j        |                                          D ]7} |||	          \  }}|                    |t(          j                  |z   ||<   8t(          j        }i }|}||z  k     rt(          j         |z   |z  } |D ]E}!|                    |!t(          j                  | ||!         z  z   }|!                                ||!<   F |||          }|t(          j        z  }||z  k     t          |          |t          |          z  z
  ||z  z   }|D ]}!|||!         |	|!z  z  z  }|j"        rtG          |
          dk    rddl$m%}" tM          |
'                    |	                    D ]\  }#}|j(        r|#dk    r n|#dk     rH|)                    |	          \  } }|dtT          z  tV          z   |"tG          |            d          z  z  }|                    |	||z            }| ||z  |          z   S )Nr   r  r   )r   r  Tpositiver3   kr5  c                 H   t           j        t           j        }}t          j        |           D ]r}|                    |          rV|                                \  }}||k    r8	 |                     |          c S # t          $ r | t           j        fcY c S w xY wm||z  }s||fS r,   )	r   r=   r   r   r   hasrF   leadtermrb  )r   rn   r   r-   rn  r   s         r1   	coeff_expz$log._eval_nseries.<locals>.coeff_exp  s    3E--- 	$ 	$::a== $ & 2 2 4 4ID#qyy0#'==#3#3333) 0 0 0#'</////0 ! VOEE#:s   "A99BBr  r)  )r   r  r)  )r)  F)	r   r6   mul	power_exp
power_basemultinomialbasicrm  rn  c                     i }t          | |          D ]E\  }}||z   }|k     r5|                    |t          j                  | |         ||         z  z   ||<   F|S r,   )r   rr  r   r   )d1d2r   e1e2exr   s         r1   r  zlog._eval_nseries.<locals>.mul  sg    C!"b// B BB"W66!ggb!&11BrF2b6MACGJr2   	Heaviside   r   ),r  r  r   r   sympy.core.symbolr   rD   r6   r'  r   matchr  r  rb  r%  r   r  r   r!  r#  r   r   r-   rt   r$  r   r   r?   r   r   rr  r=   r   	nsimplifyr>   r"   'sympy.functions.special.delta_functionsr  	enumeratelseriesrW  as_coeff_exponentr   r   )$r0   rn   r   r  r)  r  r   r   r    r  r]   r  r5  r/  r  r   rg   r\   r   _dr   _reslogflagsrX  r  ptermsr   co1r  r   pkr   r  r  r   s$     `                                 r1   r  zlog._eval_nseries  sa    	-,,,,,666666++++++9Q<1!\3q666t3ilE#%%%199DCHQQCyy$s))1GGAadFOO=Q41qAAvvaeeAhhvquuQxxv $Ac!ffHH!D&SVVaD		k))	 	 	
	F::ad:33DAqq/; 	F 	F 	FQT::A* ?QOOAAO>> * ?Fyy{{++AA+6611 F F Fyy{{22112==qv1F	F !Q$Z!^**11*EE55:: 	
1Aa 	AyA1s1vvv4} 	(a&&1SYY;&4/CD $T%e#EETX! !H 4;****D..00 B--//B7tyy$Q007CC(CC5tyys1vv..5AAAAt||
q!tQ''	 	 	 	 	 M!))++.. 	6 	6Dia((GCB//#5F2JJEcAgg]A%%a'E * *IIb!&))E"R&L8KKMMb		RBJA cAgg !ffqT{"QtV+ 	% 	%B59QW$$CC= 	8RUUaZZIIIIII$QYYq\\22  4| qAvvE (.1uu11!44qr!tBwyy"U))Q7777hhq!D&!!UU1a4^^##s7   -E	 	AH&,GH?HHHHHc                 F   | j         d                                         }t          dd          }|dk    rd}|                    |||z            }	 |                    ||d          \  }}n7# t
          $ r* |                    |||          }	t          |	          cY S w xY w|                    |          r@|                    |||z            }|dk    rt          d| z            t          |          S |t          j        k    r4|t          j        k    r$|t          j        z
                      ||          S t          |          |t          |          z  z
  }
|t          |          n|}|
||z  z  }
|j        rt          |          dk    rdd	lm} t#          |                    |                    D ]\  }}|j        r|d
k    r n|d
k     rH|                    |          \  }}|
dt*          z  t,          z   |t          |           d          z  z  }
|
S )Nr   r  Tr  r3   r  r  r  r  r  r  )rD   togetherr   r'  r  rb  r#  r6   r  r   r   r=   r   r>   r"   r  r  r  r  rW  r  r   r   )r0   rn   r  r)  r+  r  r]   crh   r    r   r  r   r   r   r  s                   r1   r:  zlog._eval_as_leading_term/  s<    y|$$&& #%%%199DIIaa  	::ad:33DAqq 	 	 	&&qt$&??Cs88OOO	 5588 	q!D&!!AAvv ;t DEEEq66M ::!qv++15L11!$1??? !ffqT{"s1vvv4qv = 	8RUUaZZIIIIII$QYYq\\22  4| qAvvE (.1uu11!44qr!tBwyy"U))Q7777
s   A/ /1B#"B#ry   r,   rN  rO  r   ) rz   r{   r|   r   tTupler   __annotations__r   r   r~   r   r   r9   rP  r   rF   rQ  r   r   rw  r  r   r^   r   r   r   rX   r  ra   r  r  r:  r   r2   r1   r6   r6   `  s         B ,fa/0N5 5 5 5    {L {L {L [{Lz   4 4 W \4 7 7 7 7r	8 	8 	8+ + + +@! ! !	" 	" 	"1 1 1? ? ?  7 7 7* * *: : :s$ s$ s$ s$j* * * * * *r2   r6   c                        e Zd ZdZ eej        dd           ej        fZe	dd            Z
ddZd	 Zd
 Zd ZddZd fd	Zd Z xZS )LambertWa  
    The Lambert W function $W(z)$ is defined as the inverse
    function of $w \exp(w)$ [1]_.

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

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

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

    Examples
    ========

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

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Lambert_W_function
    r   Frc   Nc                 @   |t           j        k    r | |          S |t           j        }|j        r|j        rt           j        S |t           j        u rt           j        S t          d          }|                    |t          |          z            }|Nt          ||         t           j        z  t           j                  t           j	        u rt          ||                   S |t          d           dz  k    rt          d           S |                    ||dz   z  t          |          z            }|-||         j
        du r||         t          ||                   z  S |                    t           j        d|z  z  |z            }|d||         z  S |t           dz  k    rt          t          z  dz  S |t          dt           j        z             k    rt           j        S |t           j        u rt           j        S t          |j                  r|j        rt           j        S |t           j        u rg|t           dz  k    rt           t          z  dz  S |dt           j        z  k    rt           j        S |dt          d          z  k    rt%          d           S d S d S )Nr  r   r3   Tr   r  )r   r   rZ   r   r=   r   r  r6   r   truer   r   r   r-   r   r   r`   r   r   )r   rn   r  r  results        r1   r   zLambertW.eval  sD   ;;3q66MYA9 	"y vAF{{uS		A WWQs1vvX&&F!b16)915&A&AQV&K&K6!9~~%SVVGAI~~Aw WWQ1Xc!ff_--F!fQi&;t&C&CayVAY// WWQVac]1_--F!6!9}$RCEzztAvCAF
OO##vAJz!QY 	*y *))RCEzzr"uQwbi}$bRj

{" 
 !r2   r3   c                 8   | j         d         }t          | j                   dk    r,|dk    r%t          |          |dt          |          z   z  z  S n:| j         d         }|dk    r't          ||          |dt          ||          z   z  z  S t          | |          )z?
        Return the first derivative of this function.
        r   r3   )rD   rJ  r  r	   )r0   r8   rn   r  s       r1   r   zLambertW.fdiff  s     IaLty>>Q1}}{{Aq8A;;$788  	!A1}}1~~q!hq!nn*<'=>> x000r2   c                    | j         d         }t          | j                   dk    rt          j        }n| j         d         }|j        r4|dt          j        z  z   j        rdS |dt          j        z  z   j        rdS d S |dz   j        rB|j        r|dt          j        z  z   j        rdS |j        s|dt          j        z  z   j	        rdS d S t          |j                  r t          |dz   j                  r|j        rdS d S d S d S r  )rD   rJ  r   r   rZ   r   r   rx  r>   rc  r   r   )r0   rn   r  s      r1   r   zLambertW._eval_is_extended_real  s0   IaLty>>QAA	!A9 	AafH) tah,. u !e_ 	} !ah,!; t! a!AF(l%B u qy!! 	iQ&@&@ 	! u	 	 	 	 r2   c                 &    | j         d         j        S r   )rD   rV   r/   s    r1   rX   zLambertW._eval_is_finite  s    y|%%r2   c                      | j         | j         }|j         | j         k    r7t          | j        d         j                  r| j        d         j        rdS d S d S |j        S r  )r@   rD   r   rZ   r   r  s     r1   r   zLambertW._eval_is_algebraic  sm    DIty!6TY1-.. 49Q<3L u    >!r2   r   c                     t          | j                  dk    r\| j        d         } |j        |d                                          }|j        s|                     |          S  |j        |          S d S )Nr3   r   )rJ  rD   r'  r9  rZ   r@   r#  )r0   rn   r  r)  r    r+  s         r1   r:  zLambertW._eval_as_leading_term  sr    ty>>Q)A,C38Aq>>((**D< 'yy&&3&q))) r2   c           
        
 t          | j                  dk    rddlm} ddlm} | j        d                             |||          
 
j        ||          }d}|j        r|j	        } |||z            dk    r?t          
fdt          d |||z                      D              }	t          |	          }	nt          j        }	|	 |||z  |          z   S t                                          |||          S )Nr3   r   r  r  r  r  c                     g | ]D}t           j         |d z
  z  t          |          |dz
  z  z  t          |d z
            z  |z  z  ES )r3   r   )r   r=   r   r   )rm   r  r    s     r1   rK  z*LambertW._eval_nseries.<locals>.<listcomp>  sp     U U U67 E6QU+GAJJQ,??#AE**++.62 U U Ur2   )rJ  rD   r  r  r  r  r4  r#  r   r-   r   r3  r   r   r   superr  )r0   rn   r   r  r)  r  r  ltlter\   r    r   s             @r1   r  zLambertW._eval_nseries  s8   ty>>QCCCCCC000000)A,&&qAD&99C$$QT222BCy fwqu~~"" U U U U;@GGAcENN;S;SU U U V&q))FuuQT1~~%%ww$$Q4000r2   c                     | j         d         }t          | j                   dk    r|j        S t          |j        | j         d         j        g          S r  )rD   rJ  rZ   r   )r0   rn   s     r1   ra   zLambertW._eval_is_zero  sF    IaLty>>Q9ai1)=>???r2   r,   ry   r   rO  )rz   r{   r|   r   r   r   r   r~   r   rP  r   r   r   rX   r   r:  r  ra   __classcell__)r   s   @r1   r  r  \  s        ! !D s16266668IJN-# -# -# [-#^1 1 1 1   (& & &" " "* * * *1 1 1 1 1 1&@ @ @ @ @ @ @r2   r  c            	         i t          d          t          dz  dt          dz  t          ddt          d          z  z
            t          dz  t          d          t          dt          d          z
            z  dt          d          z   z  t          dz  t          ddt          d          z  z             t          t          dd          z  t          d          t          t          d          dz             z  dt          d          z   z  t          t          dd          z  t          d          dz  t          dz  t          d          dz
  t          dz  t          dt          d          z
            t          t          d          dz             z  t          dz  t          d          dz   t          t          dd          z  t          t          d          dz             t          dt          d          z
            z  t          t          dd          z  t          ddt          d          z  dz  z
            t          d	z  t          d           t          d	          z   dt          t          d          dz             z  z  t          d	z  t          ddt          d          z  dz  z             t          t          dd	          z  t          d          t          d	          z   dt          dt          d          z
            z  z  t          t          dd	          z  dt          d          z
  t          d
z  dt          d          z   dt          d          z   z  t          d
z  dt          d          z   t          t          dd
          z  dt          d          z   dt          d          z   z  t          t          dd
          z  iS )Nr  r3   r  r  r   r   r     
      )r%   r   r   r   r2   r1   re  re    sR   Qa 	
26 	QT!WW_rAv	
 	Q$q477{###q477{3R!V 	QT!WW_rHQNN2 	Q$tAww{###rDGG|4b8Aq>>6I 	Q!R!V 	Q!R!V 	Qa[Da1---rAv 	Q!R(1a..( 	T!WWq[DT!WW---rHQNN/B 	QT!WWq !!27 q''DHH	T$q''A+%6%6!67b 	QT!WWq !!2B#7  
a488	DT!WW$5$5 56Xa__8L!" 	
DGGR"W#$ 
d1gg!d1gg+&R%& 	
DGGR(1b//)	
T!WWd1gg&Xa__(<)  r2   N)C	itertoolsr   typingr   r  sympy.core.addr   sympy.core.cacher   sympy.core.exprr   sympy.core.functionr   r	   r
   r   r   r   r   r   sympy.core.logicr   r   r   sympy.core.mulr   sympy.core.numbersr   r   r   r   sympy.core.parametersr   sympy.core.powerr   sympy.core.relationalr   sympy.core.singletonr   r  r   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   r  r    r!   r"   r#   r$   (sympy.functions.elementary.miscellaneousr%   sympy.ntheoryr&   r'   sympy.ntheory.factor_r(   r*   r   r   r-   r[  r6   r  re  r   r2   r1   <module>r     s         " " " " " "       $ $ $ $ $ $            N N N N N N N N N N N N N N N N N N N N ; ; ; ; ; ; ; ; ; ;       7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3             $ $ $ $ $ $ " " " " " " ) ) ) ) ) ) ) ) & & & & & & > > > > > > M M M M M M M M M M M M M M 9 9 9 9 9 9 5 5 5 5 5 5 5 5 + + + + + +e e e e eh e e ePF) F) F) F) F) F) F) F)RE E E E Em E E El@ l@ l@ l@ l@'W l@ l@ l@ l@^  *y y y y y( y y yxd@ d@ d@ d@ d@x d@ d@ d@N 	  	  r2   