
    Edi                        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 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 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.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;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          ZA G d! d"e          ZBd#S )$    )product)Tuple)Expr)sympify)Add)cacheit)FunctionArgumentIndexError
expand_log
expand_mulFunctionClass	PoleErrorexpand_multinomialexpand_complex)	fuzzy_and	fuzzy_notfuzzy_or)Mul)IntegerRationalpiIImaginaryUnit)global_parameters)Pow)S)WildDummy)	factorial)arg
unpolarifyimreAbs)sqrt)multiplicityperfect_power)	factorint)cancelc                       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    Flib/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r1   argindexs     r2   inversezExpBase.inverse-   	     
r3   c                     | 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)
        )r.   is_negativecould_extract_minus_signr   Onefunc)r1   r.   neg_exps      r2   as_numer_denomzExpBase.as_numer_denom3   sd      h/ 	51 	52244G 	*5$))SD//))QU{r3   c                     | j         d         S )z7
        Returns the exponent of the function.
        r   )argsr0   s    r2   r.   zExpBase.expK   s    
 y|r3   c                 H    |                      d          t          | j         fS )z7
        Returns the 2-tuple (base, exponent).
        r4   )r@   r   rD   r0   s    r2   as_base_expzExpBase.as_base_expR   s     yy||S$)_,,r3   c                 Z    |                      | j                                                  S r-   )r@   r.   adjointr0   s    r2   _eval_adjointzExpBase._eval_adjointX   s"    yy))++,,,r3   c                 Z    |                      | j                                                  S r-   )r@   r.   	conjugater0   s    r2   _eval_conjugatezExpBase._eval_conjugate[   "    yy++--...r3   c                 Z    |                      | j                                                  S r-   )r@   r.   	transposer0   s    r2   _eval_transposezExpBase._eval_transpose^   rM   r3   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r1   r    s     r2   _eval_is_finitezExpBase._eval_is_finitea   sL    h? 	' t' u= 	4	 	r3   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   )r1   szs      r2   _eval_is_rationalzExpBase._eval_is_rationalk   sv    DIty!6TY 	!A t" y|| u    = r3   c                 (    | j         t          j        u S r-   )r.   r   NegativeInfinityr0   s    r2   _eval_is_zerozExpBase._eval_is_zerov   s    x1---r3   c                 z    |                                  \  }}t          j        t          ||d          |          S )z;exp(arg)**e -> exp(arg*e) if assumptions allow it.
        Fevaluate)rF   r   _eval_power)r1   otherbes       r2   re   zExpBase._eval_powery   s:     !!1s1a%888%@@@r3   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xr1   s     r2   	<genexpr>z1ExpBase._eval_expand_power_exp.<locals>.<genexpr>   s-      ??		!??????r3   )sympy.concrete.productsrj   sympy.concrete.summationsrk   rD   is_Addis_commutativer   fromiter
