ó
    ‰*£ha5 ã                  óv  • S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r
  S SKrSSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJr  SSKJrJr  SSKJrJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  S SK%J&r&   " S S5      r'S r(S r) " S S\\5      r*\" S5      r+S!S jr,S"S jr-S r.SSK/J0r0  SSK1J2r2  SS K3J4r4J5r5  g)#é    )Úannotations)ÚTYPE_CHECKINGÚClassVar)Údefaultdict)Úreduce)ÚproductNé   )Úsympify)ÚBasicÚ_args_sortkey)ÚS)ÚAssocOpÚAssocOpDispatcher)Úcacheit)Úinteger_nthrootÚtrailing)Ú	fuzzy_notÚ_fuzzy_group)ÚExpr)Úglobal_parameters)ÚKindDispatcher©Ú	bottom_up)Úsiftc                  ó(   • \ rS rSrSrSrSrSrSrSr	g)Ú	NC_Markeré   F© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úis_OrderÚis_MulÚ	is_NumberÚis_PolyÚis_commutativeÚ__static_attributes__r   ó    ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/core/mul.pyr   r      s   † Ø€HØ€FØ€IØ€GàƒNr)   r   c                ó*   • U R                  [        S9  g )N©Úkey)Úsortr   ©Úargss    r*   Ú_mulsortr1   "   s   € à‡I�I”-€IÒ r)   c                 ó  • / n/ n[        U 5      n [        R                  nU  H–  nUR                  (       a6  UR	                  5       u  pVU R                  U5        UR                  U5        MJ  UR                  (       a  X4-  nMa  UR                  (       a  UR                  U5        M…  UR                  U5        M˜     [        U5        U[        R                  La  UR                  SU5        [        R                  X-   5      $ )aÀ  Return a well-formed unevaluated Mul: Numbers are collected and
put in slot 0, any arguments that are Muls will be flattened, and args
are sorted. Use this when args have changed but you still want to return
an unevaluated Mul.

Examples
========

>>> from sympy.core.mul import _unevaluated_Mul as uMul
>>> from sympy import S, sqrt, Mul
>>> from sympy.abc import x
>>> a = uMul(*[S(3.0), x, S(2)])
>>> a.args[0]
6.00000000000000
>>> a.args[1]
x

Two unevaluated Muls with the same arguments will
always compare as equal during testing:

>>> m = uMul(sqrt(2), sqrt(3))
>>> m == uMul(sqrt(3), sqrt(2))
True
>>> u = Mul(sqrt(3), sqrt(2), evaluate=False)
>>> m == uMul(u)
True
>>> m == Mul(*m.args)
False