isinstancer@   functionlimits)r1   hintsrj   rk   r    s   `    r2   _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~~r3   Nr4   )__name__
__module____qualname__
unbranchedr   ComplexInfinity_singularitiespropertyr/   r:   rB   r.   rF   rI   rL   rP   rX   r^   ra   re   ry    r3   r2   r+   r+   $   s       J')N  X     0   X- - -- - -/ / // / /  	! 	! 	!. . .A A A    r3   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   r0   s    r2   	_eval_Abszexp_polar._eval_Abs   s    2dil##$$$r3   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#   )r1   precibadress        r2   r   zexp_polar._eval_evalf   s    ty|	8%q2vCC 	 	 	CCC	 	K$)A,++D11q5 	RWWq[ 	c77N
s   4 AAc                 H    |                      | j        d         |z            S r   )r@   rD   )r1   rf   s     r2   re   zexp_polar._eval_power   s    yy1e+,,,r3   c                 .    | j         d         j        rdS d S )Nr   T)rD   is_extended_realr0   s    r2   _eval_is_extended_realz exp_polar._eval_is_extended_real   s"    9Q<( 	4	 	r3   c                 t    | j         d         dk    r| t          j        fS t                              |           S r   )rD   r   r?   r+   rF   r0   s    r2   rF   zexp_polar.as_base_exp   s5    9Q<1 	;""4(((r3   N)r{   r|   r}   __doc__is_polaris_comparabler   r   re   r   rF   r   r3   r2   r   r      sv        # #J HM% % %  - - -  ) ) ) ) )r3   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__ru   r   baser   Exp1)clsinstances     r2   __instancecheck__zExpMeta.__instancecheck__   s8    ($,, 	4(C((DX]af-DDr3   N)r{   r|   r}   r   r   r3   r2   r   r      s(        E E E E Er3   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
    r4   c                 2    |dk    r| S t          | |          )z@
        Returns the first derivative of this function.
        r4   )r
   r8   s     r2   fdiffz	exp.fdiff   s%     q= 	5K$T8444r3   c                    ddl m}m} | j        d         }|j        r9t
          j        t
          j        z  }||| fv rt
          j        S  |j	        t
          j
        t
          j        z            }|r ||                    d|z                      r ||                    |                    rt
          j        S  ||                    |                    rt
          j        S  ||                    |t
          j        z                       rt
          j         S  ||                    |t
          j        z                       rt
          j        S d S d S d S d S )Nr   )askQ   )sympy.assumptionsr   r   rD   is_Mulr   r   InfinityNaNas_coefficientPiintegerevenr?   oddNegativeOneHalf)r1   assumptionsr   r   r    Ioocoeffs          r2   _eval_refinezexp._eval_refine   sf   ,,,,,,,,il: 	//!*,CsSDk! u&C&qtAO';<<E 	/3qyy5))** /s166%==)) / uQUU5\\** / },QVVEAFN3344 / !//QUU516>2233 / .	/ 	/	/ 	// // /r3   c                 8	   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          j        t          j        z            }|rd|z  j         rh|j!        rt          j        S |j"        rt          j#        S |t          j$        z   j!        rt          j         S |t          j$        z   j"        rt          j        S nB|j%        r;|dz  }|dk    r|dz  }||k    r% | |t          j        z  t          j        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   r4   FTrc   )2sympy.calculusr   sympy.matrices.matricesr   sympy.sets.setexprr   sympy.simplify.simplifyr   ru   r.   r   
exp_is_powr   r   r   	is_Numberr   rZ   r?   r   r`   Zeror   r7   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                     r2   evalzexp.eval  s   ......666666......666666c:&& _	@3799) ]	@qvs###] [	@ae| 	u u v
" z!** vA%% P	@5LS!! N	@8A;[)) L	@;s37||S\\:::W%% J	@!3>#&&&Z H	@&C&qtAO';<<E @eG' @} / u / },!&.1 / !//!&.0 / ./& @"QYFz $! @"s6!$;q#>??? ,3+--LE5 +QZ88 
? & 22 '!&%yy( %U!&-@ % u%yy, 1E!&1H 1 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	 	r3   c                     t           j        S )z?
        Returns the base of the exponential function.
        )r   r   r0   s    r2   r   zexp.base|  s    
 vr3   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       r2   taylor_termzexp.taylor_term  sr     q5 	6M6 	5LAJJ 	!r"A !1uqy !tIaLL  r3   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.   )r1   deeprx   r   r   r#   r"   s          r2   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[))r3   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_Powru   r.   r   rF   )r   s    r2   <lambda>z exp._eval_subs.<locals>.<lambda>  s@    7&q#..7#q}}????56 r3   )r   r.   r7   r   r   r   is_Functionru   r   
_eval_subs_subsr	   )r1   oldnewfs       r2   r   zexp._eval_subs  s    : 	cgc#(mm+,,CCAF] 	s 	Cc3 	83!&= 	87 7A>!!D''11S663777#: 	1co 	1sC0000"4c222r3   c                     | j         d         j        rdS | j         d         j        r?t          d           t          j        z  | j         d         z  t          j        z  }|j        S d S )Nr   Tr   )rD   r   is_imaginaryr   r   r   r   r1   arg2s     r2   r   zexp._eval_is_extended_real  sa    9Q<( 	 4Yq\& 	 aDD51?*TYq\9AD@D<	  	 r3   c                 N    d }t           || j        d                             S )Nc              3   .   K   | j         V  | j        V  d S r-   )
is_complexrT   )r    s    r2   complex_extended_negativez7exp._eval_is_complex.<locals>.complex_extended_negative  s)      .   ******r3   r   )r   rD   )r1   r   s     r2   _eval_is_complexzexp._eval_is_complex  s3    	+ 	+ 	+ 11$)A,??@@@r3   c                     | j         t          j        z  t          j        z  j        rdS t          | j         j                  r)| j         j        rdS | j         t          j        z  j        rdS d S d S rR   )r.   r   r   r   r[   r   rZ   is_algebraicr0   s    r2   _eval_is_algebraiczexp._eval_is_algebraic  st    HqtOao-: 	4TX%&& 	x$ u(QT/. u		 	 r3   c                     | j         j        r| j        d         t          j        uS | j         j        r/t          j         | j        d         z  t          j        z  }|j        S d S r   )	r.   r   rD   r   r`   r   r   r   r   r   s     r2   _eval_is_extended_positivezexp._eval_is_extended_positive  s^    8$ 	 9Q<q'999X" 	 O#dil2QT9D<	  	 r3   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 t#          fd	|j        D                       r| S t'          d
          }|}	  | |	j        ||          |                                          }n# t,          t.          f$ r d}Y nw xY w|r|dk    r |||z            }t          |                              ||          }t          |          |                    ||
|z
            z  }|                    |t5          |                    | k    r|S |r(|dk    r"| ||
|z
  |z  |          ||dz
  |z  z  z  z  }n| ||
|z
  |z  |          z  }|                                } ||dd          }d }t9          d|g          }|                    t          j        |z  t?          t          j        |z                      }|S )Nr   )signceiling)limitOrderpowsimpr   logxr4   c              3   F   K   | ]}t          |t          f          V  d S r-   )ru   r   )rm   r    r  s     r2   ro   z$exp._eval_nseries.<locals>.<genexpr>  s2      KK#z#m455KKKKKKr3   tr  Tr.   r   combinec                 "    | j         o| j        dv S )N)         )r   q)rn   s    r2   r   z#exp._eval_nseries.<locals>.<lambda>  s    am@y0@ r3   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   anyrD   r   as_leading_termgetnNotImplementedErrorr   _taylorsubsr7   r   r   replacer   r   )r1   rn   r   r  cdirr  r  r
  r  r    
arg_seriesarg0r  ntermscf
exp_seriesr	simpleratr  r  s                      @r2   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KKKKKKKKK 	K#JJ	*s*14888!<<AACCBB#Y/ 	 	 	BBB	 	#"q& 	#WQrT]]FVV^^Av..
IIjooad):;;;66$A4' 	H 	2"q& 	2
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   .C5 5D
Dc                     g }d }t          |          D ]b}|                     || j        d         |          }|                    ||          }|                    |                                           ct          | S )Nr   )r   )ranger   rD   nseriesr   r"  r   )r1   rn   r   lgr   s         r2   r'  zexp._taylor  sy    q 	" 	"A  DIaL!44A		!q	!!AHHQYY[[!!!!Awr3   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  FCannot expand %s around 0)sympy.calculus.utilr   rD   r)   r$  r(  r   r   ru   r#   r   r.   r  rS   r   )r1   rn   r  r*  r   r    r,  s          r2   _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<===r3   c                     ddl m} t          j        } |||z  t          j        dz  z             | |||z            z  z
  S )Nr   )r   r   )r   r   r   r   r   )r1   r    kwargsr   r   s        r2   _eval_rewrite_as_sinzexp._eval_rewrite_as_sin*  sN    @@@@@@Os1S5146>""Qss1S5zz\11r3   c                     ddl m} t          j        } |||z            | |||z  t          j        dz  z             z  z   S )Nr   )r   r   )r   r   r   r   r   )r1   r    r<  r   r   s        r2   _eval_rewrite_as_coszexp._eval_rewrite_as_cos/  sO    @@@@@@Os1S5zzAcc!C%!$q&.11111r3   c                 T    ddl m} d ||dz            z   d ||dz            z
  z  S )Nr   )tanhr4   r   )%sympy.functions.elementary.hyperbolicrA  )r1   r    r<  rA  s       r2   _eval_rewrite_as_tanhzexp._eval_rewrite_as_tanh4  s?    >>>>>>DDQKK!dd3q5kk/22r3   c                 X   ddl m}m} |j        r |j        t
          j        t
          j        z            }|rk|j        rf |t
          j        |z             |t
          j        |z            }}t          ||          s(t          ||          s|t
          j        |z  z   S d S d S d S d S d S )Nr   )r   r   )
r   r   r   r   r   r   r   r   r   ru   )r1   r    r<  r   r   r   cosinesines           r2   _eval_rewrite_as_sqrtzexp._eval_rewrite_as_sqrt8  s    EEEEEEEE: 	9CIad1?233E 9 9"s14:ADJ!&#.. 9z47M7M 9!AOD$888	9 	99 9 9 99 9 9 9r3   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 rz   )ru   r7   lenrD   )rm   r   s     r2   
<listcomp>z,exp._eval_rewrite_as_Pow.<locals>.<listcomp>C  s:    SSS!:a+=+=S#af++QRBRSASSSr3   r   )r   rD   r   r   )r1   r    r<  logss       r2   _eval_rewrite_as_Powzexp._eval_rewrite_as_PowA  sm    : 	@SSsxSSSD @47<?ICId1g,>,>???	@ 	@@ @r3   rz   Tr   r   )r{   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   r3   r2   r.   r.      s        45 5 5 5/ / /( g g [gR   X ! ! W \!* * * *@3 3 3     A A A       * * * *X  > > > >*2 2 2
2 2 2
3 3 39 9 9@ @ @ @ @r3   r.   )	metaclassc                     |                      t          j        d          \  }}|dk    r|j        r||fS |                    t          j                  }|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   r   is_realr   )exprr_i_s      r2   match_real_imagr[  H  s}        >>FB	Qw 2: Bx			1?	+	+B	 bj RZ Bx|r3   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 )r7   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   r4   c                 N    |dk    rd| j         d         z  S t          | |          )z?
        Returns the first derivative of the function.
        r4   r   )rD   r
   r8   s     r2   r   z	log.fdiff  s0     q= 	5TYq\>!$T8444r3   c                     t           S )zC
        Returns `e^x`, the inverse function of `\log(x)`.
        )r.   r8   s     r2   r:   zlog.inverse  r;   r3   Nc           	      t   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 t
          j        }t5          |t.                    r|j        j        r|j        S t5          |t.                    rx|j        j        rlt9          |j                  \  }}|rR|j        rK|dt
          j        z  z  }|t
          j        k    r|dt
          j        z  z  }|t?          ||z  d          z   S nt5          |t@                    rtC          |j                  S t5          ||          r||j"        j#        r0 |t          |j"                  t          |j$                            S |j"        j        r( |t
          j        t          |j$                            S t
          j        S t5          ||          r |j%        |           S |j        rW|j&        rt
          j        |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
          j        u rt
          j        S |	t
          j        u rt
          j        S |	j        rY|	j)        r(t
          j        |z  t
          j*        z   | |	          z   S t
          j         |z  t
          j*        z   | |	           z   S |j        r3|j+        r- |j,        |d          \  }	}
|	j&        r
|	d	z  }	|
d	z  }
t?          |
d          }
|
,                    |d
          \  }}|(                    |          }|	j-        r|r|j-        r|j-        r|j        rh|j#        r+t
          j        |z  t
          j*        z   | |	|z            z   S |j&        r-t
          j         |z  t
          j*        z   | |	| z            z   S d S ddl.m/} ||z  0                                }| 0                                }i tc          d          t
          j        dz  dt
          j        dz  tc          ddtc          d          z  z
            t
          j        dz  tc          d          tc          dtc          d          z
            z  dtc          d          z   z  t
          j        dz  tc          ddtc          d          z  z             t
          j        te          dd          z  tc          d          tc          tc          d          dz             z  d	tc          d          z   z  t
          j        te          dd          z  tc          d          dz  t
          j        dz  tc          d          dz
  t
          j        dz  tc          dtc          d          z
            tc          tc          d          dz             z  t
          j        dz  tc          d          dz   t
          j        te          dd          z  tc          tc          d          dz             tc          dtc          d          z
            z  t
          j        te          dd          z  tc          ddtc          d          z  dz  z
            t
          j        dz  tc          d           tc          d          z   dtc          tc          d          dz             z  z  t
          j        dz  tc          ddtc          d          z  dz  z             t
          j        te          dd          z  tc          d          tc          d          z   dtc          dtc          d          z
            z  z  t
          j        te          dd          z  dtc          d          z
  t
          j        dz  d	tc          d          z   dtc          d          z   z  t
          j        dz  dtc          d          z   t
          j        te          dd          z  dtc          d          z   d	tc          d          z   z  t
          j        te          dd          z  i}||v r] ||	tg          |
          z            }|j#        r | |          |||         z  z   S  | |          |||         t
          j        z
  z  z   S ||v rj ||	tg          |
          z            }|j#        r | |          |||          z  z   S  | |          |t
          j        ||         z
  z  z   S d S d S d S d S d S d S d S )Nr   r   r   r4   r   Fr   rT  r   T)ratsimpr  r     r     
      )4r   r   r   r   r   r   r   r   r&   r7   
ValueErrorr   r   rZ   r?   r   r   r`   r   r   r  r   r   r.   r   r   ru   r   r[  r   r   r   r   r!   r   r   r   r   r=   rr   r   is_nonnegativer   r   rV  rW  sympy.simplifyra  r)   r%   r   r$   )r   r    r   r   r   r   r   rY  rZ  r   arg_ra  r  t1
atan_tablemoduluss                   r2   r   zlog.eval  s
   ............cll 	 4==Dqy -!8 -5L,,	 !s++ .s3q=11CII===s88CII--   16!  s3xxD		))s3xx= 	#{ #(( 	#v