r   )Úlistr   ÚOner$   Úargs_cncÚextendr%   r'   Úappendr1   ÚinsertÚMulÚ
_from_args)r0   ÚcargsÚncargsÚcoÚaÚa_cÚa_ncs          r*   Ú_unevaluated_MulrA   '   s·   € ð> €EØ€FÜ�‹:€DÜ	
�‰€BÛˆØ�8�8ØŸ
™
›‰IˆCØ�K‰K˜ÔØ�M‰M˜$ÖØ�[�[Ø‰GŠBØ××Ø�L‰L˜ŽOà�M‰M˜!Öñ ô ˆU„OØ	”—‘‚Ø�‰�Q˜ÔÜ�>‰>˜%™,Ó'Ð'r)   c                  óÎ  ^ • \ rS rSr% SrSrSr\r\	" SSS9r
S\S'   \S	 5       r\(       a  SS
.SMS jjr\SNS j5       rS rS r\S 5       rS r\S 5       rS r\S 5       r\S 5       r\SS.S j5       rSOS jrSPS jr\S 5       rS r \S 5       r!\U 4S j5       r"S r#S r$SQS jr%\S  5       r&\SRS! j5       r'\S" 5       r(\S# 5       r)\S$ 5       r*\S% 5       r+\S& 5       r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5 r;S6 r<S7 r=S8 r>S9 r?S: r@S; rAS< rBS= rCS> rDS? rES@ rFSA rGSB rHSC rISD rJSSSE jrKSF rLSG rMSH rNSI rOSTSJ jrPSRSK jrQ\SL 5       rRSrSU =rT$ )Ur9   é[   a~  
Expression representing multiplication operation for algebraic field.

.. deprecated:: 1.7

   Using arguments that aren't subclasses of :class:`~.Expr` in core
   operators (:class:`~.Mul`, :class:`~.Add`, and :class:`~.Pow`) is
   deprecated. See :ref:`non-expr-args-deprecated` for details.

Every argument of ``Mul()`` must be ``Expr``. Infix operator ``*``
on most scalar objects in SymPy calls this class.

Another use of ``Mul()`` is to represent the structure of abstract
multiplication so that its arguments can be substituted to return
different class. Refer to examples section for this.

``Mul()`` evaluates the argument unless ``evaluate=False`` is passed.
The evaluation logic includes:

1. Flattening
    ``Mul(x, Mul(y, z))`` -> ``Mul(x, y, z)``

2. Identity removing
    ``Mul(x, 1, y)`` -> ``Mul(x, y)``

3. Exponent collecting by ``.as_base_exp()``
    ``Mul(x, x**2)`` -> ``Pow(x, 3)``

4. Term sorting
    ``Mul(y, x, 2)`` -> ``Mul(2, x, y)``

Since multiplication can be vector space operation, arguments may
have the different :obj:`sympy.core.kind.Kind()`. Kind of the
resulting object is automatically inferred.

Examples
========

>>> from sympy import Mul
>>> from sympy.abc import x, y
>>> Mul(x, 1)
x
>>> Mul(x, x)
x**2

If ``evaluate=False`` is passed, result is not evaluated.

>>> Mul(1, 2, evaluate=False)
1*2
>>> Mul(x, x, evaluate=False)
x*x

``Mul()`` also represents the general structure of multiplication
operation.

>>> from sympy import MatrixSymbol
>>> A = MatrixSymbol('A', 2,2)
>>> expr = Mul(x,y).subs({y:A})
>>> expr
x*A
>>> type(expr)
<class 'sympy.matrices.expressions.matmul.MatMul'>

See Also
========

MatMul

r   TÚMul_kind_dispatcher)ÚcommutativezClassVar[Expr]Úidentityc                óF   • S U R                    5       nU R                  " U6 $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7f©N)Úkind©Ú.0r>   s     r*   Ú	<genexpr>ÚMul.kind.<locals>.<genexpr>¬   s   é € Ð/¢Y —V–V¢Yùó   ‚)r0   Ú_kind_dispatcher)ÚselfÚ	arg_kindss     r*   rJ   ÚMul.kindª   s!   € á/ T§Y¢YÓ/ˆ	Ø×$Ò$ iÐ0Ð0r)   ©Úevaluatec               ó   • g rI   r   )ÚclsrU   r0   s      r*   Ú__new__ÚMul.__new__±   s   € Ør)   c                ó   • g rI   r   ©rQ   s    r*   r0   ÚMul.args´   s   € àr)   c                ól   • X * :X  a  gU R                   S   nUR                  =(       a    UR                  $ )NFr   )r0   r%   Úis_extended_negative)rQ   Úcs     r*   Úcould_extract_minus_signÚMul.could_extract_minus_sign¸   s.   € Ø�E‹?ØØ�I‰I�a‰LˆØ�{‰{×5˜q×5Ñ5Ð5r)   c                óT  • U R                  5       u  pUS   [        R                  La  U* nU[        R                  LaP  US   R                  (       a6  [        U5      nU[        R                  L a
  US   * US'   OUS==   U-  ss'   OU4U-   nU R                  X R                  5      $ ©Nr   )	Úas_coeff_mulr   ÚComplexInfinityr4   r%   r3   ÚNegativeOner:   r'   )rQ   r_   r0   s      r*   Ú__neg__ÚMul.__neg__¾   s”   € Ø×#Ñ#Ó%‰ˆØ�‰7œ!×+Ñ+Ò+Ø�ˆAØ”A—E‘EŠ>Ø�A‰w× × Ü˜D“z�ØœŸ™Ò%Ø# A™w˜h�D˜’Gà˜“G˜q‘L”Gà�t˜d‘{�Ø�‰˜t×%8Ñ%8Ó9Ð9r)   c           
     óà  ^"^6• SSK Jn  SSKJm6  Sn[	        U5      S:X  Ga  Uu  nm"T"R
                  (       a	  T"Usnm"UT"/nU[        R                  Ld   eUR
                  (       aË  UR                  (       dº  T"R                  5       u  nm"T"R                  (       a–  U[        R                  La+  XE-  nU[        R                  L a  T"nO
U " XE-  T"SS9nU// S4nOX[        R                  (       aC  T"R                  (       a2  [        T"R                   Vs/ s H  n[!        XH5      PM     sn6 n	U	// S4nU(       a  U$ / n
/ n/ n[        R                  n/ n/ n[        R"                  n0 nSnU GH›  nUR$                  (       a  UR'                  U5      u  nnUR(                  (       aŒ  UR                  (       a  UR+                  UR                  5        O]UR                   H8  nUR                  (       a  UR-                  U5        M'  UR-                  U5        M:     UR-                  [.        5        MÆ  UR0                  (       aŸ  U[        R2                  L d$  U[        R4                  L a'  UR                  (       a  [        R2                  // S4s  $ UR0                  (       d  [7        XÒ5      (       a.  UU-  nU[        R2                  L a  [        R2                  // S4s  $ GMv  [7        UU5      (       a  UR9                  U5      nGM›  U[        R4                  L a0  U(       d  [        R2                  // S4s  $ [        R4                  nGMÞ  U(       dL  [7        U[        5      (       a7  [;        S UR                   5       5      (       a  [        R2                  // S4s  $ U[        R<                  L a  U[        R>                  -  nGMZ  UR                  (       Ga6  URA                  5       u  m"nURB                  (       aü  T"R0                  (       aë  UR
                  (       a¢  URD                  (       a  U[G        T"U5      -  nGMÕ  URH                  (       a  UR-                  [G        T"U5      5        GM  T"RH                  (       a  UU-  nT"* m"T"[        R                  La!  URK                  T"/ 5      R-                  U5        GMT  T"RL                  (       d  URN                  (       a  UR-                  T"U45        GMŒ  UR-                  T"U45        GM¢  U[.        La  UR-                  U5        U(       d  GMÆ  URQ                  S5      nU(       d  UR-                  U5        M5  URQ                  5       nURA                  5       u  nnURA                  5       u  nnUU-   nUU:X  aM  UR                  (       d<  UU-  nUR                  (       a  UR-                  U5        M°  URS                  SU5        OUR+                  UU/5        U(       a  MÕ  GMž     S	 nU" U5      nU" U5      n[U        S5       GHš  n/ nSn U GHJ  u  m"nUR                  (       aƒ  T"R                  (       d  T"R(                  (       a_  [;        U"4S
 j[        R4                  [        RV                  [        RX                  4 5       5      (       a  [        R2                  // S4s  s  $ M›  U[        R                  L a  T"R0                  (       a  UT"-  nMÆ  T"n!U[        R                  LaK  [G        T"U5      n!U!RB                  (       a.  T"RB                  (       d  T"nU!RA                  5       u  m"nT"U:w  a  Sn U
R-                  W!5        UR-                  T"U45        GMM     U (       a;  [	        U V"Vs1 s H  u  n"nU"iM
     snn"5      [	        U5      :w  a  / n
U" U5      nGM›    O   0 n#U H'  u  m"nU#RK                  U/ 5      R-                  T"5        M)     U#R[                  5        H  u  nm"U " T"6 U#U'   M     U
R+                  U#R[                  5        VV"s/ s H  u  nn"U(       d  M  [G        U"U5      PM     sn"n5        0 n$UR[                  5        H-  u  m"nU$RK                  [        U6 / 5      R-                  T"5        M/     A/ n%U$R[                  5        H¡  u  nm"U " T"6 m"UR\                  S:X  a  U[G        T"U5      -  nM,  UR^                  UR\                  :”  aH  [a        UR^                  UR\                  5      u  n&n'U[G        T"U&5      -  n[c        U'UR\                  5      nU%R-                  T"U45        M£     A$[e        [f        5      n(SnU[	        U%5      :  Gaê  U%U   u  nn)US:X  a  US-  nM%  / n*[U        US-   [	        U%5      5       Hï  n+U%U+   u  n,n-URi                  U,5      n.U.[        R                  Ld  M1  U)U--   nUR\                  S:X  a  U[G        U.U5      -  nOuUR^                  UR\                  :”  aH  [a        UR^                  UR\                  5      u  n&n'U[G        U.U&5      -  n[c        U'UR\                  5      nU*R-                  U.U45        U,U.-  U-4U%U+'   UU.-  nU[        R                  L d  Mï    O   U[        R                  La�  [G        UU)5      n/U/R0                  (       a  UU/-  nOj[j        Rm                  U/5       HQ  n/U/R0                  (       a  UU/-  nM  U/RB                  (       d   eU/R                  u  nn)U(U)   R-                  U5        MS     U%R+                  U*5        US-  nU[	        U%5      :  a  GMê  U(R[                  5        H  u  nm"U " T"6 U(U'   M     U(       aË  URo                  5       u  n!n[a        U!U5      u  n0n!U0S-  (       a  U* nUS:X  a   U
R-                  [        R<                  5        OvU!(       ao  [c        U!U5      nU(R[                  5        H'  u  nm"UU:X  d  M  T"RL                  (       d  M!  T"* U(U'     O*   U
R-                  [G        [        Rp                  USS95        U
R+                  U(R[                  5        VV"s/ s H  u  nn"[G        U"U5      PM     sn"n5        U[        RV                  [        RX                  4;   a   S n1U1" U
S5      u  n
n2U1" UU25      u  nn2UU2-  nU[        R4                  L aw  U
 V3s/ s H.  n3[s        U3R                  5      (       a  U3Rt                  b  M,  U3PM0     n
n3U V3s/ s H.  n3[s        U3R                  5      (       a  U3Rt                  b  M,  U3PM0     nn3ObUR                  (       aQ  [;        U64S jU 5       5      (       a  U/UU4$ [;        S U
 5       5      (       a  [        R2                  // U4$ U// U4$ / n4U
 H,  nUR0                  (       a  UU-  nM  U4R-                  U5        M.     U4n
[w        U
5        U[        R                  La  U
RS                  SU5        [        R                  (       a�  U(       dz  [	        U
5      S:X  ak  U
S   R0                  (       aW  U
S   Rx                  (       aC  U
S   R                  (       a/  U
S   n[        U
S   R                   V5s/ s H  n5UU5-  PM
     sn56 /n
X«U4$ s  snf s  snn"f s  sn"nf s  sn"nf s  sn3f s  sn3f s  sn5f )a6  Return commutative, noncommutative and order arguments by
combining related terms.

Notes
=====
    * In an expression like ``a*b*c``, Python process this through SymPy
      as ``Mul(Mul(a, b), c)``. This can have undesirable consequences.

      -  Sometimes terms are not combined as one would like:
         {c.f. https://github.com/sympy/sympy/issues/4596}

        >>> from sympy import Mul, sqrt
        >>> from sympy.abc import x, y, z
        >>> 2*(x + 1) # this is the 2-arg Mul behavior
        2*x + 2
        >>> y*(x + 1)*2
        2*y*(x + 1)
        >>> 2*(x + 1)*y # 2-arg result will be obtained first
        y*(2*x + 2)
        >>> Mul(2, x + 1, y) # all 3 args simultaneously processed
        2*y*(x + 1)
        >>> 2*((x + 1)*y) # parentheses can control this behavior
        2*y*(x + 1)

        Powers with compound bases may not find a single base to
        combine with unless all arguments are processed at once.
        Post-processing may be necessary in such cases.
        {c.f. https://github.com/sympy/sympy/issues/5728}

        >>> a = sqrt(x*sqrt(y))
        >>> a**3
        (x*sqrt(y))**(3/2)
        >>> Mul(a,a,a)
        (x*sqrt(y))**(3/2)
        >>> a*a*a
        x*sqrt(y)*sqrt(x*sqrt(y))
        >>> _.subs(a.base, z).subs(z, a.base)
        (x*sqrt(y))**(3/2)

      -  If more than two terms are being multiplied then all the
         previous terms will be re-processed for each new argument.
         So if each of ``a``, ``b`` and ``c`` were :class:`Mul`
         expression, then ``a*b*c`` (or building up the product
         with ``*=``) will process all the arguments of ``a`` and
         ``b`` twice: once when ``a*b`` is computed and again when
         ``c`` is multiplied.

         Using ``Mul(a, b, c)`` will process all arguments once.

    * The results of Mul are cached according to arguments, so flatten
      will only be called once for ``Mul(a, b, c)``. If you can
      structure a calculation so the arguments are most likely to be
      repeats then this can save time in computing the answer. For
      example, say you had a Mul, M, that you wished to divide by ``d[i]``
      and multiply by ``n[i]`` and you suspect there are many repeats
      in ``n``. It would be better to compute ``M*n[i]/d[i]`` rather
      than ``M/d[i]*n[i]`` since every time n[i] is a repeat, the
      product, ``M*n[i]`` will be returned without flattening -- the
      cached value will be returned. If you divide by the ``d[i]``
      first (and those are more unique than the ``n[i]``) then that will
      create a new Mul, ``M/d[i]`` the args of which will be traversed
      again when it is multiplied by ``n[i]``.

      {c.f. https://github.com/sympy/sympy/issues/5706}

      This consideration is moot if the cache is turned off.

    NB
    --
      The validity of the above notes depends on the implementation
      details of Mul and flatten which may change at any time. Therefore,
      you should only consider them when your code is highly performance
      sensitive.

      Removal of 1 from the sequence is already handled by AssocOp.__new__.
r   )ÚAccumBounds)Ú
MatrixExprNé   FrT   c              3  óÀ   #   • U  HT  n[         R                  U5        H7  nU[        R                  [        R                  [        R
                  4;   v •  M9     MV     g 7frI   )r9   Ú	make_argsr   ÚNegativeInfinityre   ÚInfinity)rL   Ú__Ú_s      r*   rM   ÚMul.flatten.<locals>.<genexpr>†  sJ   é € ð :Aâ$˜¬c¯m©m¸B×.?¨ð œ!×,Ñ,¬a×.?Ñ.?ÄÇÁÐLÖLÙ.?ñ MÚ$ùs   ‚AAc           
     óØ  • 0 nU  HL  u  p#UR                  5       nUR                  U0 5      R                  US   / 5      R                  US   5        MN     UR                  5        H(  u  p%UR                  5        H  u  pg[	        U6 XV'   M     M*     / nUR                  5        H=  u  p#UR                  UR                  5        V	V
s/ s H  u  pšX*U	-  4PM     sn
n	5        M?     U$ s  sn
n	f ©Nr	   r   )Úas_coeff_MulÚ
setdefaultr7   ÚitemsÚAddr6   )Úc_powersÚcommon_bÚbÚer=   ÚdÚdiÚliÚnew_c_powersÚtr_   s              r*   Ú_gatherÚMul.flatten.<locals>._gatherã  sÓ   € ØˆHÛ ‘�Ø—^‘^Ó%�Ø×#Ñ# A rÓ*×5Ñ5Ø�q‘E˜2óß%™v b¨¡ež}ñ !ð !Ÿ™Ö(‘�ØŸg™gži‘F�BÜ ˜H�A“Eó (ñ )ð ˆLØ Ÿ™Ö(‘�Ø×#Ñ#¸!¿'¹'¼)Ô$Dº)±$°! a¨1©£X¹)Ò$DÖEñ )àÐùó %Es   ÃC&c              3  óB   >#   • U  H  nUTR                   ;   v •  M     g 7frI   r/   )rL   Úinftyr|   s     €r*   rM   rs     s$   øé € ð 6;ò&:˜Eð 7<¸q¿v¹v¶oò&:ùs   ƒTr	   c                ó–   • / nU  H?  nUR                   (       a  M  UR                  (       a  US-  nM.  UR                  U5        MA     X!4$ ©Néÿÿÿÿ)Úis_extended_positiver^   r7   )Úc_partÚ
coeff_signÚ
new_c_partr‚   s       r*   Ú_handle_for_ooÚ#Mul.flatten.<locals>._handle_for_oo¤  sL   € Ø�
Û�AØ×-×-Ù Ø×-×-Ø" bÑ(˜
Ù Ø×%Ñ% aÖ(ñ  ð "Ð-Ð-r)   c              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frI   )Ú
isinstance)rL   r_   rk   s     €r*   rM   rs   Â  s   øé € Ð>²g°”:˜a ×,Ð,²gùs   ƒc              3  ó>   #   • U  H  oR                   S :H  v •  M     g7f©FN©Ú	is_finite)rL   r_   s     r*   rM   rs   Ä  s   é € Ð8²¨A—;‘; %Ö'²ùó   ‚)=Ú!sympy.calculus.accumulationboundsrj   Úsympy.matrices.expressionsrk   ÚlenÚis_Rationalr   r4   Úis_zerorv   Úis_Addr   Ú
distributer'   ry   r0   Ú_keep_coeffÚZeror#   Úas_expr_variablesr$   r6   r7   r   r%   ÚNaNre   r‘   Ú__mul__ÚanyÚImaginaryUnitÚHalfÚas_base_expÚis_PowÚ
is_IntegerÚPowÚis_negativerw   Úis_positiveÚ
is_integerÚpopr8   Úrangerp   ro   rx   ÚqÚpÚdivmodÚRationalr   r3   Úgcdr9   rn   Úas_numer_denomrf   r   Úis_extended_realr1   r•   )7rW   Úseqrj   Úrvr>   ÚrÚarÚarbÚbiÚnewbr‹   Únc_partÚnc_seqÚcoeffrz   Únum_expÚneg1eÚpnum_ratÚorder_symbolsÚor¯   r}   Úo1Úb1Úe1Úb2Úe2Únew_expÚo12rƒ   Úir�   Úchangedr°   r|   Úinv_exp_dictÚcomb_eÚnum_ratÚe_iÚepÚpnewÚeiÚgrowÚjÚbjÚejÚgÚobjÚnrŽ   rŒ   r_   Ú_newÚfrk   s7                                     `                   @r*   ÚflattenÚMul.flattenÍ   sI  ù€ õ^ 	BÝ9ØˆÜˆs‹8�qŒ=Ø‰DˆAˆqØ�}�}Ø˜!���1Ø˜!�f�ØœAŸE™E’>Ð!�>Ø�}�} Q§Y§YØ—~‘~Ó'‘��1Ø—8—8Ø¤§¡’~à™S˜Ø¤§¡š;Ø"#™Cá"% a¡c¨1°uÑ"=˜CØ!˜U B¨˜_™Ü*×5×5¸!×:J×:JÜ"À!Ç&Â&Ó$IÂ&¸B¤[°Ö%7Á&Ñ$IÐJ˜Ø"˜V R¨Ð-˜ÞØ�	ð ˆØˆàˆä—‘ˆð ˆð ˆô —‘ˆàˆð ˆô ˆAà�z�zØ#$×#6Ñ#6°}Ó#EÑ ��=ð �x�xØ×#×#Ø—J‘J˜qŸv™vÕ&ð ŸVœV˜Ø×+×+ØŸJ™J qžMà"ŸM™M¨!Ö,ñ	 $ð —J‘JœyÔ)áð ——ØœŸ™’: ¬!×*;Ñ*;Ò!;ÀÇ	Ç	äŸE™E˜7 B¨Ð,Ò,Ø—_—_¬
°5×(FÑ(FØ˜Q‘J�EØ¤§¡’~ä !§¡˜w¨¨DÐ0Ò0Úä˜A˜{×+Ñ+ØŸ	™	 %Ó(�Úà”a×'Ñ'Ò'ÞäŸE™E˜7 B¨Ð,Ò,Ü×)Ñ)�Úæœz¨!¬S×1Ñ1´cñ :AàŸfšfó:A÷ 7Añ 7Aô Ÿ™�w  DÐ(Ò(à”a—o‘oÒ%ØœŸ™‘�Úà×!×!Ð!ð —}‘}“‘��1ð —8—8Ø—{—{ð
 Ÿ=Ÿ=Ø Ÿ|Ÿ|Ø %¬¨Q°«Ñ 2 Ú (Ø!"§§Ø #§
¡
¬3¨q°!«9Ô 5Ú (Ø!"§§Ø %¨¡
 Ø%& B Ø ¬¯©š~Ø (× 3Ñ 3°A°rÓ :× AÑ AÀ!Ô DÚ$ØŸ]Ÿ]¨a¯l¯lØ#ŸN™N¨A¨q¨6Ô2Ú$à—‘  A ×'ð
 œIÒ%Ø—M‘M !Ô$÷ ‘fØŸ
™
 1›�AÞ"ØŸ™ qÔ)Ù ð !Ÿ™›�BØŸ^™^Ó-‘F�B˜ØŸ]™]›_‘F�B˜Ø  2™g�Gð
 ˜R“x¨¯¯Ø  G™m˜ð ×-×-ØŸJ™J sœOÙ$à"ŸM™M¨!¨SÕ1ð  Ÿ™¨¨A wÔ/÷7 “fñE òX	 ñ ˜8Ó$ˆñ ˜'Ó"ˆô0 �q—ˆAØˆLØˆGÜ ‘��1Ø—9—9àŸŸ A§H§H´#ô 6;Ü&'×&7Ñ&7¼¿¹Ü&'×&8Ñ&8ñ&:ó6;÷ 3;ñ 3;ô !"§¡˜w¨¨DÐ0Ô0ÙØœŸ™’:Ø—{—{Ø ™
˜Ù Ø�AØœAŸE™E’>Ü˜A˜q›	�Að —x—x¨¯¯Ø˜Ø Ÿ}™}›™˜˜1Ø ›7Ø&*˜GØ—‘˜aÔ Ø×#Ñ# Q¨ F×+ñ1 !ö6 œ3Ù".ô 0Ú".™$˜!˜Q“A¡,ò 0ó 1Ü47¸Ó4EóFð �Ù" <Ó0“áñI ðP ˆã‰DˆAˆqØ×#Ñ# A rÓ*×1Ñ1°!Ö4ñ à ×&Ñ&Ö(‰DˆAˆqÙ! 1˜gˆL˜‹Oñ )à�‰¨\×-?Ñ-?Ô-AÔGÒ-A¡T Q¨ÄQ“y”s˜1˜a–yÑ-AÒGÔHð ˆØ—N‘NÖ$‰DˆAˆqØ×Ñœc 1˜g rÓ*×1Ñ1°!Ö4ñ %àð ˆØ—L‘L–N‰DˆAˆqÙ�Q�ˆAØ�s‰s�a‹xØœ˜Q ›Ñ"�ÙØ�s‰s�Q—S‘S‹yÜ  §¡ a§c¡cÓ*‘��RØœ˜Q ›Ñ$�Ü˜R §¡Ó%�Ø�N‰N˜A˜q˜6Ö"ñ #ð ô œ4Ó ˆØˆØ”#�g“,ÔØ˜Q‘Z‰FˆB�Ø�Q‹wØ�Q‘�ÙØˆDÜ˜1˜q™5¤# g£,Ö/�Ø  ™‘��BØ—F‘F˜2“J�ØœAŸE™E”>ð ˜R™�AØ—s‘s˜a“xØ¤ Q¨£Ñ*™àŸ3™3 §¡›9Ü&,¨Q¯S©S°!·#±#Ó&6™G˜C Ø!¤S¨¨C£[Ñ0˜EÜ (¨¨Q¯S©SÓ 1˜AØŸ™ Q¨ FÔ+à"$ Q¡$¨ �G˜A‘Jà˜A™�BØœQŸU™U”{Ùñ) 0ð* œŸ™ŠÜ˜"˜b“k�Ø—=—=Ø˜S‘L‘Eô  #Ÿ}™}¨SÖ1˜ØŸ=Ÿ=Ø! S™LšEà#&§:§:Ð- :Ø%(§X¡X™F˜B Ø  ™HŸO™O¨BÖ/ñ  2ð �N‰N˜4Ô Ø�‰FˆAðU ”#�g“,ÖðZ —J‘J–L‰DˆAˆqÙ˜1�gˆD�‹Gñ !ö à×(Ñ(Ó*‰DˆAˆqä˜!˜Q“<‰DˆAˆqØ�1�uØ˜�à�A‹vØ—‘œaŸo™oÕ.Þô !  A›�Ø ŸJ™JžL‘D�A�qØ˜E•z a§m§m¡mØ#$ "˜˜Q™Ùñ )ð —M‘M¤#¤a§m¡m°UÀUÑ"KÔLð 	�‰¨T¯Z©Z¬\Ô:ª\¡T Q¨”s˜1˜a–y©\Ò:Ô;ð ”Q—Z‘Z¤×!3Ñ!3Ð4Ó4ò	.ñ "0°¸Ó!:ÑˆF�JÙ"0°¸*Ó"EÑˆG�ZØ�ZÑˆEð ”A×%Ñ%Ò%ñ "(ó Q¢˜A´	¸!¿)¹)×0DÑ0DØ01×0BÑ0B÷ ¡ˆFð Qá")ó S¢'˜Q´)¸A¿I¹I×2FÑ2FØ23×2DÑ2D÷ ¡'ˆGð SˆGð �]�]ô Ô>±gÓ>×>Ñ>Ø�w ¨Ð6Ð6ÜÑ8±Ó8×8Ñ8ÜŸ™�w  MÐ1Ð1Ø�7˜B Ð-Ð-ð ˆÛˆAØ�{�{Ø˜‘
’à—‘˜A–ñ	 ð
 ˆô 	�Ôð œŸ™ÒØ�M‰M˜!˜UÔ#ô ×(×(¶¼SÀ»[ÈAÓ=MØ�q‘	×#×#¨¨q©	×(;×(;ÀÀqÁ	×@P×@Pà˜1‘IˆEÜ¨V°A©Y¯^ª^Ó<ª^¨˜E !œG©^Ñ<Ð=Ð>ˆFà Ð-Ð-ùò] %Jùót 0ùó  HùóJ ;ùò2QùòSùòD =s<   Ä{
Þ{à6{
á{
ñ9{
ó5+{!ô${!ô0+{&õ{&ú2{+c                ó.  • U R                  SS9u  p#UR                  (       a@  [        U Vs/ s H  n[        XASS9PM     sn6 [        [        R	                  U5      USS9-  $ UR
                  (       aà  UR                  S:X  aÐ  U R                  (       a¿  U R                  5       S   nUR
                  (       a›  [        US-  5      R                  5       u  pg[        US5      u  phU(       ah  [        US5      u  pxU(       aS  SSKJn	  [        U5      U-  n
[        X¡R                   -  SU	" U5      ["        R$                  -  -   UR                   -  5      $ [        XSS9nUR
                  (       d  UR&                  (       a  UR)                  5       $ U$ s  snf )NF)Úsplit_1rT   rl   r	   r   ©Úsign)r5   r¨   r9   r©   r:   rš   r¯   Úis_imaginaryÚas_real_imagÚabsr´   r   Ú$sympy.functions.elementary.complexesrã   r
   rA   r°   r   r¤   Úis_FloatÚ_eval_expand_power_base)rQ   Úexptr;   Úncr|   r>   rÛ   r~   r‚   rã   r¸   r°   s               r*   Ú_eval_powerÚMul._eval_powerá  s@  € ð —M‘M¨%�MÐ0‰	ˆà�?�?Ü¹uÓEºu¸!œ˜Q¨uÔ5¹uÑEÐFÜ”C—N‘N 2Ó&¨°uÑ=ñ>ð >à×× §¡¨!£Ø× × Ø×%Ñ%Ó'¨Ñ*�Ø—=—=Ü˜q ™s›8×2Ñ2Ó4‘D�AÜ*¨1¨aÓ0‘D�AÞÜ.¨q°!Ó4™˜ÞÝQÜ '¨£
¨1¡˜AÜ#3°A·v±v±IÀÁDÈÃGÌAÏOÉOÑD[Ñ@[Ð^b×^dÑ^dÑ?dÓ#eÐeä� UÑ+ˆà××˜tŸ}Ÿ}Ø×,Ñ,Ó.Ð.àˆùò) Fs   ¬Fc                ó    • SSU R                   4$ )Né   r   )r   ©rW   s    r*   Ú	class_keyÚMul.class_keyý  s   € à�!�S—\‘\Ð!Ð!r)   c                óD  • U R                  5       u  p#U[        R                  L aC  UR                  (       a  [        R
                  " X15      * nO0UR                  U5      nUb  UnU* nO[        R
                  " X5      nUR                  (       a  UR                  5       $ U$ rI   )rv   r   rf   r$   r   Ú_eval_evalfÚ	is_numberÚexpand)rQ   Úprecr_   Úmr·   Úmnews         r*   rô   ÚMul._eval_evalf  s€   € Ø× Ñ Ó"‰ˆØ”—‘ÒØ�x�xÜ×)Ò)¨!Ó2Ð2‘à—}‘} TÓ*�ØÑ#Ø�AØ�R‘ä×$Ò$ TÓ0ˆBØ�<�<Ø—9‘9“;ÐØˆ	r)   c                ó¶   • SSK Jn  U R                  5       u  p#U[        R                  La  [        S5      eU" S5      R                  U" U5      R                  4$ )z+
Convert self to an mpmath mpc if possible
r	   )ÚFloatz7Cannot convert Mul to mpc. Must be of the form Number*Ir   )Únumbersrü   rv   r   r¤   ÚAttributeErrorÚ_mpf_)rQ   rü   Úim_partÚ	imag_units       r*   Ú_mpc_Ú	Mul._mpc_  sO   € õ
 	#Ø!×.Ñ.Ó0ÑˆØœAŸO™OÒ+ô !Ð!ZÓ[Ð[á�a“—‘¡ g£× 4Ñ 4Ð5Ð5r)   c                ó¬   • U R                   n[        U5      S:X  a  [        R                  U 4$ [        U5      S:X  a  U$ US   U R                  " USS 6 4$ )aÿ  Return head and tail of self.

This is the most efficient way to get the head and tail of an
expression.

- if you want only the head, use self.args[0];
- if you want to process the arguments of the tail then use
  self.as_coef_mul() which gives the head and a tuple containing
  the arguments of the tail when treated as a Mul.
- if you want the coefficient when self is treated as an Add
  then use self.as_coeff_add()[0]

Examples
========

>>> from sympy.abc import x, y
>>> (3*x*y).as_two_terms()
(3, x*y)
r	   rl   r   N)r0   r™   r   r4   Ú_new_rawargs)rQ   r0   s     r*   Úas_two_termsÚMul.as_two_terms   sX   € ð* �y‰yˆäˆt‹9˜‹>Ü—5‘5˜$�;ÐÜ�‹Y˜!‹^ØˆKð ˜‘7˜D×-Ò-¨t°A°B¨xÐ8Ð8Ð8r)   )Úrationalc               óŒ  ^• T(       a5  [        U R                  U4S jSS9u  pEU R                  " U6 [        U5      4$ U R                  nUS   R                  (       aV  U(       a  US   R
                  (       a
  US   USS  4$ US   R                  (       a  [        R                  US   * 4USS  -   4$ [        R                  U4$ )Nc                ó"   >• U R                   " T6 $ rI   )Úhas)ÚxÚdepss    €r*   Ú<lambda>Ú"Mul.as_coeff_mul.<locals>.<lambda>B  s   ø€ ¨q¯uªu°d©|r)   T)Úbinaryr   r	   )
r   r0   r  Útupler%   rš   r^   r   rf   r4   )rQ   r  r  ÚkwargsÚl1Úl2r0   s     `    r*   rd   ÚMul.as_coeff_mul?  s¬   ø€ æÜ˜$Ÿ)™)Ô%;ÀDÑI‰FˆBØ×$Ò$ bÐ)¬5°«9Ð4Ð4Ø�y‰yˆØ�‰7××Þ˜t A™w×2×2Ø˜A‘w  Q R Ð(Ð(Ø�a‘×-×-Ü—}‘}¨¨Q© x k°D¸¸°HÑ&<Ð<Ð<Ü�u‰u�dˆ{Ðr)   c                óf  • U R                   S   U R                   SS p2UR                  (       ar  U(       a  UR                  (       a%  [        U5      S:X  a  X#S   4$ X R                  " U6 4$ UR
                  (       a$  [        R                  U R                  " U* 4U-   6 4$ [        R                  U 4$ )z3
Efficiently extract the coefficient of a product.
r   r	   N)	r0   r%   rš   r™   r  r^   r   rf   r4   )rQ   r  r¿   r0   s       r*   rv   ÚMul.as_coeff_MulL  s”   € ð —i‘i ‘l D§I¡I¨a¨b Mˆtà�?�?Þ˜u×0×0Ü�t“9 “>Ø  q¡'˜>Ð)à ×"3Ò"3°TÐ":Ð:Ð:Ø×+×+Ü—}‘} d×&7Ò&7¸E¸6¸)ÀdÑ:JÐ&LÐLÐLÜ�u‰u�dˆ{Ðr)   c                ó   • SSK JnJnJn  / n/ n/ n[        R
                  n	U R                   GH  n
U
R                  5       u  p¼UR                  (       a  UR                  U5        M:  UR                  (       a$  UR                  U[        R                  -  5        Mo  U
R                  (       a{  U(       a  U
R                  5       OS n[        U5       H)  u  pÎXí:X  d  M  UR                  U" U5      S-  5        Xl	   MÏ     U
R                  (       a  Xš-  n	Mè  UR                  U
5        Mû  UR                  U
5        GM     U R                  " U6 nUR!                  S5      U:X  a  g [#        U5      S-  (       a  U" UR%                  S5      5      nO[        R&                  nU R                  " Xx-   6 nUU" U5      -  UU" U5      -  pËU	S:X  a_  US:X  a8  UR                  (       a  U[        R&                  4$ [        R&                  UU-  4$ U[        R&                  L a  X¼4$ U* U-  UU-  4$ SSKJn  U" U	SS9R                  5       u  nnU[        R&                  L a  UU-  UU-  -
  UU-  UU-  -   4$ U* U-  UU-  pËUU-  UU-  -
  UU-  UU-  -   4$ )	Nr   )ÚAbsÚimÚrerl   Úignorer	   )Ú
expand_mulF)Údeep)rç   r  r  r  r   r4   r0   rå   r›   r7   r¤   r'   Ú	conjugateÚ	enumeraterœ   ÚfuncÚgetr™   r­   rŸ   Úfunctionr  )rQ   r  Úhintsr  r  r  ÚotherÚcoeffrÚcoeffiÚaddtermsr>   r¸   rÌ   Úaconjr  rø   ÚimcoÚrecor  ÚaddreÚaddims                        r*   rå   ÚMul.as_real_imag\  s-  € ßDÑDØˆØˆØˆÜ—5‘5ˆØ—•ˆAØ—>‘>Ó#‰DˆAØ�y�yØ—‘˜aÖ Ø——Ø—‘˜a¤§¡Ñ/Ö0Ø×!×!Þ).˜Ÿ™œ°D�ä% eÖ,‘D�AØ•zØŸ™¡c¨!£f¨a¡iÔ0Ø!˜HÚñ	 -ð —x—xØ ™šàŸ™ Qžà—‘˜Q—ñ) ð* �IŠI�uÐˆØ�9‰9�XÓ !Ó#ØÜˆv‹;˜�?Ù�f—j‘j “mÓ$‰Dô —6‘6ˆDØ�yŠy˜6™?Ð,ˆØ‘R˜“U‘
˜D¡ A£™Jˆ1Ø�q‹=Ø�A‹vØ—<—<Ø ¤!§&¡&˜>Ð)äŸF™F D¨¡IÐ.Ð.Ø”q—v‘vŠ~Ø�v�Ø�E˜!‘G˜T !™VÐ$Ð$Ý(Ù! (°Ñ7×DÑDÓF‰ˆˆuØ”1—6‘6Š>Ø�e‘G˜a ™gÑ% q¨¡w°°5±Ñ'8Ð9Ð9à�5˜‘7˜D ™FˆqØ�e‘G˜a ™gÑ% q¨¡w°°5±Ñ'8Ð9Ð9r)   c           	     óD  • [        U 5      nUS:X  a  U S   R                  $ / n[        R                  U SUS-   5      n[        R                  XS-  S 5      nU VVs/ s H  oT  H  n[        XV5      PM     M     nnn[	        U6 n[        R
                  " U5      $ s  snnf )zS
Helper function for _eval_expand_mul.

sums must be a list of instances of Basic.
r	   r   Nrl   )r™   r0   r9   Ú_expandsumsry   rn   )ÚsumsÚLÚtermsÚleftÚrightr>   r|   Úaddeds           r*   r0  ÚMul._expandsums“  s’   € ô �‹IˆØ�‹6Ø˜‘7—<‘<ÐØˆÜ�‰˜t E Q¨¡T˜{Ó+ˆÜ—‘ ¨¡T U Ó,ˆá$(Ô8¢D˜q³%¨Q”�Q–±%‘¡DˆÑ8Ü�U�ˆÜ�}Š}˜UÓ#Ð#ùó 9s   ÁBc                ó¢  • SSK Jn  U nU" X1R                  SS5      5      u  pEUR                  (       a9  XE4 Vs/ s H(  nUR                  (       a  UR                  " S0 UD6OUPM*     snu  pEXE-  nUR                  (       d  U$ / / Sp˜nUR
                   Hg  n
U
R                  (       a  UR                  U
5        Sn	M)  U
R                  (       a  UR                  U
5        MM  UR                  [        U
5      5        Mi     U	(       d  U$ U R                  " U6 nU(       a«  UR                  SS5      nU R                  R                  U5      n/ nU Hn  nU R                  X~5      nUR                  (       a8  [        S UR
                   5       5      (       a  U(       a  UR	                  5       nUR                  U5        Mp     [        U6 $ U$ s  snf )	Nr   ©ÚfractionÚexactFTr  c              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )rœ   rK   s     r*   rM   Ú'Mul._eval_expand_mul.<locals>.<genexpr>Ê  s   é € Ð'Aº&°Q¯®º&ùrO   r   )Úsympy.simplify.radsimpr:  r"  r$   Ú_eval_expand_mulr0   rœ   r7   r'   r   r!  r0  r£   ry   )rQ   r$  r:  ÚexprrÛ   r~   rÌ   Úplainr1  ÚrewriteÚfactorr  r3  r0   Útermr‚   s                   r*   r?  ÚMul._eval_expand_mul¦  sv  € Ý3ð ˆá˜Ÿi™i¨°Ó7Ó8‰ˆØ�8�8à™ó!Ú�Að 45·8·8�A×&Ò&Ñ/¨Ò/ÀÒBÙñ!‰DˆAà‰sˆØ�{�{ØˆKà! 2 u�WˆØ—i”iˆFØ�}�}Ø—‘˜FÔ#Ø’à×(×(Ø—L‘L Ö(à—K‘K¤ f£Ö.ñ  ö ØˆKà—I’I˜uÐ%ˆEÞØ—y‘y ¨Ó/�ØŸ	™	×-Ñ-¨dÓ3�Ø�Û!�DØŸ	™	 %Ó.�AØ—x—x¤CÑ'A¸!¿&º&Ó'A×$AÑ$AÆdØ×.Ñ.Ó0˜Ø—K‘K –Nñ	 "ô
 ˜D�zÐ!à�ùòA!s   ¹/Gc           
     ó>  • [        U R                  5      n/ n[        [        U5      5       HY  nX$   R	                  U5      nU(       d  M  UR                  [        S US U U/-   X$S-   S  -   [        R                  5      5        M[     [        R                  " U5      $ )Nc                ó
   • X-  $ rI   r   )r  Úys     r*   r  Ú&Mul._eval_derivative.<locals>.<lambda>Ú  s   € °²r)   r	   )r3   r0   r®   r™   Údiffr7   r   r   r4   ry   Úfromiter)rQ   Úsr0   r3  rÌ   r~   s         r*   Ú_eval_derivativeÚMul._eval_derivativeÑ  s…   € ä�D—I‘I‹ˆØˆÜ”s˜4“yÖ!ˆAØ‘—‘˜Q“ˆAßˆqð —‘œVÑ$4°t¸B¸Q°xÀ1À#±~ÈÐQRÉUÈVÈÑ7TÔWX×W\ÑW\Ó]Ö^ñ "ô �|Š|˜EÓ"Ð"r)   c                óZ  >• SSK Jn  SSKJnJnJn  [        XU45      (       d  [        TU ]!  X5      $ SSK	J
n  U R                  n[        U5      n	[        U[        U45      (       ak  / n
SSKJn  U" X’5       HO  u  pÍ[!        [#        XÈ5       VVs/ s H  u  pïUR%                  X45      PM     snn6 nU
R'                  UU-  5        MQ     [)        U
6 $ SSKJn  SSKJn  SS	KJn  U" S
U	-  US9nU[7        U5      -
  nU" U5      nU[9        [;        UU5      5      -  U" U5      -  [!        [=        U	S-
  5       Vs/ s H  nUU   R%                  XU   45      PM     sn6 -  US   R%                  UU" SU5      45      -  U Vs/ s H  oîSU4PM	     snnnU" U/UQ76 $ s  snnf s  snf s  snf )Nr	   )ÚAppliedUndef)ÚSymbolÚsymbolsÚDummy)ÚIntegerr   )Ú!multinomial_coefficients_iterator)ÚSum)Ú	factorial)ÚMaxzk1:%irð   r‰   )r#  rP  ÚsymbolrQ  rR  rS  r‘   ÚsuperÚ_eval_derivative_n_timesrý   rT  r0   r™   ÚintÚsympy.ntheory.multinomialrU  r9   ÚziprJ  r7   ry   Úsympy.concrete.summationsrV  Ú(sympy.functions.combinatorial.factorialsrW  Ú(sympy.functions.elementary.miscellaneousrX  ÚsumÚprodÚmapr®   )rQ   rL  rÛ   rP  rQ  rR  rS  rT  r0   rø   r3  rU  Úkvalsr_   ÚkÚargr°   rV  rW  rX  ÚklastÚnfactr‚   r}   ÚlÚ	__class__s                            €r*   r[  ÚMul._eval_derivative_n_timesÝ  sš  ø€ å*ß2Ñ2Ü˜!¨FÐ3×4Ñ4ô ‘7Ñ3°AÓ9Ð9Ý$Ø�y‰yˆÜ�‹IˆÜ�aœ#˜w˜×(Ñ(àˆEÝSÙ=¸aÖC‘�Ü¼¸UÔ9IÔJÒ9I©v¨q˜#Ÿ(™( A 6Ö*Ñ9IÒJÐK�Ø—‘˜Q ™UÖ#ñ Dô ˜�;ÐÝ1ÝFÝ@Ù˜ !™¨Ñ/ˆØ”C˜“J‘ˆÙ˜!“ˆà”$”s˜9 eÓ,Ó-Ñ-©i¸Ó.>Ñ>Ü´u¸Q¸q¹S´zÓB²z°!�$�q‘'—,‘, ¨¡8˜}Ö-±zÑBÐCñDà�‰H�M‰M˜1™c ! U›mÐ,Ó-ñ.ñ !&Ó&¢˜1��A‹Y¡Ñ&ð	 ˆñ
 �1ˆz�qŠzÐùó Kùò Cùâ&s   ÂFÄ9"F#
ÆF(c                ó¬   • SSK Jn  U R                  S   n[        U R                  SS  6 nUR	                  XU-   5      U" XQU5      -  U" XAU5      U-  -   $ )Nr   )Údifference_deltar	   )Úsympy.series.limitseqrn  r0   r9   Úsubs)rQ   rÛ   ÚstepÚddÚarg0Úrests         r*   Ú_eval_difference_deltaÚMul._eval_difference_deltaý  s]   € Ý@Ø�y‰y˜‰|ˆÜ�D—I‘I˜a˜b�MÐ"ˆØ—	‘	˜! ™XÓ&©¨D°TÓ):Ñ:¹RÀÈÓ=NØñ>ñ ð 	r)   c                óÎ   • U R                  5       u  p4[        R                  U5      n[        U5      S:X  a/  U R                  R                  X5      nUS   R                  XR5      $ g ru   )rv   r9   rn   r™   rk  Ú_combine_inverseÚmatches)rQ   r@  Ú	repl_dictr¿   r3  Únewexprs         r*   Ú_matches_simpleÚMul._matches_simple  sW   € à×(Ñ(Ó*‰ˆÜ—‘˜eÓ$ˆÜˆu‹:˜‹?Ø—n‘n×5Ñ5°dÓBˆGØ˜‘8×#Ñ# GÓ7Ð7Ør)   c                ó8  • [        U5      nU R                  (       a#  UR                  (       a  U R                  XU5      $ U R                  UR                  La  g U R                  5       u  pEUR                  5       u  pgXF4 Vs/ s H  oˆ=(       d    S/PM     snu  pF[	        U6 n	[	        U6 n
U	R                  X¢U5      nU(       d  XF:w  a  g [        R                  U5      n[        R                  U5      n[        R                  XWU5      nU=(       d    S $ s  snf ©Nr	   )r
   r'   Ú_matches_commutativer5   r9   ry  Ú_matches_expand_powsÚ_matches_noncomm)rQ   r@  rz  ÚoldÚc1Únc1Úc2Únc2r_   Úcomm_mul_selfÚcomm_mul_exprs              r*   ry  ÚMul.matches  sö   € Ü�t‹}ˆØ×× 4×#6×#6Ø×,Ñ,¨T¸cÓBÐBØ× Ñ ¨×(;Ñ(;Ò;Øð —-‘-“/‰ˆØ—-‘-“/‰ˆØ%'¡HÓ-¢H˜q—(˜�s’(¡HÑ-‰ˆô ˜R˜ˆÜ˜R˜ˆà!×)Ñ)¨-ÀCÓHˆ	ö ˜R›XØô ×&Ñ& sÓ+ˆÜ×&Ñ& sÓ+ˆä×(Ñ(¨°9Ó=ˆ	à× ˜DÐ ùò) .s   ÂDc                óÖ   • / nU  H`  nUR                   (       a;  UR                  S:”  a+  UR                  UR                  /UR                  -  5        MO  UR	                  U5        Mb     U$ rc   )r§   Úexpr6   Úbaser7   )Úarg_listÚnew_argsrg  s      r*   r�  ÚMul._matches_expand_pows-  sP   € àˆÛˆCØ�z�z˜cŸg™g¨›kØ—‘ §¡ 
¨S¯W©WÑ 4Ö5à—‘ Ö$ñ	 ð
 ˆr)   c                óÞ  • Uc  0 nOUR                  5       n/ nSnUu  pV0 nU[        U5      :  a½  U[        U 5      :  a®  X   nUR                  (       a  [        R	                  Xt5        [        R                  XtX5      n	U	(       a+  U	u  p«UR                  U
5        U(       a  U H	  nX¼   X,'   M     U(       d  gUR                  5       nUu  pVU[        U5      :  a  U[        U 5      :  a  M®  U$ )zÓNon-commutative multiplication matcher.

`nodes` is a list of symbols within the matcher multiplication
expression, while `targets` is a list of arguments in the
multiplication expression being matched against.
N)r   r   )Úcopyr™   Úis_Wildr9   Ú_matches_add_wildcardÚ_matches_new_statesr6   r­   )ÚnodesÚtargetsrz  ÚagendaÚstateÚnode_indÚ
target_indÚwildcard_dictÚnodeÚstates_matchesÚ
new_statesÚnew_matchesÚmatchs                r*   r‚  ÚMul._matches_noncomm7  sæ   € ð ÑØ‰Ià!Ÿ™Ó(ˆIð ˆàˆØ$Ñˆàˆàœ3˜w›<Ó'¨H´s¸5³zÓ,AØ‘?ˆDà�|�|Ü×)Ñ)¨-Ô?ä ×4Ñ4°]Ø5:óEˆNæØ*8Ñ'�
Ø—‘˜jÔ)ÞÛ!,˜Ø+6Ñ+=˜	Ó(ñ "-æØàŸ
™
›�Ø',Ñ$�ð% œ3˜w›<Ó'¨H´s¸5³zÕ,Að( Ðr)   c                ó8   • Uu  p#X ;   a  X   u  pEXC4X'   g X34X'   g rI   r   )Ú
dictionaryr™  rš  r›  ÚbeginÚends         r*   r”  ÚMul._matches_add_wildcardb  s0   € à$ÑˆØÓ!Ø#Ñ-‰JˆEØ$)Ð#6ˆJÒ à$.Ð#;ˆJÒ r)   c                ó˜  • Uu  pEX$   nX5   nU[        U5      S-
  :¼  a  U[        U5      S-
  :  a  g UR                  (       a¬  [        R                  XX#5      nU(       aŽ  [        R	                  U X$5      n	U	 H<  n
X
   u  p¼X   u  pÞX;US-    nX=US-    n[        UU5       H  u  nnUU:w  d  M      g    M>     XES-   4/nU[        U5      S-
  :  a  UR                  US-   US-   45        UU4$ g U[        U5      S-
  :¼  a  U[        U5      S-
  :  a  g UR                  U5      nU(       a  US-   US-   4/U4$ Xg:X  a  US-   US-   4/S 4$ g r  )r™   r“  r9   Ú_matches_match_wildsÚ_matches_get_other_nodesr^  r7   ry  )r¤  r™  r–  r—  rš  r›  r�  ÚtargetÚmatch_attemptÚother_node_indsÚindÚother_beginÚ	other_endÚ
curr_beginÚcurr_endÚother_targetsÚcurrent_targetsÚcurrr%  Ú	new_states                       r*   r•  ÚMul._matches_new_statesk  s‘  € à$ÑˆØ‰ˆØÑ$ˆð œ˜W›¨Ñ)Ó)¨h¼¸U»Àa¹Ó.GØà�<�<Ü×4Ñ4°ZØ5:óEˆMæô #&×">Ñ">¸zØ?Dó#P�ã*�CØ-7©_Ñ*�KØ+5Ñ+?Ñ(�Jà$+¸	ÀA¹Ð$F�MØ&-¸ÀA¹Ð&F�Oä'*¨?¸MÖ'J™˜˜eØ 5�=Ú#'ó (Kñ +ð '°Q©Ð7Ð8�	àœc %›j¨1™nÓ,Ø×$Ñ$ h°¡l°JÀ±NÐ%CÔDØ  -Ð/Ð/ð/ ð8 œ3˜u›:¨™>Ó)¨j¼3¸w»<È!Ñ;KÓ.KØà ŸL™L¨Ó0ˆMæØ! A™ z°A¡~Ð6Ð7¸ÐFÐFØ“Ø! A™ z°A¡~Ð6Ð7¸Ð=Ð=àr)   c                ó~   • X!   nX   u  pVX5US-    n[        U5      S:”  a  [        U6 OUS   nUR                  U5      $ )z@Determine matches of a wildcard with sub-expression in `target`.r	   r   )r™   r9   ry  )	r¤  Úwildcard_indr–  r—  Úwildcardr¥  r¦  r3  Úmults	            r*   r©  ÚMul._matches_match_wilds   sN   € ð Ñ&ˆØÑ-‰
ˆØ˜c A™gÐ&ˆä! %›j¨1›nŒs�E‰{°%¸±(ˆØ×Ñ Ó%Ð%r)   c                óN   • X   nU  Vs/ s H  oAU   U:X  d  M  UPM     sn$ s  snf )z8Find other wildcards that may have already been matched.r   )r¤  r–  rš  Úind_noder®  s        r*   rª  ÚMul._matches_get_other_nodesª  s,   € ð ‘?ˆÙ)ÓDšz˜°3©Z¸8Ñ-C—™zÑDÐDùÒDs   ‰"™"c                óÞ  • SSK Jn  SSKJn  X:X  a  [        R
                  $ S nU" X5      (       d  U" X5      (       a  [        R
                  $ [        S X4 5       5      (       GaZ  U" S5      n[        R                  U0nU[        R                  0nU R                  U5      R                  5       nUR                  U5      R                  5       n	[        U	5      n
[        U	R                  5       5       HA  nX¸;   d  M
  X‹==   U	R                  U5      -  ss'   X‹   (       a  M0  UR                  U5        MC     [        U	5      U
:w  ax  [        UR                  5        VVs/ s H	  u  pÍXÍ-  PM     snn6 R                  U5      n [        U	R                  5        VVs/ s H	  u  pÍXÍ-  PM     snn6 R                  U5      nX-  nU" U5      nUR                   (       a  U$ U$ s  snnf s  snnf )z›
Returns lhs/rhs, but treats arguments like symbols, so things
like oo/oo return 1 (instead of a nan) and ``I`` behaves like
a symbol instead of sqrt(-1).
r   )Úsignsimpr	   )rS  c                óª   • U R                   (       aB  UR                  (       a1  U R                  S5      UR                  5       R                  S5      :H  $ g)Nr   F)rè   Úis_comparableÚ__add__Úevalf)rj  r¸   s     r*   ÚcheckÚ#Mul._combine_inverse.<locals>.check¼  s8   € Ø�z�z˜aŸoŸoð —y‘y “| q§w¡w£y×'8Ñ'8¸Ó';Ñ;Ð;Ør)   c              3  ó^   #   • U  H#  oR                   =(       d    UR                  v •  M%     g 7frI   )r§   r$   ©rL   rÌ   s     r*   rM   Ú'Mul._combine_inverse.<locals>.<genexpr>Å  s   é € Ð8ªZ¨�x‰x×#˜1Ÿ8™8Ô#ªZùó   ‚+-ÚI)Úsympy.simplify.simplifyrÁ  rY  rS  r   r4   r£   r¤   ÚxreplaceÚas_powers_dictr™   r  Úkeysr­   r9   rx   r%   )ÚlhsÚrhsrÁ  rS  rÆ  r~   Ú_iÚi_r>   r|   Úblenr»   rf  Úvr·   Úsrvs                   r*   rx  ÚMul._combine_inverse°  s{  € õ 	5Ý!Ø‹:Ü—5‘5ˆLò	ñ ��?‰?™e CŸo™oÜ—5‘5ˆLÜÑ8¨c©ZÓ8×8Ò8ñ �c“
ˆAÜ—/‘/ 1Ð%ˆBØ”Q—_‘_Ð%ˆBØ—‘˜RÓ ×/Ñ/Ó1ˆAØ—‘˜RÓ ×/Ñ/Ó1ˆAÜ�q“6ˆDÜ˜AŸF™F›H–o�Ø•7Ø“E˜QŸU™U 2›YÑ&“EØŸ5™5ØŸ™˜bž	ñ	 &ô
 �1‹v˜‹~Ü¨Q¯W©W¬YÔ7ªY¡T Q˜AœD©YÒ7Ð8×AÑAÀ"ÓE�Ü¨Q¯W©W¬YÔ7ªY¡T Q˜AœD©YÒ7Ð8×AÑAÀ"ÓE�Ø‰WˆÙ�r‹lˆØ—m—mˆsÐ+¨Ð+ùó	 8ùÛ7s   Å"G#
ÆG)
c                ó°   • [        [        5      nU R                   H6  nUR                  5       R	                  5        H  u  p4X==   U-  ss'   M     M8     U$ rI   )r   r\  r0   rÏ  rx   )rQ   r~   rD  r|   r}   s        r*   rÏ  ÚMul.as_powers_dictÚ  sJ   € ÜœÓˆØ—I”IˆDØ×+Ñ+Ó-×3Ñ3Ö5‘�Ø“˜‘	•ó 6ñ ð ˆr)   c           	     ó¾   • [        [        U R                   Vs/ s H  oR                  5       PM     sn6 5      u  p#U R                  " U6 U R                  " U6 4$ s  snf rI   )r3   r^  r0   r´   r!  )rQ   rÝ   ÚnumersÚdenomss       r*   r´   ÚMul.as_numer_denomá  sR   € ô œcÀÇ	Â	Ó#JÂ	¸1×$4Ñ$4Ö$6Á	Ñ#JÐKÓL‰ˆØ�yŠy˜&Ð! 4§9¢9¨fÐ#5Ð5Ð5ùò $Ks   ™Ac                ó4  • S n/ nSnU R                    Hr  nUR                  5       u  pVUR                  (       d  US-  nUc  UnO0Xa:w  d  US:”  d  UR                  (       d  U [        R
                  4s  $ UR                  U5        Mt     U R                  " U6 U4$ )Nr   r	   )r0   r¦   r'   r¨   r   r4   r7   r!  )rQ   rÇ   Úbasesrë   rø   r|   r}   s          r*   r¦   ÚMul.as_base_expè  sˆ   € ØˆØˆØˆØ—”ˆAØ—=‘=“?‰DˆAØ×#×#Ø�a‘�Ø‰zØ‘Ø“˜B ›F¨!¯,¯,ØœQŸU™U�{Ò"Ø�L‰L˜ŽOñ ð �yŠy˜%Ð  "Ð$Ð$r)   c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_polynomial©rL   rD  Úsymss     €r*   rM   Ú*Mul._eval_is_polynomial.<locals>.<genexpr>ø  s   øé € ÐHºi°d×+Ñ+¨D×1Ð1ºiùó   ƒ ©Úallr0   ©rQ   ræ  s    `r*   rä  ÚMul._eval_is_polynomial÷  s   ø€ ÜÔH¸d¿iºiÓHÓHÐHr)   c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_rational_functionrå  s     €r*   rM   Ú1Mul._eval_is_rational_function.<locals>.<genexpr>û  s   øé € ÐOÂY¸T×2Ñ2°4×8Ð8ÂYùrè  ré  rë  s    `r*   rï  ÚMul._eval_is_rational_functionú  s   ø€ ÜÔOÀTÇYÂYÓOÓOÐOr)   c                óD   ^^• [        UU4S jU R                   5       SS9$ )Nc              3  óF   >#   • U  H  oR                  TT5      v •  M     g 7frI   )Úis_meromorphic)rL   rg  r>   r  s     €€r*   rM   Ú+Mul._eval_is_meromorphic.<locals>.<genexpr>þ  s   øé € ÐKÂ¸#×/Ñ/°°1×5Ð5Âùs   ƒ!T©Ú
quick_exit©r   r0   )rQ   r  r>   s    ``r*   Ú_eval_is_meromorphicÚMul._eval_is_meromorphicý  s   ù€ ÜÕKÀÇÂÓKØ'+ñ-ð 	-r)   c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_algebraic_exprrå  s     €r*   rM   Ú.Mul._eval_is_algebraic_expr.<locals>.<genexpr>  s   øé € ÐLÂ)¸$×/Ñ/°×5Ð5Â)ùrè  ré  rë  s    `r*   rý  ÚMul._eval_is_algebraic_expr  s   ø€ ÜÔLÀ$Ç)Â)ÓLÓLÐLr)   c                ó:   • [        S U R                   5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )r'   rK   s     r*   rM   ÚMul.<lambda>.<locals>.<genexpr>  s   é € ð 5-Ú"+˜Q×Ö¢)ùrO   rø  r[   s    r*   r  ÚMul.<lambda>  s   € ¬ñ 5-Ø"&§)¢)ó5-ô )-r)   c                óÐ   • [        S U R                   5       5      nUSL aD  [        S U R                   5       5      (       a#  [        S U R                   5       5      (       a  g gU$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Ú
is_complexrK   s     r*   rM   Ú'Mul._eval_is_complex.<locals>.<genexpr>  s   é € Ð<²)¨QŸLžL²)ùrO   Fc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_infiniterK   s     r*   rM   r  
  s   é € Ð4ª) Q—=–=ª)ùrO   c              3  ó<   #   • U  H  oR                   S Lv •  M     g7fr“   ©r›   rK   s     r*   rM   r    s   é € ÐA²y°!—y‘y¨Õ-²yùó   ‚)r   r0   r£   )rQ   Úcomps     r*   Ú_eval_is_complexÚMul._eval_is_complex  sR   € ÜÑ<°$·)²)Ó<Ó<ˆØ�5Š=ÜÑ4¨$¯)ª)Ó4×4Ñ4ÜÑA°t·y²yÓA×AÑAØØØˆr)   c                ó  • S=pU R                    Hu  nUR                  (       a  USLa    gSnM  UR                  (       a  USLa    gSnM;  USL a  UR                  c	  USLa    gS nUSL d  M]  UR                  b  Ml  USLa    gS nMw     X4$ )NF)NNT)r0   r›   r	  )rQ   Ú	seen_zeroÚseen_infiniter>   s       r*   Ú_eval_is_zero_infinite_helperÚ!Mul._eval_is_zero_infinite_helper  s–   € ðX %*Ð)ˆ	à—”ˆAØ�y�yØ ¨Ò-Ù%Ø ’	Ø——Ø EÒ)Ù%Ø $’à Ò%¨!¯)©)Ñ*;Ø$¨EÒ1Ù)Ø $�IØ  EÔ)¨a¯m©mÓ.CØ ¨Ò-Ù)Ø$(’Mñ# ð& Ð'Ð'r)   c                óJ   • U R                  5       u  pUSL a  gUSL a  USL a  gg ©NFT©r  ©rQ   r  r  s      r*   Ú_eval_is_zeroÚMul._eval_is_zeroS  s5   € ð $(×#EÑ#EÓ#GÑ ˆ	à˜ÒØØ˜$Ò =°EÒ#9Øàr)   c                óJ   • U R                  5       u  pUSL a  USL a  gUSL a  gg )NTFr  r  s      r*   Ú_eval_is_infiniteÚMul._eval_is_infinite_  s5   € ð $(×#EÑ#EÓ#GÑ ˆ	à˜DÒ  Y°%Ò%7ØØ˜eÒ#Øàr)   c                óœ   • [        S U R                   5       SS9nU(       a  U$ USL a#  [        S U R                   5       5      (       a  gg g )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_rationalrK   s     r*   rM   Ú(Mul._eval_is_rational.<locals>.<genexpr>o  s   é € Ð;²¨AŸ-ž-²ùrO   Trö  Fc              3  ó<   #   • U  H  oR                   S L v •  M     g7fr“   r  rK   s     r*   rM   r!  t  ó   é € Ð9ªy¨!—9‘9 Õ%ªyùr  ©r   r0   rê  ©rQ   r¸   s     r*   Ú_eval_is_rationalÚMul._eval_is_rationaln  sI   € ÜÑ;°·²Ó;ÈÑMˆÞØˆHØ�%ŠZäÑ9¨t¯yªyÓ9×9Ñ9Øð :ð r)   c                óœ   • [        S U R                   5       SS9nU(       a  U$ USL a#  [        S U R                   5       5      (       a  gg g )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_algebraicrK   s     r*   rM   Ú)Mul._eval_is_algebraic.<locals>.<genexpr>x  s   é € Ð<²)¨QŸ.ž.²)ùrO   Trö  Fc              3  ó<   #   • U  H  oR                   S L v •  M     g7fr“   r  rK   s     r*   rM   r+  }  r#  r  r$  r%  s     r*   Ú_eval_is_algebraicÚMul._eval_is_algebraicw  sI   € ÜÑ<°$·)²)Ó<ÈÑNˆÞØˆHØ�%ŠZäÑ9¨t¯yªyÓ9×9Ñ9Øð :ð r)   c                ó`  ^• U R                  5       nUSL a  g/ n/ nSnU R                   GHŠ  nSnUR                  (       a1  [        U5      [        R
                  La  UR                  U5        MF  MH  UR                  (       ag  UR                  5       u  px[        U5      [        R
                  La  UR                  U5        U[        R
                  La  UR                  U5        M¾  MÀ  UR                  (       aº  UR                  5       u  pšU	R                  (       a  U
R                  (       d  S=pdU
R                  (       aA  UR                  U[        R                  L a  SO[        U[        R                  5      5        GMZ  U(       d(  U
R                  (       a   eU
R                   (       a   e  g   g   g    U(       d  U(       d  gS nS nS nSSKJm  U(       d"  U(       a  ['        U4S	 jU 5       5      (       a  gU(       a  g U" U5      (       a  U" U5      (       a  gU" U5      (       a  US/:X  a  gU" U5      (       a+  U" U5      (       a  [)        US
S06S-
  R                  (       a  g[+        U5      S:X  aŠ  US   nUR,                  (       at  UR.                  (       ac  [1        U Vs/ s H)  nUR.                  (       d  M  UR                  5       S   PM+     sn6 [3        UR4                  5      -
  R6                  (       a  g[+        U5      S:X  a�  US   nUR,                  (       av  UR.                  (       ad  [1        U Vs/ s H)  nUR.                  (       d  M  UR                  5       S   PM+     sn6 [3        UR4                  5      -
  R                  (       a  gg g g g s  snf s  snf )NFTrl   c                ó&   • [        S U  5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_oddrÉ  s     r*   rM   Ú9Mul._eval_is_integer.<locals>.<lambda>.<locals>.<genexpr>¬  s   é € Ð3²¨AŸxžx²ùrO   ©rê  ©r  s    r*   r  Ú&Mul._eval_is_integer.<locals>.<lambda>¬  s   € œ3Ñ3±Ó3Ô3r)   c                ó&   • [        S U  5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   ©Úis_evenrÉ  s     r*   rM   r3  ­  ó   é € Ð5²1¨a§	¦	²1ùrO   r4  r5  s    r*   r  r6  ­  ó   € œCÑ5±1Ó5Ô5r)   c                ó&   • [        S U  5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   r9  rÉ  s     r*   rM   r3  ®  r;  rO   )r£   r5  s    r*   r  r6  ®  r<  r)   r	   )Úis_gtc              3  óR   >#   • U  H  nT" U[         R                  5      v •  M     g 7frI   )r   r4   )rL   rr   r?  s     €r*   rM   Ú'Mul._eval_is_integer.<locals>.<genexpr>±  s    øé € ð 37Ú)5 A‘�aœŸ™—�ªùó   ƒ$'rU   r   )r&  r0   r¬   ræ   r   r4   r7   rš   r´   r§   r¦   rª   r¥   r©   rf   r«   r›   Ú
relationalr?  rê  r9   r™   r¨   r:  ry   r   r°   Úis_nonnegative)rQ   r   Ú
numeratorsÚdenominatorsÚunknownr>   ÚhitrÛ   r~   r|   r}   ÚalloddÚallevenÚanyevenrÌ   r?  s                  @r*   Ú_eval_is_integerÚMul._eval_is_integerƒ  sü  ø€ Ø×,Ñ,Ó.ˆØ˜%ÒØàˆ
ØˆØˆØ—•ˆAØˆCØ�|�|Ü�q“6¤§¡Ò&Ø×%Ñ% aÖ(ñ 'à——Ø×'Ñ'Ó)‘�Ü�q“6¤§¡Ò&Ø×%Ñ% aÔ(ØœAŸE™E’>Ø ×'Ñ'¨Ö*ñ "à——Ø—}‘}“‘�Ø—|—|¨1¯<¯<Ø$(Ð(�CØ—=—=Ø ×'Ñ'¨Q´!·&±&ª[©Ü˜AœqŸ}™}Ó-÷/æà Ÿ}Ÿ}Ð,Ð,à ŸyŸyÐ(˜=Ùñ áñ9 ö< ¦GØá3ˆÙ5ˆÙ5ˆå%Þžl¬sô 37Ù)5ó37÷ 07ñ 07àÞØÙ�J×Ñ¡G¨L×$9Ñ$9ØÙ�Z× Ñ  \°a°SÓ%8ØÙ�Z× Ñ ¡V¨L÷ &ñ &Ü˜LÐ9°5Ñ9¸AÑ=ß‘+õàÜˆ|Ó Ó!Ø˜Q‘ˆAØ�|�| §	§	ô Ù"ó1Ú"ð 23Ø&'§i¥ió -˜!Ÿ-™-›/¨!Ô,Ù"ñ1ð 2Ü4<¸Q¿S¹S³MñBç(™.õ)ð  Üˆz‹?˜aÓØ˜1‘ˆAØ�|�| §	§	ô Ù$ó3Ú$ð 23Ø()¯	­	ó -˜!Ÿ-™-›/¨!Ô,Ù$ñ3ð 4Ü6>¸q¿s¹s³mñDç%™+õ&ð !ð&ð !*ˆ|ð  ùò	1ùò3s   Ê/N&ËN&ÍN+Í!N+c                ó„   • [        S U R                   5       5      nU=(       a    [        S U R                   5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_polar©rL   rg  s     r*   rM   Ú%Mul._eval_is_polar.<locals>.<genexpr>Ò  s   é € Ð:²	¨Ÿž²	ùrO   c              3  ó^   #   • U  H#  oR                   =(       d    UR                  v •  M%     g 7frI   )rP  r«   rQ  s     r*   rM   rR  Ô  s   é € ÐEº9°C—‘×/ §¡Ô/º9ùrË  )r£   r0   rê  )rQ   Ú	has_polars     r*   Ú_eval_is_polarÚMul._eval_is_polarÑ  s7   € ÜÑ:°·	²	Ó:Ó:ˆ	Ø÷ FÜÑE¸4¿9º9ÓEÓEð	Fr)   c                ó$   • U R                  S5      $ ©NT)Ú_eval_real_imagr[   s    r*   Ú_eval_is_extended_realÚMul._eval_is_extended_realÖ  s   € Ø×#Ñ# DÓ)Ð)r)   c                ó–  • SnS nU R                    Hì  nUR                  =(       d    UR                  SL a  UR                  SL a    gUR                  (       a	  U(       + nMP  UR                  (       aS  U(       dJ  UR
                  nU(       d	  USL a  UnM„  U(       a%  [        S U R                    5       5      (       a    g  g M²  M´  UR                  SL a  U(       a    g UnMÐ  UR                  SL a  U(       a    g UnMì    g    U(       a2  UR                  SL a	  U(       a  U$ UR                  SL a
  U(       d  U$ g g USL a  U$ U(       a  U$ g )NFc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   r”   rK   s     r*   rM   Ú&Mul._eval_real_imag.<locals>.<genexpr>è  s   é € Ð>²I¨qŸ{ž{²IùrO   T)r0   r  r	  rµ   rä   r›   rê  )rQ   ÚrealÚzeroÚt_not_re_imr‚   Úzs         r*   rY  ÚMul._eval_real_imagÙ  s$  € ØˆØˆà—”ˆAØ—‘×- §¡°%Ò7¸A×<NÑ<NÐRWÒ<WÙØ——Ø”x’Ø×#×#ÞØŸ	™	�AÞ ¨¢Ø šÞÜÑ>°D·I²IÓ>×>Ñ>Ù#'Ùñ ñ	 ð ×#Ñ# uÒ,æÙØ’Ø—‘ 5Ò(ÞÙØ’áñ1 ö4 Ø×+Ñ+¨uÒ4ÞØ�KØ×'Ñ'¨5Ò0ÞØ�Kð ð 1ð �UŠ]ØˆKÞØˆKð r)   c                óh   • [        S U R                   5       5      (       a  U R                  S5      $ g )Nc              3  ób   #   • U  H%  oR                   S L =(       a    UR                  v •  M'     g7fr“   )r›   r•   rK   s     r*   rM   Ú)Mul._eval_is_imaginary.<locals>.<genexpr>  s#   é € ÐEº9°a�y‰y˜EÐ!×1 a§k¡kÔ1º9ùs   ‚-/F)rê  r0   rY  r[   s    r*   Ú_eval_is_imaginaryÚMul._eval_is_imaginary  s.   € ÜÑE¸4¿9º9ÓE×EÑEØ×'Ñ'¨Ó.Ð.ð Fr)   c                ó$   • U R                  S5      $ rX  ©Ú_eval_herm_antihermr[   s    r*   Ú_eval_is_hermitianÚMul._eval_is_hermitian  s   € Ø×'Ñ'¨Ó-Ð-r)   c                ó$   • U R                  S5      $ ©NFrj  r[   s    r*   Ú_eval_is_antihermitianÚMul._eval_is_antihermitian
  s   € Ø×'Ñ'¨Ó.Ð.r)   c                ó  • U R                    HL  nUR                  b  UR                  c    g UR                  (       a  M2  UR                  (       a	  U(       + nML    g    USLa  U$ U R                  5       nU(       a  gUSL a  U$ g r  )r0   Úis_hermitianÚis_antihermitianr  )rQ   Úhermr‚   r›   s       r*   rk  ÚMul._eval_herm_antiherm  sz   € Ø—”ˆAØ�~‰~Ñ%¨×);Ñ);Ñ)CÙØ�~�~ÙØ×#×#Ø”x’áñ ð �uÒØˆKà×$Ñ$Ó&ˆÞØØ˜ÒØˆKð r)   c                ó   • U R                    H\  nUR                  nU(       aA  [        U R                   5      nUR                  U5        [	        S U 5       5      (       a    g  g Ub  M\    g    [	        S U R                    5       5      (       a  gg )Nc              3  ót   #   • U  H.  oR                   =(       a    [        UR                  5      S L v •  M0     g7f)TN)r   r   r›   ©rL   r  s     r*   rM   Ú*Mul._eval_is_irrational.<locals>.<genexpr>'  s'   é € ÐXÒQWÈAŸ™×>¬)°A·I±IÓ*>À4ÕGÒQWùs   ‚68Tc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_realry  s     r*   rM   rz  ,  s   é € Ð,¢)˜Q�yŽy¢)ùrO   F)r0   Úis_irrationalr3   Úremoverê  )rQ   r‚   r>   Úotherss       r*   Ú_eval_is_irrationalÚMul._eval_is_irrational!  st   € Ø—”ˆAØ—‘ˆAÞÜ˜dŸi™i›�Ø—‘˜aÔ ÜÑXÑQWÓX×XÑXÙÙØ‹yÙñ ô Ñ, $§)¢)Ó,×,Ñ,Øð -r)   c                ó$   • U R                  S5      $ )a3  Return True if self is positive, False if not, and None if it
cannot be determined.

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

This algorithm is non-recursive and works by keeping track of the
sign which changes when a negative or nonpositive is encountered.
Whether a nonpositive or nonnegative is seen is also tracked since
the presence of these makes it impossible to return True, but
possible to return False if the end result is nonpositive. e.g.

    pos * neg * nonpositive -> pos or zero -> None is returned
    pos * neg * nonnegative -> neg or zero -> False is returned
r	   ©Ú_eval_pos_negr[   s    r*   Ú_eval_is_extended_positiveÚMul._eval_is_extended_positive/  s   € ð  ×!Ñ! !Ó$Ð$r)   c                óî  • S=p#U R                    HÊ  nUR                  (       a  M  UR                  (       a  U* nM,  UR                  (       a%  [	        S U R                    5       5      (       a    g  g UR
                  (       a  U* nSnMz  UR                  (       a  SnM�  UR                  SL a  U* nU(       a    g SnM®  UR                  SL a  U(       a    g SnMÊ    g    US:X  a  USL a  USL a  gUS:  a  gg )NFc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   r”   rK   s     r*   rM   Ú$Mul._eval_pos_neg.<locals>.<genexpr>I  s   é € Ð6ªI q—{–{ªIùrO   Tr	   r   )	r0   rŠ   r^   r›   rê  Úis_extended_nonpositiveÚis_extended_nonnegativer«   rª   )rQ   rã   Úsaw_NONÚsaw_NOTr‚   s        r*   r„  ÚMul._eval_pos_negA  sÜ   € Ø!Ð!ˆØ—”ˆAØ×%×%ÙØ×'×'Ø�u’Ø——ÜÑ6¨D¯IªIÓ6×6Ñ6Ù ÙØ×*×*Ø�u�Ø’Ø×*×*Ø’ð —‘ %Ò'Ø�u�ÞÙØ’Ø—‘ %Ò'ÞÙØ’áñ7 ð8 �1‹9˜ EÒ)¨g¸Ò.>ØØ�!‹8Øð r)   c                ó$   • U R                  S5      $ rˆ   rƒ  r[   s    r*   Ú_eval_is_extended_negativeÚMul._eval_is_extended_negatived  s   € Ø×!Ñ! "Ó%Ð%r)   c                ó†  • U R                  5       nUSLa  U$ SSKJn  U" U 5      u  p4UR                  (       aˆ  UR                  (       aw  [        [        R                  U5       Vs/ s H)  nUR                  (       d  M  UR                  5       S   PM+     sn6 [        UR                  5      -
  R                  (       a  gg Su  pgU R                   Hg  n[        U5      [        R                  L a  M!  UR                  (       a    gUSL a  O+US:w  a  Xx-   R                   (       a  SnOUR                  c  S nUnMi     U$ s  snf )NTr   r9  r	   F)Tr	   )rL  r>  r:  r¨   r:  ry   r9   rn   r¦   r   r°   r«   r0   ræ   r   r4   r2  )	rQ   r¬   r:  rÛ   r~   rÌ   r¸   Úaccr‚   s	            r*   Ú_eval_is_oddÚMul._eval_is_oddg  s  € Ø×*Ñ*Ó,ˆ
Ø˜TÒ!ØÐå3Ù˜‹~‰ˆØ�<�<˜AŸIŸIô Ü—M‘M !Ô$ó3Ú$ð ./Ø()¯	­	ó )�a—m‘m“o aÔ(Ù$ñ3ð 4Ü6>¸q¿s¹s³mñDç!‘kõ"ð ØØ‰ˆØ—”ˆAÜ�1‹vœŸ™ŠÙØ�y�yÙØ�EŠzØØ˜“˜s™w×.×.Ø‘Ø—‘Ñ"Ø�ØŠCñ ð ˆùò%3s   Á&D>Á?D>c                ób  • SSK Jn  U" U 5      u  p#UR                  (       a‰  UR                  (       aw  [	        [
        R                  U5       Vs/ s H)  nUR                  (       d  M  UR                  5       S   PM+     sn6 [        UR                  5      -
  R                  (       a  gg g g s  snf )Nr   r9  r	   F)r>  r:  r¨   r:  ry   r9   rn   r¦   r   r°   rD  )rQ   r:  rÛ   r~   rÌ   s        r*   Ú_eval_is_evenÚMul._eval_is_even…  s“   € Ý3Ù˜‹~‰ˆØ�<�<˜AŸIŸIô Ü—M‘M !Ô$ó3Ú$ð ./Ø()¯	­	ó )�a—m‘m“o aÔ(Ù$ñ3ð 4Ü6>¸q¿s¹s³mñDç$‘nõ%ð ð%ð	 &ˆ<ùò3s   ÁB,Á(B,c                óº   • SnU R                    HB  nUR                  (       a  UR                  (       d    gUS-
  R                  (       d  M=  US-  nMD     US:”  a  gg)zÄ
Here we count the number of arguments that have a minimum value
greater than two.
If there are more than one of such a symbol then the result is composite.
Else, the result cannot be determined.
r   Nr	   T)r0   r¬   r«   )rQ   Únumber_of_argsrg  s      r*   Ú_eval_is_compositeÚMul._eval_is_composite‘  sS   € ð ˆØ—9”9ˆCØ—N—N s§§ÙØ�A‘×"×"Ñ"Ø !Ñ#’ñ	 ð ˜AÓØð r)   c           	     ó„  ^(^)^*^+^,• SSK Jm,  SSKJn  SSKJm+  SSKJn  UR                  (       d  g UR                  S   R                  (       aY  UR                  S   S:  aF  U R                  S   R                  (       a(  U R                  S   S:  a  U R                  U* U* 5      $ g S m(U(U+4S jnU(4S jnS	 nS nU" U 5      u  pšU nU
[        R                  LaL  U	R                  X5      U
R                  X5      -  nUR                  (       d  UR                  X5      $ X°:w  a  UnUR                  S   nUR                  S   nS nUR                  (       a(  UR                  (       a  XÜ:w  a  UR                  U5      nOUR                  (       a  U$ U" U5      u  m)nU" U5      u  m*nU(       am  UR                  (       a\  [!        U5      S
:w  aM  [        U" [!        U5      U5      5      nT)R#                  U5        UT);   a  T)U==   U-  ss'   OUT)U'   XÍU-  -  nOS
nSn[%        U5      [%        U5      :”  a  SnO¥[%        T*5      [%        T)5      :”  a  SnOŠU Vs1 s H  nUS   iM
     snR'                  U Vs1 s H  nUS   iM
     sn5      (       a  SnOI[)        T*5      R'                  [)        T)5      5      (       a  SnO[+        U)U*U,4S jT* 5       5      (       a  SnU(       d  U$ T*(       d  S nOR/ nT*R-                  5        H1  u  nnT)U   nUR/                  U" UU5      5        US   (       a  M/  Us  $    [1        U5      nU(       d*  S n[3        [%        U5      5       H  nU" UU   6 UU'   M     GO†Sn[%        U5      nU=(       d    [        R4                  n/ nSnU(       Ga  UU-   [%        U5      ::  Gañ  Sn/ n[3        U5       H¨  nUUU-      S   UU   S   :w  a    GOŽUS:X  a(  UR/                  U" UUU-      S
   UU   S
   5      5        OZUUS
-
  :X  a(  UR/                  U" UUU-      S
   UU   S
   5      5        O)UUU-      S
   UU   S
   :w  a    GOUR/                  S
5        US
-  nMª     [1        U5      n U (       aë  US
:X  aE  U(       a  [1        UU 5      n [7        UU 5      U" UU   S   UU   S
   U US   S
   -  -
  5      -  UU'   O”S
n U" UU   S   UU   S
   U US   S
   -  -
  5      n!Un"UU-   S
-
  n#UU#   S   UU#   S
   U US   S
   -  -
  4n$U$S
   (       a5  UU-   [%        U5      :  a  U!U"-  U$/UUUU-   & O!U" U$6 n$U!U"-  U$-  /UUUU-   & OU!U"-  /UUUU-   & UU -  nUU -  nSnU(       d  UR/                  U5        US
-  nU(       a  UU-   [%        U5      ::  a  GMñ  U(       d  U$ UR9                  [3        U[%        U5      5      5        U H  nU" UU   6 R;                  X5      UU'   M     Uc  Un%OUc  Un%O[1        UU5      n%/ n&T) H[  nUT*;   a(  T)U   T*U   U%-  -
  n'U&R/                  U" UU'5      5        M1  U&R/                  U" UR;                  X5      T)U   5      5        M]     U(       a  U(       d  [7        UU5      /U&-   n&UUR<                  " U&6 -  UR<                  " U6 -  $ s  snf s  snf )Nr   râ   )Úmultiplicity)Ú	powdenestr9  c                ó”   • SSK Jn  U R                  (       d  [        X5      (       a  U R	                  5       $ U [
        R                  4$ )Nr   )rŒ  )Ú&sympy.functions.elementary.exponentialrŒ  r§   r‘   r¦   r   r4   )r>   rŒ  s     r*   Úbase_expÚ Mul._eval_subs.<locals>.base_exp²  s2   € õ CØ�x�xœ: a×-Ñ-Ø—}‘}“Ð&Ø”a—e‘e�8ˆOr)   c                óR  >• [        [        5      / p![        R                  U 5       H{  nT	" U5      nT" U5      u  pEU[        R
                  La"  UR                  5       u  pg[        XEU-  5      nUnUR                  (       a  X==   U-  ss'   Mi  UR                  XE/5        M}     X4$ )zÁbreak up powers of eq when treated as a Mul:
   b**(Rational*e) -> b**e, Rational
commutatives come back as a dictionary {b**e: Rational}
noncommutatives come back as a list [(b**e, Rational)]
)
r   r\  r9   rn   r   r4   rd   r©   r'   r7   )
Úeqr_   rë   r>   r|   r}   r=   rr   r¢  rŸ  s
           €€r*   ÚbreakupÚMul._eval_subs.<locals>.breakup»  sŽ   ø€ ô #¤3Ó'¨�Ü—]‘] 2Ö&�Ù˜a“L�Ù! !›‘�ØœAŸE™E’>ØŸn™nÓ.‘G�RÜ˜A ™t›�AØ�AØ×#×#Ø“D˜A‘I•Dà—I‘I˜q˜fÖ%ñ 'ð �7ˆNr)   c                ó4   >• T" U 5      u  p[        XU-  5      $ )zŠ
Put rational back with exponent; in general this is not ok, but
since we took it from the exponent for analysis, it's ok to put
it back.
©r©   )r|   r=   r}   r¢  s      €r*   ÚrejoinÚMul._eval_subs.<locals>.rejoinÐ  s   ø€ ñ ˜a“[‰FˆQÜ�q˜B™$“<Ðr)   c                ó–   • UR                   U R                   -  (       a  U R                   UR                   -  (       d  [        X-  5      $ g)z®if b divides a in an extractive way (like 1/4 divides 1/2
but not vice versa, and 2/5 does not divide 1/3) then return
the integer number of times it divides, else return 0.
r   )r¯   r\  )r>   r|   s     r*   ÚndivÚMul._eval_subs.<locals>.ndivÚ  s/   € ð
 —3‘3˜Ÿ™—9 A§C¡C¨!¯#©#§IÜ˜1™3“x�Ør)   r	   TFc              3  óR   >#   • U  H  nT" TU   5      T" TU   5      :g  v •  M     g 7frI   r   )rL   r|   r_   Úold_crã   s     €€€r*   rM   Ú!Mul._eval_subs.<locals>.<genexpr>$  s&   øé € Ð=²u°!‘�a˜‘d“™t E¨!¡H›~Ö-²uùrB  r‰   )rç   rã   Úsympy.ntheory.factor_rž  Úsympy.simplify.powsimprŸ  r>  r:  r$   r0   r%   Ú_subsr   r4   rš   Úextract_multiplicativelyræ   r­   r™   Ú
differenceÚsetr£   rx   r7   Úminr®   rp   r©   r6   rp  r!  )-rQ   rƒ  Únewrž  r:  r¦  rª  r­  r·   rÛ   r~   Úself2Úco_selfÚco_oldÚco_xmulrë   Úold_ncr»  Úco_residualÚokrÌ   ÚcdidÚratr|   Úold_eÚc_eÚncdidÚtakeÚlimitÚfailedrH  rÖ   Úndorj  ÚmidÚirr¸   ÚdoÚmargsr}   r¢  r_   r°  rŸ  rã   s-                                           @@@@@r*   Ú
_eval_subsÚMul._eval_subs¢  sž  ü€ Ý=Ý6Ý4Ý3à�z�zØð �8‰8�A‰;× ×  S§X¡X¨a¡[°1£_Ø�y‰y˜‰|×%×%Ø—9‘9˜Q‘< !Ó#ØŸ:™: s d¨S¨DÓ1Ð1Øò	ö	õ*	 ò	ð ˆÙ˜‹~‰ˆØˆØ”A—E‘EŠ>Ø—G‘G˜CÓ% a§g¡g¨cÓ&7Ñ7ˆEØ—<—<Ø—{‘{ 3Ó,Ð,Ø‹}Ø�ð —*‘*˜Q‘-ˆØ—‘˜!‘ˆØˆØ×× '×"5×"5ð Ó Ø!×:Ñ:¸6ÓB�øØ××ØˆIñ ˜%“.‰ˆˆBÙ! #›,‰ˆ�ö �w×*×*¬s°6«{¸aÓ/?Ü‘\¤# f£+¨wÓ7Ó8ˆDØ�E‰E�'ŒNØ˜‹{Ø�&“	˜TÑ!”	à ��&‘	Ø!¨$¡,Ñ.‰KàˆKð ˆÜˆv‹;œ˜R›Ó à‰BÜ�‹Zœ#˜a›&Ó à‰BÙ"Ó#šF�qˆa�Œd™FÑ#×.Ñ.¹bÓ/Aºb¸°°!´¹bÑ/A×BÑBà‰BÜ�‹Z×"Ñ"¤3 q£6×*Ñ*à‰BÜÖ=±uÓ=×=Ñ=àˆBÞØˆIæØ‰DàˆCØ#Ÿk™kžm‘
��EØ˜‘d�Ø—
‘
™4  UÓ+Ô,Ø˜2—w‘wØ’Iñ	 ,ô
 �s“8ˆDæØˆEÜœ3˜r›7–^�Ù  1¡˜��1“ó $ð ˆEÜ�v“;ˆDØ×&œAŸJ™JˆEØˆFØˆAß˜A ™H¬¨B«Ô/Ø�ð �Ü˜tž�AØ˜!˜a™%‘y ‘| v¨a¡y°¡|Ó3ÚØ˜a›ØŸ
™
¡4¨¨1¨q©5©	°!©°f¸Q±iÀ±lÓ#CÕDØ˜d Q™h›ØŸ
™
¡4¨¨1¨q©5©	°!©°f¸Q±iÀ±lÓ#CÕDØ˜A ™E™ 1™¨°©°1©Ó5ÚàŸ
™
 1œØ˜‘F’Añ %ô ˜c›(�CÞØ 1›9Þ#Ü&)¨$°£n Ü$'¨¨S£M±&¸¸A¹¸q¹Ø$& q¡E¨!¡H¨s°6¸!±9¸Q±<Ñ/?Ñ$?ó3Añ %A˜B˜qšEð #$˜Cñ !' r¨!¡u¨Q¡x°°A±°q±¸CØ$*¨1¡I¨a¡Lñ=1ñ 21ó !2˜Að
 #&˜Cð "# T¡¨A¡˜BØ!# B¡¨¡¨B¨r©F°1©I¸Ø!'¨¡¨A¡ñ9/ñ -/ð !0˜Aà  ŸtØ#$ t¡8¬c°"«gÓ#5Ø67¸±e¸Q°Z B q¨¨T©¡Ná(.°¨
 AØ67¸±e¸A±g°Y B q¨¨T©¡Nð
 34°C±%°  1 Q¨¡X à ™˜Ø ™˜Ø"˜Þð —M‘M !Ô$Ø�Q‘�öC ˜A ™H¬¨B«Ö/öH Ø�Ið —‘œe A¤s¨2£wÓ/Ô0Û�AÙ" B q¡E˜N×/Ñ/°Ó9�B�q“Eñ  ð
 ‰<Ø‰BØ‰]Ø‰Bä�U˜DÓ!ˆBàˆÛˆAØ�E‹zð �a‘D˜5 ™8 B™;Ñ&�Ø—‘™V A q›\Ö*à—‘™V A§F¡F¨3Ó$4°a¸±dÓ;Ö<ñ ö žô ˜˜d“^Ð$ uÑ,ˆEØ˜5Ÿ:š: uÐ-Ñ-¨e¯jªj¸"¨oÑ=Ð=ùòU $ùÒ/As   ÉZ8É:Z=c                ó‚  ^ • SSK Jn  SSKJn  SSKJn  S n/ n	 U R                   HD  n
U
R                  U5      u  p¼UR                  U5      (       d  U	R                  X¬45        M@  [        e   [        S U	 5       5      n/ nU	 Hh  u  p¯U" X--
  UR                  (       a  UOS-   5      nU
R                  UUX4S9nUR                  5       nUb  UU:  a  UUU-
  -  nUR                  U5        Mj     [&        R(                  nU Vs/ s H  n[2        R4                  " U5      PM     nn[7        U6  HY  nU Vs/ s H  nU" UU5      PM     nn[9        U6 u  nn[        U5      nUU-
  R:                  (       d  MH  U[=        U6 UU-  -  -  nM[     U 4S jm U R?                  U5      (       a<  SSK J!n  SSK"J#n   T " X5      U:¼  d  U" X5      U" UU5      :w  a  UU" X-  U5      -  nU$ UU :w  aa  U U-
  RI                  US5      [&        R(                  :X  a,  US:”  a&  U RK                  XUS9nU[&        R(                  :X  a  U$ UU" X-  U5      -  nU$ ! [        [        [         U4 aÅ    [#        [        S	 U	 5       5      5      nUR$                  (       a  [&        R(                  nU R                   V
s/ s H  oªR                  X" X--
  5      X4S9PM     Os  sn
f nn
SS
KJn  U" U R.                  " U6 R1                  5       SSS9nUR                  U5      (       a  UU" X-  U5      -  nUs $ f = fs  snf s  snf ! U a     GNZf = f)Nr	   )Ú	PoleErrorr   )Úceiling)ÚOrderc                óÆ   • U R                  U5      nUS   R                  U5      (       a   U R                  U5      nU$ U$ ! [         a    U [        R
                  4s $ f = frc   )Úas_coeff_exponentr  ÚleadtermÚ
ValueErrorr   rŸ   )rD  r  Últs      r*   Ú	coeff_expÚ$Mul._eval_nseries.<locals>.coeff_exp¯  s`   € Ø×'Ñ'¨Ó*ˆBØ�!‰u�y‰y˜�|‰|ð(ØŸ™ qÓ)�Bð ˆI�2ˆIøô "ó (Ø¤§¡˜<Ò'ð(ús   ¬A ÁA ÁA c              3  óV   #   • U  H  oS    R                   (       d  M  US    v •  M!     g7f©r	   N©rõ   ©rL   r‚   s     r*   rM   Ú$Mul._eval_nseries.<locals>.<genexpr>Â  s   é € Ð:¢4˜a¨Q©4¯>­>“T�Q�q–T¢4ùó   ‚)�))rÛ   ÚlogxÚcdirc              3  óV   #   • U  H  oS    R                   (       d  M  US    v •  M!     g7frÜ  rÝ  rÞ  s     r*   rM   rß  Ñ  s   é € ÐBª4 a°Q±4·>µ>›T˜Q˜qžTª4ùrà  )ÚpowsimprŒ  T)Úcombiner  c           	     óÖ  >^• U TL a  [         R                  $ U R                  (       a  [         R                  $ U R                  (       a   [        UU4S jU R                   5       5      $ U R                  (       a*  [        U R                   Vs/ s H  nT" UT5      PM     sn6 $ U R                  (       a   T" U R                  T5      U R                  -  $ [         R                  $ s  snf )Nc              3  ó6   >#   • U  H  nT" UT5      v •  M     g 7frI   r   )rL   r>   Ú
max_degreer  s     €€r*   rM   Ú8Mul._eval_nseries.<locals>.max_degree.<locals>.<genexpr>ë  s   øé € Ð<²V°™: a¨×+Ð+²Vùs   ƒ)r   r4   Úis_AtomrŸ   rœ   Úmaxr0   r$   ry   r§   r�  rŒ  )r}   r  r>   rè  s    ` €r*   rè  Ú%Mul._eval_nseries.<locals>.max_degreeå  sš   ù€ Ø�AŠvÜ—u‘u�Ø�y�yÜ—v‘v�Ø�x�xÜÕ<°Q·V²VÓ<Ó<Ð<Ø�x�xÜ°q·v²vÓ>²v°!™Z¨¨1Ö-±vÑ>Ð?Ð?Ø�x�xÙ! !§&¡&¨!Ó,¨Q¯U©UÑ2Ð2Ü—6‘6ˆMùò ?s   ÂC&)ÚPolynomialError)Údegree©rá  râ  )&r#  rÑ  Ú#sympy.functions.elementary.integersrÒ  Úsympy.series.orderrÓ  r0   rÖ  r  r7   r×  rb  rõ   ÚnseriesÚgetnÚNotImplementedErrorÚ	TypeErrorr
   rD  r   rŸ   r³  rä  r!  rö   ry   rn   r   r^  rª   r9   Úis_polynomialÚsympy.polys.polyerrorsrí  Úsympy.polys.polytoolsrî  rp  Ú_eval_as_leading_term)!rQ   r  rÛ   rá  râ  rÑ  rÒ  rÓ  rÙ  Úordsr‚   r¿   rŒ  Ún0Úfacsrø   Ún1rL  Únsrä  ÚresrC  Úords2ÚfacrD  Úords3ÚcoeffsÚpowersÚpowerrí  rî  rØ  rè  s!                                   @r*   Ú_eval_nseriesÚMul._eval_nseriesª  s  ø€ Ý'Ý?Ý,ò	ð ˆð	Ø—Y”Y�ØŸZ™Z¨›]‘
�Ø—y‘y —|‘|Ø—K‘K  Ö)ä$Ð$ñ ô Ñ:¡4Ó:Ó:ˆBØˆDÛ‘�Ù˜Q™V¨A¯K¯K¡q¸QÑ?Ó@�Ø—I‘I˜a 2¨D�IÐ<�Ø—V‘V“X�Ø‘>Ø˜B“wØ˜R "™W™˜Ø—‘˜A–ñ ô. �f‰fˆÙ59Ó:²T¨6”—’˜vÖ&±TˆÐ:ä˜E“?ˆCÙ47Ó8²C¨D‘Y˜t QÖ'±CˆEÐ8Ü  %˜[‰NˆF�FÜ˜“KˆEØ˜‘	×&×&Ñ&Ø”s˜F�| Q¨¡XÑ.Ñ.’ñ #õ	ð ×Ñ˜a× Ñ Ý>Ý4ðÙ˜dÓ&¨!Ó+©v°d«Á&ÈÈaÃ.Ó/PØ™5 ¡ q›>Ñ)�Cð �
à�$‹;Ø�s‘
× Ñ   AÓ&¬!¯&©&Ó0°Q¸³UØ×/Ñ/°À4Ð/ÐH�ØœŸ™“<Ø�JØ‘5˜™˜q“>Ñ!ˆCØˆ
øôm Ô/´¸IÐFó 	ô œÑB©4ÓBÓBÓCˆBØ× × Ü—V‘V�ØQU×QZÒQZÓ[ÒQZÈA—I‘I˜a 7¨1©4£=°t�IÓGÒQZùÒ[ˆDÐ[Ý6Ù˜$Ÿ)š) TÐ*×1Ñ1Ó3¸UÈÑNˆCØ�w‰w�u�~‰~Ø‘u˜Q™T 1“~Ñ%�ØŠJð	üò ;ùò 9øð2 #ó Úðús>   šCI Ä L*Ä5L/Æ4-L4 ÉA L'Ê,!KËAL'Ì&L'Ì4L>Ì=L>c                óz   • U R                   " U R                   Vs/ s H  oDR                  XUS9PM     sn6 $ s  snf )Nrï  )r!  r0   Úas_leading_term)rQ   r  rá  râ  r‚   s        r*   rù  ÚMul._eval_as_leading_term  s5   € Ø�yŠyÈtÏyÊyÓYÊyÈ!×,Ñ,¨QÀÐ,ÓEÉyÑYÐZÐZùÒYó   ›8c                óz   • U R                   " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf rI   )r!  r0   r  ©rQ   r‚   s     r*   Ú_eval_conjugateÚMul._eval_conjugate  s+   € Ø�yŠy°$·)²)Ó<²)¨QŸ;™;ž=±)Ñ<Ð=Ð=ùÒ<r  c                ó†   • U R                   " U R                  S S S2    Vs/ s H  oR                  5       PM     sn6 $ s  snf rˆ   )r!  r0   Ú	transposer  s     r*   Ú_eval_transposeÚMul._eval_transpose  s3   € Ø�yŠy°$·)±)¹D¸b¸D²/ÓB²/¨QŸ;™;ž=±/ÑBÐCÐCùÒBó   ¡>c                ó†   • U R                   " U R                  S S S2    Vs/ s H  oR                  5       PM     sn6 $ s  snf rˆ   )r!  r0   Úadjointr  s     r*   Ú_eval_adjointÚMul._eval_adjoint  s3   € Ø�yŠy°·	±	¹$¸B¸$²Ó@²¨1Ÿ9™9ž;±Ñ@ÐAÐAùÒ@r  c                óâ   • [         R                  n/ nU R                   H>  nUR                  XS9u  pgX6-  nU[         R                  Ld  M-  UR	                  U5        M@     X0R
                  " U6 4$ )a  Return the tuple (R, self/R) where R is the positive Rational
extracted from self.

Examples
========

>>> from sympy import sqrt
>>> (-3*sqrt(2)*(2 - 2*sqrt(2))).as_content_primitive()
(6, -sqrt(2)*(1 - sqrt(2)))

See docstring of Expr.as_content_primitive for more examples.
)ÚradicalÚclear)r   r4   r0   Úas_content_primitiver7   r!  )rQ   r  r  Úcoefr0   r>   r_   r°   s           r*   r  ÚMul.as_content_primitive  sf   € ô �u‰uˆØˆØ—”ˆAØ×)Ñ)°'Ð)ÐG‰DˆAØ‰IˆDØœŸ™Œ~Ø—‘˜A–ñ	 ð —Y’Y Ð%Ð%Ð%r)   c                óV   ^• U R                  5       u  p#UR                  U4S jS9  X#-   $ )zÖTransform an expression into an ordered list of factors.

Examples
========

>>> from sympy import sin, cos
>>> from sympy.abc import x, y

>>> (2*x*y*sin(x)*cos(x)).as_ordered_factors()
[2, x, y, sin(x), cos(x)]

c                ó"   >• U R                  TS9$ )N)Úorder)Úsort_key)r@  r!  s    €r*   r  Ú(Mul.as_ordered_factors.<locals>.<lambda>9  s   ø€  D§M¡M¸ MÑ$>r)   r,   )r5   r.   )rQ   r!  ÚcpartÚncparts    `  r*   Úas_ordered_factorsÚMul.as_ordered_factors+  s)   ø€ ð Ÿ™›‰ˆØ�
‰
Ô>ˆ
Ñ?Ø‰~Ðr)   c                ó4   • [        U R                  5       5      $ rI   )r  r&  r[   s    r*   Ú_sorted_argsÚMul._sorted_args<  s   € ä�T×,Ñ,Ó.Ó/Ð/r)   )r0   zExpr | complexrU   ÚboolÚreturnr   )r,  ztuple[Expr, ...])F)Tro  rI   )r   )FT)Ur   r    r!   r"   Ú__doc__Ú	__slots__r$   r   Ú
_args_typer   rP   Ú__annotations__ÚpropertyrJ   r   rX   r0   r`   rg   ÚclassmethodrÞ   rì   rñ   rô   r  r   r  rd   rv   rå   Ústaticmethodr0  r?  rM  r[  ru  r|  ry  r�  r‚  r”  r•  r©  rª  rx  rÏ  r´   r¦   rä  rï  rù  rý  Ú_eval_is_commutativer  r  r  r  r&  r-  rL  rU  rZ  rY  rg  rl  rp  rk  r€  r…  r„  r�  r”  r—  r›  rÎ  r  rù  r  r  r  r  r&  r)  r(   Ú__classcell__)rk  s   @r*   r9   r9   [   s¯  ø‡ ñDðJ €Ià€Fà€JÙ%Ð&;ÈÑNÐàÓàñ1ó ð1ö à?C÷ 	ð 
ó	ó 
ð	ò6ò:ð ñQ.ó ðQ.òfð8 ñ"ó ð"òð  ñ6ó ð6ð ñ9ó ð9ð< Ø+/ô 
ó ð
ôô 5:ðn ñ$ó ð$ò$)ðV ñ	#ó ð	#ð ôó ðò>òô!ð@ ñó ðð ó(ó ð(ðT ñ<ó ð<ð ñ2ó ð2ðh ñ&ó ð&ð ñEó ðEð
 ñ',ó ð',òRò6ò%òIòPò-òMñ-ÐòòA(òF
ò
òòòL!ò\Fò
*ò(òT/ò.ò/òò(ò%ò$!òF&òò<
òò"F>ôPYòv[ò>òDòBô&ô4ð" ñ0ó ö0r)   r9   Úmulc                ó6   • [        [        R                  X5      $ )aK  Return product of elements of a. Start with int 1 so if only
   ints are included then an int result is returned.

Examples
========

>>> from sympy import prod, S
>>> prod(range(3))
0
>>> type(_) is int
True
>>> prod([S(2), 3])
6
>>> _.is_Integer
True

You can start the product at something other than 1:

>>> prod([1, 2], 3)
6

)r   Úoperatorr6  )r>   Ústarts     r*   rc  rc  C  s   € ô. ”(—,‘, Ó)Ð)r)   c           
     óh  • U R                   (       d  UR                   (       a  XpOX-  $ U[        R                  L a  U $ U [        R                  L a  U$ U [        R                  L a
  U(       d  U* $ UR                  (       aÛ  U(       dÊ  U R
                  (       a¹  U R                  S:w  a©  UR                   Vs/ s H  oDR                  5       PM     nnU VVs/ s H  u  pg[        X`5      U4PM     nnn[        S U 5       5      (       aH  [        R                  " U Vs/ s H&  n[        R                  US   S:X  a  USS OU5      PM(     sn5      $ [        XSS9$ UR                  (       ax  [        UR                  5      nUS   R                   (       a(  US==   U -  ss'   US   S:X  a  UR!                  S5        OUR#                  SU 5        [        R                  U5      $ X-  nUR                   (       a'  UR                   (       d  [        R                  X45      nU$ s  snf s  snnf s  snf )a�  Return ``coeff*factors`` unevaluated if necessary.

If ``clear`` is False, do not keep the coefficient as a factor
if it can be distributed on a single factor such that one or
more terms will still have integer coefficients.

If ``sign`` is True, allow a coefficient of -1 to remain factored out.

Examples
========

>>> from sympy.core.mul import _keep_coeff
>>> from sympy.abc import x, y
>>> from sympy import S

>>> _keep_coeff(S.Half, x + 2)
(x + 2)/2
>>> _keep_coeff(S.Half, x + 2, clear=False)
x/2 + 1
>>> _keep_coeff(S.Half, (x + 2)*y, clear=False)
y*(x + 2)/2
>>> _keep_coeff(S(-1), x + y)
-x - y
>>> _keep_coeff(S(-1), x + y, sign=True)
-(x + y)
r	   c              3  ó>   #   • U  H  u  pUR                   v •  M     g 7frI   )r¨   )rL   r_   rr   s      r*   rM   Ú_keep_coeff.<locals>.<genexpr>‡  s   é € Ð1ªD¡D A�1—<–<ªDùr–   r   NFrT   )r%   r   r4   rf   rœ   rš   r¯   r0   rv   rž   r£   ry   r:   r9   r$   r3   r­   r8   )	r¿   Úfactorsr  rã   rÌ   r0   r_   rø   rÍ  s	            r*   rž   rž   ]  sµ  € ð6 �?�?Ø××Ø"‘Uà‘=Ð Ø”!—%‘%ÒØˆØ”—‘‚~ØˆØ	”!—-‘-Ò	®ØˆxˆØ	��Þ˜×*×*¨u¯w©w¸!«|Ø.5¯lªlÓ;ªl¨—N‘NÖ$©lˆDÐ;Ù;?Ô@º4±4°1”[ Ó*¨AÓ.¹4ˆDÑ@ÜÑ1©DÓ1×1Ñ1Ü—~’~Ù8<ó'>Ú8<°1ô (+§~¡~Ø˜q™T Q›Y�A�a�b‘E¨Aö(/Ù8<ñ'>ó ?ð ?ä�5¨EÑ2Ð2Ø	��Ü�W—\‘\Ó"ˆØ�‰8××Ø�!‹H˜Ñ‹HØ�Q‰x˜1‹}Ø—	‘	˜!”øà�L‰L˜˜EÔ"Ü�~‰~˜eÓ$Ð$à‰MˆØ�;�;˜w×0×0Ü—‘ Ð/Ó0ˆAØˆùò' <ùÛ@ùò'>s   Â8H$ÃH)Ä-H/c                ó   • S n[        X5      $ )Nc                óä   • U R                   (       aY  U R                  5       u  pUR                  (       a6  UR                  (       a%  [	        UR
                   Vs/ s H  o1U-  PM	     sn6 $ U $ s  snf rI   )r$   rv   r%   rœ   Ú_unevaluated_Addr0   )r}   r_   r¸   Úris       r*   rÌ  Úexpand_2arg.<locals>.do›  sO   € Ø�8�8Ø—>‘>Ó#‰DˆAØ�{�{˜qŸxŸxÜ'¸¿ºÓ)@º°2¨B¬$¹Ñ)@ÐAÐAØˆùò *As   ÁA-r   )r}   rÌ  s     r*   Úexpand_2argrC  š  s   € òô �QÓÐr)   )r²   r©  )ry   r@  )r	   )TF)6Ú
__future__r   Útypingr   r   Úcollectionsr   Ú	functoolsr   Ú	itertoolsr   r8  r
   Úbasicr   r   Ú	singletonr   Ú
operationsr   r   Úcacher   Úintfuncr   r   Úlogicr   r   r@  r   Ú
parametersr   rJ   r   Ú	traversalr   Úsympy.utilities.iterablesr   r   r1   rA   r9   r6  rc  rž   rC  rý   r²   r  r©   Úaddry   r@  r   r)   r*   Ú<module>rS     s‹   ðÝ "ß *å #Ý Ý Û å ß 'Ý ß 2Ý ß .ß *Ý Ý )Ý  Ý  Ý *÷
ñ ò!ò
1(ôhc0ˆ$�ô c0ñJ? ˜Ó€ô*ô4;òzõ Ý ß &Ð &r)   