" #z!** #z! #u #SUaZ #CE

{": 	#(af, 	1I 	7NOc3 	'CG$< 	'7NS!! 	'cg&7 	'$SW--FB ;b& ;af9 !!AD&LBJrAvE:::::Y'' 
	'cg&&&[)) 	'w" "{3sw<<SW>>> "{1#5s37||DDDuW%% 	'!3>#&&&= 	 tax##sd))++)) (( u; 	%$$ z 	@&C&q))E 	@AJ& @:%a00 @:%& @+ @ tax!&033u::== !uqy161CCKK??= 5	NS- 5	N,#,Qu===KE4  
d///D((4(88FB""1%%B} ,N ,N
 ,Nrz ,N: +N~ E tax!&033urz??BB E !uqy161CC4D4DDDE E 766666B((A"B"Qa" 146" Q477]++QT!V	"
 QQa[ 1 111tAww;?a" Q477]++QT(1a..-@" QT!WWq[ 1 112Q<@!$xPQST~~BU" Q	146" Q!QT!V" Qa[))$tAww{*;*;;QT!V" Q!QT(1a..%8" T!WWq[))$q477{*;*;;QT(1a..=P" Q4771_--qtBw" q''DHH,qd1ggk1B1B/BCQT"W" Q4771_--qtHQOO/C"  a488+aQa[0A0A.ABADRSUWDX!"" DGGQT"W#"$ d1ggDGG4ad2g%"& DGGQT(1b//%9T!WWrDGG|4ad8Ar??6J)" "J, J N")'%#d))*;"<"<> M#&3w<<!jm2C#CC#&3w<<!z!}qt7K2L#LLz) N")'%#d))*;"<"<> N#&3w<<!
22G#GG#&3w<<!qtjn7L2M#MMk5	N 5	N 5	N 5	N,N ,N ,N ,N ,N ,N ,N ,NNN Ns   9B+ B+ +
B87B8c                     | t           j        fS )zE
        Returns this function in the form (base, exponent).
        )r   r?   r0   s    r2   rF   zlog.as_base_exp&  s     QU{r3   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   Nr4   Tr.   r  r   )r  r  r   r   r   )r   rn   r   r  r   s        r2   r   zlog.taylor_term,  s     	322222q5 	6MAJJ6 	H 	Qr"A Qwax!|q1u5D%PPPPAq1uIQU+QU33r3   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   rp  r4   c              3   @   K   | ]\  }}|t          |          z  V  d S r-   r6   )rm   valr   s      r2   ro   z'log._eval_expand_log.<locals>.<genexpr>Q  s0       D DQ3s88 D D D D D Dr3   r   )%sympy.concreterk   rj   getrJ  rD   r   r@   
is_Integerr'   r(   keyssumitemsr   r7   r   r  r   r   r   ru   r   _eval_expand_logr=   r   r   r   r   r   r.   r   r   is_nonpositiver!   rv   rw   )r1   r   rx   rk   rj   rp  rq  r    r   logargr   rX  nonposrn   r   rg   rh   s                    r2   rz  zlog._eval_expand_log>  s   ////////		'5))8U++	NNa 	Midi3$eLLLLil> .	;c""AFE~ (
U3 EcNNaffhh& E  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~~r3   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   r:   Tr`  measure)key)r   r   r  r  rJ  rD   r@   r   )r1   r<  r   r  r  rX  s         r2   _eval_simplifyzlog._eval_simplifyw  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7r3   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   r7   Fcomplex)rD   r   r$   r   r   r    ru  r7   )r1   r   rx   sargsarg_abssarg_args         r2   r   zlog.as_real_imag  s    & y| 	6&49Q<&t55u55Dt99t 	 <t9999UE"" 	+$E)(CMM(7777BBx==(**r3   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   r4   TF)r@   rD   rZ   r[   r   r1   r\   s     r2   r^   zlog._eval_is_rational  s    DIty!6TY 	!	!q ) tvay$ DIaL14D3M)N)N u    = r3   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     r2   r  zlog._eval_is_algebraic  s    DIty!6TY 	"	!q ) !tDIaL1,566 !9Q<, ! 5! !! ! >!r3   c                 &    | j         d         j        S r   rD   rU   r0   s    r2   r   zlog._eval_is_extended_real  s    y|00r3   c                 l    | j         d         }t          |j        t          |j                  g          S r   )rD   r   r   r   rZ   )r1   r]   s     r2   r   zlog._eval_is_complex  s,    IaL!,	!)(<(<=>>>r3   c                 <    | j         d         }|j        rdS |j        S Nr   F)rD   rZ   rV   rW   s     r2   rX   zlog._eval_is_finite  s$    il; 	5}r3   c                 ,    | j         d         dz
  j        S Nr   r4   r  r0   s    r2   r  zlog._eval_is_extended_positive  s    	!q 66r3   c                 ,    | j         d         dz
  j        S r  )rD   rZ   r0   s    r2   ra   zlog._eval_is_zero  s    	!q ))r3   c                 ,    | j         d         dz
  j        S r  )rD   is_extended_nonnegativer0   s    r2   _eval_is_extended_nonnegativez!log._eval_is_extended_nonnegative  s    	!q 99r3   r   c                 
   ddl m} ddlm} |}|st	          |          }| j        d         |k    r|S | j        d         }t          d          t          d          }
}	 |j        |	||
z  z            }|W||	         ||
         }
}	|
dk    rA|
                    |          s,|	                    |          st	          |	          |
|z  z   }|S d }	  |j	        |          \  }} |j
        ||z   |          }nV# t          t          t          f$ r<  |j
        ||          }|j        rdz   |j
        ||          }|j        Y nw xY w|r4|                    |          r |j        ||	          t           j        }}n|	 |                                	                    |          \  }}nP# t          t          t          f$ r6 |                                                    |          t           j        }}Y nw xY wt'          ||||z  z  z  dz
                                                                            }|                    t,                    r ||          }t/          ||          r|                                 |||          \  }}|j        st	          |          ||z  z   }|}t5          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 }t;          j        |          D ]I} |||          \  }}|                    |t           j                  |                                z   ||<   Jt           j         }	i }|}|	|z  k     rkt           j!        |	z   |	z  }|D ]1}|                    |t           j                  |||         z  z   ||<   2 |||          }|	t           j         z  }	|	|z  k     kt	          |          ||z  z   }|D ]}|||         ||z  z  z  }|dk    r!| j        d         "                    ||          }|j#        r4|j$        r-tK          |          dk     r|dtL          z  t           j'        z  z  }| ||z  |          z   S )Nr   r	  r   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   leadtermrf  )r   rn   r   r.   rq  r   s         r2   	coeff_expz$log._eval_nseries.<locals>.coeff_exp  s    3E--- 	$ 	$::a== $ & 2 2 4 4ID#qy 00#'==#3#3333) 0 0 0#'</////00 VOEE#:s   "A99BBr  r4   r  TF)	r   r7   mul	power_exp
power_basemultinomialbasicrp  rq  c                     i }t          | |          D ]E\  }}||z   }|k     r5|                    |t          j                  | |         ||         z  z   ||<   F|S r-   )r   ru  r   r   )d1d2r   e1e2exr   s         r2   r  zlog._eval_nseries.<locals>.mul  sk    C!"b// B BB"W6 B!ggb!&11BrF2b6MACGJr3   r   r   )(r  r
  r   r   r7   rD   r   matchr  r  r4  rf  r&  r   r!  r$  r   r   r"  r)   r   r  r.   ru   r%  r   dictr>   r(  r   r   ru  r?   r   dirrW  r=   r"   r   r   ) r1   rn   r   r  r*  r
  r   _logxr    r  r5  r0  r  r   rg   r\   r   _dr   _reslogflagsrX  r  ptermsr   co1r  r   pkr   r  s      `                             r2   r   zlog._eval_nseries  s    	-,,,,,666666 	q66D9Q<1 	KilCyy$s))1CIa1f 	Q41qAAv aeeAhh quuQxx FFQtVO	 	 		33<??DAqA14000AA/; 	3 	3 	3A...A* 3QCKQT222 * 3	3
  	>TXXa[[ 	>&3&qt444afqAA>yy{{++A..11 3Y? > > >yy{{22155qv1>1a1f:>""))++335555:: 	
1Aa 	AyA1} 	(a&&1T6/CD4Ue e5  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!$$ 	@ 	@Dia((GCB//#++--?F2JJEcAg 	]A%%a'E A A!IIb!&11E"R&L@b		RBJA cAg 	 !ffqvo 	% 	%B59QW$$CC19 	-9Q<##At,,D9 	 	2d88a< 	1Q3qt8OCUU1a4^^##s&   )C< <AEE	*F4 4A
H Hc                 R   | j         d                                         }t          d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     rM|                    |          \  }}|
dt*          z  t          j        z   |t          |           d          z  z  }
|
S )Nr   r  T)realpositiver4   )r  r*  r8  r  )	Heavisiderb  )rD   togetherr   r(  r  rf  r$  r7   r  r   r   r?   r   r=   r"   'sympy.functions.special.delta_functionsr  	enumeratelseriesrW  as_coeff_exponentr   r   )r1   rn   r  r*  r,  r  r]   crh   r    r   r  r   r   r   r  s                   r2   r:  zlog._eval_as_leading_term7  sY    y|$$&& #D400019 	DIIaa  	::ad:33DAqq 	 	 	&&qt$&??Cs88OOO	 5588 	q!D&!!AAv F ;t DEEEq66M : 	@!qv+ 	@15L11!$1??? !ffqT{"/s1vvv4qv = 	:RUUaZ 	:IIIIII$QYYq\\22  4| qAv E1u :11!44qr!tADyBuII:q!9!999
s   A0 01B$#B$rz   r-   rN  rO  r   ) r{   r|   r}   r   tTupler   __annotations__r   r   r   r   r   r:   rP  r   rF   rQ  r   r   rz  r  r   r^   r  r   r   rX   r  ra   r  r   r:  r   r3   r2   r7   r7   ]  s         B ,fa/0N5 5 5 5    QN QN QN [QNf   4 4 W \4 7 7 7 7r	8 	8 	8+ + + +@! ! !	" 	" 	"1 1 1? ? ?  7 7 7* * *: : :h$ h$ h$ h$T* * * * * *r3   r7   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 |dt           j        z  k    rt           j        S |t          d           dz  k    rt          d           S |dt          d          z  k    rt          d          S |t           j         dz  k    rt           j        t           j        z  dz  S |t          dt           j        z             k    rt           j        S |t           j
        u rt           j
        S |j        rt           j        S t          |j                  r|j        rt           j        S |t           j        u rv|t           j         dz  k    rt           j         t           j        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   r4   r  )r   r   rZ   r   r?   r   r7   r   r   r.   r   r   r`   r   )r   rn   r  s      r2   r   zLambertW.eval  s   ; 	3q66M 	A9 	y vAF{ uBqvI~ %}$SVVGAI~ AwAc!ffH} 1vvQTE!G| .qt+A--CAF
OO# vAJ "z!y vQY 	*y *)) 	#QTE!G| #',Q..bi #}$bRj #

{"	# 	#
# #r3   r4   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   r4   )rD   rJ  r  r
   )r1   r9   rn   r  s       r2   r   zLambertW.fdiff  s     IaLty>>Q 	?1} 9{{Aq8A;;$7889 	!A1} ?1~~q!hq!nn*<'=>> x000r3   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   r{  r=   rg  r   r   )r1   rn   r  s      r2   r   zLambertW._eval_is_extended_real  s2   IaLty>>Q 	AA	!A9 	AafH) tah,. u !e_ 	} !ah,!; t! a!AF(l%B u qy!! 	iQ&@&@ 	! u	 	 	 	 r3   c                 &    | j         d         j        S r   )rD   rV   r0   s    r2   rX   zLambertW._eval_is_finite  s    y|%%r3   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     r2   r  zLambertW._eval_is_algebraic  so    DIty!6TY 	"1-.. 49Q<3L u    >!r3   r   c                     t          | j                  dk    r\| j        d         } |j        |d                                          }|j        s|                     |          S  |j        |          S d S )Nr4   r   )rJ  rD   r(  r)   rZ   r@   r$  )r1   rn   r  r*  r    r,  s         r2   r:  zLambertW._eval_as_leading_term  sv    ty>>Q 	*)A,C38Aq>>((**D< 'yy&&3&q)))	* 	*r3   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 )Nr4   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 )r4   r   )r   r?   r   r   )rm   r  r    s     r2   rK  z*LambertW._eval_nseries.<locals>.<listcomp>  sp     U U U67 E6QU+GAJJQ,??#AE**++.62 U U Ur3   )rJ  rD   r  r  r  r
  r4  compute_leading_termr   r.   r   r3  r   r   r   superr   )r1   rn   r   r  r*  r  r
  ltlter\   r    r   s             @r2   r   zLambertW._eval_nseries  s<   ty>>Q 	&CCCCCC000000)A,&&qAD&99C))!$777B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0r3   c                     | j         d         }t          | j                   dk    r|j        S t          |j        | j         d         j        g          S r  )rD   rJ  rZ   r   )r1   rn   s     r2   ra   zLambertW._eval_is_zero  sI    IaLty>>Q 	@9ai1)=>???r3   r-   rz   r   rO  )r{   r|   r}   r   r   r   r   r   r   rP  r   r   r   rX   r  r:  r   ra   __classcell__)r   s   @r2   r  r  d  s        ! !D s16266668IJN## ## ## [##J1 1 1 1   (& & &" " "* * * *1 1 1 1 1 1&@ @ @ @ @ @ @r3   r  N)C	itertoolsr   typingr   r  sympy.core.exprr   
sympy.corer   sympy.core.addr   sympy.core.cacher   sympy.core.functionr	   r
   r   r   r   r   r   r   sympy.core.logicr   r   r   sympy.core.mulr   sympy.core.numbersr   r   r   r   r   sympy.core.parametersr   sympy.core.powerr   sympy.core.singletonr   sympy.core.symbolr   r   (sympy.functions.combinatorial.factorialsr   r  r    r!   r"   r#   r$   (sympy.functions.elementary.miscellaneousr%   sympy.ntheoryr&   r'   sympy.ntheory.factor_r(   sympy.polys.polytoolsr)   r+   r   r   r.   r[  r7   r  r   r3   r2   <module>r     s         " " " " " "                         $ $ $ $ $ $N N N N N N N N N N N N N N N N N N N N ; ; ; ; ; ; ; ; ; ;       F F F F F F F F F F F F F F 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 + + + + + + ( ( ( ( ( (c c c c ch c c cLF) F) F) F) F) F) F) F)RE E E E Em E E Ek@ k@ k@ k@ k@'W k@ k@ k@ k@\  *D D D D D( D D DNZ@ Z@ Z@ Z@ Z@x Z@ Z@ Z@ Z@ Z@r3   